Why generating software is becoming easy and keeping its promise is not
The previous essay, Software After Code, argued that machine generation removes code from the centre of what humans make — and raised an objection it deliberately left open. If producing software has become cheap for vendors, it has become cheap for customers too. Many companies will build what they used to buy, and some of them should.
This essay takes up what happens after that decision — not to argue anyone out of it, but because the part that has become cheap and the part that has not are rarely told apart until somebody is living with the difference.
The claim of this essay: generation produces visible capability. Everything that makes capability dependable sits underneath it, is unaffected by the collapse in production cost, and has become more expensive rather than less — because software now acts.
1
The Application Built in a Weekend
A logistics company with about forty people has a problem that every operations manager will recognise. Delivery exceptions — the failed drop, the refused consignment, the address that does not exist — arrive through three channels and are tracked in a spreadsheet that four people edit and nobody trusts. The commercial software that would handle this properly costs more than the problem appears to be worth, and the last evaluation stalled on a six-week implementation nobody had time for.
So the operations lead, who is technically capable but not a software engineer, spends a Saturday with a coding agent. By Sunday evening there is a working application: exceptions pull in from all three sources, get classified, route to the right person, escalate on a timer, and produce a weekly summary that is more useful than anything the spreadsheet ever gave anyone. It cost a weekend and the price of some inference. On Monday the team starts using it, and within a fortnight nobody would go back.
This story should be granted completely, because it is real and it is going to become ordinary. The application is good. It fits the business better than a purchased product would have, because it was shaped by somebody who understood the work. It cost a rounding error. Any argument that begins by suggesting this could not have happened, or that the result must secretly be bad, is not an argument — it is a vendor protecting a position, and the reader will smell it immediately.
Now move forward twelve months, and watch what the year does.
In month three, one of the three source systems changes its authentication, on its own schedule, with an email nobody read. Exceptions from that channel stop arriving. Because they stop arriving rather than arriving wrongly, nothing looks broken — the queue simply gets shorter, which everybody enjoys for eleven days.
In month five, a customer disputes a charge arising from an automated escalation, and asks the company to show why the system did what it did. There is no record beyond the current state of the database. The reasoning existed at the moment it ran and was never written down.
In month seven, somebody patches the classification rule directly, at eleven at night, to stop a client complaint. It works. It is never reconciled with anything, and nobody is quite sure afterwards whether that patch is still in effect.
In month nine, the operations lead who built it takes a job elsewhere. The application keeps running. Nobody who remains can say with confidence why the timer is set to forty-eight hours, which exception types were deliberately excluded, or which of the several near-identical rules is the one that fires in practice.
In month eleven, an auditor asks a straightforward question about retention of customer data, and the honest answer takes three weeks to assemble.
None of this is a story about a bad application. It is a story about the difference between a thing that works and a thing that can be relied upon — and that difference did not become cheaper when generation did.
The repository took a weekend. The promise began on Monday morning.
| Day two |
Month twelve |
| A working application |
A connector has changed, silently |
| Ordinary cases automated |
Exceptions have accumulated |
| A visible workflow replaces a spreadsheet |
One manual patch is unreconciled |
| The builder knows every decision |
The builder has left |
| The demonstration succeeds |
Somebody has to keep the promise |
Table 1. The same application, twelve months apart. Nothing in the right-hand column is a defect in the left.
Key points
- The weekend build is real, is often better-fitted than a purchased product, and is going to become ordinary.
- What arrives in the year afterwards is not a defect in the application. It is the obligation that was never priced.
- The repository took a weekend. The promise began on Monday morning.
2
The Demo and the Promise
Software has always divided into two parts, and the division was always uncomfortable to talk about because the second part is invisible in every demonstration and consumes most of the effort.
The first part is what the software does when things go as expected. Screens and forms. The ordinary workflow. Reading and writing records. Dashboards. Standard integrations with well-behaved systems. Conventional business logic. This part is now substantially generatable, and getting more so. It is also the entire content of every demonstration, every screenshot and every evaluation — which is why buyers have always over-weighted it, and why the software industry learned to sell to it.
The second part is what the software does when things do not go as expected. The edge case nobody thought of at design time. The exception that is legitimate but looks fraudulent. The operating history that explains why this rule exists. Provenance — who set this, when, on whose authority. Permissions. Consent, and evidence of consent. The connector that changes on somebody else’s schedule. Security. Monitoring that notices absence, not just failure. The ability to reverse an action. Compliance evidence produced on demand. Continuity when the person who understood it leaves. And, underneath all of it, somebody answerable when the software gets it wrong.

