AI Doesn't Replace Architecture. It Punishes Bad Architecture Faster.
Share this post

Thesis: Artificial intelligence can generate millions of lines of code. It cannot generate decades of good architectural decisions. When code generation becomes cheap, architecture stops being a technical artifact and becomes an economic one — the constraint that determines whether all that cheap code compounds into value or into liability.


I. TWO COMPANIES

A field narrative, reconstructed from eighteen months of telemetry

Both companies signed their enterprise AI coding agreements in the same fiscal quarter. Both were roughly the same size — 240 and 265 engineers. Both had a board deck with the same slide in it, more or less, promising a step change in developer productivity. Both hired the same consultancy to run the rollout.

Eighteen months later, one of them ships four times as much code as the other.

It is not the one delivering better products.


MERIDIAN RETAIL SYSTEMS sells point-of-sale and inventory software to mid-market grocery chains. Founded 2011. Monolithic Rails core with a decade of accreted extensions, three "strangler" services that never finished strangling anything, and one shared PostgreSQL instance that eleven teams write to directly. Meridian's CTO, on the day the AI tooling went live, sent an all-hands email containing the phrase "we are now a 1,000-engineer company with a 250-engineer payroll."

He believed it. So did his board. For about seven months, the numbers agreed with him.

KESTREL LOGISTICS builds freight orchestration software — route optimization, carrier settlement, customs documentation. Founded 2014. Also monolithic at the start, but in 2022 Kestrel had done something that looked, at the time, like a strategic error: they spent nine months and roughly $4.1M of engineering capacity on what their VP Engineering called "the boring work." Domain boundaries. A settlement service that owned settlement data and nothing else owned it. A published internal API contract with versioning and deprecation windows. A platform team of six whose entire mandate was paved roads: one way to emit an event, one way to run a migration, one way to deploy.

When the AI rollout began, Kestrel's board asked why the productivity gains were so modest compared to what Meridian was reporting at conferences.


Month 3

Meridian's pull request volume is up 210%. Their internal dashboard — the one on the wall by the kitchen — shows lines of code merged per engineer per week climbing almost vertically. The CTO screenshots it for LinkedIn. It performs well.

Kestrel's PR volume is up 90%. Their platform team has spent most of the quarter on something unglamorous: teaching the AI tooling their conventions. Repository-level instruction files. A generated context pack describing each bounded context, its owner, its invariants, and what it is forbidden to import. Kestrel's staff engineers call it "the map." Nobody outside engineering knows it exists.

Month 7

Meridian ships their AI-assisted quarter. Feature throughput is genuinely, measurably up — 60% more features delivered than the prior year's comparable quarter. But two numbers have started moving in the wrong direction and nobody has connected them yet.

The first: median PR review time has gone from 4 hours to 19 hours. Not because reviewers got slower. Because the PRs got bigger, and — this is the part that matters — because reviewers can no longer tell at a glance whether a change is safe. The code looks fine. It is idiomatic, commented, tested. The reviewer's problem is not the code. It is that they cannot determine what else in the system depends on the thing being changed, and the AI, which wrote it, did not know either.

The second: change failure rate has gone from 8% to 14%.

Month 11

Meridian has its first architectural incident that nobody can explain. A pricing change in the promotions module produces incorrect tax calculations in three states. Root cause analysis takes eleven days. The finding: over the preceding nine months, four different teams had independently asked AI tooling to "add tax handling," and the AI — with no boundary telling it otherwise — had written four different tax calculators, in four different files, three of which read from the same shared table and one of which cached results in Redis with a TTL nobody set intentionally.

None of the four engineers did anything wrong. Each PR was reviewed and approved. Each was correct in isolation.

This is the moment the phrase starts circulating inside Meridian: "the code is fine, the system isn't."

Kestrel, in month 11, ships a carrier settlement rewrite. The AI generates the overwhelming majority of the implementation. It takes five weeks. It would have taken four months in 2021. The reason it works is not that Kestrel's AI is better. It is that the settlement service has one owner, one database, a published contract, and 400 lines of executable invariants in a file the AI was pointed at before it wrote a thing. When the model proposed a shortcut that would have read from the routing service's tables directly, the architecture test suite failed the build in 90 seconds.

The model wasn't smarter. The environment was.

Month 18

Here are the numbers both CTOs presented to their boards.

  Meridian Kestrel
Lines of code merged, YoY +340% +115%
Features shipped, YoY +72% +94%
Median lead time, commit → prod 11 days (was 6) 1.4 days (was 5)
Change failure rate 19% (was 8%) 4% (was 9%)
Time to onboard an engineer to productivity 14 weeks (was 9) 3 weeks (was 8)
Incidents requiring cross-team war room 31 4
% of engineering capacity on unplanned work 48% 12%
Net revenue retention 94% 119%

Meridian is producing more software than at any point in its history and delivering less value than it did in 2023. It has more code, more tests, more services, more documentation — and less ability to change anything.

Kestrel is generating a fraction of Meridian's code volume and shipping more product.


The reveal

The temptation is to say Kestrel "used AI better." They did not. Both companies used essentially the same tools in essentially the same way, with comparable adoption rates and comparable engineer enthusiasm.

What differed was the cost of a change in each system — and AI amplified that difference instead of erasing it.

In a well-bounded system, the cost of a change is roughly the cost of writing the change. AI drives that cost toward zero, and the whole system speeds up.

In a poorly-bounded system, the cost of a change is dominated by something else entirely: the cost of knowing whether the change is safe. Discovery. Coordination. Regression risk. The four meetings to find out who owns the table. AI does not reduce that cost. It cannot — that knowledge does not exist in the code. And by making the writing free, AI increases the rate at which changes arrive at that bottleneck.

Meridian didn't get slower because AI made bad code. Meridian got slower because AI removed the only thing that had been rate-limiting their architectural decay: the fact that writing code used to be hard enough to make people think first.

Effort was functioning as a governor. AI removed the governor. Nothing was underneath it.


II. THE GREAT MISUNDERSTANDING

A short correction to a very expensive piece of arithmetic

There is an equation in almost every AI strategy deck written in the last three years. It is never stated this baldly, but it is always this:

 
AI → more code → faster company

Every term in that chain is defensible on its own. The chain itself is false, and it is false for a reason that has been well understood in software engineering since Brooks and rediscovered painfully by every generation since: code is not the product of software engineering. It is the cost.

The actual chain is:

 
AI → more code → more surface area → more coupling → more coordination → slower company

...unless the architecture absorbs the surface area first.

The word doing the work there is absorbs. A system with clear boundaries can accept a large volume of new code without a proportional increase in coordination cost, because the new code lands inside a boundary and its blast radius is defined in advance. A system without boundaries cannot. Every addition is potentially global.

This gives a clean formulation:

The AI Complexity Multiplier. AI multiplies your existing architectural quality. It does not add to it. A well-bounded system times three is a well-bounded system moving three times faster. A ball of mud times three is a much larger ball of mud, arriving much sooner.

Multiplication is the correct operation, and it is the whole argument. Executives modeled AI as addition — a fixed increment of productivity applied to any organization. It is not additive. It has no independent sign. It takes the sign of whatever it is applied to.

Which means the single most consequential question a CTO can ask before an AI rollout is not "which model" or "which IDE" or "what's our adoption target." It is:

"What is the current coefficient?"

Because if the answer is negative, you are about to buy acceleration in the wrong direction, and you will do it with a budget line item labeled productivity.

There is a second-order error underneath the first. Executives believed AI would compress the expensive part of software delivery. They looked at where engineers spend their time, saw "writing code," and targeted it. But in mature enterprise systems, writing code was never the dominant cost. Multiple decades of research and every honest engineering retrospective say the same thing: the dominant costs are understanding, coordinating, and verifying. Typing was maybe 15% of the job.

AI took a 15% cost to near zero and left the 85% untouched.

Worse: the 85% is load-bearing on the 15%. Coordination cost scales with the number of changes in flight. Verification cost scales with the number of changes in flight. Comprehension cost scales with the volume of code a human must hold in their head to make a safe decision. Reduce the cost of producing changes by 5x without touching any of those, and you have not built a faster factory. You have built a faster conveyor belt feeding an unchanged inspection station.

That is not productivity. That is a queue.


III. ARCHITECTURAL INFLATION

An economic analysis

Consider what a printing press does to the value of a document.

