Bird
Raised Fist0
Spring Bootframework~8 mins

Feature flags concept in Spring Boot - Performance & Optimization

Choose your learning style10 modes available
Performance: Feature flags concept
MEDIUM IMPACT
Feature flags affect application startup time and runtime decision-making speed, impacting how fast features are enabled or disabled without redeploying.
Toggle features dynamically in a Spring Boot app without slowing requests
Spring Boot
private final Map<String, Boolean> featureCache = new ConcurrentHashMap<>();

public boolean isFeatureEnabled(String feature) {
    return featureCache.computeIfAbsent(feature, this::loadFeatureFlag);
}

private boolean loadFeatureFlag(String feature) {
    return jdbcTemplate.queryForObject("SELECT enabled FROM feature_flags WHERE name = ?", Boolean.class, feature);
}
Caches feature flags in memory to avoid repeated database calls, reducing latency and CPU load.
📈 Performance GainSingle database call per feature, sub-millisecond flag checks after cache, reduces CPU and latency significantly
Toggle features dynamically in a Spring Boot app without slowing requests
Spring Boot
public boolean isFeatureEnabled(String feature) {
    // Reads from database on every call
    return jdbcTemplate.queryForObject("SELECT enabled FROM feature_flags WHERE name = ?", Boolean.class, feature);
}
Querying the database on every feature check causes high latency and blocks request threads.
📉 Performance CostBlocks request threads, adds 10-50ms latency per call, increases CPU usage under load
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Database call per flag check000[X] Bad
In-memory cached flag check000[OK] Good
Rendering Pipeline
Feature flag checks occur during request processing, affecting backend response time but not browser rendering directly.
→Backend Processing
→Request Handling
⚠️ BottleneckDatabase or external service calls for flag evaluation
Optimization Tips
1Avoid querying external sources for feature flags on every request.
2Cache feature flags in memory and refresh asynchronously.
3Monitor backend latency to detect feature flag performance issues.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance risk of checking feature flags by querying the database on every request?
AIt increases CSS paint cost.
BIt causes layout shifts in the browser.
CIt increases request latency and CPU usage due to repeated blocking calls.
DIt reduces bundle size.
DevTools: Spring Boot Actuator and Application Performance Monitoring (APM) tools
How to check: Use APM to measure request latency and database query counts; check logs for repeated flag queries.
What to look for: High request latency spikes and frequent database queries indicate poor feature flag performance.

Practice

(1/5)
1. What is the main purpose of using feature flags in a Spring Boot application?
easy
A. To improve database performance
B. To manage application logging levels
C. To handle user authentication
D. To enable or disable features without changing the code

Solution

  1. Step 1: Understand feature flags concept

    Feature flags allow toggling features on or off dynamically without redeploying code.
  2. Step 2: Identify the main use in Spring Boot

    In Spring Boot, feature flags help control feature availability safely during runtime.
  3. Final Answer:

    To enable or disable features without changing the code -> Option D
  4. Quick Check:

    Feature flags = toggle features dynamically [OK]
Hint: Feature flags toggle features without code changes [OK]
Common Mistakes:
  • Confusing feature flags with database optimization
  • Thinking feature flags manage authentication
  • Assuming feature flags control logging
2. Which of the following is the correct way to check a feature flag in a Spring Boot controller method?
easy
A. if(featureFlagService.isFeatureEnabled("newFeature")) { ... }
B. if(featureFlagService.checkFlag("newFeature")) { ... }
C. if(featureFlagService.enableFeature("newFeature")) { ... }
D. if(featureFlagService.toggleFeature("newFeature")) { ... }

Solution

  1. Step 1: Recall typical method naming for feature flags

    Common method to check if a feature is enabled is named like isFeatureEnabled.
  2. Step 2: Match method name with options

    Only if(featureFlagService.isFeatureEnabled("newFeature")) { ... } uses isFeatureEnabled which clearly indicates checking status.
  3. Final Answer:

    if(featureFlagService.isFeatureEnabled("newFeature")) { ... } -> Option A
  4. Quick Check:

    Check feature flag with isFeatureEnabled() [OK]
Hint: Look for method named isFeatureEnabled() to check flags [OK]
Common Mistakes:
  • Using methods that sound like they change state (enableFeature, toggleFeature)
  • Using incorrect method names not standard in feature flag services
3. Given the following Spring Boot code snippet, what will be the output if the feature flag "betaFeature" is disabled?
if(featureFlagService.isFeatureEnabled("betaFeature")) {
    System.out.println("Beta feature is ON");
} else {
    System.out.println("Beta feature is OFF");
}
medium
A. Beta feature is ON
B. Beta feature is OFF
C. No output
D. Runtime error

Solution

  1. Step 1: Understand the condition check

    The code prints "Beta feature is ON" only if the flag is enabled (true).
  2. Step 2: Analyze the flag state given

    The flag "betaFeature" is disabled, so isFeatureEnabled returns false, triggering the else block.
  3. Final Answer:

    Beta feature is OFF -> Option B
  4. Quick Check:

    Flag disabled = else block runs [OK]
Hint: Disabled flag triggers else block output [OK]
Common Mistakes:
  • Assuming disabled flag prints ON message
  • Expecting no output when else block exists
  • Thinking code throws error on false flag
4. Identify the error in this Spring Boot feature flag usage:
@GetMapping("/feature")
public String feature() {
    if(featureFlagService.isFeatureEnabled) {
        return "Feature ON";
    } else {
        return "Feature OFF";
    }
}
medium
A. Return type should be void
B. Incorrect HTTP method annotation
C. Missing parentheses when calling isFeatureEnabled method
D. Feature flag service not injected

Solution

  1. Step 1: Check method call syntax

    isFeatureEnabled is a method and must be called with parentheses ().
  2. Step 2: Verify other code parts

    HTTP annotation and return type are correct; no injection info given but not error here.
  3. Final Answer:

    Missing parentheses when calling isFeatureEnabled method -> Option C
  4. Quick Check:

    Method calls need () [OK]
Hint: Method calls always need parentheses () [OK]
Common Mistakes:
  • Forgetting () after method names
  • Confusing HTTP method annotations
  • Assuming return type must be void
5. You want to implement a feature flag in Spring Boot that disables a new payment method only for users in a "betaTesters" group. Which approach correctly combines feature flags with user context?
hard
A. Check if feature flag is enabled and user belongs to betaTesters before allowing payment
B. Enable feature flag globally and ignore user groups
C. Disable feature flag and allow all users access
D. Use feature flag only in frontend without backend checks

Solution

  1. Step 1: Understand combining feature flags with user context

    Feature flags can be combined with user group checks to control feature access precisely.
  2. Step 2: Evaluate options for correct logic

    Check if feature flag is enabled and user belongs to betaTesters before allowing payment correctly checks both the flag and user group before enabling the feature.
  3. Final Answer:

    Check if feature flag is enabled and user belongs to betaTesters before allowing payment -> Option A
  4. Quick Check:

    Feature flag + user group check = controlled access [OK]
Hint: Combine flag check with user group for precise control [OK]
Common Mistakes:
  • Ignoring user groups when using feature flags
  • Relying only on frontend checks
  • Enabling feature globally without restrictions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard