Skip to content
Calcrivo

Technical Debt Risk Calculator

Score the security risk carried by end-of-life systems, unsupported versions, long-unpatched hosts, legacy code and thin test coverage.

Inputs

systems
systems
components
systems
%
%

Technical Debt Risk Score

18.9/ 100

Risk Band

Informational

End-of-Support Share

6.9%

Long-Unpatched Share

15.0%

Ability to Patch Safely

D — Weak

Biggest Driver

Thin test coverage — the team cannot patch quickly without breaking things

Step by step

  1. Values used

    Systems in scope = 320 systems; Systems past end of support = 22 systems; Components on an unsupported version = 14 components; Systems with findings open over 90 days = 48 systems; Codebase with no active maintainer = 35 %; Automated test coverage = 52 %

  2. Technical Debt Risk

    Risk = 0.30 × end-of-support share + 0.25 × long-unpatched share + 0.15 × unsupported-component share + 0.15 × unmaintained-code share + 0.15 × (100 − test coverage), all as percentages.

  3. Patchability

    Ability to patch safely = 0.6 × test coverage + 0.4 × maintained-code share, graded A–F. It predicts how fast the team can ship a patch without causing an incident.

  4. Technical Debt Risk Score

    = 18.9 / 100

  5. Risk Band

    = Informational

  6. End-of-Support Share

    = 6.9

  7. Long-Unpatched Share

    = 15.0

  8. Ability to Patch Safely

    = D — Weak

  9. Biggest Driver

    = Thin test coverage — the team cannot patch quickly without breaking things

How it works

The two heaviest terms are the ones that cannot be fixed by patching: end-of-support systems have no patch to apply, and long-unpatched systems have one that nobody dares deploy. Test coverage appears in the model inverted because the real reason patches sit undeployed is usually fear of regression, not ignorance of the vulnerability. Technical debt is the reason a patching programme plateaus — beyond a certain share of end-of-life systems, no amount of vulnerability management improves the numbers, and the answer becomes a replacement budget.

Formulas

Technical Debt Risk

Risk = 0.30 × end-of-support share + 0.25 × long-unpatched share + 0.15 × unsupported-component share + 0.15 × unmaintained-code share + 0.15 × (100 − test coverage), all as percentages.

end-of-support share
Systems receiving no vendor patches
long-unpatched share
Systems carrying findings older than 90 days
unmaintained code
Code with no active owner
100 − test coverage
Change risk that makes teams avoid patching

Patchability

Ability to patch safely = 0.6 × test coverage + 0.4 × maintained-code share, graded A–F. It predicts how fast the team can ship a patch without causing an incident.

Frequently Asked Questions

How is Technical Debt Risk calculated?

Risk = 0.30 × end-of-support share + 0.25 × long-unpatched share + 0.15 × unsupported-component share + 0.15 × unmaintained-code share + 0.15 × (100 − test coverage), all as percentages. The two heaviest terms are the ones that cannot be fixed by patching: end-of-support systems have no patch to apply, and long-unpatched systems have one that nobody dares deploy. Test coverage appears in the model inverted because the real reason patches sit undeployed is usually fear of regression, not ignorance of the vulnerability.

Why does Technical Debt Risk matter?

Technical debt is the reason a patching programme plateaus — beyond a certain share of end-of-life systems, no amount of vulnerability management improves the numbers, and the answer becomes a replacement budget.

What values do I need to enter?

This calculator takes 6 inputs: Systems in scope, Systems past end of support, Components on an unsupported version, Systems with findings open over 90 days, Codebase with no active maintainer, Automated test coverage. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.

Why is end-of-life weighted highest?

Because it caps what vulnerability management can achieve. A system with no vendor support accumulates unfixable findings indefinitely, so its risk grows monotonically until it is replaced, isolated or accepted in writing.

How does test coverage belong in a security metric?

Because it determines patch velocity. Teams with good automated tests deploy a security patch in hours; teams without them wait for a manual regression cycle, which is how a seven-day SLA turns into six weeks.

You might also need