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
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:
- Speed pressure in the early days: Needed to ship fast, so corners were cut to survive. No one went back to clean things up.
- Growing without refactoring: Architecture for 10,000 users couldn’t handle 100,000. Features were added as quick fixes. Developers waited for the big rewrite instead of continuous improvements.
- Wrong assumptions: Engineering guessed wrong about what needed to change easily. Technology didn’t always match business needs.
- Inherited mess: Previous leaders or external teams made choices you now own. The code got the company this far, but now it’s your problem.
- Knowledge loss: Original engineers left, taking tribal knowledge. Documentation was missing or never done. No proper handover.
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.