The Dirty Secret About Tech Debt
Every founder has been in this room. The engineering lead presents two options: rebuild the auth system the "right way" (6 weeks, zero new features) or duct-tape another OAuth provider into the existing mess (2 days, ships Friday).
The startup advice is unanimous: ship fast, fix later. The enterprise advice is equally clear: technical debt will kill you.
They're both wrong.
After 20 years building Link11 and now Lynk, I've learned that technical debt isn't inherently good or bad. It's a leverage instrument—like financial debt. Used strategically, it accelerates growth. Used carelessly, it compounds into bankruptcy.
Here's the framework nobody teaches you.
The Three Types of Tech Debt
Type 1: Strategic Debt (Good Debt)
This is deliberate, documented, and has a clear ROI. You choose to cut corners because speed-to-market beats perfection.
Examples:
- Hard-coding feature flags instead of building a feature management system
- Using a monolith instead of microservices for your first 1M users
- Manual customer onboarding instead of automated provisioning
The key: you know you're taking on debt. You document the trade-off. You set a trigger to revisit ("when we hit 10k users" or "when we close Series A").
Strategic debt is a loan from your future self. It buys you time to prove product-market fit before over-engineering.
Type 2: Tactical Debt (Neutral Debt)
This is the accumulation of small decisions that made sense at the time but aged poorly. The API client you wrote for a vendor who changed their spec. The caching layer optimized for a usage pattern that no longer exists.
It's not reckless—it's entropy. Code decays as context shifts.
Examples:
- Database indexes optimized for queries you no longer run
- Abstraction layers for providers you've since abandoned
- Test fixtures for features that were sunset
The danger: tactical debt is invisible until it's friction. It slows down every new feature. It's death by a thousand paper cuts.
The fix: regular refactoring sprints. Treat code hygiene like server maintenance—schedule it, or it'll force itself into your roadmap at the worst possible time.
Type 3: Reckless Debt (Bad Debt)
This is what happens when you don't know you're accumulating debt—or worse, when you do know but pretend it doesn't matter.
Examples:
- Copying code instead of abstracting because "we'll clean it up later"
- Skipping error handling because "this edge case will never happen"
- Hardcoding credentials because "we'll move them to env vars before launch"
Reckless debt compounds exponentially. Every new engineer onboarded has to learn the workarounds. Every incident traces back to a shortcut someone took in 2019.
This is the debt that kills startups. Not because it's unsolvable, but because by the time you realize how deep you're in, the cost to fix it exceeds the value of the company.
The Tech Debt Ledger (A Framework That Works)
At Link11, we used to argue about refactoring in abstract terms: "the codebase is messy" vs. "we need to ship features." Both sides were right, both sides were stuck.
Then we started treating tech debt like financial debt. We built a ledger.
Every deliberate shortcut gets logged:
- What: "Hardcoded BGP route announcements instead of dynamic routing"
- Why: "Needed to ship DDoS mitigation in 2 weeks instead of 8"
- Cost: "Adds 15 minutes to every new PoP deployment"
- Trigger: "Revisit when we hit 10 PoPs or deploy frequency >1/week"
- Effort: "2 engineer-weeks to build route manager"
Every quarter, we review the ledger. We calculate:
- Interest rate: How much is this debt slowing us down right now?
- Principal: How much effort would it take to pay it off?
- Opportunity cost: What features are we not building because of this?
If the interest is high and the principal is manageable, we pay it down. If the interest is low, we roll it forward.
Simple. Transparent. No more religious debates about "code quality."
The 70/20/10 Rule for Engineering Time
Here's the allocation that's worked across both Link11 and Lynk:
- 70% - Features & Growth: Shipping what customers pay for
- 20% - Reliability & Scale: Keeping the lights on, handling growth
- 10% - Debt Repayment: Paying down the ledger, refactoring, cleanup
That 10% is non-negotiable. It's not "if we have time." It's scheduled, protected, and defended.
Without it, tactical debt metastasizes into reckless debt. With it, you stay nimble even as the codebase ages.
When to Declare Bankruptcy
Sometimes the debt is unrecoverable. The codebase is so tangled that incremental refactoring won't work. You need a rewrite.
The industry is split on rewrites. Joel Spolsky famously called them "the single worst strategic mistake any software company can make."
He's right—usually. But not always.
Here's when a rewrite makes sense:
- The platform has fundamentally shifted. You built a desktop app in 2010 and the world moved to SaaS. The architecture doesn't port—you need to rethink it.
- The core assumptions changed. You optimized for read-heavy workloads, now you're write-heavy. The data model is upside down.
- The debt is in the foundation. Bad database schema, wrong framework, architectural dead-end. Surface refactoring won't help.
At Link11, we rewrote our core DDoS mitigation engine twice. The first rewrite (2011) moved us from hardware appliances to software-defined networking. The second (2018) re-architected for cloud-native scale.
Both were terrifying. Both were necessary. Both paid off.
The key: rewrite with a running business. Don't shut down feature development. Build the new system in parallel, migrate incrementally, and keep shipping.
The Best Debt Is the Debt You Don't Take
The real insight? Most tech debt is avoidable.
Not by writing perfect code—that's a trap. But by making deliberate choices:
- Use boring technology. Postgres, Nginx, Bash. They're boring because they work. Exotic frameworks are future debt.
- Write code you can delete. The best abstraction is no abstraction. Keep it simple until complexity is unavoidable.
- Document your shortcuts. Future-you will thank past-you for the breadcrumbs.
- Automate the painful stuff. If deployments hurt, automate them. Pain is a signal.
Tech debt isn't the enemy. Unmanaged tech debt is.
The Takeaway
If you're a founder, start a tech debt ledger today. Make it visible. Make it part of roadmap planning.
If you're an engineer, stop treating refactoring as a luxury. It's infrastructure maintenance. Would you skip server patching? Then don't skip code cleanup.
And if you're raising money or evaluating an acquisition, audit the tech debt. It's not on the balance sheet, but it's real. A codebase with $2M in hidden refactoring work is worth $2M less—minimum.
Technical debt is leverage. Use it like a founder, manage it like a CFO, and pay it down like a grownup.
The best ideas don't need permission. But they do need sustainable code.
Follow the journey
Subscribe to Lynk for daily insights on AI strategy, cybersecurity, and building in the age of AI.
Subscribe →