On June 5th at wwdc 2017, Apple announced a brand new feature for app developers called "phased releases". This gives developers the ability to gradually release new versions of an app in a controlled fashion. While not much technical information has been publicly announced yet, the concept behind phased releases has been around for quite a while and is already being used by all the top apps. Currently, when you release a new version of your app in the App Store, everyone gets it at once. With phased releases, you can initially release new app versions to a small group of users, see how it's doing, and then if everything looks good release it to everyone else. The specifics of how the App Store is going to implement phased releases is still unknown, but based on how it's usually done, you'll probably be able to release a new version to a random percent of users (let's say 1% or 5%) and then increase that number over time. Being able to gradually expose new features just to a small number of users or a specific group of users provides a huge advantage over releasing a new feature to everyone at once. It reduces the risk of releasing a feature with a bug or other issue. If there is anything wrong with the new feature, you can limit exposure and stop rolling it out to more people. This is also commonly called a canary release, named after the practice of using a canary in a coal mine. While phased releases is coming out soon to all App Store apps, the idea behind it has been in use for years using a software development technique called feature flags. (Feature flags are also commonly called feature toggles, feature switches, feature flippers or conditional features.)
What's the difference between using Feature Flags and Phased Releases?
Feature flags are essentially variables that are used to hide, enable or disable features during run time. For example, during the development process, a developer can enable the feature for testing and disable it for remaining users. A feature flag can also be used to expose a new feature just a specific group of production users. With feature flags, you get fine grained control over who is exposed to which feature. You can use feature flags for:
Optimization (ie A/B testing)
What you might not already know, is that all of the big name apps (and web sites) have been using feature flags for quite a while. For example, Uber, Facebook, Etsy, reddit and Netflix all use feature flags to control the release of new features. That's why so many apps provide very little information in the "what's new" section of in the app store. For example, when reading the what's new section of the Facebook app, instead of "we just added feature X" it says "as new features become available, we'll highlight those for you in the app". Phased releases are just good for canary releases. That's it. The Google Play store already has phased releases, though in the Play store it's called Staged CloudBees Feature Managements.