Let’s face it—managing a scaling software product can be an overwhelming task for beginner and veteran alike. As you introduce new features to support a larger and growing user base, the greenfield days of managing only a handful of features is a distant memory. Growing pressures from your end-users and internal stakeholders begins to mount as you explore new paths to providing value to your customers.
Having played a leading role in several product teams across my career, I’ve seen the benefits first-hand of feature flags. From simplifying a/b testing, making product launches more manageable, to maintaining a practice of continuous delivery—feature flags really help product managers take control of a growing product with confidence.
What Are Feature Flags?
Feature flags (also referred to as feature toggles or feature flippers) act as gatekeepers to specific functionality in your application during runtime—meaning you can turn off or turn on access to specific features to users when criteria you’ve set are met. They allow you to control access in real-time with no code deployments necessary—imagine the freedom!
What criteria are we talking about here? This is where the power of feature flags becomes more obvious. You can choose to grant or block access based on all sorts of criteria such as specific user segments, time of day, geography, or you can even randomize access for running experiments.
Benefits Of Using Feature Flags
Streamline Your A/B Testing and Experiments
When running experiments to help you make sound product decisions, you need to be able to try different approaches on defined audiences. You can use feature flags to conduct these tests with ease, and focus on the metrics and experiments you want to run rather than the mechanics of segmenting users.
Take making user experience improvements to an important workflow of your product as an example. Rather than shipping the changes to the entire user base, you can identify specific user segments to try this new experience. You can then collect feedback and metrics from the test group to compare against the broader user base before making a decision to deploy changes product-wide.
Manage New Feature Rollouts and Launches
A superpower of feature flags is taking control over complex product launches—they allow you to take a gradual and staged approach. Rather than relying only on internal testing, you can actually start to deploy portions of your new feature to production to ensure it plays nicely with existing features and code.
This is sometimes dubbed a canary release where you can see the impact of new code and features before committing to the larger audience. Feature releases no longer need to bring the same concern when you’ve seen it working for real users in a live production environment. It’s a more surgical approach, rather than risking downtime for your users.
A great example of this is the introduction of the picture-in-picture feature of the YouTube app on the iPhone. Rather than making this a default feature for all users, YouTube gradually introduced the feature to a subset of users so that the developers could sort out bugs and user experience issues before a larger deployment occurred.
If you’ve had to help determine your pricing structure for your product, you know it can be a delicate balance of providing the right value at the right price. When the balance is off, you can be charging too little and losing revenue—or you can be turning potential customers away with high prices.
Feature flags help you manage pricing tiers much more effectively than manual methods. As pricing tiers often represent access to a particular set of features for specific user segments, using feature flags makes a lot of sense.
Say you want to introduce a new tier you think may attract an underserved market segment. You can set up a feature flag to introduce this new pricing tier to a small set of users, and track whether or not you are seeing positive or negative uptake on that price plan. Using feature flags can give you more confidence in your product’s pricing structure because it helps take the guesswork out of it.
Encourage Software Development Lifecycle Best Practices
Product managers know happy engineering teams make for happy customers! Feature flags put less pressure on developers to support complex rollouts and more importantly, simplify catastrophic changes that strike fear into any developer who’s on-call for a weekend.
Given that feature flags force careful fencing off of code, it makes it a lot easier to manage the rollback of code deployments if things go wrong. It allows you and your teams to be more agile in reacting to unforeseen events. It really makes the pursuit of continuous delivery, or even progressive delivery, more possible—the benefits of customer feedback loops can become a reality the more control you have over feature access and releases.
If you’re launching a new feature, a feature flag gives you an easy kill switch. For example, if you realize that despite your best efforts in testing a new feature, deploying it to production is producing unexpected results for your users—you can turn access off right away. What used to be a mess of managing feature branches, hotfixes, and panic deployments can now be better managed with feature flags.
How To Get Started With Feature Flags
First, you’ll need to see if your codebase allows for a straightforward introduction of feature flags. Older monoliths riddled with spaghetti code might present tough challenges to getting started. It becomes difficult to decouple features from other workflows that can then be fenced off.
A thoughtful conversation with your engineering teams and devops will be necessary to get started. While the benefits are very compelling, be aware that introducing feature flags itself is work that takes away from current feature development. In the long run though, it pays off so it’s worth it to get that conversation started sooner rather than later.
Where to Start Fencing
It might be compelling to want to fence everything off and feature flag til the cows come home, but taking a more methodical approach will help you make progress while not sacrificing all your other work currently in development.
When we think about features, we often think about the client-side interactions that the user has, so you might think to start there. While it can be a good place to start fencing off your features, don’t forget about the underlying support that exists server-side in your API. Making changes to the API can ensure code changes aren’t breaking expected behaviors on the back-end before you even introduce the functionality to users in the UI.
Determine How to Control Access
While we’ve talked about allowing access to particular features to a specific group of users, you can also use other criteria to provide conditional access to a feature. For example, you might want to try enabling a feature flag during specific times of day, geographies, or even randomly for a quick test! Determining what criteria you will want to make use of up-front will help you and your team set up feature flags that give you the most flexibility.
Mapping out the various criteria you know of can help you identify the first ones you’ll want to get started with.
Remember to Start Simple
While your imagination might already be running wild with all the things you’ll do with feature flags (enable this feature for premium users using Chrome while wearing blue shoes on a Tuesday 😅), remember to start with simpler controls.
A simple place to start is introducing features for user segments based on their existing access. Paid vs free users is an easy example.
More complex feature flags that are multivariate (i.e. use a combination of criteria to determine access) might be something to strive for—putting the basics in place first will help you get there.
Feature Flag Management Tools
In the early days, feature flags were managed on the back-end, requiring more developer involvement when you wanted to enable or disable them. Luckily, tools have emerged that help simplify feature flag management—for easy access of toggling off or on, as well as managing the various criteria that define your different segments.
A wide range of feature flag platforms exist today, including Optimizely, LaunchDarkly, and an open-source option in Flagsmith. Some organizations may even opt to create their own in-house tools if they have particular requirements not met by these platforms.
While they may differ in their features and capabilities, these tools all promise simplified management of feature flags that give you more control and confidence over deployments and iterations.
Manage Features Confidently
With feature flags added to your toolkit, you will be more confident in your launches, relieve pressure from your development teams, and find the right mix of features that provide your customers the most value.
Let us know if in the comments how you’ve used (or plan to use) feature flags in your products!