Skip to main content

Deploy and Pray

Deploy and pray ships releases with no verification or monitoring, so failures are discovered by users. Replace hope with automated smoke tests, canary rollouts, observability, and automated rollback so every release proves itself.

Deploy and pray is releasing to production with no systematic way to know whether the release succeeded. The team pushes the change, crosses their fingers, and waits to see if anything breaks, often learning of failures only when users complain. Verification, if it exists, is a manual click-around rather than automated, observable confirmation.

It is the natural companion of manual deployment and no rollback plan, and together they make releases a gamble.

Why It Happens

When deploys mostly work, teams under-invest in verification. Building smoke tests, health checks, and dashboards feels like effort that does not pay off most of the time. Monitoring may exist but not be wired into the deploy process, so no one looks at it during a release. The result is a release process that produces no trustworthy signal about its own outcome.

Why It Hurts

Failures go undetected until they have already harmed users, by which point the damage and the diagnosis are both larger. Mean time to detection balloons because the first signal is a customer complaint, not an alert. Without observability tied to deploys, the team cannot tell a bad release from an unrelated incident. The constant uncertainty breeds fear of deploying, which slows delivery.

Warning Signs

  • There are no automated checks after a deploy completes.
  • Users discover and report outages before the team does.
  • Deploys are not accompanied by monitoring or dashboards.
  • Success is judged by "nobody complained yet."

Better Alternatives

Replace hope with evidence. Run automated smoke tests immediately after deploy to confirm core functionality. Use progressive delivery, canary or gradual rollout, so problems surface on a small slice of traffic first. Wire observability (metrics, logs, traces) into the deploy so error rates and latency are watched automatically. Set automated rollback to trigger when health signals degrade.

How to Refactor Out of It

Add a small set of post-deploy smoke tests that exercise critical paths and fail the deploy if they break. Instrument the service with key health metrics and surface them on a deploy dashboard. Introduce canary releases so a bad change is caught at low blast radius. Finally, connect those signals to automated rollback so the system, not a hopeful human, decides whether a release stays.