Feature Flags | Progressive Rollout Guide
Separate deployment from release with feature flags. Gradually increase user percentage while monitoring metrics. GitScrum tracks flagged features.
8 min read
Feature flags separate deployment from release. GitScrum helps teams track flagged features and coordinate progressive rollouts.
Feature Flag Basics
Why Feature Flags
FEATURE FLAG BENEFITS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WITHOUT FLAGS: β
β ββββββββββββββ β
β Deploy = Release β
β All users get feature immediately β
β Rollback requires new deployment β
β Big bang risk β
β β
β WITH FLAGS: β
β βββββββββββ β
β Deploy β Release β
β Enable when ready β
β Disable instantly if issues β
β Gradual rollout possible β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β FLAG USE CASES: β
β β
β RELEASE TOGGLES: β
β Deploy incomplete feature, enable when done β
β "Ship dark" - code in prod but off β
β β
β EXPERIMENT TOGGLES: β
β A/B test features β
β Compare metrics between variants β
β β
β OPS TOGGLES: β
β Kill switch for problematic features β
β Graceful degradation β
β β
β PERMISSION TOGGLES: β
β Premium features for paying users β
β Beta features for early adopters β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CODE EXAMPLE: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β if (featureFlags.isEnabled('new-search')) { ββ
β β return <NewSearchComponent />; ββ
β β } ββ
β β return <OldSearchComponent />; ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Progressive Rollout
Rollout Strategy
PROGRESSIVE ROLLOUT STAGES:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β STAGE 1: INTERNAL (0.1%) β
β βββββββββββββββββββββββββ β
β β’ Development team only β
β β’ Catch obvious issues β
β β’ Duration: 1-2 days β
β β
β STAGE 2: EMPLOYEES (1%) β
β ββββββββββββββββββββββββ β
β β’ All company employees β
β β’ Real-world testing β
β β’ Duration: 1-3 days β
β β
β STAGE 3: BETA USERS (5%) β
β ββββββββββββββββββββββββ β
β β’ Opted-in early adopters β
β β’ Collect feedback β
β β’ Duration: 3-5 days β
β β
β STAGE 4: CANARY (10%) β
β βββββββββββββββββββββ β
β β’ Random user sample β
β β’ Monitor metrics β
β β’ Duration: 2-3 days β
β β
β STAGE 5: PARTIAL (25%, 50%) β
β βββββββββββββββββββββββββββ β
β β’ Larger population β
β β’ Confirm at scale β
β β’ Duration: 1-2 days each β
β β
β STAGE 6: FULL ROLLOUT (100%) β
β ββββββββββββββββββββββββββββ β
β β’ All users β
β β’ Continue monitoring β
β β’ Remove flag after stable β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β AT EACH STAGE: β
β β’ Monitor error rates β
β β’ Watch performance metrics β
β β’ Collect user feedback β
β β’ Ready to pause or rollback β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Rollout Tracking
TRACKING ROLLOUTS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β FEATURE FLAG TASK: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β FLAG-012: New Search Experience Rollout ββ
β β ββ
β β FLAG NAME: new-search-experience ββ
β β CREATED: Jan 10, 2025 ββ
β β OWNER: @product-lead ββ
β β ββ
β β ROLLOUT PLAN: ββ
β β β Jan 12: Internal (0.1%) ββ
β β β Jan 14: Employees (1%) ββ
β β β Jan 17: Beta users (5%) ββ
β β β Jan 20: Canary (10%) ββ
β β β Jan 22: 25% (pending approval) ββ
β β β Jan 24: 50% ββ
β β β Jan 27: 100% ββ
β β β Feb 10: Remove flag ββ
β β ββ
β β METRICS TO WATCH: ββ
β β β’ Search latency (p95 < 200ms) ββ
β β β’ Click-through rate (β₯ baseline) ββ
β β β’ Error rate (< 0.1%) ββ
β β ββ
β β CURRENT STATUS: 10% rollout ββ
β β Metrics: All green β
ββ
β β ββ
β β ROLLBACK TRIGGER: ββ
β β β’ Error rate > 1% ββ
β β β’ Latency p95 > 500ms ββ
β β β’ CTR drops > 20% ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β DAILY CHECK: β
β β’ Are metrics within bounds? β
β β’ Any user complaints? β
β β’ Ready for next stage? β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Flag Management
Flag Lifecycle
FEATURE FLAG LIFECYCLE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β LIFECYCLE STAGES: β
β β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β CREATE βββββ ROLLOUT βββββ STABLE βββββ REMOVE β β
β β β β β β β β β β
β β Flag β β 0%β100% β β 100% β β Delete β β
β β defined β β monitor β β confirm β β code β β
β βββββββββββ βββββββββββ βββββββββββ βββββββββββ β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β FLAG DOCUMENTATION: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β FLAG REGISTRY ββ
β β ββ
β β FLAG PURPOSE STATUS OWNER ββ
β β ββββ βββββββ ββββββ βββββ ββ
β β new-search Release toggle Rollout @alex ββ
β β dark-mode Release toggle 100% @jordanββ
β β premium-export Permission Active @sam ββ
β β experimental-ai Experiment 5% @pat ββ
β β kill-notifications Ops toggle Ready @ops ββ
β β ββ
β β CLEANUP NEEDED: ββ
β β β’ old-checkout: 100% for 30 days β remove β οΈ ββ
β β β’ beta-dashboard: 100% for 60 days β remove π΄ ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β CLEANUP RULES: β
β βββββββββββββ β
β β’ Flag at 100% for 2+ weeks β Schedule removal β
β β’ Flag at 0% for 4+ weeks β Consider deletion β
β β’ Create cleanup task when flag reaches 100% β
β β’ Review flag inventory monthly β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Avoiding Tech Debt
FLAG HYGIENE:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β THE PROBLEM: β
β ββββββββββββ β
β Flags accumulate if not cleaned up β
β Code becomes confusing with many branches β
β "Which code path is actually running?" β
β β
β PREVENTION: β
β βββββββββββ β
β β
β EXPIRATION DATES: β
β Every flag has a planned removal date β
β Set when creating flag β
β Task created for cleanup β
β β
β FLAG LIMITS: β
β Max 20 active flags per service β
β Must remove one to add one (at limit) β
β β
β REGULAR REVIEW: β
β Monthly flag inventory review β
β "Which flags can we remove?" β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β CLEANUP TASK: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β TECH-045: Remove new-search flag ββ
β β ββ
β β FLAG: new-search-experience ββ
β β STATUS: 100% for 3 weeks ββ
β β STABLE: Yes, all metrics normal ββ
β β ββ
β β TASKS: ββ
β β β Remove feature flag checks from code ββ
β β β Remove old code path ββ
β β β Remove flag from configuration ββ
β β β Update tests ββ
β β β Deploy and verify ββ
β β ββ
β β ESTIMATE: 2 points ββ
β β PRIORITY: Medium (tech debt) ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Rollback Procedures
Handling Issues
ROLLBACK PROCESS:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β WHEN TO ROLLBACK: β
β βββββββββββββββββ β
β β’ Error rate exceeds threshold β
β β’ Performance degradation β
β β’ Critical user complaints β
β β’ Security issue discovered β
β β
β HOW TO ROLLBACK: β
β βββββββββββββββββ β
β 1. Set flag to 0% β
β 2. Verify old behavior restored β
β 3. Notify team β
β 4. Investigate issue β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ROLLBACK TASK: β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β INCIDENT: New search causing timeout errors ββ
β β ββ
β β DETECTED: Jan 20, 2:15 PM ββ
β β Error rate: 5% (threshold: 1%) ββ
β β ββ
β β ACTION TAKEN: ββ
β β 2:17 PM - Flag set to 0% ββ
β β 2:18 PM - Error rate returning to normal ββ
β β 2:20 PM - Confirmed all traffic on old path ββ
β β ββ
β β FOLLOW-UP: ββ
β β β Root cause analysis ββ
β β β Fix identified issue ββ
β β β Add test to prevent regression ββ
β β β Re-plan rollout ββ
β β ββ
β β ROOT CAUSE: ββ
β β Database query not optimized for 10% load ββ
β β Need index before resuming rollout ββ
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β KEY: Rollback is NOT failure β
β It's the system working as designed β
β Better to catch issues early β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