Technical Debt Management

Difficulty
Importance

The problem

Every codebase accumulates shortcuts taken under time pressure, and left unmanaged, that accumulation compounds — each new feature gets slower and riskier to build on top of an increasingly tangled foundation, until the team is spending more time fighting the codebase than building on it.

Why now

Refactoring already gave the tool for fixing structural debt; technical debt management is the deliberate practice of tracking that debt and deciding when paying it down is worth prioritizing over new features, using the same coupling-and-cohesion vocabulary to judge severity instead of relying on vague unease.

Mental model

Technical debt is a real analogy: a shortcut is a loan that buys speed now at the cost of slower changes later, and like financial debt, it's sometimes a reasonable deliberate choice (ship now, pay it down soon) and sometimes an unrecognized, compounding liability. Managing it means treating it as visible and trackable, not as ambient guilt — naming specific debts, in specific places, with a specific cost to leaving them unpaid.

Requires

Used in

Projects

  • Audit a real codebase and produce a prioritized list of specific technical debts, each with a concrete cost (what does leaving this unpaid make harder) and a rough paydown estimate
  • Make and document a deliberate technical debt tradeoff for a hypothetical deadline — what shortcut you'd take, and the specific follow-up plan to pay it down

Examples

  • A specific, named debt ('the payment module directly queries three other services' tables — should go through their APIs instead') is actionable; 'the code needs cleanup' is not
  • Deliberately hardcoding a config value to hit a launch deadline, with a tracked follow-up ticket to externalize it properly afterward, is a managed debt, not an accident

Resources

Mastery checklist