What technical debt interest actually looks like

Debt is not ugly code; it is the extra cost every future change pays. The test is measurable: files touched per edit, test runtime, places that must change together.

Treat technical debt as a moral issue and you will never reach a conclusion. It is an economic one: you borrowed, and every future operation pays interest.

Interest is quantifiable

Symptom Measurable signal
One change touches many files files per edit
Nobody dares to change it is there a test that proves you did not break it
A new field means five edits how many places define the same concept
Builds keep getting slower seconds from edit to visible result
New hires take forever days from clone to first merged fix

Translate the symptom into a number and the debt stops being an opinion.

Principal versus interest

  • Principal: the one-time cost of rewriting that part
  • Interest: the extra time every change pays, forever

Deciding whether to repay means comparing principal against the sum of future interest.

refactor cost: 3 days
extra per new field: 2 hours
fields still to come: 20 -> 40 hours ~ 5 days
verdict: refactor now

If that module will not be touched for three months, the interest is zero and it should not be repaid. The danger is not debt existing; it is debt piling up in high-interest areas.

Where the high interest lives

  • Core types everyone depends on: one change ripples site-wide
  • Manual steps on every release: skip one and things break
  • Startup scripts nobody dares touch: undebuggable when they fail
  • Critical paths with no tests: changes are pure luck

The first two compound: you pay every time, and the price grows with scale.

Deliberate borrowing is fine

“Ship it now, clean up next week” is a legitimate decision, as long as it is written down:

TODO(debt): payment callback is synchronous; timeouts drop orders.
Impact: orders can be lost at peak.
Repay: move to an async queue, about 1 day.
Deadline: within two weeks of launch.

The deadline is the point. A TODO without one is permanent debt, and nobody will remember it was once a tradeoff — later readers just see nonsense.

Do not call ugliness debt

Awkward names, a slightly long function, sparse comments: if these do not raise the cost of future changes, they are style, not debt. Calling them debt buries the real debt.

There is one test: how much extra does it make you pay on the next change? Only the part you cannot afford deserves repayment.

← Back to all posts

Comments

…