Integration maintenance debt is the accumulating engineering cost of keeping a shipped connector working as partner APIs, auth schemes, and data contracts change underneath it. It's not optional upkeep — it's a recurring bill that grows with your portfolio, and most teams budget for the build but never for the decades of payments after.

Quick Answer: Every live integration consumes ongoing engineering capacity for monitoring, patching breaking changes, and support. Estimate carrying cost as (incident hours + patch hours + support hours) × loaded rate, cap total maintenance spend at a fixed percent of engineering capacity, and decommission connectors whose carrying cost exceeds their usage-weighted value.

Why Integrations Are Liabilities, Not Assets

An integration behaves like a subscription your engineering org pays for indefinitely, not a capital asset you build once and depreciate quietly. The moment it ships, it starts accruing a bill: version deprecations, webhook schema drift, rate-limit changes, and OAuth rotations all land on your team's plate whether or not anyone asked for them.

This is the core reframe integrations PMs need. Accounting treats software as a one-time capitalized cost, but the maintenance reality is closer to a lease: you keep paying rent (engineering hours) for as long as the connector stays live, and the rent rises whenever the partner changes their API surface. Michael Feathers' concept of legacy code — "code without tests that you're afraid to change" — applies directly here: integrations tightly coupled to a specific partner version, with thin test coverage against real sandbox behavior, become code nobody wants to touch. Fear it becomes wraps latency around every fix.

The Compounding Mechanism

Each new integration doesn't just add its own maintenance load — it subtracts capacity from everything else. A team that ships ten connectors in a year without retiring any has effectively hired ten permanent part-time employees whose only job is watching for breaking changes, and nobody put them on the headcount plan.

  • Partner APIs version on their own schedule, not yours — Stripe, Salesforce, and Workday all deprecate on release cadences you don't control.
  • Auth schemes rotate (OAuth token refresh changes, scope additions) independent of your roadmap.
  • Data contracts drift silently — a partner adds a nullable field or changes a timestamp format, and your parsing logic breaks in production before anyone notices.
  • Support tickets scale with usage, not with engineering headcount, so popular integrations quietly become the most expensive ones to keep alive.

If you're new to the role, the complete guide to the integrations PM role covers how this discipline differs from general platform PM work — maintenance debt is one of the biggest structural differences.

The Carrying-Cost Formula: What Each Integration Actually Costs

The carrying cost of an integration is the fully loaded engineering time spent keeping it functional per period, expressed in dollars so it's comparable across a portfolio. Without this number, "which integrations are expensive" stays a gut feeling instead of a prioritization input.

Formula: Carrying Cost = (Incident Hours + Patch Hours + Support Hours) × Loaded Engineering Rate, per quarter

Break each term down before you estimate:

  1. Incident hours — time spent on-call, triaging, and fixing breakages caused by partner-side changes (deprecated endpoints, altered payloads, expired certificates).
  2. Patch hours — planned engineering work to stay current with a partner's SDK, API version, or webhook contract, even absent an incident.
  3. Support hours — time customer support or solutions engineering spends on tickets specific to this connector, converted to engineering-equivalent hours where a PM or engineer has to get pulled in.
  4. Loaded rate — fully burdened cost per engineering hour (salary, benefits, overhead), not just salary divided by hours.

A Worked Example

IntegrationIncident hrs/qtrPatch hrs/qtrSupport hrs/qtrLoaded rateCarrying cost/qtr
Salesforce sync8126$120/hr$3,120
Legacy CSV importer211$120/hr$480
Partner webhook v2201518$120/hr$6,360

Once you have a carrying cost per connector, the natural next question is whether that cost is proportionate to what the integration earns the business — which is where portfolio-level triage comes in.

Building a Portfolio View That Flags Underperformers

A maintenance portfolio view ranks every live integration by carrying cost against usage and revenue attribution, so you can see at a glance which connectors earn their keep and which are quietly draining capacity. Without this view, unmaintainable connectors hide behind aggregate uptime metrics that never isolate cost per connector.

