Asia/Shanghai
BlogMay 28, 2026

From Prototype to Production

A practical checklist for moving useful software out of the demo stage
Li Zimu
From Prototype to Production
Prototypes are useful because they remove doubt. They show that an idea can work, that an interface feels plausible, or that a model can produce the right kind of output. Production is different. Production is where the system has to survive real inputs, slow networks, missing data, bad configuration, and users who do not follow the happy path. The work is not only adding polish. It is making the system understandable, recoverable, and boring enough to operate. Before hardening a prototype, I try to separate three things:
  • The core user workflow that must work.
  • The nice-to-have interactions that can wait.
  • The technical experiments that should stay behind a flag or out of the first release.
This keeps production work focused. A small stable product is better than a large unstable demo. Most fragile systems hide unclear contracts. The frontend assumes one shape, the backend returns another, and the integration breaks when the next edge case appears. Before release, important interfaces should be written down or encoded in types:
  • Request and response shapes.
  • Error codes and retry behavior.
  • Authentication and permission boundaries.
  • Data ownership and lifecycle.
Good contracts reduce the number of places where debugging turns into guessing. A production system needs a plan for what happens when things go wrong. That does not mean every failure needs a complex recovery strategy. It means the system should fail in a way that is visible, contained, and reversible. For a web product, that usually includes clear user-facing errors, server logs with enough context, health checks, and a way to distinguish application failures from upstream failures. Deployment should not require heroics. A useful release path has a predictable build, environment configuration that is easy to inspect, a canary check, and a rollback command that has been considered before the incident. The point is not ceremony. The point is reducing the number of unknowns during the moment when user traffic is involved. Observability starts before launch. At minimum, I want to know:
  • Is the system healthy?
  • Which requests are slow?
  • Which errors are expected and which are new?
  • Which upstream service failed?
  • Did the last deployment change behavior?
If the system cannot answer those questions, production debugging becomes memory and luck. The first demo proves that something is possible. The first production release proves that the idea has been turned into software people can actually use. That is the milestone I care about: not just making the feature work once, but making it reliable enough to keep improving.
Share this post: