Chapter 13 of 15

Demo-Ready Is Not Production-Ready

Code existing is not the same as code being operationally proven. A complete happy-path demo made the system look more finished than it really was. I separated feature existence from operational proof so I could be precise about what had been built, what had actually been tested, and what still depended on assumptions.

  • A candid readiness assessment
  • Code existence versus operational proof
  • Security, recovery, deployment, and tenant-isolation gates

The situation

The platform could demonstrate the full loop end-to-end, which made it easy to feel "done." In Demo-Ready Is Not Production-Ready, I wanted to capture the real operating situation rather than describe the problem in abstract terms. What mattered to me was the moment the existing approach stopped being sufficient in normal use, because that was usually the point where the next architectural requirement became obvious.

The naive solution

Treat a working demo of the full flow as evidence the system is production-ready. The naive option was attractive precisely because it was faster and easier to explain. I could have pushed further in that direction and probably improved the demo, but it would have optimised the visible symptom rather than the underlying system constraint.

The hidden constraint

A working demo proves the happy path exists; it does not prove rollback works under failure, tenant isolation holds under load, or secrets stay protected under misuse. This constraint was easy to miss early because it did not show up in the first successful run. It appeared once the workflow had to survive repetition, failure, another user, another provider, or a return visit, which is why I now look for these second-order requirements much earlier.

The decision

Maintain an explicit, honest readiness assessment separate from the feature list, naming exactly what is proven versus what is still assumed. I treated this as an architectural or product decision rather than a prompt tweak. The aim was to create a boundary I could reason about later, instead of relying on model behaviour to remain consistent as providers, templates, and user requests changed.

The implementation

Documented remaining gaps directly: production container image publishing, full provider-backed deployment/rollback proof, live billing configuration, real custom-domain verification, API hardening, browser-level smoke tests, centralized operational storage, and final tenant-isolation validation. I also tried to make the implementation concrete enough that the decision could be inspected in code and runtime behaviour. That meant explicit state, explicit policy, and observable transitions rather than a collection of hidden assumptions spread across prompts and handlers.

The tradeoff

A less flattering internal narrative in exchange for an accurate one that guides where effort actually goes next. I did not treat the decision as free. In most cases I was deliberately accepting more engineering, state management, or operational complexity in exchange for a smaller failure surface and a product that could survive realistic use.

The evidence

The provider-neutral deployment state machine existed before any claim of full production deployment readiness was made. I use this evidence as a practical signal, not as a claim that the architecture is universally correct. The useful question was whether the new design changed what the system could reliably do under the conditions that had previously broken it.

The reusable lesson

Keep a running, honest list of "exists in code" versus "proven under real operating conditions" - conflating the two is how demos get shipped as products. The part I would carry into another build is the decision rule behind the implementation, not the exact technology choice. Vendors and frameworks will change; the underlying question about state, control, isolation, feedback, or user trust is much more reusable.

The consultant's questions

  • What in this system have you tested only by watching it work once?
  • What would have to fail for you to find out your rollback plan doesn't actually work?
  • What assumption in this part of the system would become dangerous if usage or tenant count increased?
  • What evidence would tell me this decision needs to be revisited rather than defended indefinitely?