The minimum viable version is a single table, refreshed quarterly:

IntegrationActive accountsRevenue influenced/qtrCarrying cost/qtrCost per active account
Salesforce sync340$180K$3,120$9.18
Legacy CSV importer6$4K$480$80.00
Partner webhook v2210$95K$6,360$30.29

The cost-per-active-account column is the tell. A connector with a high absolute carrying cost but hundreds of dependent accounts is likely healthy; a connector with a modest cost but six dependent accounts is a candidate for retirement even though its raw dollar figure looks small.

Signals Worth Tracking Beyond Cost

  • Partner API change frequency — connectors tied to fast-moving partners (frequent breaking changes) carry structurally higher future cost even if current-quarter numbers look fine.
  • Team tribal knowledge concentration — an integration only one engineer understands is a bus-factor risk that inflates real cost during incidents.
  • Time since last customer-initiated request — a connector nobody has asked about in two quarters is a decommission candidate regardless of its historical build cost.

If your portfolio has grown large enough that this table itself becomes hard to manage, the integrations strategy for managing a stack of 50+ tools is worth reading alongside this section — it addresses the scale problem this triage view is meant to catch early.

A Fixed-Percent Maintenance Budget Policy

The most durable fix for integration debt is treating maintenance as a protected percentage of engineering capacity, not a residual claimed only after new feature work is planned. Without a floor, maintenance always loses the prioritization fight to whatever ships next, because maintenance work rarely has a visible champion in planning.

Policy: Reserve a fixed percentage of total engineering capacity — commonly in the 15-25% range for teams running an active connector portfolio — explicitly for integration maintenance, tracked separately from feature-roadmap capacity.

This is directly analogous to Google's Site Reliability Engineering practice of capping ongoing operational work — the SRE discipline, documented in Google's Site Reliability Engineering book, explicitly limits "toil" to under 50% of an SRE's time so structural improvement work doesn't get crowded out indefinitely. Integration maintenance is a form of toil with the same crowding-out dynamic.

How to Implement the Policy

  1. Set the percentage explicitly in your team's capacity planning ritual — as a named line item, not an assumption buried in sprint buffer.
  2. Track actual spend against it quarterly, using the carrying-cost table above rolled up across the whole portfolio.
  3. Escalate when actual maintenance spend exceeds the budgeted percentage — that's your signal to either add capacity or decommission connectors, not silently absorb the overage into feature slip.
  4. Report the ratio to leadership the same way you'd report burn rate — a maintenance percentage creeping from 15% to 35% over two quarters is exactly the kind of trend a portfolio owner needs visibility into before it becomes a crisis.

