Talking about technical debt so the business listens

Saying "we need to refactor" rarely wins a planning meeting. Framing debt in terms of risk, speed and cost does.

A tech debt register entry describing impact, cost and proposed fix

Every codebase accumulates technical debt: shortcuts taken to ship, designs that no longer fit, dependencies left to rot. Engineers feel the pain daily. Getting time to fix it depends on how you explain it.

Not all debt is bad

Like financial debt, technical debt can be a smart trade: ship sooner, pay later. The problem is debt nobody tracks, with interest nobody measures.

Translate it into outcomes

Instead of "the billing module is a mess," describe the effect:

  • Speed: "Billing changes take three times longer than similar features."
  • Risk: "Two of the last five incidents started in this module."
  • Cost: "We spend about a day a week on manual reconciliation."
  • Opportunity: "We can't offer annual plans until this is restructured."

Keep a debt register

A lightweight list makes debt visible and comparable:

- id: TD-14
  area: billing
  problem: invoice totals computed in three different places
  impact: 2 incidents this quarter; changes take ~3x longer
  fix: single InvoiceCalculator, migrate callers
  estimate: 2 weeks
  priority: high

Review it during planning alongside feature work.

Pay it down continuously

Big-bang rewrites are risky and hard to justify. Steadier approaches tend to work better:

  • The boy-scout rule: leave code a little better each time you touch it.
  • A fixed allocation: a consistent slice of each cycle for maintenance.
  • Bundling: fix the debt in the area you're about to build a feature on, and include the cost in the estimate.

Measure the effect

After paying something down, report back: fewer incidents, faster delivery, less manual work. Showing the return on the last investment is the best argument for the next one.

Weekly digest

Releases, deep dives and the stories developers are talking about. No spam, unsubscribe any time.