When dealing with an application at scale, introducing new features can be risky. On smaller-scale applications, deployment is usually tightly coupled to feature delivery. When new code is put into production, the new features are live. Using feature flags can mitigate a substantial portion of risk.
The tight coupling between deployment and delivery is incredibly restricting. By decoupling deployment and delivery, we can:
Recently, I was working on a fairly typical SAAS application. The application in question was multi-tenanted, had a very globally distributed user base and was fully internationalized. A new data warehouse-backed analytics dashboard was created to provide users with near real-time information about how they use the application.
The feature was developed by a small team over a few weeks and an initial version was created. This initial feature was limited in scope and was not suitable for release to the entire user base. We still had to hire translators, inform major clients and stakeholders and analyze usage patterns of the feature.
Through the use of feature flags, and in this case, heavy use of the Flipper Gem, the following occurred:
We had several deployments during this trial phase of the feature until we were happy with it. At this point, we hired translators and began to organize the rollout. We knew the exact date and time the feature would roll out, making it easy to notify stakeholders, inform the user base and promote the feature.
When the date finally came, we flipped the switch, which gave everyone access to the feature. We were fully confident that it was stable, tested and would be well received; the feature was a success.
Feature flags can add an additional layer of complexity to the application, and management of potentially thousands of feature flags can become overwhelming. I strongly advise that you strive to fully deliver the feature to 100% of the user base. Having features only available to 90% of your users will cause major complexity and confusion.
Essentially, all major web frameworks have libraries to easily add feature flags. While it is fairly simple to roll your own feature flag library, having a pre-rolled solution which includes a nice UI and some general default settings can bring the ability of feature toggles into your application very quickly.