Hebel

How technical debt sinks a codebase

No single shortcut ever felt big enough to stop and fix. That is exactly why the codebase eventually fell off a cliff.

June 20, 2026 · 6 min read

Nobody decides to wreck a codebase. They decide to skip one test because the release is tomorrow. To copy a function instead of refactoring the shared one. To hardcode the edge case "just for now." Each call is small, local, and entirely defensible.

And that is precisely the mechanism. Technical debt is not a series of bad decisions — it is a series of reasonable ones, each too small to trigger any alarm, accumulating past a threshold that nobody is watching until delivery speed falls off a cliff.

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.
Tippe einen Knoten an
Technical debt vs. delivery speed — modeled in Hebel. Tap nodes; press play to simulate. Get invited to explore it live in Hebel →

The trap: each step is below the alarm

The Tyranny of Small Steps (also called creeping normalcy or the boiling-frog trap) describes a system that degrades through increments each too small to justify resistance, while the cumulative effect is catastrophic.

In the model, see the edge from shortcuts taken to detection threshold: it is weak and negative. No single shortcut moves the needle enough to set off the alarm — so the governing response never fires. The decision you actually face is never "should I ruin the codebase?" It is always "should I skip this one test?" And the honest answer, this one time, is usually yes.

The accumulation that runs underneath (a reinforcing loop)

While the alarm sleeps, a reinforcing loop R is compounding. Shortcuts raise code complexity, which raises technical debt, which eventually drags down delivery speed. Slower delivery widens the gap to the roadmap, which raises delivery pressure — and pressure produces more shortcuts.

The vicious part is the direction: debt makes you slower, slowness makes you more rushed, and rush makes more debt. The team digs faster the deeper it gets. Note the delays on the complexity and speed edges — the pain shows up long after the shortcut that caused it, so cause and effect feel unrelated.

Why it feels like a sudden collapse

Run the simulation. For a long stretch delivery speed barely moves while technical debt climbs steadily in the background. Then speed drops sharply. Nothing changed in the last week — what changed is that accumulated complexity finally crossed the point where every change has to fight the mess.

This is why post-mortems are so disorienting: people look for the catastrophic commit and never find it, because there was none. The balancing "alarm" loop B — threshold finally breached, shortcuts finally curtailed — does eventually fire, but on a long delay and only after the damage is done. A governor that activates after the collapse is not a governor.

The leverage point: structural transparency

You cannot fix this one shortcut at a time, because per-shortcut is exactly the resolution at which the problem is invisible. The leverage is to change what gets measured — lower the detection threshold by making the aggregate visible.

Track total debt as a first-class number: complexity trend, change-failure rate, lead-time drift. Give debt an explicit budget the way you budget features, and review it on the portfolio level, not the pull-request level. The point is not to ban shortcuts — sometimes the deadline really does win. The point is to stop judging them individually, where each is innocent, and start governing them in aggregate, where the truth lives.

Map your own system

Hebel is launching soon. Join the early list and lock in 30% off — plus 10% more per friend you bring.

Get invited