Every app eventually asks the same question before launch: what actually needs to be in place before this goes live? Not "does it run," but "will it survive." Here's the checklist that answers that.
Unhealthy and unreachable are not the same failure. A readiness probe should stop traffic when a dependency like your DB or cache goes down, while a liveness probe restarts a service that's just stuck. Keep the two separate — conflating them means you either restart a perfectly fine service or keep sending traffic to a broken one.
Structured JSON logs, a correlation ID on every request, dashboards, and distributed tracing turn "something's wrong" into "here's exactly what's wrong and where." Tag every request at the gateway with a trace ID and carry it through every service downstream — it's the difference between debugging in minutes versus hours.
Your build artifact — JAR, Docker image, whatever — should be identical across dev, QA, and prod. Only config changes between environments, never code. Pull config from environment variables or a config server, and keep secrets out of git entirely; a vault or cloud secrets manager exists for exactly this.
Hand-running SQL against prod is how outages start. Versioned, automated migration tools give you a forward-only, traceable history of every schema change, checked into git like everything else.
Tests, static analysis, dependency and container scans, coverage thresholds — these aren't bureaucracy, they're what stops "works in dev" from becoming "broke in prod." Build the artifact once and promote the same build through every environment.
Retries with backoff, timeouts, circuit breakers, bulkheads — assume every downstream call will eventually fail and decide in advance what happens next, instead of finding out live.
Performance isn't "make it fast," it's "meet the number you promised." Define SLOs, track the SLIs that measure them, and set an error budget that pauses deploys when you blow past it. Without that, you're guessing.
TLS everywhere, OAuth2/OIDC, security headers, dependency scanning, and secrets that never touch source control. Bolted-on security is usually missing security.
Blue/green gives you an instant switch and an instant rollback. Canary releases limit the blast radius by ramping traffic gradually. Feature flags decouple deploying code from releasing it, so shipping becomes a technical event and releasing becomes a business decision.
When something breaks at 2am, the on-call engineer shouldn't be reverse-engineering your system from scratch. A good runbook — symptoms, diagnosis, fix, rollback, escalation — is what turns an incident into a non-event.
Nobody owns all ten of these alone. Production readiness is a team sport — dev, DevOps, SRE, security, all pulling toward the same reliability bar. Pick one section and start there.
I build landing pages, SaaS UI, and mobile apps with AI in the loop and judgment at the wheel. Fast scaffolding is cheap now. Coherent products that convert are not.
Get in touch© 2026 Shreyash Bagade
All posts