Post

The Technical Debt Strategy That Actually Gets Management Buy-In

How to quantify technical debt in business terms, prioritize it strategically, and build a sustainable paydown plan that leadership actually approves.

The Technical Debt Strategy That Actually Gets Management Buy-In

Why “We Need to Refactor” Never Works

Every engineering team I’ve worked with has had the same conversation:

“We need to stop features for a sprint and pay down tech debt.”

And every time, the response from product or leadership is some variation of: “We can’t afford to stop. We have commitments. Maybe next quarter.”

Next quarter never comes.

The problem isn’t that management doesn’t care about code quality. The problem is that engineers speak in technical terms (“the code is messy,” “we need to refactor,” “it’s getting unmaintainable”) while business leaders think in outcomes (revenue, velocity, risk, customer impact).

After 17 years of navigating this — sometimes successfully, sometimes not — I’ve developed a strategy that consistently gets buy-in. It’s not about fighting management. It’s about speaking their language.


Understanding the Debt Quadrant

Not all technical debt is created equal. Martin Fowler’s quadrant categorizes debt along two dimensions:

Reckless × Deliberate — “We don’t have time for design. Just ship it.”

  • Usually created under pressure
  • The team knows it’s wrong but does it anyway
  • Examples: skipping tests, hardcoding values, copy-pasting logic

Reckless × Inadvertent — “What’s a design pattern?”

  • Created by inexperience
  • The team doesn’t realize they’re creating debt
  • Examples: no separation of concerns, god classes, no error handling

Prudent × Deliberate — “We’ll ship this MVP now and refactor before the next phase.”

  • Conscious tradeoff with a plan
  • The team documents what they’ll fix and when
  • Examples: simplified data model for launch, temporary manual process

Prudent × Inadvertent — “Now that we’ve built it, we understand how it should have been designed.”

  • Only visible in hindsight
  • Natural consequence of learning through building
  • Examples: wrong abstraction boundaries, misplaced responsibilities

Why This Matters for Strategy

Each quadrant requires different treatment:

Reckless/Deliberate — High priority to fix. Created knowingly, often has immediate consequences.

Reckless/Inadvertent — Requires education alongside fixes. Fixing the code without fixing the knowledge just recreates the debt.

Prudent/Deliberate — Already has a plan. Ensure the plan is executed (this is where the “next quarter” problem lives).

Prudent/Inadvertent — Normal and healthy. Address when it causes friction, not as an emergency.


Measuring Debt in Business Terms

Here’s where most engineers fail: they describe debt in code-quality terms. Management doesn’t fund code-quality improvements. They fund risk reduction, velocity improvements, and cost savings.

Metric 1: Incident Frequency and Duration

Track incidents that are caused by or worsened by tech debt:

Data to collect:

  • Number of production incidents per month related to the debt area
  • Mean time to resolution (MTTR) for incidents in debt-heavy areas vs. clean areas
  • Customer-facing downtime hours attributable to debt
  • Engineering hours spent on incident response

How to present it:

“In Q3, our payment module caused 7 production incidents averaging 45 minutes each. That’s 5.25 hours of customer-facing degradation. Our order module, which was refactored last year, had zero incidents. The payment module’s architecture makes it fragile to change — every deployment is risky.”

Metric 2: Velocity Slowdown

This is the most compelling metric for product leaders who want features faster.

Data to collect:

  • Average time to deliver a feature in the debt-heavy area
  • Average time to deliver a comparable feature in cleaner areas
  • Time spent on workarounds vs. direct implementation
  • Number of PRs that require rework due to unexpected complexity

How to present it:

“Adding a new payment method currently takes 3 weeks. In our refactored order system, an equivalent complexity feature takes 4 days. The payment module’s coupling means every change requires modifying 8 files and running a 2-hour manual regression. A refactored payment system would bring this down to 4 days, which means we can deliver the 6 payment methods on the roadmap in Q1 instead of Q3.”

Metric 3: Recruitment and Retention Risk

This is underused but incredibly effective with leadership:

“We lost two senior engineers this year who cited our legacy codebase as a reason for leaving during exit interviews. Our Glassdoor reviews mention technical debt. Replacing a senior engineer costs approximately $50K in recruitment and 3-6 months in ramp-up time.”

Metric 4: Security and Compliance Exposure

