My Digital Garden

Technical Debt

Technical Debt

A metaphor coined by Ward Cunningham to describe the characteristic of software systems that unless proactive efforts are made to keep the software well-architected and easy to understand, the ability to make meaningful progress with new features will degrade over the life of the system.

Understanding Technical Debt

(McConnell, 2008) categorises technical debt in two classes, with a further expansion of the second:

Class Kind of debt Comment
0 Non Debt Feature backlog, deferred features, cut features, and so on. Not all incomplete work is debt. These aren’t debt, because they don’t require interest payments.
I Unintentional Debt Debt incurred unintentionally due to low quality work
II Intentional Debt Debt incurred intentionally
II.A Short-Term Debt Short-term debt, usually incurred reactively, for tactical reasons
II.A.1 Focused Short-Term Debt Individually identifiable shortcuts (like a car loan)
II.A.2 Unfocused Short-Term Debt Numerous tiny shortcuts (like credit card debt)
II.B Long-Term Debt Long-term debt, usually incurred proactively, for strategic reasons

Type I technical debt has no upside, and if discovered in significant amounts remedial action should be taken immediately to improve skills and practices.

All the variants of Type II Technical Debt may have upsides, but awareness and conscious decision-making is critical - for that reason type II.A.2 is dangerous because of the ease with which it happens and the compounding of negative consequences.

Reasons for taking on technical debt

Like financial debt, there can be good reasons for a company to consciously decide to take on technical debt - it is a decision to prioritise short term benefit over the longer term.

Typical reasons might be:

  • time to market (do this to get the release out on time, fix it after)
  • preserving startup capital
  • delaying development expense - if a system is going to be retired, all its technical debt is retired with it!

Tracking and communicating technical debt

Again good examples in (McConnell, 2008) such as maintaining a "debt list" in the defect tracking system or as work items in the product backlog.

Communicating technical debt to non-technical colleagues can be done by presenting tradeoffs in financial terms - e.g. comparing both short-term and lifetime costs of different options.

See also