Skip to main content

What are you looking for?

Explore our services and discover how we can help you achieve your goals

Technical debt assessment: rank debt by what it costs the business

A technical debt assessment lists the shortcuts and ageing parts of a system, estimates the extra effort or risk each one adds to ordinary work, and ranks them by business consequence. The output is a short, ordered remediation list with owners, not a code-quality score, so debt can compete with features for the same budget.

Submit a project Plan a modernization

Reviewed by David Nguyen (CEO) · Updated 28 Sep 2026 · 10 min read

star

OutsourcingVN is operated by Netbase JSC, which sells assessment and modernization work, so we have an interest in what you decide. The method below works whoever performs it. It is written for CTOs, engineering leads, product owners and the finance owner who has to weigh remediation against new features.

What this guide covers

What counts as technical debt, and what does not?

Debt is any part of a system that makes the next change slower, riskier or more expensive than it would be in a cleaner design. Ward Cunningham's metaphor, as Martin Fowler describes it, separates the principal (the work needed to remove the cruft) from the interest (the extra effort every future change pays while it stays). That split is what makes debt measurable.

Four kinds turn up in almost every assessment: code debt (duplication, tangled modules, missing tests), platform debt (an unsupported runtime, framework or extension), architecture debt (coupling through a shared database, no seams between capabilities) and operational debt (manual releases, no monitoring, backups nobody has restored). A missing feature is not debt, and neither is an old library that is supported, stable and rarely touched.

Fowler's quadrant adds a useful question: was the debt deliberate or inadvertent, prudent or reckless? Deliberate, prudent debt taken to hit a launch date usually has a known repayment path. Inadvertent debt tends to hide in the modules changed most often, which is why it costs the most.

How do you turn debt into a business decision?

Engineers describe debt in code terms; budget holders need it in effort, risk and delay. Translate each item into three numbers the business already understands.

  • Interest in effort. How many extra person-days does this item add to a typical change, multiplied by how often that area changes in a quarter?
  • Exposure. What happens if it fails: a security incident, a failed release, an outage in a revenue path, a platform that stops receiving patches?
  • Principal. A range for removing or containing it, with the unknowns listed, never a single confident figure.

Interest multiplied by change frequency is the number that ranks items. A module nobody touches can be ugly and cost nothing; a small, heavily edited module with no tests can quietly consume a sprint every quarter.

Which debt should be fixed first?

Debt signal Business consequence Usual first move Who decides
Runtime, framework or extension past vendor support Security patches stop; hosting options shrink Plan an upgrade or migration with a dated deadline CTO with the security owner
High-change module with no tests Every release carries regression risk; estimates slip Add characterization tests, then refactor inside the module Engineering lead
Shared database used as the integration layer Changes ripple into reports and partner feeds Put a seam in front of the most-changed capability Architect with product owner
Manual, undocumented release process Releases are rare and risky; fixes wait Script the release path and rehearse a rollback Engineering lead
Known compromise or unexplained files on a server Data exposure and repeat intrusion Investigate, clean and harden before any feature work Security owner
Ugly but stable code that rarely changes Little or none Record it and leave it alone Nobody, for now

The last row matters. An assessment that recommends fixing everything has not ranked anything.

How do you run the assessment?

  1. Pull change history

    Use version control to find the files and modules changed most often in the past year, and the ones tied to incidents or reverted releases.

  2. Interview the people who change it

    Ask where estimates go wrong and which areas only one person dares to touch. Knowledge held by a single person is a debt item in its own right.

  3. Check support status

    List the runtime, framework, database and every third-party extension with its supported-until date and the patch level actually installed.

  4. Read the release and recovery path

    Record how a change reaches production, whether rollback is possible, and when a backup was last restored.

  5. Score each item

    Record interest, change frequency, exposure and a principal range in one register, with the evidence for each.

  6. Choose the route per item

    Fix inside normal work, fund a bounded remediation, fold it into a modernization, or accept it explicitly with a review date.

The routes in step 6 connect to the rest of the modernization cluster: assessing legacy system risk decides whether the whole system is the constraint, replace or refactor compares the structural options, and incremental modernization covers moving capabilities out one at a time.

A worked scenario: a store two major versions behind

A retailer runs an online store on a commerce platform release that no longer receives security patches. Twelve third-party extensions are installed; four were customised by a previous agency. The team says every checkout change takes twice as long as planned. The scenario is illustrative and describes no client.

  • Unsupported platform release

    Interest
    Patches applied by hand, when at all
    Exposure
    High: no vendor security fixes
    Principal
    Largest item; needs a migration plan
    Route
    Migration with a dated decision
  • Four customised extensions

    Interest
    Checkout changes need a specialist
    Exposure
    Medium: customisation blocks upgrades
    Principal
    Rework or replace each extension
    Route
    Folded into the migration
  • No automated tests on checkout

    Interest
    Regression checks by hand before each release
    Exposure
    Medium: revenue path
    Principal
    Characterization tests on key flows
    Route
    Fix first, before migration
  • Manual deployment by one engineer

    Interest
    Releases wait for one person
    Exposure
    Medium: single point of failure
    Principal
    Scripted pipeline and runbook
    Route
    Bounded remediation
  • Old admin theme

    Interest
    None; rarely edited
    Exposure
    Low
    Principal
    Cosmetic
    Route
    Accept and record

