Someone sketches a design on a whiteboard as a colleague watches and two others review papers nearby
Architecture debt lives between components, where scanners rarely look.

Architecture debt is technical debt in the structure of a system: boundaries drawn in the wrong place, components that can't change independently, and data that several systems share without anyone owning it. It slows every change that crosses those lines. A code scanner's technical debt figure is built from code smells inside files, and architecture debt mostly sits between them.

At AICO we call the unrecorded part hidden architectural debt, and finding it is the core of our review. This post defines architecture debt, separates it from code-level debt, gives eight examples, and shows how to find and record it. For everyday debt of every kind, see our technical debt examples.

Key takeaways
  • Architecture debt is technical debt in a system's structure: its boundaries, dependencies and data ownership, not the code inside any one file.
  • A scanner's technical debt figure is built from code smells. Architecture debt sits between components, so it rarely shows up there.
  • The business sees symptoms: small changes that need three teams, releases that must ship together, systems that disagree.
  • Find it in dependency maps, change history and incidents, and record it in a register with an owner so it can be weighed against features.
01

What is architecture debt?

Architecture debt is the extra cost every future change pays because of how a system is divided and connected. The code inside each part can be clean and well tested, and the system can still be slow to change, because the parts are cut along the wrong lines or tied together where they should be separate.

Our definition of hidden architectural debt is architecture debt nobody has recorded. It isn't in the backlog, the diagram doesn't show it, and the team has learned to work around it, so the people closest to the system are often the last to name it.

02

Technical debt vs architecture debt

Technical debt is the broad term: anything that makes the next change slower or riskier than it should be. Architecture debt is the part that lives in structure rather than in lines of code.

The difference shows in how each is measured. SonarQube's metric definitions describe its technical debt figure as "A measure of effort to fix all code smells." How to measure technical debt explains how it's calculated. By design, it counts problems inside the code.

SonarQube Server 2026.5 also has an architecture feature that compares code with an intended architecture, for "C#, Java, JavaScript, Python, and TypeScript." Its documentation names the problem "architecture erosion, also called structural technical debt," and adds: "Without action from tech leads, no SonarQube issues are raised." A tool can check code against a design someone has defined. Deciding what that design should be, and finding debt where the tool doesn't read, such as stored procedures, batch scripts and a database three applications share, is still work for people.

03

What is hidden technical debt?

Hidden technical debt is debt that builds up where nobody looks, usually because it sits at the level of the whole system. The phrase is the title of a paper by D. Sculley and nine co-authors, Hidden Technical Debt in Machine Learning Systems, in the NeurIPS proceedings for 2015. Two of its lines apply well beyond machine learning: "Hidden debt is dangerous because it compounds silently," and this debt "may be difficult to detect because it exists at the system level rather than the code level."

Hidden technical debt in machine learning systems

The paper argues that machine learning systems "have all of the maintenance problems of traditional code plus an additional set of ML-specific issues." Its examples include glue code, pipeline jungles in data preparation, and undeclared consumers of a model's output, which "are referred to as visibility debt" in classical software engineering. Its Figure 1 caption makes the structural point: "Only a small fraction of real-world ML systems is composed of the ML code." Older systems work the same way: the jobs, scripts and shared tables around the reviewed code are where the debt collects.

04

Architecture debt examples

Each example starts with what the business notices.

Symptom the business seesStructural cause
A small change needs work from three teamsWrong boundaries: one capability, such as pricing, split across several components
Every schema change becomes an investigationA shared database used as the integration layer, with several applications writing the same tables
A change in one module breaks another that looked unrelatedCyclic dependencies: modules that depend on each other, directly or through a chain
Every project queues for the same componentA god module holding most of the business logic and many unrelated jobs
Screens are slow, and one system's outage spreads to othersChatty integrations: many small synchronous calls between systems for each user action
Two systems give different answers to the same questionBusiness rules duplicated across systems, each copy changed at a different time
Nothing can ship aloneDeployment coupling: components built, versioned or released as one unit
Testing anything means standing up everythingMissing seams: no interface where a part could be tested, replaced or wrapped alone
05

How do you find architecture debt?

Start from evidence the system already keeps, not from the diagram.

  • Dependency maps. Draw what calls what, and which applications write each important table, from the code and database permissions rather than the wiki. Cycles and tables with many writers stand out.
  • Change coupling in version control. Files that always change together, across components meant to be separate, mark a boundary that isn't real. git log --name-only lists the files in each commit; count the pairs that keep appearing together.
  • Incident history. For each recent outage or rollback, ask which structural fact made it possible.
  • The approvals test. Take a routine change, such as adding a field to an order, and count how many teams must agree or release before it's live. More than one points to a boundary in the wrong place.

Our software architecture review checklist covers the wider review these steps fit into.

06

An architecture debt register template

Architecture debt gets paid down once someone can weigh it against features. A register makes that possible: one row per item, written so a budget holder can read it. The rows below are illustrative.

ItemWhereSymptomBusiness impactFix optionsOwner
Orders table written by three applicationsOrder databaseEvery schema change needs three teamsOrdering changes wait for the slowest teamRoute writes through one order serviceHead of engineering
Discount rule in two systemsPricing service and invoicing batch jobQuotes and invoices disagreeFinance reconciles by hand at month-endMake pricing the owner; invoicing calls itPricing product owner
Customer and billing modules depend on each otherCore applicationA change in either breaks the otherEvery billing change needs wide retestingExtract the shared piece, or break the cycle with an interfaceLead developer
Five components release togetherBuild and release pipelineNothing ships aloneOne delayed fix holds up every changeSeparate the builds and version each interfacePlatform lead

Keep the register beside the scanner's findings and review both each quarter. How to reduce technical debt covers paying items down alongside feature work.

07

Finding hidden architectural debt in 30 days

Your team can run these steps. What's hard from the inside is seeing the debt everyone has learned to work around. That's the job of the 30-day assessment. It's fixed in scope, at a price agreed before we start. Over 30 days we read the codebase and the architecture around it, map how the system fits together, including the tables, jobs and integrations outside the main repository, find the hidden architectural debt, and flag the security and compliance gaps.

The report says in plain language what is broken and what it would take to fix it, item by item, ready for an architecture debt register. Your own team can pay it down, or we can do the work as a separate project with its own scope and price. The report stands on its own.

Ask us whether it's worth assessing before the next small change turns into a project. If a narrower check would answer your question, we'll say so.