What a Pre-Engagement Technical Debt Assessment Actually Covers — and How to Read the Findings
Severity, effort, and delay costs must align to guide where remediation investment should start.

Before hiring an engineering partner, a pre-engagement technical debt assessment should produce a written, severity-ranked register of findings across architecture, code, tests, security, dependencies, infrastructure, and documentation, with remediation estimates attached. This article explains how to read that report. Its central point is that severity, repair effort, and the cost of delay must be read together before findings can guide scope and investment.
What a pre-engagement technical debt assessment is and why it happens before work starts
An incoming engineering partner uses this assessment to establish what it will inherit before committing to scope, a timeline, or a price. A founder or team leader commissions it at intake, before money changes hands or delivery begins. Timing is part of its purpose.
The deliverable is a written report. It helps establish how much capacity existing problems will consume before new development can proceed. Without that baseline, there is no clear starting point against which to judge later delivery claims. The following sections walk through the report’s domains in order, then explain how its ratings and estimates support decisions.
What should a technical assessment cover before signing with a software development partner?
One common grouping separates technical debt into six domains, namely code, architecture, tests, documentation, infrastructure, and dependencies. Security, delivery performance, knowledge gaps, and AI governance cover issues that span those categories or go beyond them. Where these findings go may vary, but the report should keep them distinct.
The separation reflects different kinds of repair. Code and test debt may respond to incremental refactoring, while architecture changes or infrastructure overhauls may require dedicated projects. Merging everything into one undifferentiated list hides those differences in skills, effort, and sequencing. Each section should provide severity, estimated remediation effort in developer-hours or weeks, and a prioritization signal. Firms often use three- or four-tier severity scales, so knowing how the assessor assigns a rating helps more than knowing the labels.
What the architecture and code quality sections are actually measuring
Code quality findings show how hard it is to change code safely, which goes beyond how tidy it looks. Cyclomatic complexity counts the independent paths through a unit of code, which helps explain why it is hard to test and prone to bugs. Duplication means the same change has to be made in several places. Code smells, including long methods, god classes, and deeply nested conditionals, identify structural patterns associated with maintenance pain. SonarQube can express duplication as a percentage, giving the discussion a concrete starting point.
With tight coupling, a change to one module requires a change to another, while missing modularity boundaries can leave business logic mixed with presentation concerns or data access spread throughout an application. Scaling limitations concern real user load. A critical architecture finding can point to costly changes ahead even when an outage is not about to happen. The useful follow-up question is how these structural findings relate to the codebase’s change failure rate.
What delivery and process metrics reveal that static code analysis cannot
Change failure rate is the percentage of deployments that cause an incident or require a hotfix. It makes fragility visible in production. Lead time for changes tracks how long changes take to move through delivery, while unplanned-work share shows how much of the team’s time goes into bugs and firefighting. These metrics show what the problems found elsewhere cost the team.
IBM’s 2026 analysis asks, “how much time do software developers spend firefighting as opposed to shipping?” The report should trace that symptom back to its source, connecting delivery instability with architecture, code, or test findings. Team size does not remove the need for this evidence, because fragile deployments disrupt small teams too. Taking these measures at intake also helps separate problems the team inherits from choices made after the engagement starts.
What the security and dependency sections are measuring, and why their severity ratings work differently
Security findings concern exposure. Gaps in input validation, flaws in authentication and authorization, and secrets committed to version control can leave the system vulnerable right away. These are not merely future maintenance costs. The section also examines whether controls fit the system’s compliance obligations, including HIPAA, SOC 2, or GDPR where relevant. For organizations handling beneficiary data, the consequences can be legal and reputational as well as technical.
Dependency analysis cross-references libraries against known vulnerabilities and identifies frameworks whose maintainers no longer provide patches. License conflicts can restrict the product’s intended use or distribution, while changes in upstream ownership or pricing can introduce platform risk. Here, critical means high exploitability or exposure. A cheap fix can therefore deserve immediate attention. Readers should ask for an estimated time-to-exploit window and a remediation timeline for high or critical security findings.
What the infrastructure and AI governance sections reveal about operational readiness
Infrastructure findings also show whether the product can stay live under real conditions. Manual deployment steps leave room for human error and can leave engineers waiting to release. Outdated build systems, pipelines, or hosting configurations can conflict with the rest of the stack, while inconsistent development, staging, and production environments hide problems until later. Observability gaps make failures harder to diagnose. Missing logs, monitoring, or alerts therefore concern incident response.
IBM’s analysis identifies AI-specific debt in brittle prompts, poor retrieval data, and model drift, with failures that are “subtle and lead to unanticipated behaviors downstream”. Model updates can also break orchestration logic, retrieval pipelines, or agent loops built around an earlier version. For teams using AI heavily, the report should examine how AI-generated code is reviewed, prompts are versioned, and model dependencies are tracked. Infrastructure and AI findings deserve attention as reliability risks before growth.
What the knowledge and documentation sections surface that no automated tool can find
A module with a single knowledge owner can be a single point of failure even when its code analysis looks acceptable. If that person is unavailable, an incident may have no clear resolution path. This is more than missing documentation. An incoming partner needs the reasoning behind architecture decisions, instructions for running and deploying the system, and the contracts governing APIs and integrations. Without that context, onboarding slows and changes become riskier.
CodeScene can identify “knowledge islands” in commit history, giving assessors a behavioral signal about concentrated knowledge. That signal is useful but incomplete. A tool cannot establish all the context a person understands or all the reasons a design took its present form. The gap can be especially sharp during a handover from a solo freelancer or an AI-generated MVP, where context has not been written down. IBM’s analysis links developer departures to lost institutional knowledge, expanded onboarding time, duplicated work, and quick fixes that conceal larger problems.
How severity rankings are assigned across sections, and why the same label means different things in different domains
Across the report, severity rests on three main axes, which are exploitability or exposure, remediation cost, and operational impact. Security and dependency findings lean on the first, architecture and code findings on the second, and infrastructure findings on the third. Labels alone conceal that distinction. A critical security repair that takes two hours can call for action before a high architecture repair that takes six weeks. Yet an architecture problem that makes every feature cost three times as much can cost more over time.
The practical reading sequence is to check the domain, identify the rating’s axis, and compare the remediation estimate with the cost of delay. Where prioritization is unclear, the Debt Impact Score framework multiplies estimated hours lost per week by the number of engineers or systems affected. This makes recurring costs easier to discuss. High severity paired with low repair effort will usually favor prompt action, while larger work needs a clearer account of its payoff. If that reasoning is absent, the question for the assessor is what criteria determined the rating and what leaving the finding unaddressed will cost.
How to read remediation estimates and what they are actually built on
Remediation estimates are modeled projections. The SQALE model, implemented in SonarQube, converts code findings into repair-time estimates using standard benchmarks. Those benchmarks are averages. Architecture and infrastructure estimates rely more heavily on assessor judgment, while both kinds depend on team familiarity, available tooling, and whether repairs can happen incrementally. An aggregate repair-time figure is useful for communication, but it cannot rank exposure or operational impact on its own.
Discovery, testing, validation, and coordination may sit outside the quoted code-change effort, even though they consume project time. Testing complex code can take as much time as the repair itself or more. To stress-test a significant estimate, the reader should ask for code-change time and full-cycle time separately, including deployment, and ask what team familiarity the estimate assumes.
That distinction makes the estimate usable for sequencing. A small repair blocking other work may precede a higher-rated finding outside the critical path, provided active exposure does not demand a different response. Payback offers another useful lens. Delivery metrics show how much the problems cost now, while the full-cycle estimate shows how much work it will take to bring that cost down. Comparing the recurring cost with the repair effort helps show which work to do now, put off, or leave alone.
What a finding about platform dependencies — like a core tool whose ownership or pricing has shifted — actually means for planning
An ownership change can alter a tool’s risk profile, growing per-seat costs can strain a budget, and a license change can limit what an organization may build or redistribute. Keeping data with a vendor can also make it costly to leave. For nonprofits, these findings often concern databases, CRMs, or data-collection tools around which core workflows have developed.
Planning should establish what migration would require and how much time an external change would leave. Remediation is often a migration plan with a trigger condition. That plan should consider a self-hosted or more portable alternative that fits the organization’s budget and technical capacity. The plan should assess data portability, whether self-hosting is feasible, and whether non-technical staff can keep using the tool without a developer there. NocoDB is one self-hosted alternative with tens of thousands of GitHub stars, a signal of community adoption.
How to use the report as a decision-making tool rather than a to-do list
The report should first identify what must happen before new development begins, including active security exposures, operational risks, and blockers to other remediation. Those findings belong in the engagement scope from day one. Next comes work that can proceed with new development, especially structural repairs that prevent each feature from becoming more expensive. Lower-impact findings without active exposure can be deferred into a debt registry with a review trigger.
A known trade-off does not automatically belong in the deferred group. Intentional debt is documented, bounded, and tied to a planned remediation event, while structural debt accumulates without those controls. The report should make that distinction visible. An engagement partner should explain how severity is rated, link repair estimates to the proposed scope, and use the delivery metrics taken at intake to show progress over time. In that form, the assessment becomes a shared basis for deciding what the partnership can deliver, rather than a catalog of everything imperfect in the codebase.


