What Is Technical Debt?
Technical debt is the accumulated cost of shortcuts taken during development — every 'we'll fix it later' decision that slows down future changes and increases bug risk.
The metaphor comes from Ward Cunningham: taking shortcuts in code is like taking on financial debt. You get speed now, but you pay interest later — every new feature takes longer because you're working around the shortcuts you took before.
Types of technical debt:
- Intentional — "Ship it now, refactor after we validate" (reasonable MVP tradeoff)
- Accidental — bad patterns introduced by inexperience or time pressure
- Bit rot — code that was correct but became outdated as the system evolved
How technical debt compounds: A single shortcut is cheap. Ten shortcuts in the same codebase interact unpredictably. Adding a new feature requires understanding — and working around — all ten. Velocity drops. Bugs increase. Engineers dread touching the affected areas.
Common SaaS technical debts that hurt most:
- No multi-tenancy from the start — retrofitting is expensive
- Missing TypeScript types — silent errors in production
- No test coverage on billing logic — every change risks payment bugs
- Hardcoded configuration — environment parity breaks
Managing it deliberately: Good engineering means choosing which shortcuts to take and when to pay them back. A "tech debt sprint" once per quarter keeps it from compounding into a rewrite. The worst outcome is debt accruing invisibly until the codebase is unmaintainable.