3.7 KiB
ADR-0008: Canary Deploy Mandatory for Tier-1 (sp0/up0) Services in Production
Status: Accepted Category: RELIABILITY Date decided: Mid-project Date documented: 2026-05-12
Context
Meesho's services are classified by priority tier (sp0, up0, sp1, up1, etc.). Tier-1 services (sp0/up0) handle the highest traffic volumes and are critical to core business flows. A bad deploy that hits 100% of production traffic on a Tier-1 service has a catastrophic blast radius — full outage, revenue impact, and customer-facing failure. Teams were inconsistently configuring canary rollouts: some enabled them, some skipped them, and some configured them with skipAnalysis: true which bypasses the automated rollout analysis.
This inconsistency was the contributing factor in at least one production incident where a bad deploy on a Tier-1 service reached full traffic before the issue was detected.
Decision
deployArgoCD.groovy enforces canary deployment as a hard requirement for all services with priority_v2: sp0 or priority_v2: up0 deploying to the prd environment. The enforcement checks:
canary.enabled: truemust be setcanary.skipAnalysis: false— analysis cannot be bypassedcanary.enableManualPromotion: true— a human must promote the canary to full traffic
If any of these conditions are not met, the deployment is blocked with an explicit error: "Enable canary and retry". Enforcement is applied at the library level — service teams cannot override it.
Alternatives Considered
- Documentation and guidelines only: Rejected — teams were already aware of canary best practices but inconsistently applied them; a documented recommendation had failed to produce uniform behaviour.
- Enforcement in Ringmaster only: Considered but rejected — enforcement at the library level means it applies to all deploy paths, including any future tooling that calls
deployArgoCD.groovy. - Enforce for all services, not just sp0/up0: Considered but rejected as too disruptive — lower-priority services have smaller blast radii and the overhead of canary analysis was not justified for all tiers.
Consequences
Positive:
- Tier-1 bad deploys cannot reach 100% of production traffic without a human promotion step.
- Canary analysis (metrics, error rate) runs automatically before promotion, catching regressions before they impact all users.
- Enforcement is consistent across all Tier-1 services — no team can skip it.
Negative:
- Canary rollouts add time to Tier-1 deployments — promotion requires human action, which can delay hotfixes.
- The hotfix path (
hotfix/*branches) setsskipAnalysis: trueto allow bypassing canary analysis in emergencies, which re-introduces the risk for the hotfix scenario. - Services that newly cross the sp0/up0 threshold must configure canary before their next prd deploy or they will be blocked.
Neutral:
- The enforcement only applies to non-cron, non-worker, non-scheduler, non-consumer deployments — background jobs are excluded.
Constraints
A production incident on a Tier-1 service drove this decision. Post-incident, the risk of leaving canary configuration to team discretion was deemed unacceptable. The library-level enforcement was the fastest way to guarantee coverage across all affected services without requiring each team to update their configuration proactively.
Current Assessment
Still appropriate — no changes needed.
Notes
- Key file:
src/com/meesho/stages/deployArgoCD.groovy:407-429— canary enforcement block - Hotfix bypass:
value_binding1['canary']['skipAnalysis'] = (env.hot_fix) ? true : ...at line 355 — hotfixes can bypass canary analysis - The
addHeadlessflag and Node services are also excluded from enforcement