Back to insights

How to Triage Technical Debt Without Stalling the Roadmap

A practitioner's method for deciding which technical debt to pay down now, which to leave, and how to fund the work without a freeze.

Not All Debt Deserves Repayment

The phrase technical debt flattens two very different things. There is debt that actively blocks the changes you need to make, and there is debt that simply looks ugly when you open the file. Teams burn enormous energy on the second kind because it is emotionally satisfying to clean up, while the debt that is genuinely slowing delivery hides in code nobody wants to touch.

A module can be poorly written and still be the right thing to leave alone. If it is stable, rarely changed, and not on the path of upcoming work, its messiness costs you almost nothing. Rewriting it is not repayment, it is a withdrawal from roadmap capacity for no return.

Triage Against The Roadmap, Not Against Taste

The triage question that works is concrete: does this debt sit on the path of something we plan to build in the next quarter? Debt on the path of active work compounds, because every feature that crosses it pays a tax. Debt far from the roadmap is just background noise.

For Prospr, the CV-adaptation pipeline is touched constantly, so any shortcut there is expensive and gets fixed early. The billing edge cases we wrote in a rush are ugly but barely change, so they wait. Same code quality, opposite decisions, because the roadmap is what makes one urgent and the other irrelevant.

Separate Debt That Is Risky From Debt That Is Slow

Slow debt costs you developer time. Risky debt costs you incidents. These are different problems and they do not compete for the same budget. For CareFlow, a fragile retry path in patient notifications is not a productivity issue, it is a reliability and compliance issue, and it jumps the queue regardless of how often that code changes.

When you triage, tag each item as slow or risky before you sequence anything. Risky debt is justified by the cost of the failure it could cause. Slow debt is justified by how much upcoming work it taxes. Mixing the two is how teams end up arguing about refactors when they should be talking about an outage waiting to happen.

Fund Repayment Inside Delivery, Not A Freeze

A dedicated cleanup sprint or a feature freeze almost never survives contact with the business, and it teaches everyone that debt repayment is a special event rather than normal engineering. The work that holds up is the repayment attached to a feature that already needed to cross that code anyway.

The decision you can make today: take your next three roadmap items, list the debt each one will force you to touch, and fix only that debt as part of shipping the feature. You repay exactly the debt that is in your way, you fund it from work that was already approved, and you never ask anyone for permission to stop building.

Architecture notes

Get future notes when the newsletter engine is active.

This stores your subscription intent in the growth engine. Email sending is enabled when the mailing provider is configured.

Request a proposal

Turn your product situation into a clear advisory brief.

Describe the context, constraints and decisions that need clarity. You get a recommended engagement format, and I receive the substance needed to prepare a serious reply.

The form prepares a structured request. No prices are shown publicly: pricing belongs in the final proposal.

Recommended format

Light monthly retainer

Short alignment phase, scope still to clarify.

After submission, I directly receive a structured, high-priority brief. Pricing is added privately in the final proposal.

Topics to cover