Join 5000 CTOs and engineering managers for opinionated insights Subscribe

Drowning in Technical Debt

Every sprint, more time fighting the codebase. Less time building. The CEO keeps asking why everything takes so long.


My personal story

Whenever I joined a startup, either as CTO or Fractional CTO, the startup was drowning in technical debt. The combination of relentless business pressure from the founders, too many inexperienced engineers, no plan and no engineering management led to a codebase that was a mess - that was always so bad that people didn't want to get in it every day. My first step always is: When in a hole stop digging. From that moment on, I didn't take on more technical debt and every commit leaves the code better than it was before - and I got out of tech debt hell several times this way. Remember: When in hell, keep walking.

The Slow Death Spiral

Technical debt doesn’t kill companies overnight. It suffocates them slowly.

At first, things just take a bit longer. A feature that should be two days takes a week. Then two weeks. Then a month. Developers start complaining about “the codebase.” The best ones quietly update their LinkedIn profiles.

The CEO asks why everything takes so long. You don’t have a good answer - or rather, you have an answer that sounds like an excuse. “We have technical debt.” Their eyes glaze over. They hear: “Engineering wants to do fun stuff instead of shipping features.”

Meanwhile, the debt compounds. Every shortcut today makes tomorrow’s work harder. Every patch adds to the complexity. The team spends more time on workarounds than on actual development. And the pressure for a rewrite builds - even though you know rewrites usually fail.

How You Got Here

Technical debt accumulates in predictable ways:

Does it matter how you got here? Not really. You’re here. The question is what to do about it.

The Rewrite Trap

When debt gets bad enough, someone always suggests a rewrite. Usually a senior engineer. Sometimes the CTO themselves. The argument is seductive: “The codebase is beyond saving. We need to start fresh. Everything will be fine then.”

I’ve seen this movie many times. The rewrite takes twice as long as planned. Feature parity proves harder than expected. Features are added to the old code that also need to be added to the new codebase. The target is moving all the time. PLUS the business can’t stop, so you’re maintaining two systems. The new codebase starts accumulating its own debt because of schedule pressure. Two years later, you’re back where you started - or worse.

Rewrites can work. But most don’t. And the CTOs who push for rewrites without understanding why they usually fail are setting themselves up for career-ending disasters. If things are truly critical, you may need a full tech turnaround. If the rewrite doesn’t deliver new features at half the time or double the speed, no one will notice. And you overpromised, so no one will be happy.

The alternative - incremental refactoring while shipping features - is harder to sell but more likely to succeed. It requires discipline, prioritization, willpower and the ability to make the business case for paying down debt. This is one of the most important strategic decisions you’ll make.

Making the Business Case

Here’s where most CTOs fail: they can’t translate technical debt into business language.

“We need to refactor the authentication module” means nothing to the CEO. “We’re spending 30% of engineering time working around problems in our login system, and it’s caused two outages this quarter” - that they understand. Always argue in their world language and their belief system.

Technical debt has measurable costs:

Velocity loss
Track how long similar features take now versus a year ago. Track the time from idea to when the feature makes money.Show the trend line. It’s usually ugly.
Incident frequency
Debt causes outages. Outages cost money and reputation. Connect the dots.
Bug rate
Bugs are expensive. With technical debt they grow - they are easier to create and harder to fix.
Hiring and retention
Good engineers don’t want to work in a mess for a long time. If they lose trust in the company, they will leave. If you’re losing people or can’t hire, debt is a factor. People join but will leave when seeing the mess.
Opportunity cost
Every hour spent on workarounds is an hour not spent on features that drive revenue.

When you can put numbers on it, suddenly “technical debt” becomes a business problem, not an engineering hobby. Secret: Many problems CTOs think are technical problems are actually business problems. Let business know and decide (the CEO - it will make them also happier)

What Actually Works

I’ve helped CTOs dig out of debt at multiple companies. The approach that works:

Ruthless triage is essential when tackling technical debt. Not all debt has the same impact—some parts of your codebase may be ugly but relatively harmless, while other pieces might be actively ruining your team’s productivity or causing fires. Focus your efforts on the debt that’s actually hurting your delivery or creating risks, not just the code that annoys engineers.

Trying to carve out a magical “20% time for refactoring” almost never works in reality. The better approach is to tackle debt as you work: if a new feature will touch the payments system, take the opportunity to fix the retry logic while you’re already in the codebase. These incremental improvements can add up quickly and don’t require a separate, company-wide mandate or lengthy approval process.

Visibility matters, too. You don’t need a fancy dashboard or complex static analysis tools. Instead, keep a simple, shared list of the known debt items and—most importantly—their business impact. Review this list regularly with the team and leadership, and celebrate each time you close something important.

Most crucial of all, though, is to stop creating new debt as you go. This is often even harder than paying down what you already have. It means raising the bar on code reviews, challenging unrealistic timelines, and making deliberate architectural decisions. If new debt gets added faster than you pay it down, you’ll never break the cycle.

The Politics of Debt

Technical debt is emotional. It’s tied to blame, frustration, and fear.

The engineers who created the debt (if they’re still around) feel defensive. The engineers who inherited it feel resentful. The CEO feels frustrated that engineering keeps complaining instead of shipping. The CTO feels caught in the middle.

Navigating this requires more than technical skill. You need to depersonalize the conversation. The debt isn’t anyone’s fault - or rather, it’s everyone’s fault, which is the same thing. What matters is fixing it, not assigning blame.

You also need allies. A CFO who understands the cost of technical debt becomes a powerful advocate. A product leader who sees how debt slows feature delivery can help prioritize paydown work. Build those relationships before you need them.

You Don't Have to Dig Out Alone

Technical debt is one of the loneliest problems a CTO faces. You can’t fully explain it to the CEO. Your engineers are frustrated and looking to you for answers. The board just sees features taking too long.

What helps is someone who’s been there - who’s dug out of debt at multiple companies and knows what works. Someone who can help you make the business case, prioritize ruthlessly, and create a realistic paydown plan. Someone who understands the politics as much as the technical solutions.

Ready to Stop the Spiral?

I’ve helped CTOs at multiple companies dig out of technical debt - making the case to leadership, prioritizing what to fix, and building sustainable practices. If your velocity is dying and you’re not sure how to dig out, let’s talk.

Learn About CTO Coaching