Yes, as more and more companies embrace Continuous Deployment, feature flag platforms are becoming much more popular. I love feature flags; they are some of the coolest and most demonstrable aspects of DevOps.
With all the noise, it can be overwhelming picking the appropriate solution. In some cases, if you have a very simple app like an ASP.NET core site with a database, then look no further. Use the
What if you want to coordinate the state of a feature flags across multiple services/apps? Then, you probably need a feature flag platform. A good platform will be highly resilient, has wide support across multiple languages, and has effective ways to manage its feature flags programatically.
Optimizely is a platform that is mostly aimed at marketers. I have worked with clients that were using this platform already because their marketing department wanted A/B testing.
Microsoft.FeatureManagement package only supports .NET Standard 2.0 and greater so it might be a bit more difficult to add support to a legacy app.
As implied, they seem to cater less to engineering teams. I can’t also seem to find an Infrastructure as Code solution. But, they do have an API. If you start using flags at scale, you might want to invest in a more declarative model of managing feature flags by using the API rather than relying on the portal all the time.
Humans do make mistakes, regardless of how pretty the portal is.
The best part – Optimizely offers free feature flags. But, they don’t advertise an SLA. If you want, you can pay for Premium Support.
The Azure DevOps team at Microsoft blogged about their usage of feature flags and how they’ve built their own platform. Their recommendation: don’t build your own platform. Instead, they recommend using LaunchDarkly.
- Here’s an Azure DevOps lab about LaunchDarkly.
- Here’s a free e-book from LaunchDarkly that’s a very good and short read.
- Here’s an Azure DevOps extension for LaunchDarkly to map work items to feature flags already defined (in my experience, it’s not super reliable).
In contrast to Optmizely, the product seems to be more tailored towards engineers. They have a fascinating article about how they’ve built the platform with extreme redundancy in mind. They also have natural circuit breakers in their SDKs so that if a feature flag doesn’t exist or the service can’t be reached, it defaults to some value. Lastly, they also have a Terraform provider so that you can manage your feature flags declaratively.
LaunchDarkly is not free. They have a 30-day trial. They offer an SLA for the enterprise tier.
Azure App Configuration
Azure App Configuration is a new service on Azure. It’s still in preview and is free during the preview period. It also has no SLA.
It’s nice that it’s on Azure because it requires less tools to use. The .NET SDK is well-built because it was made by Microsoft and it also works well side by side with Azure KeyVault.
Lastly, because it’s not mature there’s also no support for .NET Framework. Meaning, you won’t be able to use this service unless you build your own class library to interact with the REST API.
Although it’s an Azure product and there is an Azure DevOps extension, there is no ARM template support at this time.
However, because it’s free, it could be effective for prototyping. It’s unclear what the future holds for this service yet, but the future is promising. But when it comes to feature flags, which have critical dependency, I value solutions that are mature/reliable and have an opportunity to reduce manual mistakes through automation.
My advice would to not roll your own feature flag platform. Also, when we take a dependency on a feature flag platform, our applications are likely going to see downtime if there’s degraded services with the provider. Unless of course, the provider has circuit-breaking patterns built into their SDKs.
Choosing a mature feature flag platform is a big decision, but the ultimate value is worth it: being able to test in production, deploy often and safely, and releasing when you’re ready.