Figure 1. Generation reaches the part above the line. The part below it is what a demonstration cannot show.
There is a structural reason the second part gets under-bought, and it is worth naming because it explains a great deal of behaviour on both sides of the transaction. Dependability is largely built from capabilities whose success appears as the absence of an event. Nobody celebrates a suppression rule that correctly stopped a prohibited message; the message simply never arrives, and no one knows it nearly did. A clean audit trail goes unnoticed until the complaint, the dispute or the investigation. A reversal mechanism is unused on almost every day it exists and indispensable on the one day it is needed. Software that displays a feature accrues credit continuously. Software that prevents a disaster accrues none, until the disaster.
A product is not defined by what it does when everything is normal. It is defined by what it does when reality departs from the demonstration.
A demonstration proves that software can work. This second part determines whether it can be trusted.
The split is not new. What is new is the ratio, and it moved twice.
It moved once because generation collapsed the cost of the first part and left the second part exactly where it was. A visible capability that used to take a team three months now takes a weekend; the obligation underneath it takes the same year it always took. Anything that becomes cheap while its complement does not has raised the relative price of the complement — which is the whole economic content of this essay, and it applies to the vendor exactly as much as to the customer.
And it moved a second time, for a reason that has nothing to do with production cost. Software has started to act.
The previous essay set out the ladder along which authority is granted — from observing, through recommending and preparing, to executing, operating and eventually owning a goal. What matters here is only the consequence at the bottom of the ladder. When software displayed information and waited, a missing edge case produced a wrong screen. Somebody looked at it, frowned, and nothing had happened in the world. When software acts, the identical gap produces an action: the message sent to somebody who withdrew consent, the refund issued that should have been reviewed, the escalation triggered against a customer who did nothing wrong, the record altered in a system that other systems believe.