“Our authentication module uses a library with 3 known CVEs. Upgrading requires a major refactor because of tight coupling. The longer we wait, the more exposed we are to a security audit failure, which would block our enterprise deals.”


The 20% Rule That Works

Asking for a “tech debt sprint” is a losing strategy. It positions debt paydown as competing with features — and features will always win in that framing.

Instead, negotiate a standing allocation: 20% of engineering capacity goes to technical excellence. Every sprint, no exceptions, no negotiation needed.

Why 20% Works

  • It’s small enough that product barely notices — 4 days out of a 10-day sprint
  • It’s consistent enough to compound — 20% over a year is 2.5 months of dedicated work
  • It doesn’t require approval each time — Reduces political friction to zero
  • It prevents debt from accumulating — You’re always paying it down, not batching it

How to Implement It

  1. Create a “Tech Excellence” category in your sprint — 2 out of 10 story points, every sprint
  2. Engineers choose the work — They know where the pain is. Trust them.
  3. Make it visible — Track what was fixed and what impact it had
  4. Protect it fiercely — The moment you “borrow” from the 20% for a feature, the system collapses

Getting This Approved

Present it as risk management, not quality investment:

“I’m proposing we allocate 20% of sprint capacity to reducing technical risk. Based on our incident data, this would reduce production incidents by an estimated 40% over 6 months and improve feature delivery velocity by 25% in the affected areas. The alternative is continuing to accumulate debt until a major rewrite becomes unavoidable — which historically costs 10-50x more than incremental improvement.”


The Debt Sprint: For Critical Mass Problems

Sometimes the 20% rule isn’t enough. When you need concentrated effort (major version upgrades, architecture changes, database migrations), propose a dedicated debt sprint with:

The Business Case Template

I’ve used this template successfully at three different organizations:

Problem Statement — What specific debt is being addressed?

“Our order service uses Spring Boot 2.x which reaches end-of-life in November. It’s coupled to a deprecated Hibernate version with known performance issues affecting our response times.”

Business Impact (Current) — What is this costing us today?

“Average order API response time is 340ms (target: 100ms). This causes 2.3% cart abandonment above baseline. At our current GMV, that’s approximately $180K/month in lost revenue.”

Proposed Solution — What will you do?

“Upgrade to Spring Boot 3.2, migrate to Hibernate 6.x, and restructure the data access layer. Estimated 2-sprint effort for 3 engineers.”

Expected Outcome — What improves?

“Response times drop to under 100ms (based on Spring Boot 3 benchmarks). Cart abandonment normalizes. We unblock 4 features on the roadmap that require Spring Boot 3 features.”

Risk of Inaction — What happens if we don’t?

“Spring Boot 2.x loses security patch support in November. We’ll be running a payment-processing system on an unpatched framework. Additionally, two library upgrades on our roadmap require Spring Boot 3.”

Cost — How much time and effort?

“6 engineer-weeks (3 engineers × 2 sprints). Zero feature impact to other teams.”


Prioritization Framework: The Impact/Effort Matrix

Not all debt is worth paying down. Some debt lives in code that’s rarely changed and causes no issues. Spending time there is waste.

How to Prioritize

High Impact, Low Effort (Do First)

  • Adding missing indexes (1 hour work, 50% query improvement)
  • Fixing obvious N+1 queries
  • Adding circuit breakers to fragile integrations
  • Removing dead code that confuses new developers

High Impact, High Effort (Plan and Schedule)

  • Database schema migrations
  • Framework version upgrades
  • Decomposing a monolithic service
  • Replacing a custom solution with a standard library

Low Impact, Low Effort (Do During Normal Work)

  • Renaming confusing variables
  • Adding missing documentation
  • Cleaning up test utilities
  • Standardizing log formats

Low Impact, High Effort (Don’t Do)

  • Rewriting working code that nobody touches
  • Achieving perfect test coverage on stable legacy modules
  • Migrating internal tools that work fine
  • Refactoring code scheduled for deprecation

The “Change Frequency” Heuristic

Look at your git log. The files that change most frequently are where debt hurts most. A messy file that hasn’t been touched in 18 months is not costing you anything. A slightly messy file that changes 5 times per sprint is killing your team’s velocity.

1
2
3
# Find your most-changed files in the last 6 months
git log --since="6 months ago" --pretty=format: --name-only | \
  sort | uniq -c | sort -rn | head -20

Cross-reference this with your incident data. The intersection of “changes frequently” and “causes incidents” is your highest-priority debt.


