Metamindz Logo
EngineeringFree, no signup

Technical Debt Prioritisation Tool

Paste the tech debt your team keeps talking about, say what the roadmap looks like, and get each item sorted into fix now, schedule, fix when touched or leave it.

Flat illustration of a tangle of pink and blue cables and broken blocks on a tray, sorted into four smaller trays beside it, with a glowing orange marker at the start

To prioritise technical debt, judge each item by the interest it charges rather than how bad the code looks: the time it costs every time someone works near it, the incidents and security risk it carries, and the roadmap work it blocks. Then put every item into one of four buckets: fix now, schedule it, fix it when you are in that code anyway, or leave it and say what would change your mind. Debt sitting in the path of next quarter's roadmap goes first, because that is when paying it down is cheapest. Most debt belongs in the last two buckets, and that is fine.

Not stored unless you submit the form. Leave out secrets, keys and client names.A few items, one per line (at least 60 characters)
Team size and what is next on the roadmap (at least 20 characters)
What matters most right now?

How to use the Technical Debt Prioritisation Tool

  1. List the debt you know about

    One item per line works best. Write it the way your team talks about it: "still on Node 16", "no tests on checkout", "the reporting job times out on Mondays". Up to 4,500 characters.

  2. Describe your team and what is next

    Team size, stage and the next quarter of roadmap. This is what turns a generic list into a prioritised one, because debt in the path of the roadmap moves up.

  3. Pick what matters most right now

    Shipping faster, fewer incidents, security, an upcoming due diligence or handling growth. The same item can be urgent under one goal and safe to leave under another.

  4. Answer the open questions

    The result starts with what the tool could not tell from your description. Answer those and rerun if they would change a decision.

  5. Take the plan to planning

    Each item comes with a decision, the reasoning, what it costs you and a first step someone can start this week. Download it as a PDF or Markdown and use the stakeholder paragraph when you need the time signed off.

How to prioritise technical debt

Ward Cunningham coined the debt metaphor in his 1992 OOPSLA experience report on the WyCash portfolio system, and the useful half of it is the interest. Shipping code you know is not quite right is borrowing. Every change you make on top of it afterwards pays interest. Some debt charges a fortune every week. Some charges nothing at all, because nobody ever touches that part of the system.

So the first question for any item is "what does this cost us, and how often?". A 3,000-line file that nobody has opened since 2021 is ugly and cheap. A slightly awkward module that four people change every sprint is expensive.

I score every item on three things, then make a decision rather than a ranking:

  • Impact. How much time, speed or morale it costs you right now. Slow builds, flaky tests, code everybody is scared to change, workarounds that keep coming back.
  • Risk. The likelihood and blast radius of it going wrong: an outage, a breach, lost data, a failed due diligence. An unsupported runtime with known vulnerabilities is high risk even if it costs nothing day to day.
  • Effort. A rough size: small, medium, large, or honestly unknown. Not hours. Estimating debt paydown in hours from a description is fiction, and everyone in the room knows it.
  • Then the decision. Fix now, schedule it, fix it when you touch it, or leave it. Four buckets a team can act on in the next planning meeting beat a spreadsheet of weighted scores nobody believes.

The four decisions, and when each one is right

The tool above sorts everything into these four. They are the same four I use with teams, and the discipline is in keeping the first bucket small.

  • Fix now. Real risk of harm, or it blocks the next piece of roadmap work. Security exposure, data loss, recurring incidents, the module the next big feature has to go through. If more than two or three things land here, something has gone wrong with the scoring.
  • Schedule it. Worth paying down deliberately as planned work, with an owner and a sprint, in the next month or two. Usually debt with steady interest that will not fix itself.
  • Fix when you touch it. Improve it as part of normal work whenever someone is changing that code anyway. Add the tests, rename the thing, pull out the function. This is where most healthy debt paydown actually happens, and it never needs a ticket of its own.
  • Leave it. Accept it, write down what would change the verdict (traffic doubles, a customer asks for SOC 2, you hire a second team), and stop talking about it in retros. A written-down decision to carry some debt is a perfectly good outcome.

