A strategy for releasing to production
A release strategy is the chosen method for getting a new version of software in front of users while controlling the blast radius if it goes wrong. Canary, blue-green, rolling, featureFeatureProduct SpecificationA product capability or featureView reference →-flagged, ring: each is a different answer to one question, which is how much riskRiskComplianceA risk to the product or businessView reference → to expose at once and how fast to back out. The strategy is the plan; the deploymentDeploymentEngineeringA deployment eventView reference → is the event that carries it out, and conflating the two is how teams end up with a sophisticated rollout mechanism and no agreed policy for using it.
Martin Fowler described blue-green deployment in 2010, building on practice from the continuous delivery movement. Two identical production environments, blue and green, run side by side; you deploy the new version to the idle one, switch routing across, and keep the old one warm as an instant rollback. Canary releasesReleaseProduct SpecificationA shipped version of the productView reference → borrowed their name from the caged bird carried into coal mines: send a small slice of traffic to the new version, watch its health, and widen exposure only if the signals hold.
In 2018 James Governor of RedMonk coined "progressive delivery" as the umbrella term for this family. He grouped canarying, feature flagsFeature FlagEngineeringA feature toggle for controlled rolloutView reference →, and A/B testing at scale under one idea: release as a gradual, observable, reversible process governed by real signals rather than a single all-or-nothing cutover. Ring deployment, popularised by Microsoft's internal practice, fits the same shape, expanding from inner rings of staff and early adopters out to the general population.
The strategies diverge on where risk concentrates. Blue-green moves all traffic at once, so its risk is the switch itself, balanced by near-instant rollback. Rolling updates replace instances incrementally with no second environment, trading rollback speed for resource efficiency. Canary and ring keep the old version serving most users while a measured fraction tests the new one. Feature flags decouple the strategy entirely from the deploy, letting code ship dark and activate later by configuration.
A team ships a rewritten search backend to a service handling 50,000 sessions an hour. A blue-green switch would be all-or-nothing, so they choose a canary. The deployment routes 1% of traffic to the new version and watches error rate and p99 latency against the canary's golden signals for ten minutes.
At 5% the new version's latency holds at 140ms, matching the baseline, and the rollout proceeds to 25%, then 50%, then 100% over an hour. Had errors spiked at 5%, the strategy's exit condition would have pulled traffic back to the old version automatically, capping the damage at a twentieth of users. The release strategy defined those gates and thresholds up front; the deployment merely executed them. The same strategy can govern next week's release of an unrelated component, which is exactly why it is worth naming once and reusing.
deploymentDeploymentEngineeringA deployment eventView reference → is a single act of pushing a specific version to a specific environment at a specific time. A release strategy is the reusable pattern that act follows. One canary strategy governs hundreds of deployments; the graph links them through release_strategy_used_by_deploymentRelease Strategyused byDeploymentcross-domain so the policy stays distinct from each instance.feature_flagFeature FlagEngineeringA feature toggle for controlled rolloutView reference → toggles a capabilityCapabilityStrategyAn ability that enables value deliveryView reference → at runtime without redeploying. It can be a release strategy in its own right (flagged rollout) or a control used within another, such as gating a canary cohortCohortGrowthA group of users sharing a common characteristicView reference →. The flag is the switch; the strategy decides when and for whom to throw it.releaseReleaseProduct SpecificationA shipped version of the productView reference → is the versioned bundle of changes being shipped, the what. The release strategy is the how. The same release can go out via blue-green to one component and rolling to another.In the Unified Product Graph a release strategy is a reusable operations entity that products and infrastructure adopt rather than reinvent per deploy. A product connects through Productreleased viaRelease Strategyhierarchy, an infrastructure componentInfrastructure ComponentDevOps & PlatformAn infrastructure component (server, CDN, etc.)View reference → through product_released_via_release_strategyInfrastructure Componentreleased viaRelease Strategyhierarchy, and individual rollouts attach through infrastructure_component_released_via_release_strategyRelease Strategyused byDeploymentcross-domain. Keeping the strategy separate from the deployment lets a team query, in one place, how every part of the product reaches users, and spot the component still shipping by an unguarded big-bang push.release_strategy_used_by_deployment
Type-specific fields on BaseNode
strategy_typestringHow a new version reaches production. `blue_green` = instant switch between two identical environments. `canary` = gradual percentage rollout. `rolling` = replace instances incrementally. `recreate` = take down old, bring up new. `feature_flag` = code ships, features gated. @example "canary" for gradual rollout, "blue_green" for instant switch with instant rollback
canary_percentagenumberTraffic routed to canary. Applies when `strategy_type === 'canary'`. @example 5 (5% initial canary before full rollout)
rollback_criteriastringRollback triggers, automatic or manual. @example "Error rate > 1% over 5 minutes", "Latency p99 > 2x baseline"
bake_timestringSoak time before promoting to full production. @example "30m", "2h", "24h"
auto_rollbackbooleanWhether the system rolls back on threshold breach without human intervention.
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
3 edge types connected to this entity.
product_released_via_release_strategyinfrastructure_component_released_via_release_strategyrelease_strategy_used_by_deployment