What if you could switch new features on or off instantly without waiting for a full app update?
Why Feature flags in Microservices? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a big app with many users, and you want to try a new feature only for some users without stopping the whole app.
Without feature flags, you must change the code, deploy a new version, and hope it works perfectly for everyone.
This manual way is slow because every change needs a full deployment.
It is risky because if the new feature has bugs, all users suffer.
Also, rolling back is hard and takes time, causing frustration for users and developers.
Feature flags let you turn features on or off instantly without changing code or restarting the app.
You can test new features safely with small groups, fix issues quickly, and roll out improvements step-by-step.
if (newFeatureEnabled) { runNewFeature(); } else { runOldFeature(); }
if (featureFlag.isEnabled('newFeature')) { runNewFeature(); } else { runOldFeature(); }
Feature flags enable safe, fast, and flexible control over which users see which features, making continuous delivery smooth and reliable.
A streaming service wants to test a new recommendation algorithm only for 5% of users to see if it improves watch time before releasing it to everyone.
Manual feature releases are slow and risky.
Feature flags let you control features dynamically without redeploying.
This improves testing, rollout, and rollback in microservices.
Practice
feature flags in microservices?Solution
Step 1: Understand feature flags concept
Feature flags allow toggling features on or off dynamically without changing the codebase.Step 2: Identify the main benefit in microservices
This helps in testing, gradual rollout, and quick disabling of features without redeployment.Final Answer:
To enable or disable features without deploying new code -> Option BQuick Check:
Feature flags = toggle features dynamically [OK]
- Confusing feature flags with database scaling
- Thinking feature flags improve network speed
- Assuming feature flags handle encryption
new_ui_enabled in a microservice?Solution
Step 1: Identify correct method to check flag status
Checking if a feature flag is enabled usually uses a method likeisEnabledreturning true or false.Step 2: Analyze options
if (featureFlags.isEnabled('new_ui_enabled')) { /* use new UI */ } correctly checks if the flag is enabled before using the feature. if (featureFlags.check('new_ui_enabled') == false) { /* use new UI */ } incorrectly uses check and false condition. featureFlags.enable('new_ui_enabled') and featureFlags.remove('new_ui_enabled') modify flags, not check them.Final Answer:
if (featureFlags.isEnabled('new_ui_enabled')) { /* use new UI */ } -> Option CQuick Check:
Check flag with isEnabled() = if (featureFlags.isEnabled('new_ui_enabled')) { /* use new UI */ } [OK]
- Using enable() or remove() to check flags
- Checking flag with wrong method or negation
- Confusing flag check with flag update
if (featureFlags.isEnabled('beta_feature')) {
return 'Beta feature active';
} else {
return 'Beta feature inactive';
}
What will be the output if the flag beta_feature is set to false?Solution
Step 1: Understand flag value effect on condition
The condition checks ifbeta_featureis enabled (true). If false, it goes to else branch.Step 2: Determine output when flag is false
Since the flag is false, the else block executes returning 'Beta feature inactive'.Final Answer:
Beta feature inactive -> Option AQuick Check:
Flag false triggers else = Beta feature inactive [OK]
- Assuming false flag runs if block
- Expecting error when flag is false
- Ignoring else branch output
if (featureFlags.isEnabled('dark_mode')) {
disableDarkMode();
}
Why might this code not work as intended?Solution
Step 1: Analyze the condition logic
The code disables dark mode if the flag is enabled, which is opposite of expected behavior (usually enabled flag means enable feature).Step 2: Identify correct logic for disabling feature
To disable dark mode when flag is false, the condition should check if flag is disabled or negate the check.Final Answer:
It disables dark mode when the flag is enabled, which is opposite logic -> Option AQuick Check:
Enabled flag should enable, not disable [OK]
- Confusing enable and disable logic
- Assuming flag controls only backend features
- Using wrong flag names without checking
Solution
Step 1: Understand gradual rollout with feature flags
Gradual rollout means enabling feature for a small percentage of users first, then increasing over time.Step 2: Identify scalable and safe design
A centralized flag service allows dynamic control and percentage rollout. Fallback ensures quick rollback if issues arise.Step 3: Evaluate other options
Deploy new code with feature always enabled and monitor logs manually lacks control and rollback ease. Hardcode feature flag values in each microservice and update code to change flags requires code changes for flag updates, not scalable. Disable all other microservices during rollout to avoid conflicts is disruptive and unnecessary.Final Answer:
Use a centralized feature flag service with percentage rollout and fallback to old payment service -> Option DQuick Check:
Centralized flags + gradual rollout = Use a centralized feature flag service with percentage rollout and fallback to old payment service [OK]
- Hardcoding flags causing frequent deployments
- Disabling services unnecessarily during rollout
- Ignoring rollback strategies
