← The ADLC library
Verticals · 10

What agentic delivery changes in dev tools and infrastructure

Building software that other engineers build on has a property no other domain shares: your bugs execute inside your customers' pipelines, and your blast radius is every team that depends on you.

There is a reason infrastructure teams are conservative in a way that looks disproportionate from outside. When a consumer product ships a bad change, some users have a bad afternoon. When a build tool, a shared library, an SDK or a base image ships a bad change, it does not affect users; it affects other engineering organisations, inside their pipelines, at a time they did not choose.

That is a genuinely different risk shape, and it is the one thing worth holding onto when deciding how agentic delivery applies to this domain. It is not that the code is harder. It is that the failure propagates into environments you cannot see and cannot fix.

Your consumers are automated, which cuts both ways

The distinguishing fact about shipping to developers is that adoption is largely automatic. A patch release is picked up by a dependency resolver at three in the morning in a timezone you are not awake in. Nobody read your release notes. Nobody chose the moment.

This is the mechanism that makes small mistakes expensive. A subtly changed default, a slightly stricter validation, an error type that is now thrown where it previously was not: each is a small change in your repository and a broken build in an unknown number of other organisations.

It also, usefully, makes the safety property easy to state. The thing you must never break is the contract, and unlike most domains, the contract is largely machine-readable. That makes it exactly the kind of thing worth encoding as a criterion and checking on every change, forever.

Type and signature surfaceMechanically diffable. A breaking change is detectable without judgement, and should fail the build rather than a review.
Runtime behaviour under existing inputsNot in the signature. Needs characterisation tests against real usage patterns.
DefaultsThe most common silent break. Changing one is a breaking change even when nothing in the signature moves.
Error types and failure modesConsumers catch specific errors. Introducing a new one where none was thrown breaks handling code.
Performance characteristicsAn undocumented contract that consumers depend on anyway. Nobody encodes it and everybody assumes it.
Five layers of contract. Only the first is normally enforced, and the middle three are where the incidents come from.

The defaults row deserves particular attention with agents in the picture. An agent asked to improve a library will frequently change a default because the new value is objectively better. It is better. It is also a breaking change for every consumer who relied on the old one and never specified it explicitly, and nothing in the diff marks it as such. This is the same silent scope drift discussed elsewhere in this series, with a much larger blast radius attached.

The verification advantage nobody uses

Infrastructure teams have an unusual asset: their consumers’ usage is often visible to them.

If you publish a package, you can see how it is called. If you run a platform, you have telemetry on which APIs are exercised and how. If your consumers are internal, you can read their code directly. That is a corpus of real usage that most software organisations would pay a lot to have, and it is the single most underused verification surface in this domain.

The move is to test changes against actual consumer usage rather than against the tests you happened to write. For an internal platform team this is straightforward and rarely done: take the top consumers’ repositories, build them against your candidate change, and see what breaks. That converts an abstract compatibility question into a concrete list.

Under agentic delivery this matters more, because change volume rises and the intuition that told a maintainer “this will break people” does not scale with it.

Candidate changeGenerated and passing your own suite, which proves little about consumers.
Contract diffSignatures, defaults, error types. Mechanical, fast, and where most breaks are visible.
Build real consumersTop repositories built against the candidate. Abstract risk becomes a concrete list.
Then reviewHuman attention on what survived the first three, not on the diff line by line.
Most infrastructure teams run the first and last steps. The two in the middle are cheap, mechanical, and catch the failures that reach customers.

Dogfooding is the trap

There is a failure mode specific to this industry that I would flag ahead of time, because the incentives point directly at it and it is flattering on the way in.

Teams building developer tooling are unusually enthusiastic adopters of developer tooling. That is natural and mostly good. It produces a specific blind spot: the team’s own environment is nothing like its customers’.

Your repository is well-structured, your tests are good, your types are strict, your CI is fast, and your engineers are unusually capable. An agentic pipeline works beautifully in that environment. Your customers have a nine-year-old monolith with two ORMs, patchy coverage, and a build that takes forty minutes.

The risk is not that your tooling fails for them. It is that you stop being able to perceive why it might, because your own experience contradicts the reports. Infrastructure teams that lose contact with their consumers’ actual conditions ship things that are excellent in the lab and unusable in the field, and they usually discover it through churn rather than through feedback.

Where the throughput genuinely helps

Having spent most of this piece on caution, the upside in this domain is large and specific.

Adapter and integration surfaces: client libraries across languages, framework integrations, plugins for every editor and CI system. This is voluminous, highly patterned, well-specified work that maintainers never have enough time for, and it is close to the ideal profile.

Documentation and examples, which are perpetually stale in this industry and are a genuine driver of adoption. Migration tooling, which is what makes a breaking change tolerable and which almost nobody staffs properly. Test coverage against real usage patterns. And the long tail of small compatibility fixes that sit in an issue tracker for years because each is individually too small to prioritise.

That last category is worth naming as a strategic opportunity rather than a chore. Most infrastructure projects have a backlog of small, well-defined, low-risk issues that would each take an hour and never get done. Clearing that backlog is exactly what this technology is good at, and it is directly visible to the people who decide whether to keep using you.

Where this breaks down

Your consumers may be running an agentic pipeline too, which changes your support surface. Issues arrive that were generated rather than reasoned about, reproductions are thinner, and the person reporting may not understand the code they are reporting on. This is a real operational shift and nothing in your delivery process addresses it.

Semantic versioning is a promise about the contract you thought you had. A patch release that changes an undocumented behaviour is breaking to whoever depended on it, whatever the version number says. Higher change volume produces more of these, and the version number gives false comfort in both directions.

Building consumer repositories does not scale to open-source distribution. If your consumers are thousands of unknown organisations, you cannot build their code. Telemetry on API usage partially substitutes and is much weaker, and this article’s central verification recommendation mostly does not apply to you.

Performance regressions evade all of it. Nothing in the contract-checking above catches a change that is correct and three times slower, and in infrastructure that is frequently the incident. It needs benchmark gates, which are their own discipline with their own flakiness problems.

And the dogfooding blind spot has no tooling fix. It is addressed by talking to customers whose conditions are worse than yours, deliberately and regularly, which competes with shipping and usually loses.

The takeaway

Building for engineers means your failures execute inside other people’s pipelines, picked up automatically at a moment nobody chose. That makes the contract the thing to protect, and unlike most domains the contract is largely machine-readable, which makes it exactly the right thing to encode as a criterion.

Enforce the contract mechanically rather than through review. Use the verification asset you have and most teams ignore, which is your consumers’ real usage. Watch defaults specifically, because they are the most common silent break and an agent will change one for good reasons.

If you take one thing into next week: pick your five largest consumers and build their code against your main branch. If you cannot do that in an afternoon, that is the gap, and closing it is worth more than any change to how you generate code.