Technical debt vs feature development: who wins?

Neither, if you do it properly. The mistake I see most is treating debt as a separate project that has to compete with features for a slot on the roadmap. It always loses that fight, because a feature has a customer attached and a refactor has an engineer attached.

The better move is to tie debt to the roadmap. If next quarter is SSO and the auth code is a mess, cleaning up auth is part of shipping SSO, and it goes in the estimate. Paying down debt in the code you are about to change is the cheapest it will ever be. Paying it down in code nobody is touching is the most expensive, for the least return.

For whatever is left over, protect a fixed slice of capacity rather than negotiating every item. Teams disagree on the right size of that slice, and it should move with how much the debt is actually costing you. What matters is that it is agreed once and defended, instead of relitigated every sprint.

And when you do need to ask a non-technical founder or board for the time, talk about delivery speed, incidents and risk. A board will not follow an argument about cyclomatic complexity. They will follow the fact that the last three features each slipped by two weeks for the same reason. The tool writes you that paragraph.

Not all technical debt is the same

Martin Fowler's technical debt quadrant, from 2009, splits debt by whether it was deliberate or inadvertent and whether it was prudent or reckless. Shipping something you know will not scale, with a plan to fix it after launch, is deliberate and prudent. A team that never learnt to write tests is inadvertent and reckless. It is a useful lens for retros, because the fix for reckless debt is usually in how the team works rather than in the code.

For prioritisation, the kind matters less than where it lives. The categories the tool uses are the ones that change the decision:

  • Dependencies and runtimes. Out-of-support versions are the one category that gets worse on its own, without anyone touching anything. They also go straight to the top of any due diligence report.
  • Testing. Missing tests on the flows that make you money turn every change into a gamble, and they are the reason "small" changes take a week.
  • Security. Secrets in the repo, hand-rolled auth, missing access controls. If personal data is involved, UK GDPR Article 32 requires appropriate technical measures to keep it secure, so this stops being optional.
  • Architecture. The expensive one. Usually "fix when touched" or "schedule", almost never a rewrite. Rewrites are how a one-quarter problem becomes a two-year problem.
  • Infrastructure and process. No staging, manual deploys, one person who knows how production works. Cheap to fix, and it pays back on every release after.
  • Not technical debt at all. A missing feature, a people problem or a product disagreement written up as tech debt. The tool will say so when it sees one.

What this tool cannot tell you

It works from what you type, not from your code. It has no idea whether the "unmaintainable billing module" is genuinely dangerous or just unfamiliar to the person describing it. Teams regularly misjudge their own debt in both directions: something everyone complains about turns out to be fine, and something nobody mentions turns out to be the real problem. A description cannot surface that. Reading the codebase can.

Effort is a size, not an estimate, and it will say "unknown" when your description does not give it enough to go on. It will never give you hours, days, story points or a cost, because any number produced from three lines of text would be made up.

It is also a language model, so read the decisions as a well-argued starting point for your planning meeting and not as a verdict. The questions it lists at the top of the result are the places it had to guess. Answer those first.

Run the tool and nothing you paste is stored. Submit the form to unlock more runs or download the plan, and what you typed comes to us with your address, which is what the tick box on that form says. Either way, leave out secrets, keys, credentials and client names. Describe the problem, not the password.

Frequently asked questions

Rate each item on impact (what it costs you now), risk (the chance and size of it going wrong) and rough effort, then weigh it against what your roadmap needs next. Put each item in one of four buckets: fix now, schedule it, fix when you touch it, or leave it. Anything in the path of next quarter's roadmap goes first. Keep the "fix now" bucket to two or three items.

A prioritised list is the easy half.

The hard half is holding the line on it for six months while the roadmap keeps shouting. Our fractional CTOs go into the codebase, check whether the debt is what the team thinks it is, and run the paydown alongside feature work so neither one stalls. If you are heading into a raise or a sale, we also run independent technical due diligence, so you see what an assessor will find before they do.

Talk to a fractional CTO

Related from Metamindz

Published