Progressive Delivery Strategies
A practitioner walkthrough of canary, ring, and percentage rollouts using feature flags so you ship risky changes without waking anyone up.
13 min read
What progressive delivery actually means
Progressive delivery is the practice of exposing a change to a growing slice of your users instead of flipping it on for everyone at once. You start with a tiny audience, watch your metrics, and widen the exposure only when the evidence says the change is safe. If something breaks, you shrink the audience back to zero without a redeploy.
That last sentence is the whole point. Traditional deployment couples “the code is on the servers” with “users can see the feature.” Progressive delivery breaks that coupling. Your code ships continuously through your normal pipeline, but the release - the moment behavior changes for a real person - is a separate decision you control at runtime. If you have read the earlier chapters, this is the payoff of decoupling deploy from release that feature flags give you.
The mental model I use: deployment is a plumbing problem, release is a product problem. Progressive delivery is how you turn the release into a dial instead of a switch.
The three core strategies
There are many named patterns, but almost all of them are variations on three primitives.
Percentage rollouts. You expose the change to a random percentage of traffic and ramp it up over time: 1 percent, then 5, 25, 50, 100. The key detail people miss is sticky bucketing. A given user must land in the same bucket every time, or someone will see the new checkout flow on one page load and the old one on the next. Good flag platforms hash a stable user key so bucketing is deterministic. The feature flag rollout strategies guide goes deeper on how to structure these ramps.
Ring deployments. Instead of random percentages you release to concentric audiences of increasing risk tolerance. Ring 0 is you and the team. Ring 1 is internal staff dogfooding the build. Ring 2 is a beta cohort or a friendly customer. Ring 3 is everyone. Rings are targeting rules, not percentages, so you decide who is in each ring by attributes like email domain, plan tier, or an explicit allowlist. Microsoft popularized this model, and it is excellent when you want humans in the loop before public exposure.
Canary releases. A canary sends a small, often random slice of traffic to the new behavior and compares its health metrics against the control group in near real time. The distinguishing feature of a canary versus a plain percentage rollout is the automated comparison: error rate, latency, and business metrics for the canary cohort are watched against the baseline, and the rollout pauses or rolls back automatically if the canary looks worse. The canary vs blue-green deployment post contrasts this with the older strategy of standing up a whole parallel environment.
How it works under the hood
Every progressive delivery strategy needs three things working together.
-
A stable evaluation context. The flag SDK evaluates a rule against attributes about the current request - a user id, a plan, a region, an app version. That context is what lets “5 percent of enterprise users in the EU” mean something precise.
-
Deterministic bucketing. The platform hashes a chosen attribute (usually the user key) into a number between 0 and 1 and compares it to your rollout percentage. Because the hash is stable, the same user always falls on the same side of the line as you ramp. Change the salt or the key and users reshuffle, which you almost never want mid-rollout.
-
A metrics feedback loop. Progressive delivery without observation is just a slow way to break production. You need dashboards or automated guards on error rate, latency, and at least one product metric, sliced by the flag variant. The whole reason to go slow is to catch a regression while only a fraction of users feel it.
Here is a concrete ramp for a new search backend:
- Day 1: internal ring only, watch p95 latency and error rate.
- Day 2: 1 percent of production traffic, compare canary cohort against control.
- Day 3: 10 percent, add a guard that auto-disables the flag if error rate exceeds 2 percent.
- Day 5: 50 percent, confirm business metrics like search-to-click are flat or up.
- Day 7: 100 percent, then schedule the flag for cleanup.
Notice that the code was fully deployed on day 1. Everything after was a runtime decision.
How the real tools do it
Progressive delivery is a first-class feature in mature flag platforms, not something you script yourself.
LaunchDarkly offers percentage rollouts with sticky bucketing, targeting rules for ring-style audiences, and guarded rollouts that watch a metric and revert automatically if it degrades. It is the reference implementation most teams benchmark against.
Statsig treats every rollout as a mini experiment. Because its heritage is experimentation, a percentage rollout automatically produces a readout of how the exposed cohort compares to control across your metrics, which blurs the line between a canary and an A/B test. That connection is exactly what the next chapter is about.
Harness FME, the former Split product, is built around progressive delivery with automated guardrails and statistical monitoring that can halt a rollout on a metric regression.
Unleash is the strong open-source option. Its gradual-rollout and strategy-constraint system gives you percentage and ring rollouts self-hosted, which matters if data residency rules out a SaaS vendor. For the broader landscape, the progressive delivery guide walks through more platforms and trade-offs.
Common mistakes
- Ramping on a schedule instead of on evidence. A calendar does not know if your error rate tripled. Gate each step on a metric, not a clock.
- Forgetting the rollback plan is the feature. If you cannot take the audience back to zero in one click, you are not doing progressive delivery, you are doing a slow risky deploy.
- Non-sticky bucketing. Reshuffling users mid-ramp creates flicker and poisons any metric comparison.
- No control group. Without a baseline cohort you cannot tell whether the new latency is the feature or just a noisy Tuesday.
Key takeaways
- Progressive delivery expands exposure gradually and shrinks it instantly, turning release into a dial.
- The three primitives are percentage rollouts, ring deployments, and canaries, distinguished mainly by how you pick the audience and whether comparison is automated.
- It rests on a stable evaluation context, deterministic sticky bucketing, and a metrics feedback loop.
- Gate every ramp step on evidence, keep a control group, and always be able to return to zero.
Once you can ramp a change to a cohort and measure how that cohort behaves, you are one small step from running a real experiment. The next chapter, experimentation and A/B testing, turns that measurement loop into a tool for deciding whether a change is actually better.
Frequently Asked Questions
Is progressive delivery the same as a canary release?
A canary release is one progressive delivery technique. Progressive delivery is the broader discipline of releasing to small audiences first and expanding only when the data looks healthy. Canaries, ring deployments, and percentage rollouts are all ways to do it.
Do I need a service mesh to do progressive delivery?
No. A service mesh routes traffic at the infrastructure layer, but feature flags do the same targeting at the application layer with far less setup. Most teams start with flags and only reach for mesh-based routing when they need to shift traffic between whole service versions.
How small should the first exposure be?
Small enough that a total failure is survivable and large enough to produce signal. For most products one to five percent of traffic, or an internal dogfood ring, is the right first step. If your traffic is low, start with named internal users instead of a percentage.
Continue Learning
Newsletter
Get the Feature Flags Newsletter
Platform benchmarks, real pricing data and progressive delivery practice. No spam.
LaunchDarkly Review
Unleash Review
Statsig Review
Harness FME (formerly Split) Review