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?
- How do you turn debt into a business decision?
- Which debt should be fixed first?
- How do you run the assessment?
- A worked scenario: a store two major versions behind
- What has Netbase delivered that bears on debt?
- Which questions should you ask a supplier?
- What failure modes should you watch for?
- Common questions
- How this guide is sourced
- Bring your change history and support dates
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?
-
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.
-
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.
-
Check support status
List the runtime, framework, database and every third-party extension with its supported-until date and the patch level actually installed.
-
Read the release and recovery path
Record how a change reaches production, whether rollback is possible, and when a backup was last restored.
-
Score each item
Record interest, change frequency, exposure and a principal range in one register, with the evidence for each.
-
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.
Related services and solutions
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
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