Back to archive

Engineering

Technical Debt Is Often Unpriced Strategy Debt

A sharper way to discuss debt when the real issue is changing strategy, incentives, or ownership.

Technical Debt Is Often Unpriced Strategy Debt

"Technical debt" is one of the most overloaded phrases in engineering. It can mean messy code, missing tests, obsolete infrastructure, unclear ownership, hurried product decisions, or architecture that no longer matches the business. The phrase is useful until it hides the real argument.

Many technical debt conversations are actually strategy debt conversations.

The thesis

Technical debt becomes hard to prioritize when it is the unpaid cost of strategy changes nobody has priced. Calling it engineering cleanup makes the problem look smaller than it is.

The principal-engineer move is to identify which debt is local code quality and which debt is evidence that the organization changed direction without funding the transition.

The production pattern

A system was built for one shape of product. Then the product changed. Maybe workflows became more configurable. Maybe a batch process became user-facing. Maybe a single-region assumption became multi-region. Maybe a manual operation became self-service. Maybe a narrow integration became a platform surface.

The code now looks bad. Some of it may be bad. But the deeper issue is that the system is being asked to serve a strategy it was not designed for.

Engineers ask for time to pay down debt. Leaders ask for the business case. Both sides get frustrated because the request is framed as cleanup while the impact is strategic capacity, reliability, delivery speed, or risk.

The model

I classify debt into four buckets.

Hygiene debt is local mess: confusing names, duplicated logic, weak tests, awkward modules. It slows engineers but rarely changes strategy.

Design debt is a mismatch between implementation and known product behavior. The model is wrong, boundaries are leaky, or workflows are encoded in the wrong place.

Operational debt is missing ownership, observability, automation, recovery, and runbooks. It shows up during incidents, migrations, and on-call fatigue.

Strategy debt is the accumulated cost of new direction running on old assumptions. It often spans teams, roadmaps, data models, pricing, compliance, reliability, and user promises.

Each bucket needs a different argument. Hygiene debt can often be handled opportunistically. Design debt needs sequencing around product work. Operational debt needs risk framing. Strategy debt needs leadership agreement because engineering alone cannot decide the tradeoff.

Where this goes wrong

The counterpoint is that engineers sometimes label ordinary discomfort as strategy debt. Not every ugly module deserves a roadmap slot. A principal engineer should be able to say, "This is annoying, but survivable," and keep the organization focused.

Another failure mode is making strategy debt sound too grand. If every refactor becomes a strategic platform investment, leaders stop trusting the category. The test is whether the debt blocks or distorts an explicit business direction. If not, use a smaller label.

There is also risk in waiting for perfect strategy clarity. Organizations rarely know the future cleanly. Some debt should be tolerated until the direction is stable enough to justify a larger move.

A useful counterweight is option value. Paying debt early is justified when it keeps multiple futures cheap. Paying debt late is justified when the organization would otherwise optimize for a future that may never arrive. The mistake is pretending both choices are purely technical. Timing repayment is a portfolio decision.

What I do now

When a team raises technical debt, I ask what decision created it. Was it speed? New product direction? Missing ownership? A dependency choice? A deliberate shortcut? A change in scale? The origin matters because it identifies who must participate in the payoff.

Then I ask what interest the debt charges. Interest can be longer delivery, higher incident risk, slower onboarding, duplicated work, blocked product options, cloud cost, inability to comply with a promise, or brittle operations. I avoid exact invented metrics. I prefer evidence bands, examples, and decision impact.

Finally, I ask which future option repayment buys. "Cleaner code" is not enough for major work. "This lets us support configurable workflows without copying logic into every product surface" is a stronger claim. "This reduces the risk of a migration by making dual-read behavior observable" is stronger still.

Debt work earns trust when it is tied to choices the organization already cares about.

I also try to avoid all-or-nothing repayment plans. Strategy debt often needs a sequence: stabilize the riskiest boundary, create observability, isolate the old model, migrate one workflow, then remove the obsolete assumption. Asking for one giant cleanup block invites rejection because leaders cannot see where value appears. A staged plan lets the organization stop after each phase with a better system than it had before.

The principal-engineer responsibility is to make debt legible without making it melodramatic. Some debt should be paid. Some should be carried. Some should be refinanced through product scope or ownership changes. The category matters because the wrong label sends the work to the wrong decision maker.

Closing takeaway

Before asking to pay down technical debt, classify it. If the debt is really unpaid strategy change, price it as strategy, not cleanup.