clement13.net
Original photo: Chantier de construction enserré dans d'énormes échafaudages, avec grues et conteneurs de matériaux.
Description
Chantier de construction enserré dans d'énormes échafaudages, avec grues et conteneurs de matériaux.
Source
Fons Heijnsbroek · original page
Licence
CC0 Public domain
Original photo, unretouched. The background is a version of it stylised by the site.

Technical Debt and Maintainability

This theme measures the ability to keep software modifiable over time: technical debt is known, quantified, prioritized, and repaid at a chosen pace rather than endured. The promise…

Guide≈ 6 min readCheckedCheck doneFacts, figures and references were checked against the sources cited in the page.Written with AI assistance; sources are cited at the bottom of the page. An error? Report it via clement13.net.Reading
In brief

This theme measures the ability to keep software modifiable over time: technical debt is known, quantified, prioritized, and repaid at a chosen pace rather than endured. The promise is not “zero debt” (conscious debt is a tool) but “debt does not slow down the team without them knowing it.”

On this page

Level: 🟢→🔴 · Theme code: DTT (DL matrix)

Why this theme#

The debt metaphor comes from Ward Cunningham: taking a shortcut to deliver earlier is borrowing; as long as you do not repay, you pay interest (every change is slower). Martin Fowler distinguished deliberate debt from accidental debt, reckless debt from prudent debt. The main danger is invisible debt: no one measures it, so the cost appears as “velocity dropping” with no explanation, or as an inability to recruit (no one wants to touch that code).

Debt is not limited to code: dependencies and platforms reaching end of support, database schemas that have become incomprehensible, incorrect documentation, fragile pipelines, scripts with a single author, slow tests. In a product that maintains multiple versions in parallel, each supported version is debt: it multiplies fixes. See 04.

What the theme measures#

  • Axis: from “we endure it” to “debt is a managed portfolio, with a repayment budget.”
  • Key indicators: share of capacity dedicated to repayment (%) ; lead time for a typical change (trend) ; share of components at end of support ; age of recognized debt.
  • Unit: % of capacity ; days ; number of items, age.

Five-level table#

Level Short name Promise Typical indicator (orders of magnitude)
1 Endured We do not know why changes are slowing down. No list ; repayment ≈ 0%
2 Recognized Known debt is recorded, and everyone can cite the main items. Debt register ; opportunistic repayment
3 Prioritized Each debt item has an estimated cost and a dated decision (repay, accept, retire). Prioritized register ; 10-20% of capacity reserved
4 Measured The change-cost trend is tracked ; repayment is steered by observed impact. Lead time for a typical change tracked ; debt decreases at constant scope
5 Sustainable Debt taken on is intentional, bounded, and repaid before due date ; the product remains easy to change after ten years. No unsupported component ; stable change lead time for 3 years

Milestones by level#

ID Milestone Verifiable evidence
DL-DTT-1.1 The team can identify the 3 riskiest areas to modify Converging answers from three people
DL-DTT-1.2 Shortcuts taken are flagged when they are taken (comment, ticket) At least 5 items flagged
DL-DTT-1.3 Used components and versions are known Inventory
DL-DTT-2.1 A debt register exists (item, type, origin, consequence) Accessible, dated register
DL-DTT-2.2 Components reaching end of support are listed with their date “End of support” column
DL-DTT-2.3 Debt items are linked to components and owners Named owner per item
DL-DTT-2.4 Documentation and testing debt is distinguished from code debt Categories in the register
DL-DTT-3.1 Each item is estimated in interest cost (days lost per month) and repayment cost Estimates, even rough ones
DL-DTT-3.2 A fixed share of capacity (for example 10 to 20%) is reserved for repayment Planning across 3 iterations
DL-DTT-3.3 Every new deliberate debt item gets a due date and an owner Review of 10 recent shortcuts
DL-DTT-3.4 The register is reviewed at regular intervals (at least quarterly) Review minutes
DL-DTT-3.5 “Accept debt” decisions are explicit and justified Entry in the register
DL-DTT-4.1 Lead time for a typical change (by component) is measured and its trend tracked 12-month curve
DL-DTT-4.2 High-change/high-debt areas (“hotspots”) are identified through change history Historical analysis + complexity
DL-DTT-4.3 Repayments are evaluated afterward (did change lead time drop?) Impact review on 5 repayments
DL-DTT-4.4 Dependency debt is tracked (version age, gap to latest stable) Dependency age table
DL-DTT-4.5 Supported versions and end-of-life policy are defined and published Dated policy
DL-DTT-5.1 No component remains at end of support without a quantified plan Migration plan for each case
DL-DTT-5.2 Debt is capped by policy: beyond a threshold, delivery of new features slows down Freeze decision already applied
DL-DTT-5.3 Major replacements are incremental and continuously funded, not a “big bang” History of the last 3 migrations
DL-DTT-5.4 A newcomer modifies the oldest areas without heavy support Onboarding measured on older areas