Figure 2. The same specification gap, before and after delegation.
A deterministic system fails visibly and locally. A system with authority and a weak specification fails confidently and at scale — and it fails silently, because there is no screen for anybody to frown at. It is found by its consequences, which arrive later, through a customer, a regulator or an auditor.
So the expensive part is not a legacy concern that better generation will eventually reach. Delegation is what made it expensive. The more capable the software becomes, the more the value sits in the part that generation does not touch.
Key points
- The first part is what software does when things go as expected. It is now substantially generatable, and it is the whole of every demonstration.
- The second part is what it does when they do not. It did not become cheaper.
- Dependability is built from capabilities whose success appears as the absence of an event — which is why it is systematically under-bought.
- Anything that becomes cheap while its complement does not has raised the relative price of the complement.
- Delegation moved the ratio a second time: the same gap that once produced a wrong screen now produces an action.
3
What the Customer’s Agent Cannot Finish
There is a comfortable version of this argument that should be refused, because it is wrong and it will not survive a serious reader.
The comfortable version says that models lack domain knowledge — that a coding agent does not understand logistics, or lending, or clinical operations, and that this is what a specialist vendor sells. That claim is already shaky and gets weaker every year. Models know a great deal about how a returns process, a credit assessment, a reconciliation or a triage protocol normally works. They will know more next year. Any thesis that depends on models staying ignorant is a thesis with an expiry date.
The sharper claim survives:
Generic domain knowledge is becoming abundant. Current, organisation-specific operating truth is not.
Consider what an agent generating that exceptions application would have needed to know, none of which is generic. Which classification does this company use, and how does it differ from the industry norm, and why — because it does differ, and the reason is usually an incident that happened once. Which of these rules is a legal requirement and which is a preference that somebody could change if asked? Where did the forty-eight hour timer come from: a contract, a regulation, or a decision made in a meeting in 2021 by somebody who has left? Which exceptions have been deliberately accepted, by whom, and on what grounds? Who is permitted to override, and what happens when two rules apply and disagree? What evidence would demonstrate, to somebody hostile, that the policy was followed? And — the question that quietly governs all the others — is any of this still true?
None of that is in a model, and none of it is in the request the operations lead typed on a Saturday. It exists in fragments. Some sits in policy documents nobody has read since they were written. Some sits in the configuration of an existing system, where it was recorded as a setting rather than a decision. Some lives in spreadsheets, email threads and support macros. And a great deal survives only in the memory of five or six experienced people who know which written rule is not the whole rule. Turning those fragments into an executable account of how the business operates is not clerical work. It is organisational design — and it is difficult in a way that has nothing to do with software.
It also involves a set of distinctions that only an organisation can draw. Policy has to be separated from habit. The current rule has to be separated from the historical workaround that outlived its cause. Authority has to be separated from convenience. And stated intention has to be separated from what the business is prepared to enforce when enforcing it costs something. Without those separations, generated software will reproduce an organisation’s folklore as confidently as its policy, and with the same authority to act on it.
Which sharpens what the customer’s own agent can and cannot do, and the concession matters. It can do more of this than is comfortable to admit. It can interview, read the existing configuration, draft a specification, and — valuably — identify contradictions that nobody had noticed, because it does not share the assumptions that made them invisible. What it cannot do is decide which of two contested truths the organisation should adopt, or determine who is entitled to accept the risk of getting that wrong. That is not a knowledge problem. It is an institutional act, and it requires somebody with standing to perform it and to be answerable afterwards.
This is why the weekend application is so often excellent and so rarely complete. It captures the operating reality as one well-informed person understood it on one day. That is a valuable artefact. It is not the same as an account of how the business works that stays accurate as the business changes — and the gap between those two things is invisible on Monday and expensive in month nine.
Two properties make organisational truth hard to hold, and both are worth naming precisely because neither is a technical problem.
The first is provenance. A rule without a source cannot be safely changed. Anyone who has worked in an established business has met the constraint nobody can explain and nobody dares remove, and the reason the fear is rational is that the rule might be load-bearing. When rules are captured only as behaviour — in code, or in a generated implementation — provenance is exactly what is lost. The system knows what to do and not why, which is fine until the day somebody needs to change it.
The second is currency. Operating truth decays. A jurisdiction adds a requirement. A contract is renegotiated. A category behaves differently after a bad quarter and the rule that was written for the old behaviour quietly stops fitting. Nothing about generation addresses this. A system generated from a perfect specification in January is running on a January account of the world in November, unless somebody has been maintaining it — which is a job, and it is the job that most self-build arrangements have not assigned to anyone.
So the scarce input in software is not code, and it is not domain knowledge in the abstract. It is a current, sourced, tested account of how one particular organisation operates — held by somebody whose job is to keep it true.
Key points
- Refuse the comfortable claim that models lack domain knowledge. It is weak and it expires.
- Generic domain knowledge is becoming abundant. Current, organisation-specific operating truth is not.
- Turning fragments into an executable account of how a business operates is not clerical work. It is organisational design.
- Without separating policy from habit, generated software reproduces an organisation’s folklore as confidently as its policy.
- The agent can draft the specification and find the contradictions. Deciding which contested truth to adopt is an institutional act.
- Provenance and currency are the two properties that make organisational truth hard to hold — and neither is a technical problem.
4
The Maintenance Obligation
The previous essay described the machinery that reduces this burden — change a shared truth once, and every capability that depends on it is rebuilt and revalidated. That machinery is real, and it is the strongest argument a producer has. It also has to be built, staffed and run by somebody, which is the point of this section.
Here is the obligation, stated plainly, because it is usually discussed as an abstraction and it is not an abstraction — it is a set of jobs that appear on somebody’s calendar.
Connectors. Every integration is a dependency on a third party’s roadmap. Interfaces change, deprecate, tighten their authentication, alter their rate limits and occasionally disappear. The work arrives unscheduled, in a quarter that had other plans, and the failure mode that matters is not the loud one. A connector that breaks noisily gets fixed on the day. A connector that silently stops delivering a subset of records is discovered weeks later, and the interval between those two events is where the real damage sits.
Releases. Something has to establish that the current version still does what the last version did. In a generated system this is more important rather than less, because the implementation may have been rebuilt entirely between one week and the next.
Incidents. Somebody answers when it fails, and the answer is required at inconvenient hours by definition. This is the single most under-costed item in every self-build decision, because it is not a task but an availability commitment — which is a very different thing to ask of a person who already has a job.
Security. Vulnerabilities are disclosed on a schedule set by researchers, not by the business. Somebody must be watching, must know which disclosure applies, and must be able to act quickly.
Regulation. Rules change in one market and have to be threaded through a system built for the world as it was. Somebody must notice, interpret, and know which behaviour is affected.
Permissions. People join, change roles and leave. Access granted in a hurry is rarely reviewed, and permission drift is the quiet precondition of most serious incidents.
Support. Somebody answers the colleague who cannot make it work. At small scale this is invisible; it is also how most internal tools die in practice — not through failure, but through nobody being available to explain them until people stop bothering.
Continuity. The knowledge has to survive the person. This is the obligation that self-build arrangements fail most reliably, because it is the only one that produces no symptom at all until the day it produces every symptom at once.
| Obligation inherited |
What happens if it is neglected |
| Specification maintenance |
The system enforces yesterday’s truth, confidently |
| Connector monitoring |
Silent breakage, discovered by its consequences |
| Permissions |
Actions occur without valid authority behind them |
| Release testing |
A local fix quietly breaks a path nobody was watching |
| Incident response |
The same harm repeats, because the cause was never found |
| Regulatory tracking |
The implementation becomes non-compliant without changing |
| Security |
A useful tool becomes an exposure |
| Support and continuity |
The tool becomes an orphan and is quietly abandoned |
| Accountability |
Responsibility is discovered to be nobody’s, after the event |
Table 2. Self-building removes an invoice. It does not remove this column.