Before Gutenberg, a book was scarce because transcription was scarce. The scriptorium was the bottleneck. Value accrued to the person who could produce the copy. After Gutenberg, copies became abundant almost overnight, and value migrated — decisively and permanently — to things the press could not produce: editorial judgment, curation, distribution, trust, and the question of what was worth printing at all.

The press did not destroy the value of books. It relocated it.

AI is a press for software. And the relocation is already underway.

The money analogy, done properly

The loose version of this analogy — "AI prints code like a central bank prints money, therefore code is inflating" — is directionally right and mechanically sloppy. It's worth doing properly, because the mechanism matters.

When money supply expands faster than real output, each unit of currency buys less. The currency itself is not damaged; its purchasing power falls. What rises in relative value are hard assets: things whose supply cannot be expanded by the same mechanism that expanded the currency.

Now map it.

The currency is code. Supply is expanding at an unprecedented rate. The marginal cost of producing a plausible, idiomatic, well-tested implementation of a well-specified thing is collapsing toward the cost of electricity.

The purchasing power of a line of code is falling. In 2019, "we have 400,000 lines of proprietary code" was a moat. It described accumulated effort, and effort was expensive. In 2026 it describes accumulated liability unless you can also describe its structure. A codebase is no longer evidence of investment. It is evidence of maintenance obligation.

Real output is not expanding at the same rate. Delivered customer value, correctness, reliability, and the ability to change direction — none of these scale with code volume. They scale with something else.

Therefore value migrates to hard assets — the things AI cannot mint.

What AI cannot mint

This is the operative list. Every item shares one property: it is a decision about constraint, and constraint is precisely what a generative system does not produce on its own.

Boundaries. A model can generate a service. It cannot decide that this service must never read that database — because that decision encodes an organizational fact (who is accountable) and a business fact (what changes independently) that exist nowhere in the code. Boundaries are the highest-value asset class in software today, and they are entirely human-issued.

Stable interfaces. An interface's value comes from its refusal to change. AI is a machine for producing change. Nothing in a generative process creates stability; stability is a commitment, and commitments require a party capable of being held to them.

Ownership. "Who is accountable when this breaks" is not a property of code. It is a property of an organization. Systems without ownership degrade at a rate proportional to their change velocity — and change velocity just went up 5x.

Domain models. The mapping from messy business reality to clean software concepts is where nearly all durable value in enterprise software lives. It requires knowing which parts of the business are stable, which are contested, which are about to be regulated, and which the CFO is quietly planning to divest. That knowledge is not in the training data. It is in three people's heads and one Slack channel.

Deletion. The scarcest act in modern software. AI has a structural bias toward addition — asked to fix something, it adds; asked to extend, it adds; asked to handle an edge case, it adds. Nothing in the loop proposes removal. The judgment that a subsystem should not exist has become, in relative terms, the most valuable judgment in engineering, and it is 100% human-supplied.

Governance. Not the committee kind. The executable kind: architecture tests, contract tests, dependency rules that fail a build. Governance that lives in a Confluence page is worth approximately zero when code generation is instantaneous, because the generator never reads it. Governance that lives in CI is worth an enormous amount, because it is the only thing operating at machine speed on the machine's output.

The Code Inflation Curve

Plot two lines over the last decade.

The first is code supply per engineer per year. It is roughly flat from 2015 to 2021, rises gently through the early copilot era, and then goes near-vertical.

The second is architectural decision throughput per engineer per year — the rate at which an organization can make, socialize, and enforce a durable structural decision. This line is governed by human cognition and organizational bandwidth, and it has not moved. It cannot move much. A team can absorb roughly the same number of significant structural decisions per quarter that it could in 2010, because the constraint is comprehension and consensus, not typing.

The gap between those two lines is architectural inflation, and it is the defining economic condition of software engineering right now.

Every unit of that gap is code that exists without a corresponding structural decision about where it belongs, who owns it, what it may depend on, and when it dies. That is the precise definition of technical debt — not "bad code," but code whose structural cost has not been paid.

Which yields the crispest single metric in this entire publication:

The Architectural Interest Rate. Every system charges interest on unpaid structural decisions. Pre-AI, the principal grew slowly, because writing code was slow. AI does not change the interest rate. It dramatically increases the rate at which you take on principal.

A 30% architectural interest rate on a small principal is survivable for years. The same rate on principal growing 4x annually is a solvency event — and it arrives, in the data we have so far, somewhere between month 9 and month 20.

Meridian hit it in month 11.

The counterintuitive conclusion

Under inflation, the rational move is not to stop producing. It is to shift the portfolio toward assets that hold value.

For an engineering organization this means something quite specific and quite uncomfortable: the fraction of engineering capacity spent on structure should go up, not down, in the AI era. Precisely at the moment implementation got cheap, the correct response is to reallocate the freed capacity into boundaries, contracts, platform, and deletion — not into more features.

Almost no organization does this. The freed capacity gets absorbed into feature throughput within one quarter, because feature throughput is what the board asked about. This is the single most predictable failure mode of the AI era, and it is entirely a capital allocation error, not a technical one.


IV. "AI INCREASED PRODUCTIVITY 300%. DELIVERY SLOWED 40%."

THE PLATFORM DISPATCH — Vol. 14, No. 3 — An investigation

Over six weeks, this publication spoke with eleven people inside a mid-market SaaS company that reported record engineering output and record customer churn in the same fiscal year. Names have been changed. The company has been anonymized as "the vendor." Each interview is presented with minimal editorial intrusion, because the striking thing is not what any one person said. It is that all eleven were correct and none of them were describing the same system.


THE VP OF ENGINEERING (nine years at the vendor, formerly at two large payment processors)

"The productivity number is real. I want to say that first, because everyone assumes we made it up. We didn't. Story points per sprint, PRs merged, features in the release notes — all of it up between 250 and 300 percent depending on the quarter you pick.

The delivery number is also real.

I spent about four months assuming one of them had to be wrong. They're not. They're measuring different things and I was the last person in the building to understand that. Productivity is measuring what leaves engineering. Delivery is measuring what arrives at a customer, in working condition, and stays working. There is a very long pipe between those two, and everything expensive happens inside the pipe. We got extremely good at pushing things into one end of a pipe we never widened."


THE STAFF ENGINEER, PLATFORM (interviewed twice; second interview at her request)

"Do you want the version I gave the exec team or the real one?

The exec version is 'increased integration complexity.' The real one is that we have eleven implementations of retry logic. Eleven. I counted. Six of them are subtly wrong in ways that only manifest under partial network failure. All eleven were generated in the last fourteen months. All eleven were code-reviewed and approved.

Here's what I want people to understand, because everyone's instinct is to blame the tool or blame the engineers and both are wrong. Before, when you needed retry logic, it was annoying enough to write that you'd go ask in Slack whether we had one. Someone would say yes, it's in platform-core, and you'd use it. The friction was doing a social job — it was routing you to the shared thing.

Now it's faster to generate it than to ask. So nobody asks. The friction that was carrying our reuse policy is gone, and we never replaced it with anything. Our reuse policy was never in a document. It was in the fact that writing things was tedious."

Asked what would have prevented it:

"A platform-core that was genuinely easier to use than generating fresh, and a lint rule that fails the build when you hand-roll a retry. Both boring. Both about eight weeks of work. We didn't do them because eight weeks of platform work doesn't show up on a productivity dashboard."


THE PRODUCT MANAGER, PAYMENTS (three years)

"From where I sit the change is that estimates stopped meaning anything.

Engineering used to tell me three weeks and it'd be three to four. Now they tell me three days and it's three days to five weeks, and there's no way to know in advance which. The variance exploded. I can't do roadmap planning against a distribution that wide.

And I've stopped being able to trust 'it's done.' Done used to mean it works. Now done means the code exists, and there are two more weeks of finding out what else it touched. We shipped a discount engine in four days that I'm still, honestly, not sure is finished. It's been six months."


THE SRE LEAD (interviewed at 11pm, during an active incident he described as "not urgent, just annoying")

"Incident volume is up 40%. That's not the interesting number.

The interesting number is mean time to diagnosis. Up 240%. Resolution time barely moved — once we know what's wrong we fix it as fast as we ever did, faster actually because the fix gets generated. Finding out what's wrong is where everything died.

Why? Because the systems got wider without getting deeper. More services, more call paths, more asynchronous hops. But the conceptual model of the system — the thing in an engineer's head that lets them go 'oh, it's probably the settlement queue' — that model didn't grow. It couldn't. So we're debugging a system nobody has a mental model of, and every incident starts from zero.

