Problem
Deploying a change to all users at once turns every release into a gamble, and problems are discovered by customers rather than by monitoring. Teams respond by slowing releases down, which increases batch size and makes failures even larger.
Release changes gradually to growing audiences with automated analysis, limiting the blast radius of defects.
Deploying a change to all users at once turns every release into a gamble, and problems are discovered by customers rather than by monitoring. Teams respond by slowing releases down, which increases batch size and makes failures even larger.
Progressive delivery extends continuous delivery by controlling who sees a change and when. Instead of one irreversible switch, a release is a sequence of measured steps.
A new version is deployed alongside the stable one with no traffic. A rollout controller shifts a small share of requests, collects metrics for both versions, and runs analysis queries. If the canary stays within thresholds for the configured duration, the controller moves to the next weight. A breach aborts the rollout and returns all traffic to the stable version. Feature flags add a second layer by gating functionality independently of the binary.
Progressive delivery has two complementary layers. Traffic-based rollouts control which version of a binary receives requests, and are best for infrastructure-level risk such as performance regressions. Flag-based rollouts control which users see a behaviour, and are best for product-level risk such as a new checkout flow. Using both lets a team ship code dark, ramp exposure by cohort and turn a feature off instantly without redeploying, while keeping the deployment pipeline itself simple and fast.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: checkout
spec:
replicas: 10
strategy:
canary:
analysis:
templates:
- templateName: error-rate-vs-baseline
steps:
- setWeight: 5
- pause: {duration: 10m}
- setWeight: 25
- pause: {duration: 15m}
- setWeight: 50
- pause: {duration: 15m}