The Deploy Order, and Why It Is an Order
When a wire contract changes — a field's vocabulary, a response envelope, a route's shape — the deploy runs in one sequence: the owning service first, then the shared layer, then each consumer engine, then all of them restarted in the same window.
The order follows the direction of the dependency, and the last step is the one people skip. Everything can be on disk and still be wrong, because a running process holds the code it imported at startup. Deploying without restarting produces a system where the files say one thing and the behavior says another, which is the most confusing state available.
Why There Is No Mixed-Version Grace Period
Versioned APIs are designed for exactly this window: old and new coexist by contract, consumers upgrade on their own schedule, and the mixed state is supported.
This family has none of that, and does not want it. Version skew is the defect the shared repository exists to remove — a version pin here would make skew a supported feature rather than a bug. The consequence is that the mixed window is not a supported state. During it, every component behaves correctly against a contract that half the system has not adopted yet.
That is worse than a broken window, because a broken window announces itself. In a half-deployed window, things mostly work: the request goes through, the response parses, one field means something slightly different than the receiver assumes. Test in that window and the results describe a configuration that will not exist in a few minutes.
Two Practical Consequences
First: keep the window short and scripted. Anything that makes the sequence longer — a manual step, a confirmation, a service that has to be found before it can be restarted — extends the interval in which the system is in an unsupported state. The sequence should be one command that does all of it.
Second: a landed change is not a deployed change. A commit that alters module-level data — a registry, a route table, a policy map — reaches a long-running process only when that process restarts. Everything can be committed, pushed, and correct on disk while the running system continues to behave the old way indefinitely. The failure that follows is disorienting, because reading the code tells you the opposite of what you are observing, and the code is what everybody trusts.