Feature flags and staged rollouts

Mobile system design Mid-level Kotlin 2.0+ API 24+ Reviewed By Best Latest Apps

Pick the fix

A new checkout flow is behind a flag whose default is true. When Remote Config can't be reached, everyone gets the new flow. Fix?

Options
Hint 1 of 1

What should happen when flags can't load?

Choose an answer, then open Show answer below to check it.

Show answer

Answer: A Make the default false and turn it on remotely

Correct. The safe path is the default.

Why not the others?
  • B Block the app until flags load. Slows every launch and fails offline.
  • C Remove the flag. Loses the kill switch.
  • D Fetch flags twice. Doesn't help offline.

30-second answer

Ship code dark behind a remote feature flag (Firebase Remote Config or your own service), and release the app through a Play staged rollout. Turn the flag on for staff, then a small percentage, watching crash rate, ANRs and business metrics, and expand. Keep a kill switch. Cache flag values with safe defaults so the app works offline, and remove flags once a feature is fully launched.

Practise saying it · 30 s. No recording, just a timer

Explain flags and rollouts.

Say your answer out loud, then check which of these points you covered:

  • Remote flags with safe defaults
  • Staged rollouts
  • Watch metrics
  • Kill switch
  • Remove old flags

Deep dive

Flags let you separate deploy from release.

Defaults should be the safe (off) path.

Fetch flags in the background; don't block startup.

Old app versions stay in the wild for years; flags must cope.

Common mistakes

  • Blocking app startup on fetching flags.
  • Flags that never get removed.
  • Default values that turn risky features on.

Senior take & follow-ups

Separate staged rollout (binary) from flags (feature), then metrics and cleanup.

Follow-up questions

Think of your answer first, then open the hint.

  1. Why not block startup on flags?

    Show hint

    A slow network would slow every launch.

  2. What's the cost of old flags?

    Show hint

    Dead code paths and confusing combinations to test.

Suggest a fix if something here is wrong or out of date.