Ron Jeffries and the broader technical-debt literature (echoing Ward Cunningham's original debt metaphor) make the same point in a different vocabulary: debt is fine as a deliberate financing choice, dangerous only when nobody is tracking the interest payments. A fixed-percent budget is how you make the interest payments visible on purpose.

Decommission Triggers: When to Kill an Integration

An integration should be decommissioned when its carrying cost per active account exceeds a defined threshold and it shows no offsetting strategic value (a marquee partner, a contractual obligation, or a pipeline-critical prospect). Waiting for "someone to complain" is not a trigger — by the time a customer complains loudly enough, the sunk engineering cost has usually already exceeded any value gained by waiting.

Concrete triggers worth codifying in your team's decommission policy:

  • Cost-per-account threshold breached for two consecutive quarters, with no contractual reason to keep the connector alive.
  • Active account count below a floor (commonly single digits) with no active sales pipeline depending on it.
  • Partner deprecates the underlying API version and the upgrade cost alone exceeds the connector's trailing-twelve-month attributed revenue.
  • A superior integration path exists — for example, the partner now supports a marketplace-native connection method instead of your custom build, discussed further in the piece on treating integrations as an app marketplace ecosystem rather than one-off connectors.

Making Decommissioning Politically Survivable

Killing an integration is often harder organizationally than building one, because the handful of remaining customers feel the loss acutely even when the aggregate math favors sunsetting. Give affected accounts a defined migration window (commonly 90-180 days), a clear alternative path, and — where the relationship warrants it — a white-glove manual export option instead of an abrupt cutoff.

Document the decision with the same rigor you'd apply to a build decision: expected savings, affected accounts, and migration plan. This is exactly the kind of trade-off decision worth running through a structured tradeoff evaluation lens, weighing the job the integration was hired to do against what it now costs to keep employed.

Making the Reinforcing Loop Visible Before It Compounds

The dynamic underlying all of this is a reinforcing feedback loop: each new integration adds ongoing maintenance load, which consumes capacity that would otherwise go toward the next integration's proper design and testing, which produces a more fragile connector, which increases its own future maintenance load. Left unmanaged, the loop accelerates — more integrations mean less careful engineering per integration, which means higher failure rates, which means even less capacity for anything new.

This is precisely the kind of dynamic that's hard to see from a single sprint's vantage point but obvious once mapped as a system. Prodinja's Systems Engineering studio is designed to let a PM sketch this exact reinforcing loop as a causal-loop diagram — connector count feeding maintenance load feeding capacity starvation feeding rushed future builds — making the compounding structure visible on a whiteboard rather than discovered the hard way in a burned-out sprint retro. Seeing the loop drawn out is often what finally gets a fixed maintenance budget approved, because it reframes the ask from "please protect my time" to "here is the mechanism by which we run out of capacity."

Key Takeaways

  • Integrations are recurring liabilities, not one-time assets — every connector you ship keeps consuming engineering hours for as long as it stays live, independent of your roadmap.
  • Estimate carrying cost per connector using (incident + patch + support hours) × loaded rate, so prioritization conversations run on numbers instead of anecdotes.
  • Build a portfolio view ranked by cost-per-active-account, not raw carrying cost, to correctly identify which low-dollar connectors are actually the worst offenders.
  • Protect a fixed percentage of engineering capacity for maintenance (commonly 15-25%), tracked and reported quarterly like any other budget line.
  • Codify decommission triggers in advance — cost thresholds, account floors, and deprecation-driven cost spikes — so retirement decisions don't depend on someone finally getting angry enough to escalate.
  • The debt compounds through a reinforcing loop: more integrations mean less capacity per integration, which means more fragile connectors, which means still more maintenance load.

Frequently Asked Questions

How do you calculate the cost of maintaining an integration?

Multiply the sum of incident hours, planned patch hours, and support hours attributable to that connector by your team's fully loaded engineering rate, on a quarterly basis. Track this per connector, not just in aggregate, so you can compare across your portfolio.

What percentage of engineering capacity should go toward integration maintenance?

Most teams running an active connector portfolio land somewhere between 15% and 25% of total engineering capacity, reserved explicitly rather than absorbed informally into sprint buffer. The right number depends on portfolio size and partner API volatility — track actual spend against whatever you set and adjust.

When should you decommission an integration instead of maintaining it?

Decommission when carrying cost per active account exceeds your defined threshold for two consecutive quarters and there's no offsetting strategic reason (contract, pipeline, marquee partner) to keep it alive. A partner-driven deprecation whose upgrade cost exceeds the connector's trailing revenue is another clear trigger.

Is integration technical debt the same as regular technical debt?

It's a specific, especially aggressive form of it. Ward Cunningham's original technical debt metaphor describes any shortcut with a future interest cost, but integration debt is distinct because the interest rate is set by a third party's release schedule, not your own team's choices — you can't simply choose not to accrue it by writing better code.

How often should you review your integration portfolio for maintenance debt?

Quarterly is the common cadence, aligned with capacity planning cycles, so the carrying-cost and portfolio-view tables stay current enough to inform real prioritization decisions rather than describing a stale snapshot of the connector landscape.