Feature flags (also called feature toggles) are conditional switches in code that let teams control feature availability in production at runtime, without deploying new code. Progressive delivery extends this concept into a disciplined release strategy—combining feature flags, canary releases, and gradual rollouts to minimize risk while maximizing learning. This approach decouples deployment (code reaches production) from release (users see the feature), giving teams fine-grained control over who sees what, when. Unlike traditional deploy-and-pray methods, progressive delivery treats every release as a controlled experiment where blast radius stays small, rollback is instant, and feature exposure can be dialed up or down based on real-time metrics. The key mental model: feature flags are the control mechanism; progressive delivery is the strategic framework for safe, incremental innovation at scale.
What This Cheat Sheet Covers
This topic spans 16 focused tables and 105 indexed concepts, 101 flashcards. Below is a complete table-by-table outline of this topic, spanning foundational concepts through advanced details.
A jump-to index of every table row in this cheat sheet.
An interactive map of every table and concept in this topic.
Table 1: Feature Flag Types
Feature flags come in distinct types based on their intended lifespan and purpose — release toggles expire in weeks while permission flags are permanent business gates. Choosing the right type upfront prevents the most common form of flag debt: short-lived flags outliving their purpose.
| Type | Example | Description | |
|---|---|---|---|
if (flags.newCheckout) { renderNewFlow()} else { renderOldFlow()} | • Short-lived flag that hides incomplete features until ready • removed once feature reaches 100% rollout • Typical lifespan: days to weeks | ||
variant = flags.pricingTestif (variant === 'A') { showPrice(9.99)} | • Drives A/B tests or multivariate experiments by assigning users to variations • retired after statistical significance reached • Returns string/JSON, not just boolean | ||
if (flags.enableCaching && load > threshold) { useCache()} | • Long-lived flag controlling operational behavior like caching, rate limiting, or load shedding • acts as a circuit breaker or performance tuner • Never expires if tied to permanent system behavior | ||
if (flags.premiumDashboard && user.plan === 'pro') { renderDashboard()} | • Controls feature access based on user tier, role, or entitlement • permanent flag tied to business model (e.g., freemium gates). Should be explicitly permission-scoped, not hidden behind generic names | ||
if (flags.paymentService) { processPayment()} else { queueOffline()} | • Emergency shutoff for problematic features or overloaded services • flipped manually or automatically when monitoring detects failure • Should trigger alerts when activated | ||
theme = flags.appTheme ?? 'default'apiUrl = flags.backendUrl | • Returns a non-boolean value (string, number, JSON) to configure app behavior dynamically without deployment. • Used for API endpoints, thresholds, copy text • distinct from toggle flags — never binary |