I'll say the thing nobody likes. Our observability is excellent. Genuinely best-in-class tooling. It doesn't help, because observability tells you what is happening and we don't have the problem of not knowing what's happening. We have the problem of not knowing what it means. Meaning comes from architecture. You can't buy it from a vendor."


THE CHIEF ARCHITECT (hired eight months into the decline; the vendor's third architect in four years)

"I was brought in to 'clean up the AI mess.' I want to push back on the framing, because it lets everyone off the hook.

The mess predates the AI by about six years. What the AI did was compress six more years of decay into fourteen months and put it in front of an executive team that had been comfortably ignoring it.

I've said in three separate meetings now: this is good news. You've been given, at enormous cost, a very fast test of your architectural quality. Most companies take a decade to learn what you learned in a year. The only wrong response is to conclude the tool was the problem and roll it back.

What I actually need is unpopular. I need to delete about 30% of what exists. I need four teams merged into two because the boundaries were drawn around org chart lines instead of domain lines and the AI keeps generating code that respects neither. And I need eighteen months where 'shipped a feature' is not the only thing that gets someone promoted."

Asked whether he expects to get it:

"I've been given nine months. I'll take nine months."


THE CTO (declined to be quoted at length; the following is from a written statement)

"The board asked me for an AI strategy in 2024 and I gave them a tooling strategy. I want to be precise about the mistake, because I don't think it was stupidity — it was a category error. I treated AI as a procurement decision. It's a structural one. Buying the tool took a quarter. The organization it needs in order to pay off is a two-year build, and I started that two years late.

If I were doing it again I would spend the first two quarters entirely on boundaries, ownership, and paved roads, and I would tell the board the productivity number would be flat for six months. I don't know if I'd have survived saying that. That's a separate problem and I think it's the real one."


THE CUSTOMER (director of engineering at a logistics firm; a five-year customer of the vendor, now migrating away)

"They ship constantly now. Release notes every week, and it's a lot of stuff.

We're leaving because the things we asked for in 2023 still don't work, and every release breaks something that did. Their API changed four times last year. Twice without notice. I don't need my vendor to ship more. I need my integration to still be standing on Monday.

Somebody over there is being measured on velocity, and I can tell, because I'm the one absorbing it."


EDITOR'S NOTE. Six accounts. Six accurate diagnoses. The VP saw a pipe, the staff engineer saw evaporated friction, the PM saw variance, the SRE saw comprehension, the architect saw compressed time, the customer saw instability.

They are all one phenomenon viewed from six positions: the organization's ability to produce change outgrew its ability to reason about change. Every symptom in this investigation is downstream of that single sentence, and not one of the six people is in a position to fix it alone. Which is, in the end, why it wasn't fixed.


V. SIX YEARS, ONE APPLICATION

An engineering time-lapse, observed at annual intervals

The same system, watched at one-year intervals. The point of this section is not the technology adopted in each year — every organization adopted roughly the same things in roughly the same order. The point is that each adoption was a force multiplier, and multipliers do not care about direction.


YEAR 1 — Manual coding

Codebase: 90k lines. Engineers: 12. Deploys: monthly.

Everything is in one repository and one head — the founding engineer's. There is no architecture document because there is no need for one; the architecture is a thing four people share by sitting near each other.

Change is slow and safe. Slow because everything is typed by hand. Safe because the four people who could break it all know what the others are doing.

What compounds: Nothing yet. This is deposit stage. What decays: Nothing yet. Too small to rot.

The critical fact about Year 1 is that it feels like architecture doesn't matter. At this size, it genuinely doesn't much. Every subsequent year is shaped by whether the team mistook that for a permanent truth.


YEAR 2 — CI/CD

Codebase: 210k. Engineers: 31. Deploys: daily.

The first true multiplier arrives. Automated tests, automated pipeline, automated deploy. Change frequency goes up roughly 20x.

And here — quietly, and invisible to everyone at the time — the system's first genuine architectural fork occurs.

Because CI/CD multiplies deployment frequency without touching design frequency. If the codebase has clean seams, small frequent deploys are safer than large rare ones and quality goes up. If it doesn't, small frequent deploys mean 20x more opportunities per year to introduce coupling that nobody notices because each individual change is tiny.

At this vendor, the seams were not clean, and the pipeline was excellent. So the second thing happened. By the end of Year 2 there are 340 cross-module imports that no one decided on. Each was a two-line change. Each shipped green.

The lesson that nobody learns in Year 2: every automation layer you add multiplies the properties you already have. CI/CD was the first rehearsal for AI, and most organizations misread the result because the multiplier was small enough to absorb.


YEAR 3 — Cloud

Codebase: 380k. Engineers: 58. Infrastructure: fully managed.

Infrastructure becomes elastic. The team stops thinking about capacity and starts thinking about cost. Two things happen structurally.

First: scaling stops being a forcing function. In the datacenter era, an inefficient design eventually hit a wall — a box that couldn't get bigger — and the wall forced a redesign. Cloud removes the wall. Bad designs now scale, expensively, forever. An entire category of architectural feedback disappears and is replaced by a line item in the finance spreadsheet, which is read by people who cannot map it to a design decision.

Second: provisioning friction disappears. Any team can create a queue, a bucket, a database. By the end of Year 3 there are 60 datastores and no inventory. The dependency graph starts developing a shape the org chart cannot see.

The Dependency Gravity Map — first observation. Certain nodes in a system accumulate connections faster than others. Once a component is depended on by more than roughly a dozen others, it develops gravity: it becomes cheaper for any new work to attach to it than to create a proper alternative, so it attracts still more dependencies, so it becomes still cheaper to attach to. It is a positive feedback loop and it is essentially irreversible without deliberate force.

Year 3 is when the vendor's core_utils module crosses that threshold. Nobody notices. It will eventually be imported by 71% of the codebase.


YEAR 4 — Microservices

Codebase: 610k across 40 repos. Engineers: 94. Services: 40.

The org adopts microservices, for the reason most orgs adopt microservices: not because of a technical requirement, but because coordination between teams has become intolerable and services look like the solution.

Here the fork widens into a chasm, and this is the year where architectural quality either becomes visible or becomes catastrophic — because microservices do not create boundaries. They enforce boundaries that already exist, and they make the absence of boundaries expensive.

Split a system with clean domain seams into services and you get independent deployability, isolated failure, and clear ownership.

Split a system without clean seams and you get the same tangle, now with network calls between the tangled parts. This is the distributed monolith, and its defining property is that it has all the operational complexity of distribution and none of the independence.

The vendor gets the second outcome. The tell is unmistakable and appears in Q3: the coordinated release. Forty services that must be deployed together in a specific order. They build a tool for it. The tool is well-engineered and is, in retrospect, the most expensive thing they ever built, because it made the problem survivable and therefore permanent.

Underneath: the shared database survives the migration. Eleven services write to it. The service boundaries are real in the deployment topology and fictional in the data model, and the data model is the one that governs whether two things can change independently.


YEAR 5 — AI-assisted coding

Codebase: 1.1M. Engineers: 110. Merged PRs: +180%.

Individual productivity rises immediately and unambiguously. Engineers are happier. Boilerplate, tests, migrations, glue — all of it collapses in cost. This is real and should not be minimized.

The structural effect takes about two quarters to become visible, and it has three distinct mechanisms worth separating:

One: the model works from local context. It reads the file, maybe the module, maybe a retrieved slice of the repo. It does not know the system. So it produces code that is locally optimal and globally redundant — the eleven retry implementations. Every one defensible in its own file.

Two: friction was carrying policy. Every organization enforces some portion of its standards through effort. Reuse, consultation, "go ask the platform team" — none of these were written down; they were sustained by the fact that the alternative was tedious. Reduce tedium to zero and every unwritten policy silently lapses. The policies you never wrote down are the ones AI deletes first.

Three: review capacity is fixed. Generation scaled 5x. Human review did not scale at all. So review degrades — not through laziness, but through arithmetic. Reviewers shift from "is this correct in the system" to "does this look like reasonable code," because the first question now takes longer than the code took to write. And "does this look reasonable" is exactly the question a language model is optimized to make the answer yes to.

By the end of Year 5, the vendor's codebase has grown 80% and its comprehension has grown 0%.


YEAR 6 — AI-generated systems

Codebase: 2.4M. Engineers: 104. Whole subsystems generated from specification.

The tooling matures past assistance. Give it a spec and a schema, get a service. The unit of generation is no longer the function; it's the component.

For Kestrel-shaped organizations, this is the payoff year, and it is dramatic. When boundaries are real, a generated component is safe by construction — it can only touch what its contract allows, its blast radius is defined before a line is written, and the architecture tests reject it in CI if it strays. Kestrel regenerates entire services rather than refactoring them. The code becomes genuinely disposable, and disposability is a superpower: you stop preserving implementations and start preserving interfaces, which is what you should have been doing since 2015.

For Meridian-shaped organizations, Year 6 is where the arithmetic becomes unrecoverable. A generated subsystem in an unbounded codebase is a subsystem whose dependencies are discovered after it ships. The vendor's Year 6 is spent almost entirely on unplanned work — 48% of capacity, then 61% by Q4. Their delivery rate falls below their 2021 rate while producing eleven times the code.


What the time-lapse actually shows

Read as a whole, the six years contain one repeated event.

Every year brought a multiplier. CI/CD multiplied deploy frequency. Cloud multiplied provisioning. Microservices multiplied independence — or coupling. AI multiplied production. Not one of them multiplied architectural judgment, because judgment is the only input in the stack that is still produced at human scale by human beings.

So the gap between what a system does and what its organization understands widened every single year, in every organization, and the multipliers determined the rate.

The Kestrels of the world did nothing clever. They just paid the structural cost each year instead of financing it. Compounding did the rest — in the direction they chose.


VI. THE ARCHITECTURE AUCTION

A speculative market, held annually, in which architectural decisions trade at their real value

The premise: every architectural decision an organization has ever made is placed on the block. Bidders are the people who will have to live with the system for the next five years. Prices are in engineering-quarters, the only currency that has ever mattered.

What follows is the catalogue from the 2026 sale, with the auctioneer's notes.


LOTS SOLD — THE APPRECIATING ASSETS

LOT 3 — A stable, versioned interface. Unchanged since 2021. Estimate: 4 quarters. Hammer price: 31 quarters.

The runaway lot of the sale, and the price surprised no one in the room. In a world where implementations are generated in an afternoon, an interface that has not changed in five years is the only thing anchoring a system in place. Every consumer built against it is still standing. Every generated implementation behind it can be thrown away and rewritten without a single downstream conversation.

Auctioneer's note: bidders are not paying for the interface's design, which is mediocre. They are paying for its refusal to move. Stability is the asset. A well-designed interface that changes quarterly is worth less than a merely adequate one that never does.

LOT 7 — Unambiguous ownership. One team, one service, one on-call rotation, one line in a registry. Estimate: 2 quarters. Hammer price: 24 quarters.

Ownership went for more than most technical assets in the sale, which reflects a market that has finally understood what it is buying. Ownership is not a technical property; it is a decision-making property. An owned component has someone who can say no. In an era when anyone can generate a change to anything in ninety seconds, the ability to say no is the scarcest good in the building.

LOT 12 — A domain boundary that matches the business, not the org chart. Estimate: 6 quarters. Hammer price: 40 quarters. Sale record.

The most expensive lot ever sold at this auction.

Bidding reflected a hard-won understanding: boundaries drawn around teams dissolve when teams reorg, which is annually. Boundaries drawn around rates of change in the business — settlement changes on a regulatory clock, pricing changes on a competitive clock, identity almost never changes — survive reorgs, acquisitions, and platform migrations, because they are tracking something real.

Auctioneer's note: this lot cannot be reproduced by any generative process, at any price, at any capability level. It requires knowing what the business is. That knowledge is not in any repository.

LOT 18 — A platform abstraction with genuine adoption. One paved road, used by 90% of teams voluntarily. Estimate: 5 quarters. Hammer price: 27 quarters.

Note the qualifier. Platform abstractions with mandated adoption fetched a fraction of this. The value is in voluntary — because voluntary means the paved road is genuinely easier than the alternative, and "easier than the alternative" is now competing against a machine that generates alternatives instantly. A platform that wins that comparison is worth an enormous amount. A platform that only wins by policy is worth roughly nothing, because the policy is unenforceable at generation speed.

LOT 22 — Documentation of why. Seventy architecture decision records, one page each. Estimate: 1 quarter. Hammer price: 19 quarters.

The sale's biggest upset, and the most instructive.

Documentation of what the system does sold for almost nothing — passed in at a fraction of estimate — because that can now be generated from the code on demand, more accurately and more current than any human-maintained equivalent.

Documentation of why a decision was made, and what alternatives were rejected went for nineteen quarters, because it is not recoverable from the artifact. Nothing in the code records the meeting where you decided not to shard by tenant. That reasoning exists in exactly one place, and if it wasn't written down, it is gone.

Auctioneer's note to sellers: your rationale is now worth more than your code. Most of you have preserved the wrong one.

LOT 26 — An executable architecture test suite. Forty rules, enforced in CI. Estimate: 3 quarters. Hammer price: 22 quarters.

The lot that best captures the shift. This is architecture that operates at machine speed on machine output. An architecture guideline in a wiki is worth less than the electricity to serve it. The same guideline as a failing build is worth twenty-two quarters, because it is the only form of governance that a generative process cannot politely ignore.


LOTS WITHDRAWN — THE WORTHLESS ASSETS

LOT 4 — A large, well-crafted internal utility library. Eighteen months of skilled work. Withdrawn. No bids at any reserve.

Painful, and worth sitting with. This was good code. It was tested, documented, elegant. It sold for nothing because it is now cheaper to generate a purpose-built equivalent than to learn this one's conventions. Its value was never in its existence; it was in the fact that writing it was expensive. That premise is gone.

Sellers should note: this is the lot most likely to be in your portfolio, and most likely to still be on your balance sheet at its 2019 valuation.

LOT 9 — Duplicated business logic across four services. Each copy locally correct. Withdrawn — negative value. Storage fees apply.

The first lot in this sale to carry a carrying cost. Duplication was always bad; it is now actively hostile, because generation makes duplicates faster than any human process can reconcile them. Every copy is a place a future change must find. Four copies is a 4x tax on every rule change, forever, and the tax compounds because generated code tends to duplicate the nearest example.

LOT 15 — Implicit knowledge. "Ask Dmitri, he knows how billing works." Withdrawn. Unsellable — asset is non-transferable and Dmitri is a flight risk.

Tribal knowledge was always fragile. It is now structurally obsolete, because the primary consumer of system knowledge is no longer the engineer — it is the generation loop, and the generation loop cannot ask Dmitri. Knowledge that is not in a form a machine can retrieve is knowledge that will not be applied to 60% of the changes made to your system this year.

LOT 19 — A shared database written to by eleven services. Withdrawn — significant negative value. Bidders required to post a bond.

The auctioneer notes that this lot has been the single largest destroyer of value in the sale for six consecutive years and its price continues to fall. A shared write-path database is an interface with no contract, no owner, no versioning, and no possibility of independent evolution. Eleven services that appear independent are, in fact, one system with eleven deployment artifacts.

LOT 24 — A hidden dependency. Service A silently relies on Service B's cache warm-up timing. Withdrawn — undisclosed liability. Referred for structural survey.

The purest example of the category. Its cost is zero until it is enormous, and its enormity arrives on the day someone generates a change to B without knowing A exists. That day used to arrive every few years. It now arrives every few weeks.


AUCTIONEER'S CLOSING REMARKS

Reviewing six years of hammer prices, the pattern is not subtle.

Everything that constrains has appreciated. Everything that merely exists has depreciated.

That is the entire market, expressed in one line. Code is existence. Boundaries, contracts, ownership, rules, and refusals are constraint. The generative era mints unlimited existence and cannot mint a single unit of constraint.

Portfolios weighted toward existence have lost most of their value in thirty-six months and their holders largely do not know it, because nobody marks a codebase to market.

The auction does it for them, eventually. It is always a forced sale.


VII. AI'S FAVOURITE VICTIMS

Field notebook — six systems, observed under generative pressure

Notes from twenty-odd engagements. These six structures appeared in nearly all of them, and each degrades under AI in a characteristic, predictable way. The point of the profiles is not that these patterns are bad — everyone knows they are bad. It is that each one has a specific mechanism by which generation accelerates its decay, and the mechanisms are different.


SPECIMEN 1 — The Giant God Object

OrderManager.java, 14,200 lines, 340 methods, 61 contributors.

Habitat. Any system where one concept became the place everything attached to. Usually the first noun the business ever named.

Behaviour under generative pressure — accelerated.

The mechanism is contextual gravity, and it is almost elegant in its perversity. A model asked to add order-related functionality retrieves context. The retrieved context is overwhelmingly OrderManager, because that is where all the order code is. The model, quite correctly following the pattern in front of it, adds method 341 to OrderManager.

The file now has more order code in it. The next retrieval returns it more strongly.

God objects are a positive feedback loop, and AI closes the loop. Under human authorship the loop was damped: every engineer who opened a 14,000-line file felt a flicker of dread, and some fraction of them put their code somewhere else. That dread was doing structural work. The model feels nothing. It has no aversion to large files, no sense that a class has become a garbage dump, no instinct that this is where things go to be forgotten.

Observed rate: file growth 3–5x baseline within two quarters of tooling adoption. In one case the file crossed the model's own context window, at which point the tooling began generating changes based on a partial view of the class, producing methods that duplicated behaviour elsewhere in the same file.

Prognosis: terminal without deliberate extraction. The loop does not self-correct.


SPECIMEN 2 — The Shared Database

One PostgreSQL cluster. Eleven services with write access. 340 tables. No owner.

Habitat. Any organization that adopted microservices without adopting data ownership. Extremely common; the modal enterprise architecture.

Behaviour under generative pressure — catastrophic.

The mechanism here is different and worse: the schema is a complete, machine-readable API with no access control and no contract. Point a generative tool at a codebase with database credentials and a schema, and it will happily write a query against any table it can see. Why wouldn't it? The table exists, the access works, and joining directly is simpler than calling a service — objectively fewer lines, fewer failure modes, better performance. A model optimizing for a clean local solution will choose the direct read essentially every time.

Every such query is a new, undocumented, untested coupling between two services that appear on the architecture diagram as separate boxes.

Field note, verbatim, from an engagement in month 14: "We had 40 services and 900 direct cross-service table reads. The diagram showed 40 boxes. The reality was one system with 40 deployment artifacts and 900 secret handshakes. Nobody wrote 900 of those on purpose. Most of them were four-line changes that passed review because the reviewer had no way to see they were cross-boundary."

Prognosis: this is the single highest-leverage thing to fix before scaling AI adoption. It is also the least popular, because the payoff is invisible and the migration is measured in quarters.


SPECIMEN 3 — The Endless Utility Package

common/, shared/, core_utils/. 2,400 files. Imported by 71% of the codebase.

Habitat. Universal. Begins as a date formatter.

Behaviour under generative pressure — accelerated, with a twist.

Two mechanisms compound.

First, the utility package is a dependency sink: it is imported by everything, so it appears in nearly all retrieved context, so it is the default suggested location for anything that doesn't obviously belong elsewhere. It grows faster.

Second, and more interesting: because everything imports it, the model sees it as the shortest path between any two parts of the system. Need service A's logic in service B? Move it into common/. Now both can reach it. This is technically a valid refactor and every one of these moves passes review as a "shared code cleanup." The cumulative effect is that common/ becomes the medium through which unrelated parts of the system become coupled, while appearing on every diagram as a leaf node.

Diagnostic that works in five minutes: run a dependency analysis and find any module imported by more than 50% of your code. Then measure its change frequency. A widely-imported module that changes weekly is not a utility library; it is a distributed god object with the blast radius of your entire system, and every AI-generated change to it is a change to everything.


SPECIMEN 4 — The Circular Dependency

A → B → C → A. Or, in the field, A → B → C → D → E → B.

Habitat. Any system old enough that the original layering was violated once and the violation was never reverted.

Behaviour under generative pressure — accelerated, invisibly.

The mechanism: cycles are formed by local decisions and are only visible globally. Each individual import that closes a cycle looks entirely reasonable in the file where it appears. You need a graph view of the whole system to see the cycle — and a model working from retrieved context has, by construction, a local view.

So models create cycles at a high rate, and no reviewer catches them, because reviewers also read locally.

The consequence is the erasure of layering, which is the cheapest architectural property there is: layering lets you reason about a system in pieces. Once cycles are pervasive, every component is transitively coupled to every other, the system loses independent testability, and the ability to reason about anything in isolation is gone. The codebase is now a single unit of comprehension, and it is 2.4 million lines.

Prognosis: entirely preventable and almost never prevented. A cycle-detection rule in CI is four hours of work and it is the highest return-on-effort intervention in this entire notebook.


SPECIMEN 5 — The Mega API

400 endpoints. No versioning. Sixteen consumers, four of them external.

Habitat. Systems where the API grew as the union of every consumer's request rather than as a designed contract.

Behaviour under generative pressure — accelerated in an unusual direction.

The mega API doesn't decay by getting worse. It decays by getting bigger, faster, and the mechanism is on the consumer side.

Generating a new endpoint is now trivially cheap — twenty minutes including tests. Generating a conversation about whether the existing endpoint should be generalized costs three meetings and two weeks. The economics are unambiguous, and every rational engineer chooses the endpoint.

So the API grows by accretion at machine speed, and something specific breaks: an API is only useful if a consumer can hold it in their head. At 400 endpoints, consumers can't, so they use the first endpoint that works rather than the right one, which means changing any endpoint becomes unsafe, which means nothing is ever deprecated, which means the API only ever grows.

Field note: a client's public API went from 180 to 610 endpoints in eighteen months. Deprecations in the same period: zero. Their integration support burden tripled. Their customers experienced this as the product getting harder to use, which it was.


SPECIMEN 6 — The Copy-Paste Platform

Nine "microservices" that are the same service with different names.

Habitat. Organizations that scaled by cloning a template and never extracted the commonality.

*Behaviour under generative pressure — the most dangerous entry in this notebook, because it is the only one that improves on the surface.

Cloning was previously bounded by tedium. You'd copy a service twice, maybe three times, before someone said "this is stupid, let's extract a library." The tedium was the trigger for consolidation.

Generation removes the tedium entirely. A model can clone and adapt a service in an hour, and the result is better than a human copy-paste job — it's adapted, renamed, coherent, tested. Every individual clone is high quality.

And so the trigger never fires. Nobody ever feels the pain that used to cause extraction. The organization ends up with nine well-crafted, individually-excellent, structurally identical services and a change-rule cost of 9x forever.

This is the pattern I would watch most closely in 2026–2028, because it is invisible to every quality metric an organization has. Test coverage: high. Code quality scores: high. Review approval rates: high. Time to ship a new clone: excellent, and improving. The only signal is a slow rise in the cost of any change that must be made everywhere — and that shows up as "the team is slower," which gets diagnosed as a people problem.


NOTEBOOK SUMMARY — the common mechanism

Six specimens, one underlying finding, which I did not expect when I started taking these notes.

In every case, the structure was previously restrained by human effort, not by architecture.

God objects were restrained by dread. Duplication was restrained by tedium. Cloning was restrained by boredom. Reuse was enforced by the annoyance of writing things twice. Cycles were rare because writing an import you didn't need was work.

None of those restraints were ever written down. None appeared in any architecture document. They were entirely emergent properties of the fact that software was expensive to produce, and every organization was, without knowing it, relying on them as a primary control.

AI removed all of them in about a year.

The organizations that survive this are the ones that notice their controls were made of friction and rebuild them out of something else — contracts, tests, ownership, and rules that execute. The ones that don't are running a system whose safety mechanisms were removed by an efficiency initiative, and the removal is still being reported as a win.


VIII. "IF AI WRITES THE CODE, WHAT IS LEFT FOR ARCHITECTS?"

Transcript — internal leadership forum, lightly edited for length

PARTICIPANTS: Moderator (Head of Engineering Ops) · Priya, AI Engineering Lead · Tomás, Chief Architect · Nadia, Platform Engineering · Wei, CTO · Ingrid, Finance Director


MODERATOR: The question on the agenda is deliberately provocative. Priya, you asked for it, so you start.

PRIYA: I did, and I want to be clear I'm not trolling. Eighteen months ago I'd have said architects design systems and engineers implement them. Today I hand a model a spec and get a service back, with tests, that passes review. I'm asking sincerely: what's the remaining job?

TOMÁS: What was in the spec?

PRIYA: Endpoints, data model, error semantics, SLOs.

TOMÁS: And who decided that this thing should be a service at all, rather than a module in something that already exists?

PRIYA: ...I did.

TOMÁS: That was the architecture. The rest was typing. I don't mean that dismissively — it used to be six weeks of typing and now it's a day, which is fantastic. But you've relocated the job, not eliminated it. You're doing architecture and calling it spec-writing.

PRIYA: Fine, but then architecture is just something everyone does now. It's not a role.

TOMÁS: Partly true, and I think that's healthy. But there's a class of decision you can't make from inside a single spec, and that's the class I care about. Whether this service should exist at all. What it's forbidden to touch. What happens when the third team wants the same capability. Whether this boundary still holds after the acquisition closes in March.

NADIA: Can I put a number on it? Because I think the abstract version of this argument goes in circles.

MODERATOR: Please.

NADIA: Last quarter my team handled 71 requests to add a new datastore. Seventy-one. Every one arrived with a working prototype the requester had generated in an afternoon, and every one had a genuinely reasonable local justification.

If we'd said yes to all 71 we'd have 71 more things to back up, secure, patch, and page someone about. We said yes to nine. The other 62 got routed to something that already existed.

That filtering is the architecture function, and notice it didn't exist as a bottleneck two years ago because nobody could produce 71 prototypes in a quarter. The volume of proposals went up 10x. The capacity to evaluate them didn't. So the evaluation function became the constraint, and it got vastly more valuable.

PRIYA: That's governance, not design.

NADIA: At this volume they're the same thing. You design a system by choosing what you say no to. When generation was expensive, most bad ideas died before anyone built them — economics did the filtering for free. Now every bad idea arrives fully implemented and looking good, and someone has to do that filtering deliberately.

INGRID: I want to interject with the finance view because I think I'm hearing a cost structure change that nobody has modeled.

MODERATOR: Go ahead.

INGRID: Two years ago, software was a variable cost. More features, more engineers. It behaved like labor and I could forecast it.

What I'm seeing now is that production cost has collapsed and maintenance cost has not. Which means software is becoming a fixed-cost business with a very large installed base — and I've watched enough of those to know how they fail. They fail when the installed base grows faster than the revenue it supports, and the maintenance line quietly eats the whole margin.

Last year our production cost per feature fell 60%. Our total engineering cost went up 20%, and the delta is entirely maintenance, incidents, and coordination. From where I sit, this AI investment has so far been a machine for converting variable cost into fixed cost.

WEI: That's the sharpest framing anyone's given me and I'd like it in writing.

INGRID: You'll have it Thursday. What I'd add is this: I don't fund architecture as a technical activity, because I can't evaluate it. I can fund it as a reduction in the marginal cost of change, and that I can measure. Show me the cost of a change in a well-bounded part of the system versus a badly-bounded part, and I'll write the business case myself.

TOMÁS: We have that data.

INGRID: I've never seen it.

TOMÁS: No. That's my failure, not yours.

PRIYA: I want to come back, because I've moved but not all the way. Everything described so far — filtering, boundaries, cost of change — I'll grant. But it's still true that the design part of architecture, the actual structuring, is something models are getting good at. I've seen a model propose a better decomposition than a team of humans. More than once.

TOMÁS: I believe you, and I don't think that threatens the argument, because you're describing a decomposition that was good given the stated constraints. My job is mostly deciding the constraints, and those come from outside the system.

Concrete example. Two years ago we split identity from billing. Technically, coupling them would have been cleaner — the model would have coupled them and it would have been right on the evidence available. I split them because I knew we were going to be sold, that identity was the asset, and that a buyer would need to lift it out cleanly.

Nothing in any repository contained the information "we are going to be sold." That decision cost us six months of extra work and made the acquisition possible. That's the job.

PRIYA: Okay. That lands.

WEI: Let me try to close this, because I've changed my own position over the last year and I'd rather say so out loud.

I used to think of architects as a tax. Expensive people who slowed down delivery in exchange for a quality argument I couldn't verify. If I'm honest, most of the industry thought that and a lot of architecture practice earned it.

What changed my mind is that delivery got faster and we got slower. Both things happened at once and that shouldn't be possible under my old model. The only explanation that survives is that we were spending our speed on something other than product.

So here's where I've landed. Architects are not the people who design systems. Everyone designs systems now — Priya's right about that and it's a good thing. Architects are the people who own the properties of the system that no single change is responsible for. Coherence. Boundaries. The cost of the next change. Whether the thing can still be understood by a human being in three years.

Nobody's individual work produces those properties. They're what's left over after everyone's individual work is done. And in a world where individual work just got five times faster, the leftovers are the whole ballgame.

MODERATOR: Anyone want the last word?

NADIA: Just an observation. We've been at this ninety minutes and nobody has argued that we need fewer architects. Priya opened by asking what's left for them and we've spent the entire session listing things.

PRIYA: For the record — I still think the title is wrong. What Tomás does isn't what my last three companies called architecture. Those were people who drew diagrams and approved things.

TOMÁS: No argument from me. Those people are gone and shouldn't come back. The diagram was never the job.


IX. THE ARCHITECTURE OBSERVATORY

Observations from a tower above ten thousand repositories

Imagine a vantage point from which you can watch software systems evolve the way an astronomer watches stars: not one at a time, but as a population, over years, looking for regularities. What follows is what the population looks like.


FIRST OBSERVATION — Complexity grows at the seams, not in the components.

Watch long enough and you notice that individual components are almost never where systems go wrong. Components are bounded, comprehensible, and usually improve over time as people fix them.

The pathology lives in the space between components. Undocumented assumptions. Implicit ordering. Shared state. A field two services both write to and neither owns.

This has a practical consequence that most quality programs get backwards: quality tooling almost entirely measures the inside of components — coverage, complexity, duplication, lint. Nearly nothing measures the seams. So organizations have detailed instrumentation on the part of the system that rarely fails and no instrumentation on the part that always does.

Under generative pressure this gets worse, because generation is component-shaped. Models produce excellent components. They do not produce seams; seams are what's left over when two components meet, and nobody generated the meeting.


SECOND OBSERVATION — There is a threshold, and it is roughly seven.

Across the population, a striking regularity: systems whose components have fewer than about seven inbound dependencies stay comprehensible more or less indefinitely. Above that number, comprehension collapses fast — not gradually, but with something like a phase transition.

The number is presumably about human working memory, and the mechanism is that once a component has more dependents than a person can enumerate, nobody can predict the effect of changing it. So people stop changing it. So it accumulates workarounds. So the workarounds acquire their own dependents.

Above the threshold, systems don't get fixed. They get routed around, and every route-around is a new seam.


THIRD OBSERVATION — Modularity wins in exactly one way, and it isn't the way it's usually sold.

The population data does not support most of the usual claims for modularity. Modular systems are not obviously easier to build. They are frequently harder, and they carry real overhead. They are not more reliable in year one.

What modular systems have is one property, and it's decisive: the cost of a change does not grow with the age of the system.

In a coupled system, change cost rises roughly with accumulated size, because every change must account for more. Plot it and you get a curve bending upward — the same curve every engineer recognizes as "this codebase used to be fun."

In a well-bounded system the curve is close to flat. A change in year eight costs about what it cost in year two, because the amount you must understand to make it safely is bounded by the module, and the module didn't grow.

Flat versus rising, compounded over a decade — that is the entire return on modularity. It is invisible for the first two years, which is why it is so consistently underfunded.


FOURTH OBSERVATION — Velocity dies quietly, and always in the same place.

Watching organizations lose their speed, the death is never dramatic. Nobody announces it. What you see is a slow shift in the composition of engineering time.

Year one: 70% building, 20% fixing, 10% coordinating. Year five: 40% building, 30% fixing, 30% coordinating. Year eight: 20% building, 35% fixing, 45% coordinating.

Total engineering capacity is up. Building capacity is down 70%. And at every annual checkpoint, the year-over-year change is small enough to attribute to something else — a bad quarter, a reorg, a couple of departures.

Coordination cost is the thing that kills engineering organizations, and it grows as a function of unclear boundaries. Every ambiguous boundary is a recurring meeting. Every shared resource is a negotiation. Every unowned component is a game of hot potato that resolves in about eleven days.

The generative era compresses this timeline hard. Some organizations now traverse the full year-one-to-year-eight composition shift in under twenty-four months.


FIFTH OBSERVATION — Maintainability compounds, and the interest is paid in optionality.

The final and least intuitive pattern.

Organizations with high structural quality do not primarily benefit from lower costs, though they have those. They benefit from having more available moves.

Watch two organizations receive the same market shock — a competitor's launch, a regulatory change, an acquisition opportunity. The well-bounded one has options: it can carve out the affected subsystem, replace it, sell it, expose it as a product, or absorb the acquisition into a defined seam. The coupled one has one option, which is a large program of work that will take four quarters and probably fail.

System Optionality Index. The number of distinct strategic moves an organization can execute within two quarters without a rewrite. It is the single best predictor of five-year outcomes in the observed population, and it is almost purely a function of boundary quality.

Architecture, viewed from the tower, is not a quality practice. It is an options portfolio. And options, unlike code, cannot be generated.


X. ENGINEERING ECOLOGY

Software systems as living environments

Software behaves less like a building than like an ecosystem, and the ecological frame explains things the construction frame cannot — particularly why healthy systems tolerate rapid growth and unhealthy ones collapse under it.


SPECIES. In a codebase, a species is a pattern that reproduces: a service template, a data access idiom, an error-handling convention, a way of structuring a module. Patterns reproduce by imitation — an engineer copies the nearest example.

Generative tooling is a spectacular reproduction accelerator, and it is entirely indiscriminate. It reproduces whatever is common in its context, at high fidelity, at high speed. This is the single most important ecological fact of the AI era: whatever pattern is currently dominant in your codebase is about to become far more dominant.

Which makes the composition of your codebase today a prediction of its composition in two years. If 60% of your services follow the good template, you're about to become a clean system. If 60% follow the 2019 template that nobody likes, you are about to have a great deal more of it, and it will look increasingly canonical simply by weight of numbers.


MUTATION. Every generated variation is a mutation. Most are neutral, some are beneficial, some are harmful.

Healthy ecosystems have high mutation rates and strong selection. Mutation without selection is not evolution; it's cancer — undifferentiated growth with no fitness pressure.

Most organizations have just increased their mutation rate by 5x and left selection pressure exactly where it was. Code review was the selection mechanism, and its capacity is fixed at human reading speed.

The correct response is not to slow mutation. It is to automate selection. Architecture tests, contract tests, dependency rules, performance budgets, boundary enforcement — machine-speed selection for machine-speed mutation. This is the central platform engineering task of the next five years and most platform teams are still building deployment pipelines.


PREDATORS. Every healthy ecosystem needs something that removes things.

In software, predation is deletion: deprecation processes, sunset policies, the engineer who removes the unused endpoint, the architect who kills the redundant service. Predators keep the population in balance and free resources for new growth.

Almost every engineering organization has no predators. Nothing in the incentive structure rewards removal. Nobody was ever promoted for deleting a service.

In the low-growth era this was survivable — the population grew slowly enough that even a predator-free system stayed manageable for years. At 5x growth, a predator-free ecosystem is an explosion.

If you take one operational action from this publication, make it this: fund deletion explicitly, measure it, and promote for it. Give a team a deletion target the way you'd give a reliability target. It will be the highest-return architectural intervention available to you, and it costs nothing but political will.


BALANCE AND CARRYING CAPACITY. Every environment supports a finite population. In software, the carrying capacity is human comprehension — the total system complexity an organization can hold, distributed across the people who work on it.

Carrying capacity grows slowly. It rises with headcount (sublinearly, thanks to coordination cost), with documentation, with good abstractions, and above all with good boundaries, which multiply it — because a boundary means an engineer only needs to comprehend one side.

Exceeding carrying capacity produces a recognizable syndrome: the system continues to function while nobody understands it. Changes become empirical rather than reasoned. Debugging becomes archaeology. Confidence is replaced by ritual.

AI raises the population growth rate enormously and raises carrying capacity by very little, because comprehension is on the human side of the interface. Most overshoot events in the current era are simply this arithmetic playing out.


ADAPTATION AND EXTINCTION. Adaptable systems share one property, and it is not flexibility of implementation — it is stability of interface with variability of implementation. That combination allows a subsystem to be replaced without the ecosystem noticing, which is what adaptation actually is.

Systems go extinct when the cost of adaptation exceeds the value of the system. This rarely arrives as a decision. It arrives as an accumulation of individually-reasonable choices to work around rather than change, until the day someone proposes a rewrite and nobody argues.

The generative era does not change any of this. It just moves the clock. Systems that would have reached that day in 2032 will reach it in 2028.


THE SYNTHESIS: architecture is environmental design.

The ecological frame reframes the architect's job in a way I find more accurate than any blueprint metaphor.

An architect does not build the system, and increasingly does not write it. An architect shapes the environment in which the system grows: what reproduces easily, what is selected against, what is removed, what the carrying capacity is, where the boundaries fall.

You cannot control what a hundred engineers and a generative model will produce next quarter. You can absolutely control which patterns are easy to copy, which violations fail a build, which paths are paved, and what gets deleted.

Gardeners do not place leaves. They manage conditions. In an era where the growth rate just went up fivefold, managing conditions is the only form of control that scales.


XI. ARCHITECTURE WITHOUT HUMANS?

A thought experiment, taken seriously

Let's grant the strongest version of the case. Assume a system that can generate an entire platform from a business description — services, schemas, infrastructure, tests, dashboards, runbooks. Assume it is excellent. Assume it produces something a good architect would sign off on.

Does architecture become an automated function?

Four questions decide it, and none of them are questions about capability.


Who defines the boundaries?

A boundary is a statement about what is allowed to change independently. That is not derivable from the current system, because it is a claim about the future: which parts of this business will move on different clocks.

Settlement changes when regulators change. Pricing changes when competitors change. Identity almost never changes. Those are three different clocks, and knowing them requires knowing an industry, a company, and a strategy — none of which are in the codebase, and much of which is not in any document at all.

A generative system can produce a decomposition that is optimal for the requirements it was given. Boundary-setting is the act of deciding which requirements are permanent and which are temporary. That is a forecast, and forecasts have owners.


Who defines ownership?

Ownership is not a software property. It is a statement about an organization: this team is accountable, this person is on call, this group can say no.

No generative process can assign it, because assigning it means committing human beings to obligations. That is a management act. A system with generated boundaries and unassigned ownership has boundaries in name only — nobody defends them, so they erode at the speed of the next convenient shortcut.


Who understands the business?

This is the deepest one, and it's the one that doesn't dissolve with better models.

Business understanding is not information. It's a contested, political, partially-secret view of what matters. What the CFO is planning. Which customer segment is being quietly abandoned. Which regulation is coming. Which acquisition is in diligence. Which line of business the founder will never kill for reasons that are not economic.

Tomás's identity/billing split earlier in this publication is the canonical case: technically wrong on the available evidence, strategically decisive, and unreachable from any repository. The information required to make it correct existed in three people's heads under NDA.

Every enterprise architecture contains dozens of decisions of that shape. They are the ones that determine whether the system is an asset in five years.


Who decides what never changes?

The hardest question, and the one that clarifies the whole thing.

Generation is a machine for producing change. Architecture is substantially a machine for preventing it. An interface's value comes from stability. A boundary's value comes from being enforced against pressure. A standard's value comes from surviving the argument to make an exception.

Every one of those is a refusal, sustained over time, against a specific request from a specific person with a good reason. Refusal requires standing — the authority to say no and absorb the consequence.

An automated system cannot hold that position, not because it lacks capability but because it lacks accountability. When the VP of Sales needs an exception by Friday for a $4M deal, someone must decide, be responsible for the decision, and still be there in three years when the consequence lands.

That role does not have a technical solution. It has a job title.


The conclusion.

Architecture survives automation not because machines can't design — they can, and increasingly well — but because architecture is only partly design. The rest is commitment under uncertainty on behalf of an organization, and commitment is a property of parties who can be held to it.

Generation will absorb an enormous amount of what architects currently spend their time on: diagrams, boilerplate design, reference implementations, most documentation, much of the evaluation of technical options. That absorption is good and overdue.

What remains is smaller, harder, and considerably more valuable: deciding what is permanent, who is accountable, what the business actually is, and what must never change.

That was always the job. Everything else was the part we could afford to confuse it with.


XII. THE 2032 PLAYBOOK

Strategy memo — how elite engineering organizations will operate

TO: Executive team FROM: Office of the CTO RE: Operating model for the generative era CLASSIFICATION: Internal


Summary. The organizations that outperform through 2032 will not be the ones with the best models. Model access is a commodity and the gap between the best available model and the third-best is measured in months. The differentiator will be the environment into which generation is deployed. This memo describes six shifts in how we operate.


1. Architecture becomes executable.

Architecture that lives in documents does not constrain a generative process, because the process never reads documents and its output arrives faster than any human can review against them.

By 2032 our architecture will exist as code that runs in CI:

  • Dependency rules. Module A may not import B. Enforced, not advised.
  • Contract tests. Every published interface has a test suite owned by the provider and run against every consumer.
  • Boundary assertions. Cross-boundary data access fails the build.
  • Data ownership rules. One writer per table, verified continuously.
  • Cycle detection. Zero tolerance, checked on every commit.
  • Budget gates. Latency, cost, and dependency-count budgets per component.

The test: can our architecture reject a change without a human in the loop? If not, we do not have architecture. We have opinions.

Target: 80% of our architectural principles expressed as failing builds by end of FY29.


2. AI generates implementation. Humans govern evolution.

We split the work along a clean line.

Generated: implementations, tests, migrations, glue, adapters, documentation of behaviour, refactors within a boundary, and — increasingly — entire components from specification.

Human: boundaries, contracts, ownership, deletion decisions, domain models, what is permanent, and every exception to the above.

The consequence to internalize: we stop treating implementations as assets. Inside a stable boundary, code becomes disposable — regenerate rather than refactor. We preserve interfaces and domain models. We do not preserve implementations, and we stop paying to maintain code we could recreate in a day.


3. Platforms own standards, and standards must win on merit.

Our platform team's mandate is not to build infrastructure. It is to make the correct path the cheapest path — measured against a generative alternative that takes ninety seconds.

This is a much higher bar than platform teams historically faced, and it is the key strategic point in this memo. A paved road that is merely mandated will lose, because generation makes the unpaved route trivially available and enforcement operates at human speed. A paved road that is genuinely faster than generating fresh will win without enforcement.

Operating rule: every platform capability is measured on voluntary adoption. Below 70%, we treat it as a product failure and either fix or kill it. We do not mandate our way out of a bad developer experience.


4. Developers become system designers.

The role changes shape. Less time producing implementations, far more time on: specifying precisely, defining interfaces, deciding what belongs where, reviewing generated work against system properties rather than local correctness, and — the hard one — knowing when the answer is "this shouldn't exist."

Hiring and promotion shift accordingly. We will stop over-weighting implementation speed, which is now largely a property of tooling, and start weighting decomposition judgment: give a candidate an ambiguous domain and evaluate their boundaries. That is the skill that is now scarce.

We will also need fewer engineers producing more code, and I'd rather say that plainly than discover it by attrition.


5. Quality becomes architectural.

Traditional quality metrics are approaching uselessness. Coverage is high because tests are generated. Lint passes because generated code is idiomatic. Complexity scores are fine because each component is clean.

None of it measures whether the system is healthy. Our quality metrics will be structural:

  • Boundary integrity — cross-boundary violations per quarter. Target: zero.
  • Interface stability — breaking changes per published interface per year. Target: below 0.5.
  • Change locality — % of changes confined to a single owned component. Target: above 85%. This is our single most important number.
  • Comprehension time — median hours for a new engineer to safely change a given subsystem.
  • Deletion rate — components and endpoints removed per quarter. Target: non-zero, always.
  • Cost of change trend — engineering-hours per unit of delivered change, tracked over years. Flat is success. Rising is the alarm.

The last one deserves emphasis. A flat cost-of-change curve over a decade is the entire objective of architectural work. Everything in this memo is instrumentation for that one line.


6. Capital allocation changes.

The recommendation the board will find least comfortable. As implementation cost falls, we increase the share of engineering capacity spent on structure — target 25–30%, permanently, as a standing allocation rather than a project.

The reasoning is straightforward. AI has reduced the cost of the cheap part of software and left the expensive part untouched. Reinvesting all of the savings into feature throughput guarantees the expensive part grows until it consumes the organization. That is the observed failure mode across the market and it takes about eighteen months.

We will therefore report a lower feature velocity than some competitors in FY27–28, and a materially higher one from FY29 onward. I would like agreement on that trade now rather than in the quarter it becomes visible.


Closing. Every organization in our market has access to the same models. Within twelve months, so will every organization in every market. Model quality will not distinguish us.

What will distinguish us is whether the code all that capability produces lands in an environment where it compounds or one where it accumulates. That environment is architecture, and it is the only part of this that cannot be bought.


XIII. THE LAST WHITEBOARD

There is a whiteboard on the fourth floor of a building in Rotterdam that has not been erased since March 2019.

It's in a small room that stopped being a meeting room years ago and is now mostly used for storing chairs. At some point someone wrote DO NOT ERASE in the corner, in red, and underlined it twice. Below that, in different handwriting and a different year: seriously.

The drawing itself is unremarkable. Six boxes. Some arrows. A dotted line running vertically through the middle with the words NOTHING CROSSES written along it. A cluster of things scratched out in the bottom right where an argument clearly happened. Two initials next to each box. And in the top left, slightly cramped, a sentence rather than a diagram:

"Money and identity move on different clocks. Do not put them in the same box, even when it is obviously easier — it will be obviously easier every single time."

The company has been through a great deal since 2019. Two acquisitions, one platform migration, four CTOs, a full cloud rearchitecture, and the wholesale adoption of generative tooling that now produces the substantial majority of its code. Not one line of software from March 2019 survives. The languages changed. The databases changed. The deployment model changed twice.

The six boxes are still there. Not on the whiteboard — in the system. Every one of them is a real, enforced boundary in a platform of four hundred services. The vertical line is a rule in CI that has failed 1,900 builds and been overridden zero times.

New architects get taken to the fourth floor in their first week. It's not really a tradition, more of a habit. Somebody moves the chairs.

What's striking, watching it happen, is what the whiteboard explains that nothing else can. The company has excellent documentation, generated continuously and always current. It has full observability, dependency graphs, service catalogues, ADRs going back seven years. All of that describes, in exhaustive and accurate detail, what the system is.

The whiteboard is the only artifact in the building that explains why it is that way — and specifically, what the alternative was and why it was rejected. The scratched-out cluster in the bottom right is the road not taken. Somebody wanted to merge two of those boxes, and lost, and the loss is still legible.

That's the part that doesn't survive anywhere else. Code records decisions but not deliberations. Generated documentation records outcomes but not the arguments. Every system carries the shape of a thousand refusals and almost none of them are written down.

Four hundred services. Fourteen million lines of code, most of it produced in the last two years by a machine.

Six boxes and a line, in dry-erase marker, from 2019.

The marker is fading. Every year or two someone offers to photograph it properly, or vectorize it, or put it in the wiki. It never happens, and there's a suspicion in the building that this is deliberate — that the room is the point, and something is lost if it becomes a file.

Nobody has erased it.


XIV. CLOSING REFLECTION

The organizations that struggle in this era will not struggle because they adopted AI too aggressively, or too late, or chose the wrong tools. They will struggle because they mistook the nature of the constraint.

They believed the constraint was production — how fast software could be written. They spent accordingly, and they were right that production was expensive and right that it could be automated.

The constraint was never production. It was comprehension, coordination, and consequence — the cost of knowing whether a change is safe, of agreeing who decides, and of living with what you built for a decade. Those costs are borne by human beings and organizations, and they did not fall.

So the machines lifted one side of an equation that was never balanced by that side, and every organization discovered its true architectural quality at five times the normal speed. Some found leverage. Most found a bill.

None of this is an argument against the tools. The tools are extraordinary and the Kestrels of the world are proof of what they enable — a settlement rewrite in five weeks instead of four months, code that becomes genuinely disposable, engineers freed from the parts of the work that were never the work. That future is real and it is available.

It is just conditional. It is available to organizations that spent the boring quarters on boundaries, ownership, contracts, and deletion — and unavailable, at any budget, to the ones that didn't. AI did not create that difference. It revealed it, priced it, and charged interest.

Which leaves the only sentence worth remembering from all of this:

Artificial intelligence can multiply software.

Only architecture can multiply value.

Recent posts

September 4, 2026
Saga Compensation Testing: The Rollback No One Checks
September 4, 2026
Post-Acquisition Technical Integration: The First 100 Days
September 4, 2026
Why Coding Interviews Don't Predict Software Quality