Every deployment strategy is a bet about what will go wrong. Blue-green bets that you'll want to switch back instantly. Canary bets that a small slice of traffic will reveal problems before everyone sees them. Rolling bets that replacing instances a few at a time keeps enough capacity up to avoid an outage.
Teams often pick one because it's what their platform does by default. That's fine until the day the default doesn't protect against the failure you actually have. Here's how the three compare, what each needs to work, and how to choose.
The quick comparison
| Rolling | Blue-green | Canary | |
|---|---|---|---|
| How it works | Replace instances in batches | Run two full environments, switch traffic | Send a small % of traffic to the new version, then increase |
| Extra infrastructure | Little (a surge batch) | Roughly double during the switch | A little, plus traffic-splitting |
| Rollback speed | Slow-ish (roll back in batches) | Very fast (switch back) | Fast (send traffic back) |
| Blast radius of a bad release | Grows as the rollout progresses | All users at once after the switch | Limited to the canary share |
| Old and new versions live together | Yes, during the rollout | Briefly, or not at all | Yes, for the whole canary period |
| Depends heavily on | Good health checks | Pre-switch testing | Good metrics and comparison |
Rolling deploys
How it works. The orchestrator (Kubernetes Deployments, an autoscaling group's instance refresh, most PaaS platforms) replaces old instances with new ones a few at a time. In Kubernetes, maxSurge and maxUnavailable control how many extra and how many missing pods are allowed during the rollout.
What it protects you from. Capacity loss during deploys, and releases that fail to start at all. If new pods never become ready, the rollout stalls and old pods keep serving.
What it doesn't. A release that starts fine but behaves badly: returns wrong data, slows down under real traffic, errors on one specific endpoint. Readiness probes pass, the rollout continues, and eventually every instance runs the bad version. Rolling back means another rolling deploy, in batches.
Hidden requirement. Readiness checks that reflect real ability to serve. A readiness endpoint that returns 200 as soon as the process starts makes rolling deploys much less safe than they look.
Blue-green deploys
How it works. You keep two complete environments. "Blue" serves production; you deploy the new version to "green", test it, then switch traffic, usually at the load balancer, DNS or router level. Blue stays around, ready to take traffic back.
What it protects you from. Slow rollbacks. If something's wrong after the switch, switching back is close to instant. It's also clean: users don't see a mix of versions for long.
What it doesn't. Problems that only appear under real production traffic. After the switch, all users hit the new version at once. If your pre-switch tests miss something, everyone finds it together.
Hidden requirements.
- Shared state compatibility. Both environments usually share a database. A schema migration that the old version can't handle makes "switch back" impossible. Use expand-and-contract migrations: add new columns and tables first, deploy code that works with both, and remove old structures only later.
- Warm-up. A green environment with cold caches and no JIT warm-up can be slow for its first minutes of real traffic.
- DNS-based switching is slow to reverse. If you switch with DNS, clients cache records, so "instant" rollback isn't. Switching at a load balancer is quicker.
Canary deploys
How it works. Deploy the new version alongside the old one and send a small share of traffic to it (say a few percent), compare its behaviour with the stable version, and increase gradually if it looks healthy. Tools like Argo Rollouts, Flagger, service meshes and many managed platforms automate the steps.
What it protects you from. Bad releases reaching everyone. If the canary's error rate or latency is worse, you stop and roll back having affected only a small fraction of requests.
What it doesn't.
- Low-traffic problems. If the canary gets 2% of a small site's traffic, a bug in a rarely used endpoint may never get exercised during the canary window.
- Problems that need time. Memory leaks, slow queue build-ups and nightly jobs won't show in a 10-minute canary.
- Shared-resource damage. A canary that writes corrupt data to a shared database does damage beyond its traffic share.
Hidden requirement. Metrics you trust, split by version. Canary analysis is only as good as your ability to compare "new version error rate" against "old version error rate" with enough traffic to be meaningful. Without version-labelled metrics, a canary is just a slow rolling deploy.
Which failures does each catch?
| Failure | Rolling | Blue-green | Canary |
|---|---|---|---|
| New version won't start | ✅ Stalls safely | ✅ Caught before switch | ✅ Caught early |
| Errors under real traffic | ❌ Spreads gradually | ❌ Hits everyone, fast rollback | ✅ Limited exposure |
| Slow performance | ⚠️ If probes notice | ❌ After switch | ✅ If latency is compared |
| Incompatible DB migration | ❌ Mixed versions break | ❌ Blocks rollback | ❌ Mixed versions break |
| Slow leak over hours | ❌ | ❌ | ❌ (unless canary runs long) |
The bottom rows matter: no strategy fixes incompatible migrations or slow leaks. Those need backwards-compatible schema changes and ongoing monitoring, whatever deploy strategy you choose.
How to choose
- Small team, modest traffic, good health checks: rolling is usually fine. Invest in readiness checks and an easy rollback command.
- You need fast, clean rollback and can afford temporary double capacity: blue-green.
- High traffic, good metrics and real risk from each release: canary, ideally automated.
- Many teams combine them: canary first, then a rolling or blue-green promotion.
The part every strategy shares
Each strategy assumes someone, or something, notices when the new version is unhealthy. Health checks catch the obvious failures; metrics catch some of the rest; and an outside check of what users actually see catches what's left: the page that loads but is broken, the region that can't reach you, the login that fails.
That outside view is what upordown.online provides: checking your site from beyond your own infrastructure, during deploys and every other minute too.
Related reading
- No deploys on Friday: wise rule or a sign your monitoring is broken?
- Postmortem (hypothetical): our health check was so thorough it took every instance out of the load balancer at once
- Your health check returns 200 while users get errors: 7 health check mistakes
- Six TLS certificate myths that cause outages (and one that just wastes money)
Which deploy strategy does your team use, and has it ever let a bad release through that another strategy would have caught?