Detailed reading by level#

🟢 Level 1 — Endured#

  • Signs: “we do not have time to clean up” ; taboo areas ; estimates get inflated.
  • Gain: fast short-term delivery.
  • Does not guarantee: sustainability ; interest accumulates silently.
  • Difficulty: 1/5 · Effort: 1/5.

🟢 Level 2 — Recognized#

  • Signs: a register, an end-of-support list, a few owners.
  • Gain: debt is no longer taboo.
  • Does not guarantee: that it is repaid: a register can become a graveyard of good intentions.
  • Difficulty: 2/5 · Effort: 1/5.

🟡 Level 3 — Prioritized#

  • Signs: a reserved share of capacity ; every deliberate shortcut has a due date. Discussions with the business go through interest cost (“this area costs us 4 days per month”) rather than code aesthetics.
  • Gain: explicit, defensible trade-offs.
  • Does not guarantee: that estimates are accurate — they are orders of magnitude.
  • Difficulty: 3/5 · Effort: 3/5.

🔴 Level 4 — Measured#

  • Signs: lead time for a typical change is tracked, hotspots are identified (files that change often and are complex), and after repayment it is verified that cost went down.
  • Gain: investment goes where it pays off.
  • Does not guarantee: prevention of new debt ; upstream discipline is also needed (02).
  • Difficulty: 4/5 · Effort: 4/5.

🔴 Level 5 — Sustainable#

  • Signs: debt is capped, continuously funded, and major migrations are done incrementally. The product ages without freezing.
  • Gain: durability, code attractiveness for hiring.
  • Does not guarantee: the absence of hard choices — one extra supported version is still a burden.
  • Difficulty: 5/5 · Effort: 5/5.

Partial achievement and rating#

Apply the rating rule.

  • 0.5 on DL-DTT-3.2: capacity is reserved, but only when “there is no emergency.”
  • 0.5 on DL-DTT-4.1: change lead time is measured on one component only.
  • A partial 5: debt cap decided, never triggered yet ; incremental migrations on only one workstream.
⚠️ Pitfall

Graveyard register. Symptom: 400 items, none addressed. Cause: no cost estimation or threshold. Remedy: only record items with an interest cost, close what has no future.

⚠️ Pitfall

Big bang. Symptom: “we will rewrite everything, 18 months.” Cause: debt perceived as unsustainable. Remedy: progressive strangulation (01), value delivery at each step.

💡 Expert tip

Cross-reference change frequency and complexity: a complex but stable area costs little, a simple but very fast-changing area costs little — it is the intersection that hurts. Repay there.

🧪 Example

Datamart: one 1,200-line procedure, modified 14 times in one year, each change taking 3 days. Interest cost ≈ 42 days/year. An 8-day refactoring brings each change down to 1 day: the investment (8 days) pays back in under four months (28 days gained per year).

⚠️ Pitfall (Goodhart)

If you steer by the “number of debt items,” people merge or split them to lower the number. Steer by change lead time.

Moving to the next level#

Possible means (optional)

  • 1 → 2: a one-hour workshop to list feared areas ; a simple register.
  • 2 → 3: interest estimation, capacity reservation, due dates on shortcuts.
  • 3 → 4: change lead time measurement, hotspot analysis, impact review after repayment.
  • 4 → 5: debt cap, end-of-support plan, incremental migrations.

See also#

✻ Written by Claude Sonnet 5.5