Chapter 2 / Essay
Chapter 2 № 02 · 2026

The unit of maintenance moves
from code to design.

Cheaper coding is the tip of the iceberg — the unit of maintenance moves from code to design and spec

Faster coding is the tip of the iceberg. The bigger thing happening below the waterline is a structural shift in the maintenance phase itself.

Chapter 1 established the fact that top-tier coding ability is reachable for $200 a month on Claude Max. The first consequence to derive from that fact is not the widely-cited "coding gets faster" — it is that the structure of maintenance is rearranged. This chapter looks at that rearrangement.

In a software system's lifetime, coding is the first few months. The remaining seven to fifteen years are maintenance. For enterprise systems, 60–80% of TCO lands in the maintenance phase — a fact known for half a century. What this chapter takes up is what changes when AI enters that picture.

Cheaper coding is the tip of the iceberg

The usual headline about AI is "code gets written faster." That is true, but it is the tip. The submerged body looks like this:

The dominant cost of software development is not writing, but after writing. This has been the well-known reality since Brooks' The Mythical Man-Month, fifty years ago. Anyone who reads the AI shift as "writing got faster" is talking about the non-dominant cost.

"Coding got faster" is the entry-point story for AI. The exit-point story is that the structure of the maintenance phase itself is changing.

The unit of maintenance moves from code to design and spec

This is the central claim of the chapter.

In the old structure, the unit of maintenance was code. A bug appears → read the code → change the code → update tests for the code → update docs about the code. Every step revolves around code. Design and spec, once written, are left to drift between code and reality.

When AI enters, the loop changes. AI takes over the reading and writing of code. What humans touch is now design and spec:

The main battleground of maintenance moves from code to design and spec. That is the structural shift.

flowchart LR subgraph Old["Old maintenance structure"] direction TB OD["Design / spec
(left to drift)"] OC["Code
(main battleground)"] OT["Tests & docs
(always behind)"] OD -.-> OC ==> OT end subgraph New["AI-native maintenance structure"] direction TB ND["Design / spec
(main battleground, human-led)"] NC["Code
(AI regenerates)"] NT["Tests & docs
(AI synchronizes from design)"] ND ==> NC ==> NT end classDef good fill:#e8f5e9,stroke:#7a9a6d,color:#3a4d34 classDef bad fill:#fef3e7,stroke:#c89559,color:#5a3f1a class New good class Old bad

The unit of maintenance moves from code to design. When that happens, the explicitness of design and spec is what sets a system's life expectancy.

The cost of reading legacy code evaporates

The single largest cost inside maintenance was reading existing code. To absorb a 200,000-line business system, including the intentions of a predecessor who has left — that is a several-week task for a new joiner, and even then the recovery is never 100%.

Hand it to AI and the work finishes in seconds. Concretely:

This is not "faster." The largest cost in maintenance has been removed.

Try it in practice: on a roughly 10,000-line legacy Java codebase, the task "trace the data flow for a given feature" takes a new joiner half a day; Claude Code returns equivalent output in 30 seconds. The gap is not one or two orders of magnitude — it is three-plus.

In the old world, "we can't touch this" was what kept aging systems running far past their design life: the cost of rewriting was dominated by the cost of reading. Once that disappears, "untouchable" becomes "touchable." A business system that has been running for 20 years can take a change from a new joiner the day they arrive.

Tests and documentation become synchronized derivatives

In the old world, tests and docs were "once written, never followed through":

When AI enters, tests and docs become derivatives that the system regenerates from the design automatically:

This removes the chronic maintenance disease of "no time to write tests" and "the docs are out of date." This holds only when AI is built into the maintenance pipeline; if you keep the old workflow and merely ask AI to help, the same symptoms come back. Pipeline design is treated in Chapter 4 as part of the builder's role.

All of this collapses the moment design leadership leaves the human

The structural shift above is conditional. The condition is one: a human stays in charge of design.

Drop that condition and the structure collapses in the opposite direction. What happens if you ask AI to "add a feature" and accept the output as it comes, repeatedly:

This failure mode is called "vibe coding." It is the biggest trap of AI-native development — the negative side of cheaper coding shows up here in full. The faster AI writes, the faster the debt of a design-less project piles up.

The responsibility of the side holding the design grows, not shrinks. The volume of writing drops; the density of decisions rises. What to build, how to split it, which invariants must hold — humans must decide these explicitly and hand them to AI. That is the shape of the new maintenance work.

A human in charge of design, plus AI = maintenance cost collapses. A human not in charge of design, plus AI = unmaintainable code is mass-produced.

The dividing line is not the ability to write code, but the ability to decide the design. And "deciding the design" — partitioning structure, seeing the invariants, keeping the whole consistent — is less software engineering than it is a liberal-arts–shaped craft. Chapters 3 and 4 elaborate this as the difference between the "coder" and the "builder" roles.

Where the next chapter goes

Once the capability threshold for coding is removed and the main battleground of maintenance moves to design and spec, the next unavoidable question is: what happens to the role whose center is "writing code"?

The next chapter takes up the coder as a role.


Related articles