I'm wondering how best to handle the scenario of releasing a mobile app that includes an incomplete feature behind a feature flag in one version and then the completed feature behind the flag in a subsequent version - and making sure users with a previous version don't encounter incomplete functionality.
Let's say I'm developing a feature called Weather for my iOS app. I release an incomplete version of the Weather feature to the App Store in release
1.1.0 - I put it behind a feature flag called
show-weather and have that set to
false on the backend. I then release version
2.0.0 of my app that has the completed Weather feature and flip
true on the backend. Uh oh! User's with
1.1.0 still installed are now seeing an incomplete version fo the
Ideas on mitigating this:
- The app sends its version number to the backend when retrieving feature flags and the backend sends
falseif the app version is too low
- The app implementation mocks the response from the feature flag service in version
falseand replaces the mock with a real backend integration in version
- Users are forced to upgrade the app once a flagged feature is complete
- Developers don't merge incomplete features - feature flags are only used to toggle the appearance of full-realized features
The latter 2 options seem sub-optimal. We don't want to jar users frequently; and, we don't want developers to have to maintain long-running branches.
The first 2 might work but seem like something could easily be forgotten on the backend or frontend respectively.
What is an optimal solution for this scenario?