Figure 3. The two costs are not the same shape, which is why comparing them once is misleading.
That shape is the argument. The cost of creation is a point. The cost of the promise is a line — and the line runs for as long as anybody depends on the software. A comparison made at the moment of creation is not comparing like with like, which is why the weekend build looks so overwhelmingly favourable in the week it is made and merely reasonable three years later.
Now the honest boundary, because this section could easily be read as an argument that self-building is a mistake, and it is not one.
A large company with real engineering depth is already carrying every item on that list for other reasons. It has an on-call rota, a security function, a release process, an access review, a compliance team. For that company the marginal cost of adding one more internally built system is small, and the fit advantage is large. Such a company should probably build more than it does.
The forty-person logistics business is being offered something different. It is being offered the chance to become, in a small way, a software operation — and most companies do not want to be one, in the same way that most companies do not run their own payroll engine or their own payment infrastructure, though both are technically within reach and neither is conceptually hard. The question is not whether the obligation can be carried. It is whether carrying it is what this company wants to spend itself on.
Key points
- The obligation is not an abstraction. It is connectors, releases, incidents, security, regulation, permissions, support and continuity.
- The cost of creation is a point. The cost of the promise is a line.
- A company already carrying that list for other reasons should probably build more than it does.
- For everyone else the question is not whether the obligation can be carried, but whether carrying it is what the company wants to spend itself on.
5
Accountability for the Act
Everything so far has been about effort — work that must be done by somebody, priced or unpriced. The deepest layer is not about effort at all. It is about things that cannot be produced on demand at any price, because they are accumulated rather than made.
Standing with third parties. A great deal of consequential software depends on how other systems and institutions regard the sender. Whether messages are delivered or filtered. Whether an interface grants elevated limits. Whether a payment processor treats the traffic as ordinary or as risk. Whether a platform certifies the integration. None of that can be generated. It is built over years through consistent behaviour, and it can be destroyed in an afternoon by a system acting confidently on a bad rule. A new application starts with none of it, and that starting position is invisible until the first thing goes wrong.
Consent with provenance. Not a flag in a database recording that permission exists, but a record of how it was obtained, when, under which wording, in which jurisdiction, and what the person was told at the time — durable enough to be produced in a dispute months later, by which point the interface that captured it may not exist in that form. This is straightforward to build in principle. It is almost never built by somebody assembling an application in a weekend, because it is invisible unless somebody asks, and nobody asks until it matters.
Suppression that must never fail. Every system that acts on people needs a set of rules that hold under all circumstances: this person must not be contacted, this account must not be charged, this record must not be exported. What makes these hard is not the logic — the logic is trivial. It is that they must survive regeneration, refactoring, a new developer, a migration and an urgent change made under pressure. This is the clearest case in software where being right on average is worth nothing: there is no persuasive account of a suppression failure that begins with the system having been intelligent most of the time. A rule that holds most of the time is not a suppression rule. It is a preference.
A record that reconstructs the decision. Not logs of what happened, which most systems have, but an account of why: what the system knew, which policy was in force, who set it, what boundary applied, what it did, and what state it left behind. This is the difference between being able to say the system sent the message and being able to say why the system was entitled to send it. A regulator, a court and a serious customer all ask the second question. Intelligence without a reconstructable record is not autonomy. It is opacity — and no organisation should grant authority to something it cannot afterwards examine.
Reversal. The ability to undo an action, including its consequences in other systems that have already acted on it. Reversal is not the inverse operation, and the hardest version is not the clean failure but the partial one: the refund that stops halfway, leaving the order system and the payment system holding different accounts of reality. Nothing has failed loudly; the two systems simply disagree, and each will go on acting on its own version. Reversal is a designed capability, and it has to be designed before it is needed — which means before anybody has evidence that it will be. Where an action cannot be reversed, the authority threshold in front of it should be higher, which is a design rule and rarely treated as one.
A named party who is answerable. When software acts wrongly and somebody is harmed, the question is not only what failed. It is who is responsible. In a purchased arrangement the answer is written down, sits with an organisation that carries insurance and has something to lose, and is enforceable. In a self-built arrangement the answer is the company itself — which may be perfectly acceptable, and is a materially different position that ought to be entered deliberately rather than discovered afterwards.
These items share a property that separates them from everything in the previous section. Effort can be bought late. Standing, provenance and reversibility cannot. A company that decides in month twelve to take its obligations seriously can hire, staff a rota and write the runbooks. It cannot retroactively acquire three years of good conduct with a mail provider, or produce a consent record for a permission captured by an interface that no longer exists, or reverse an action through a design that was never built.
Which is why this layer, rather than the maintenance layer, is where the deflation stops. AI makes software creation cheaper. It makes trusted action more consequential — and the second effect is larger than the first for any system permitted to do anything that matters.
Key points
- This layer is accumulated rather than made: standing with third parties, consent provenance, suppression, decision records, reversal, and a named answerable party.
- A rule that holds most of the time is not a suppression rule. It is a preference.
- Effort can be bought late. Standing, provenance and reversibility cannot.
- AI makes software creation cheaper. It makes trusted action more consequential.
6
Why the Vendor Still Exists
Return to the objection that opened this essay, now that both sides of it are visible.
The forty-person logistics company was never choosing between having software and not having it. It was choosing where the obligation would sit. Self-building does not remove the software producer from the arrangement. It relocates the producer inside the customer, and the relocation is invisible on the weekend it happens because the obligation has not started yet.
Stated that way, the decision becomes a reasonable one to make rather than a trap. Some companies will look at the obligation, recognise that they are already carrying most of it, and build — correctly. Others will look at the same list and conclude that they would rather buy the promise than become the party who keeps it. Between those positions sits a range that will grow: managed specifications, shared runtimes, certified components, arrangements where the customer holds its distinctive rules and a producer maintains the machinery underneath. The decline of code scarcity produces more ways to source software, not one right answer — and the useful question in every one of them is the same. Who is carrying the obligation, and do they know they are carrying it?
For the producer, this changes what a software company is selling, and the change is not cosmetic. It can no longer sell access to a capability, because capability is becoming abundant. What remains sellable is everything this essay has described: an account of the customer’s operating truth that somebody keeps current; the machinery that carries a change safely across everything depending on it; the migration that makes arriving and leaving survivable; the accumulated standing that lets the software be trusted by third parties; and a named party who is answerable when it acts.
That is a harder business than selling software was. It is also a more defensible one, because none of it can be generated on a Saturday.
One misreading has to be closed off before it takes hold, because this argument can be turned into something it is not. Nothing here is a defence of expensive software. A great deal of what the industry charges for deserves to collapse: features nobody uses, foundations rebuilt for every product, integrations assembled by hand, implementation projects that exist because the product could not be adopted without them, and the organisational overhead layered on top of all of it. The obligation described in these six sections is not what made traditional software expensive. It was one line item among several, and often not the largest.
So the correct conclusion is narrow and it should be stated precisely. The waste should be removed. The promise should not. Affordability that is achieved by deleting the obligation is not affordability — it is unpriced risk sitting quietly on the buyer’s side of the arrangement, and it will be discovered eventually, usually by somebody who did not know they had bought it. The obligation has to be industrialised instead: shared foundations, reusable tests, monitoring that runs without being staffed, deterministic execution for repeated work, and regeneration when the governing truth changes. That is the difference between software that is cheap and software that is affordable, and the distinction becomes more important as the price falls, not less.
Which suggests something a producer can do rather than merely claim. Make the obligation inspectable. Show which specifications are current and when each was last reviewed. Show which dependencies are being watched. Show what authority the system currently holds and who granted it. Show how a decision can be reconstructed, and how quickly an action can be reversed. Every one of those is checkable, and none of them appears on a feature list. Trust moves from a brand promise to inspectable operating evidence — and at a low price that shift is not optional, because a low price is exactly what a buyer would expect an unpriced risk to look like.
The competitive question is no longer who can build the capability. It is who can keep it correct, current, connected and accountable as the world changes.
And the answer to the objection can now be put in a single line. The customer is not being asked to pay for software; the customer can produce software. The customer is being offered the chance not to become the party who is responsible for it — which is worth something, and worth more every time the software is permitted to act on its own.
The future software company will not win because it writes more code. It will win because customers trust it with more authority.