Success Metrics: Proving the Strategy Works

To maintain ongoing buy-in, you need to demonstrate results. Track these metrics monthly:

Leading Indicators (Early Signals)

Deployment frequency — Are you deploying more often? (Indicates reduced fear of change)

Change failure rate — Are fewer deployments causing issues?

Cycle time — Are features moving from “in progress” to “deployed” faster?

Code review comments — Are reviews faster? Fewer “this is fragile” comments?

Lagging Indicators (Outcome Proof)

Incident count and severity — Quarter-over-quarter trend

Mean time to recovery — Are incidents resolved faster?

Feature delivery velocity — Story points per sprint in affected areas

Developer satisfaction — Quarterly survey, specific questions about codebase quality

The Monthly Report

I send a one-page monthly report to leadership:

“Tech Excellence Update — January 2025

Investment this month — 42 story points (18% of total capacity)

Key outcomes:

  • Upgraded payment service to Spring Boot 3.2 (was blocking 3 roadmap items)
  • Reduced average API response time from 340ms to 95ms
  • Zero production incidents in refactored modules (vs. 3 last month)

Impact on roadmap:

  • Unblocked the Apple Pay integration (was blocked by Spring Boot 2.x)
  • Payment method features now estimated at 4 days instead of 3 weeks

Next month focus:

  • Database connection pooling optimization (current wait times causing timeouts)
  • Decomposing the notification monolith (blocking push notification feature)”

Real Examples From My Career

Example 1: The Database That Couldn’t Scale

Situation: A single PostgreSQL instance handling 50K transactions per second. No read replicas, no connection pooling optimization, queries hitting unindexed columns.

How I pitched it: “We’re at 78% database CPU during peak. Black Friday will exceed our capacity. Without changes, we’ll need emergency downtime during our highest-revenue day. Here’s a 4-week plan to add read replicas and optimize the top 20 queries.”

Result: Approved immediately. Delivered in 3 weeks. Black Friday handled 3x traffic without issues. Leadership referenced this as “the best engineering investment of the quarter.”

Example 2: The Monolith Nobody Wanted to Touch

Situation: A 300K-line Java monolith where every deploy took 45 minutes and every change risked breaking unrelated features.

How I pitched it: “Our deployment time is 45 minutes. Industry standard for our scale is under 5 minutes. This means every hotfix takes an hour end-to-end. During the outage last week, that 45 minutes cost us $23K in lost transactions. I’m proposing we extract the payment module first (highest-risk, most-changed), which brings that module’s deploy time to 3 minutes.”

Result: Approved as a phased 6-month project. The first extraction delivered in 6 weeks, and the immediate improvement (zero payment incidents for 3 months straight) created momentum for the remaining work.

Example 3: The Proposal That Failed

Situation: I wanted to rewrite an internal admin tool from PHP to Java. It was ugly code but worked fine.

Why it failed: I pitched it as “the code is terrible and hard to maintain.” Leadership asked: “How many incidents has it caused?” Zero. “How often does it need changes?” Once a quarter. “How many users does it have?” Five internal users.

Lesson: Working ugly code that rarely changes and causes no incidents is NOT high-priority debt, no matter how much it offends your engineering sensibilities. I was wrong to push for this.


The Cultural Shift

The ultimate goal isn’t to get one debt project approved. It’s to build a culture where technical excellence is a standing priority, not a special request.

Signs you’re succeeding:

  • Product managers ask “any tech debt here?” when planning features near legacy code
  • Leadership includes “technical risk” in quarterly planning discussions
  • New engineers comment that the codebase is improving, not degrading
  • Incident reviews naturally lead to debt reduction tickets
  • The 20% allocation is never questioned or raided

Signs you’re failing:

  • Debt work requires a new business case every time
  • Engineers do “secret refactoring” inside feature tickets (hiding the work)
  • The debt backlog only grows, never shrinks
  • “We’ll fix it later” is the team’s most common phrase
  • Senior engineers are leaving because they’re tired of the codebase

Technical debt management isn’t a one-time project. It’s a discipline. Like financial debt, the goal isn’t zero debt — it’s sustainable debt that serves your goals rather than consuming your capacity.

The strategy that works is simple: measure in business terms, invest consistently, demonstrate results, and never position quality as competing with delivery. They’re the same thing.

This post is licensed under CC BY 4.0 by the author.