Tech Debt
vs Features.
A canvas for the recurring fight. Decision rules, target ratios, negotiation script. End the planning-meeting deadlock.
Quarter: ______
Date: ______
The Framing Problem
The fight stalls because the question is wrong. “Should we do tech debt or features?” is binary; reality is portfolio. Debt isn’t a single bucket — some debt compounds, some is dormant, some is fictional engineering preference. Features aren’t a single bucket — some unlock revenue, some are vanity. Stop arguing in the abstract. Score each item on impact and decay rate, allocate capacity by ratio, and the meeting is over in 30 minutes.
The 4-Quadrant Decision Matrix
Every debt item lands in one quadrant. The action is determined by the quadrant, not by who’s loudest.
Debt Cost Over Time
Hand-waving (“this slows us down”) loses the meeting. Math wins it. A debt item that adds X% friction to a daily task costs N hours/year per engineer. Pick the row that matches your worst friction point and put a real number on the table.
| Friction added | Per day | Per engineer / yr (250d) | Team of 8 (annual hrs) |
|---|---|---|---|
| 5% on a 1-hour task | 3 min | 12.5 hrs | 100 hrs |
| 10% on a 2-hour task | 12 min | 50 hrs | 400 hrs |
| 15% on a 3-hour task | 27 min | 112 hrs | 896 hrs |
| 25% on a 4-hour task | 60 min | 250 hrs | 2,000 hrs |
Convert hours to dollars at fully-loaded engineering cost. The middle row alone, at $80/hr loaded cost on an 8-person team, is $71,680 of friction per year.
Target Ratios
The 70/20/10 model is the default. 70% feature work, 20% targeted debt reduction, 10% exploration / spike / instrumentation. Most teams under-allocate the 20%; a few over-allocate when an engineer becomes the loudest voice.
- Flex up to 60/30/10 when 2+ items are in “Fix Now” or after a major incident.
- Flex down to 80/15/5 for 1 quarter only when there’s a board-committed launch. Never two quarters in a row — that’s how you become a debt bankruptcy story.
- Reset to 70/20/10 at the start of every quarter unless the canvas justifies otherwise.
The Capacity Ladder
Not every debt item gets the same vehicle. Use the lowest rung that fits.
| Rung | Use when | Trigger to escalate |
|---|---|---|
| Fix next sprint | Discrete, < 3 days, single engineer | Item recurs across 2 sprints unfixed |
| Roadmap item | 1–3 weeks, single team | Effort estimate doubles or pulls in a 2nd team |
| Debt-week | Whole team, 1 sprint, multiple items | Quarterly debt backlog > 3 weeks of work |
| Refactor project | Cross-team, 4–12 weeks, named initiative | Hits the rewrite criteria below |
The “Should We Rewrite?” Decision
All five must be true. If any one is false, refactor instead. Most rewrite asks fail this test — that’s the point.
- 1. The current system has a documented architectural ceiling (scale, security, compliance) that refactoring cannot lift.
- 2. You can run old and new in parallel through a shared interface for 90+ days without a hard cutover.
- 3. The team that will own the rewrite has shipped a comparable greenfield system in the last 24 months.
- 4. Feature freeze on the legacy system is acceptable to the business for the rewrite duration plus 30%.
- 5. There’s a written kill criterion: at what milestone do we abandon the rewrite and double down on refactor?
Negotiation Script for the Planning Meeting
When someone says “but customers are screaming”: “Customer screams move features up the 70%. They don’t consume the 20%. The 20% is what keeps us shipping the 70% next quarter. Cutting debt allocation to handle a single customer escalation is how teams end up at 0% feature velocity in Q4.”
Tracking Debt Without a Separate Tool
You don’t need a debt tracker. You need three tags in the existing tracker (Jira, Linear, GitHub) and a 15-minute monthly cadence.
- Tag 1:
debt:hot— Fix Now quadrant. Goes into the 20% allocation immediately. - Tag 2:
debt:scheduled— Schedule quadrant. Has a target quarter set. - Tag 3:
debt:watching— Cap & Watch quadrant. Has a tripwire metric in the description.
Monthly: 15-minute review with the tech lead. Move items between tags. Promote any watching item whose tripwire fired. Don’t add new tools to manage this.
Example Fillable Canvas
| Debt item | Decay | Customer impact | Cost now | Cost Q4 | Decision |
|---|---|---|---|---|---|
| CI pipeline flake | High | Indirect (ship velocity) | 2 wks | 5 wks | Fix Now |
| Billing module monolith | Low | Slow new pricing changes | 6 wks | 7 wks | Schedule Q3 |
| Legacy auth library (EOL) | High | Future security risk | 3 wks | 8 wks | Cap & watch (tripwire: CVE published) |
| “Rewrite frontend in X” | Low | None measurable | 12 wks | 12 wks | Ignore (fails rewrite test) |
| _____________ | _____ | _____________ | ___ | ___ | _____________ |