Architecture

Managing technical debt as a business decision

Technical debt is a trade-off, not a moral failing. Making it visible and costed turns it into a decision rather than an argument.

Key takeaways

  • Separate deliberate, recorded debt from accidental accumulation.
  • Express debt as incident rate and estimate inflation, not tidiness.
  • Improve code you are already changing; avoid clean-up projects.
  • Stable, untouched, ugly code may be correctly left alone.

Distinguish deliberate from accidental

Deliberate debt is a conscious choice to ship sooner, understood and recorded. Accidental debt accumulates through inexperience, drift or changing requirements, and nobody decided anything.

Both need managing; only the first is defensible. The distinction matters because it points at different remedies.

Make it visible in business terms

“The code is messy” does not compete for priority. “This module causes a third of our production incidents and doubles the estimate on anything touching it” does.

Track where incidents originate, where estimates inflate, and where changes cause regressions. That evidence converts an engineering complaint into a business case.

Pay it down continuously

  • Improve code you are already changing rather than scheduling separate clean-up projects.
  • Allocate a consistent proportion of capacity to maintenance.
  • Fix the debt that is actively costing you, not the debt that is merely untidy.
  • Record deliberate debt with a reason and a review date.

Some debt should never be repaid

Ugly code in a stable module that nobody touches and that causes no incidents costs nothing. Rewriting it is effort with no return and introduces risk.

Prioritise by the cost the debt actually imposes. That focuses attention where it pays and prevents refactoring becoming an end in itself.

Preventing new debt

Paying down debt matters less than slowing its accumulation, and the mechanisms are ordinary engineering practices rather than special initiatives.

Code review that considers maintainability, not just correctness. Tests that make refactoring safe. Architecture decision records so future changes understand the constraints. Time allocated to finish things properly rather than moving straight to the next item.

Where debt is taken deliberately, record it with a reason and a review date. Undocumented shortcuts become permanent because nobody knows they were meant to be temporary.


Frequently asked questions

A consistent proportion sustained over time works better than occasional large efforts. The right figure depends on how much the debt is currently costing.

With evidence: incidents traced to specific components, and estimates that inflate in particular areas. Numbers move priorities; adjectives do not.

Occasionally when the platform is unsupported, when the architecture blocks a strategic requirement, or when the system is small enough to rebuild quickly. It is chosen far more often than it is justified.

Working on this?

A conversation with our team, no charge and no obligation.

Book a conversation