Not Boring All articles
Technology

Your Codebase Is a House of Cards and Everyone's Pretending It Isn't

Not Boring
Your Codebase Is a House of Cards and Everyone's Pretending It Isn't

Photo: sylvar, CC BY 2.0, via Wikimedia Commons

There's a conversation happening in engineering teams across the country right now that goes something like this:

"Can we get this feature out by Q3?"

"Uh… we'd need to refactor the payment service first. And the authentication layer is kind of tied to that. And there's a thing in the database schema from 2019 that nobody fully understands anymore."

"So… Q4?"

"Maybe."

This is what technical debt sounds like in the wild. Not a dramatic system crash. Not a breach. Just a slow, grinding friction that makes everything harder than it should be, costs more than it looks like it costs, and compounds quietly in the background while the business makes plans that engineering can't actually execute.

The debt ceiling metaphor is apt here, and not just because it's politically charged. Just like the federal debt ceiling, technical debt is a number that keeps going up, gets talked about in abstract terms, and only becomes a genuine crisis when someone tries to actually do something and discovers the ceiling is right there above their head.

How You Got Here (Even Though You Saw It Coming)

Almost no company sets out to build a codebase that looks like a Jenga tower after fourteen rounds. It happens gradually, through a series of individually defensible decisions that accumulate into something indefensible.

The startup cuts corners to hit a launch date. Fair — survival matters more than elegance when you're burning runway. The scaleup inherits that code and adds a layer on top instead of rebuilding, because rebuilding would take three months and the board wants growth metrics. The growth-stage company acquires a smaller competitor and stitches their system into the existing infrastructure with the engineering equivalent of baling wire. And so on.

Every shortcut has a justification. The problem is that shortcuts have interest rates. Each one makes the next thing slightly harder, slightly riskier, slightly slower. And because the cost doesn't show up on a P&L — it shows up in sprint velocity, in engineer frustration, in features that take four weeks instead of four days — it's easy for leadership to treat it as background noise rather than a structural problem.

Until it isn't background noise anymore.

The 80% Problem

Here's a number that should make any product leader uncomfortable: engineering teams at companies with significant technical debt routinely report spending 60 to 80 percent of their sprint capacity on maintenance work. Not building. Not innovating. Patching, firefighting, and trying to keep the existing system from falling over.

That means if you have a team of ten engineers and you're in serious debt territory, you effectively have two engineers working on the future and eight engineers just keeping the lights on. You're paying for ten but getting two.

And the frustrating part is that this isn't anyone's fault in the moment. The bugs are real. The production issues are urgent. The technical fires demand attention. But when the majority of your engineering capacity is consumed by the past, your ability to compete in the present erodes faster than most business leaders realize.

Companies that have been through this — and there are plenty of them — describe the experience as running in sand. Everything takes longer than it should. Estimates are unreliable because nobody fully understands how the system behaves anymore. Engineers who joined to build interesting things start leaving because they're spending their days reading code written by people who don't work there anymore and trying to figure out why a deployment from 2021 is causing a memory leak in 2025.

The Business Cost Nobody Budgets For

Let's talk about money, because that's ultimately the language that gets executive attention.

Slower feature velocity means slower competitive response. If your competitor can ship in two weeks and you need three months, that gap compounds over time. Markets move. Customer expectations shift. The window to capitalize on a trend closes. Technical debt doesn't just slow down engineering — it slows down the entire business's ability to adapt.

Engineer attrition is expensive in ways that are easy to underestimate. Replacing a senior software engineer costs somewhere between 50 and 200 percent of their annual salary when you factor in recruiting, onboarding, and the productivity ramp. When engineers leave because the codebase is demoralizing and the work feels like archaeological excavation rather than creation, those costs add up fast. And the engineers who leave are usually the best ones — the ones with options.

There's also the opportunity cost of what doesn't get built. Every quarter a team spends maintaining broken systems is a quarter they're not building the product features that could drive growth, improve retention, or open new revenue streams. That's a cost that never appears anywhere, because you can't measure what didn't happen. But it's real.

Why "We'll Fix It Later" Is a Fantasy

The cruelest thing about technical debt is that "later" almost never arrives on its own. Debt doesn't get paid down because the business slows down and engineers finally have time to clean things up. Businesses don't slow down. If anything, the pressure to ship increases as the company grows, which means the window to refactor keeps getting pushed.

The only way technical debt actually gets addressed is when leadership treats it like the business risk it is — not a nice-to-have engineering project, but a strategic liability that belongs in the same conversation as customer churn or competitive positioning.

That means allocating real sprint capacity to debt reduction, not just the scraps that are left over after feature work. It means engineering leadership having the standing to say "we can't build that yet because we need to stabilize the foundation first" without getting steamrolled by a product roadmap. It means measuring and reporting on debt the same way you'd report on any other material business risk.

What Actually Works

A few approaches that have shown real results:

The 20% rule. Some engineering orgs carve out roughly 20 percent of every sprint for technical health work — refactoring, improving test coverage, eliminating dead code. It's not glamorous, but it keeps the debt from compounding into crisis territory.

Make it visible. Dashboards that track things like test coverage, deployment frequency, mean time to recovery, and the ratio of bug fixes to new features give leadership a window into technical health that doesn't require a CS degree to interpret. You can't manage what you can't see.

Treat rewrites like product bets. Major refactoring efforts need business cases, not just engineering justifications. What does the company gain in velocity, reliability, or capability? Frame it that way and it becomes a conversation the whole leadership team can engage with.

Stop adding to the pile. Debt reduction is slow. Debt prevention is faster. Code review standards, architectural decision records, and a cultural norm that pushes back on shortcuts before they become permanent features of the codebase can slow the accumulation significantly.

The Ceiling Is Closer Than You Think

The companies that end up in genuine technical debt crises — the ones where leadership finally has to greenlight a full rewrite or watch the product fall apart — almost always say the same thing in retrospect: they knew it was getting bad. They just kept thinking they had more runway than they did.

Technical debt is boring right up until it's catastrophic. And the gap between those two states is shorter than most businesses are willing to admit.

All Articles

Related Articles

Black Box Roulette: When Your AI Makes the Call and Nobody Knows Why

Black Box Roulette: When Your AI Makes the Call and Nobody Knows Why

The Software Subscription Trap: How Enterprise Teams Pay Enterprise Prices for Starter-Pack Usage

The Software Subscription Trap: How Enterprise Teams Pay Enterprise Prices for Starter-Pack Usage

You Bought the Robot, Now Your Team Moves Slower

You Bought the Robot, Now Your Team Moves Slower