Deployment Changes the Problem
A live operation is not a harder test of the design. It is the only environment in which some of the requirements exist at all.

The assumption underneath most delivery
Delivery models generally treat deployment as the end of a process of finding out. Requirements are gathered, the thing is built, it is tested against those requirements, and then it is released. Release is where the knowing stops and the operating starts.
That sequence assumes the requirements were all discoverable in advance and that testing can stand in for use. Neither is true, and the gap between them is not a quality problem to be closed with more rigor.
The assumption is not stupid. It is inherited from contexts where it holds. If you are building a bridge, the load conditions are known before the first drawing and they do not adapt to the bridge. Operations are different in a specific way: the thing being served is made of people who change their behavior in response to the system, so the requirements are partly a function of the design rather than an input to it. Any method that treats them as fixed inputs will be right about the stable half and blind to the rest.
What only appears under load
Volume changes behavior. A step that is reasonable once an hour is intolerable forty times an hour, and the difference is not linear because people start batching, deferring, and working around it.
Exceptions arrive at rates nobody predicts. In design conversations the exception is a footnote. In the operation it is often a third of the cases, each slightly different, and the handling of them is where the real cost lives.
Habit is faster than policy. People route around anything inconvenient almost immediately, and they do it quietly, so the system appears to be working while the actual path has already moved somewhere else.
And incentives assert themselves. A system that makes someone's number look worse will be used differently from how it was demonstrated, regardless of what anyone agreed in a meeting.
There is also the matter of what the data turns out to be. Every operation has fields that are nominally structured and actually free text, categories that stopped meaning what they say around the time of the last migration, and identifiers that are unique in one system and not in another. None of this is discoverable from a schema, because the schema describes the intent. It becomes visible on the first real run, usually as a small number of records that fail in an interesting way and turn out to represent an entire category nobody had named.
An example of a requirement that could not exist earlier
I worked on an operational system in a regulated environment where compliance had been built as a review layer sitting after the work. On paper that is the defensible design. It is auditable, the responsibility is clear, and it separates the checking from the doing.
What that design did in practice was put a stop between demand and delivery. Every unit of work completed, then waited to be checked, and the organization could not turn incoming demand into finished work quickly enough to meet what the market was offering. That constraint was not visible in the requirements, because it is not a property of any requirement. It is a property of the arrangement running at volume.
It is worth being precise about why no earlier analysis would have caught it. Each individual requirement was satisfied by the review layer, and satisfied well. The review was thorough, correctly staffed, and completed within its own service expectation. Nothing about it was failing. The constraint only exists in the relationship between the review's throughput and the rate of incoming demand, and that relationship is not a property of either the review or the demand considered separately. It is a property of the two running against each other, which is a thing that only happens live.
The system that changed the outcome embedded the regulatory requirements inside the workflow, so the check happened as part of doing the work rather than after it. That produced 2.7 million dollars in new client revenue within three months. The number is not the interesting part. The interesting part is that no amount of pre deployment analysis would have surfaced the constraint, because before deployment there was nothing to be constrained.
The deployment does not test the specification. It corrects it.
Why this is not a testing failure
The natural response is that the testing was inadequate, and occasionally it was. Usually it was not.
A test verifies that a system does what it was specified to do. The problems that appear at deployment are mostly not failures against the specification. They are the specification turning out to have been about the wrong thing, which no test can catch, because the test was written from the same understanding that produced the design.
Pilots and staging environments soften this without solving it, and it is worth knowing which part they solve. They reproduce the mechanics: the integrations, the data shapes, the performance under synthetic volume. They do not reproduce the incentives, because nobody's number depends on a pilot, and they do not reproduce the exception mix, because the cases fed into a pilot are chosen by someone who wants it to work. A pilot that goes cleanly has told you the system functions. It has told you very little about whether the operation will adopt it.
You cannot test your way to a requirement you did not know existed. You can only run the work and watch.
Designing for the second pass
If deployment produces information, the sensible response is to plan on using it.
That changes what you build first. The smallest sufficient version is not a compromise or a phased rollout, it is the cheapest instrument for learning what the operation is actually like. It changes how you spend the budget, because reserving capacity for what production teaches is more valuable than spending it on a more complete first version built from worse information.
It also changes what you instrument. If the first release is an instrument, then it needs to record the things that will tell you the design was wrong, not only the things that confirm it is working. Where work stopped and for how long. Which cases were handled outside the system. What people typed into the field that was supposed to be a fixed list. Those are the measurements that pay for the second pass, and they are almost never in the original requirements, because nobody specifies a system to report on its own inadequacy.
It also changes what you promise. A commitment to a fixed scope at a fixed date is a commitment to ignore whatever deployment reveals. Organizations make that commitment constantly, and then treat the resulting change requests as a failure of planning rather than as the system working.
The uncomfortable version
Taken seriously, this means the design is provisional until real work has run through it, and no amount of care beforehand changes that.
Which is a difficult thing to say to a sponsor who wants certainty and is paying for it. The honest position is that the certainty is available, just later than anyone wants, and that a plan which admits this is more reliable than one that does not. The alternative is not more certainty. It is the same uncertainty, undeclared, arriving later and costing more.
There is a version of this that a sponsor can accept, and it is not a request for open-ended scope. Commit firmly to the outcome and the budget, and hold the shape of the solution provisionally between them. That gives the sponsor the two things they actually need to defend the spend, and gives the work the one thing it needs to be any good. Most disagreements about agility are really disagreements about which of those three is being fixed, and they resolve quickly once someone says it out loud.
If this describes an operation you are responsible for, the diagnostic is where that conversation starts.
How engagements begin