The ranking puts checkout tests first, because they make the migration safe to verify, and the admin theme last. The migration becomes a decision with a date instead of an item that sits on the backlog for another year.

What has Netbase delivered that bears on debt?

Two records on this site deal directly with platform and security debt on commerce systems.

  • A platform migration with extension rework. For Netztech, Netbase delivered a Magento 1 to Magento 2 Commerce migration in 35 working days, including migrating 11 extensions with installation, configuration, customization and data transfer. The record publishes scope and duration only; no metric is claimed.
  • Recovery of a compromised store. For an existing client store, Netbase scoped a three-phase recovery of a compromised Magento site: investigation and cause analysis, cleaning and system recovery, then file restore, recoding and hardening with security patches applied, typically 6 to 13 days in total depending on the damage. Recovery is never guaranteed, and the range is typical, not a commitment.

Netbase's registered upper bound for reuse is that reusing Netbase productized modules can cut development time by up to 60%. It applies to module reuse only; it is not a typical saving and says nothing about the debt in your system. Security practices on this work include secure code review and version control, role-based access control, MFA for admin dashboards, contributors under NDA, and NDAs and DPAs on request.

Plan the next step for your project

Which questions should you ask a supplier?

  • How will you find the debt that costs most?

    Change history, incident links and interviews, not a static-analysis report alone

  • How do you express each item to our budget holder?

    Interest, change frequency, exposure and a principal range with unknowns

  • What will you recommend leaving alone?

    Named items with the reason and a review date

  • What evidence proves a fix worked?

    Before-and-after change effort, fewer reverted releases, tests on the changed area

  • How do you avoid a remediation turning into a rewrite?

    Bounded scope per item and a stop point agreed in writing

  • Who owns the register after you leave?

    A named engineering owner and a review cadence

What failure modes should you watch for?

  • Score without consequence

    Early signal
    A quality percentage with no effort or risk attached
    Correction
    Restate each item as interest, exposure and principal
  • Everything is urgent

    Early signal
    No item is marked "accept"
    Correction
    Force a ranking; fund the top three only
  • Remediation absorbs the roadmap

    Early signal
    Features stop with no end date
    Correction
    Protect a fixed share of capacity and review it quarterly
  • Debt moves instead of shrinking

    Early signal
    New shortcuts appear in migrated code
    Correction
    Add the changed area to the test suite and code review
  • Register goes stale

    Early signal
    No update since the assessment
    Correction
    Review it at each release planning session

Common questions

A focused assessment of one system usually takes days to a few weeks, depending on how much history, access and documentation exist. It should end with a ranked register, not an open-ended audit.

Tools find code smells and outdated dependencies, but they cannot tell which areas change often or which failures would hurt the business. Use tool output as one input next to change history and interviews.

Rarely. Paying interest down inside the areas already being changed is usually cheaper. Reserve dedicated remediation for items with high exposure, such as unsupported platforms or a known compromise.

When the top items share one cause, such as an unsupported platform or a data model every change fights against. The legacy system modernization guide covers that decision.

Start with access, the release path and support status before scoring code. The software takeover and maintenance guide covers what to secure first when a system changes hands.

How this guide is sourced

Statements about Netbase map to approved claims backed by attested company facts listed under Sources, in their registered wording. The principal and interest framing and the deliberate-or-inadvertent quadrant come from Martin Fowler's published articles, dated below. The retail scenario is illustrative. The Netztech migration and the compromised-store recovery are the only delivery records cited here; Netbase publishes no measured debt reduction, velocity change or cost outcome for any client, and nothing on this page should be read as one. Our methodology explains how claims are reviewed.

Bring your change history and support dates

A first review goes furthest with a list of the areas that slow your team down, your platform and extension versions, and a view of recent incidents. Submit a project with them, or ask for a bounded technical audit sprint when you want the ranked register before any build. When the register points to structural change, legacy application modernization is the delivery route, and the other guides cover adjacent decisions. OutsourcingVN is operated by Netbase JSC and is Netbase's own outsourcing-services platform.

Legacy application modernization, one bounded capability at a time Legacy application modernization, one bounded capability at a time

Legacy Application Modernization is for a team whose roadmap is blocked by a system that still runs the business. It starts by assessing the code, data and dependencies, then migrates one bounded capability with evidence that the new path behaves like the old one, and a way back. No date is promised before the code is read.

Learn More
line
Technical audit sprint: a bounded evidence pack, not an opinion Technical audit sprint: a bounded evidence pack, not an opinion

A technical audit sprint is a timeboxed project with one named mission and an agreed effort ceiling. It answers a specific question: whether a codebase can support growth, why a release keeps failing, or how exposed an application is. The output is an evidence pack and a decision.

Learn More
line

Tell us what you want to build or automate.

Submit a project