Progressive Delivery with Feature Flags: Getting Started
In the realm of Continuous Delivery (CD), where the objective is to ensure that software is always in a deployable state, there is still significant value in not exposing all users to new capabilities immediately. Progressive Delivery leverages this principle by gradually rolling out changes to a subset of users, testing in production, gathering feedback, and then expanding the release based on the results.
What is Progressive Delivery?
Combining both progressive deployment and progressive release, we achieve Progressive Delivery—our preferred way to deliver software to customers confidently and iteratively, whether it’s a one-line bug fix or a complex new feature. This ensures that our changes are not only technically sound, but also solve problems in a meaningful way for our users.
To sum this up with an equation:
Progressive Delivery = Progressive Deployment + Progressive Release
H3 – Progressive Deployment vs Progressive Delivery
Progressive deployment involves deploying a new version of software to a small percentage of users initially. This approach helps reduce the risk of introducing bugs or issues for all users when rolling out a new version of our application. One common technique used for this purpose is canary deployment. Various technologies support canary deployments. For instance, at Unleash, we use a custom-built Kubernetes operator to manage deployment channels.
At Unleash, we categorize our customers into groups such as demo users, early Pro plan users, established Pro plan users, and Enterprise plan users, deploying the new version to each group at a different pace. With each deployment, every customer in a channel gets all new code created since the last deployment. Charity Majors likens deployment to a chainsaw, emphasizing its broad nature, compared to a scalpel-like feature flag explored below.
After each deployment, we can observe application stability and the impact of changes, such as one-liner bug fixes or trivial code changes (e.g. automated refactorings). For very simple changes, deployment and release can be the same thing. However, we don’t want to use deployment as a release mechanism for more complex features and code changes where the probability and impact of issues are high.
Progressive Release vs Progressive Delivery
Beyond deployment, we use feature flags (yes, we use Unleash to build Unleash) to control which customers can access individual new features at runtime without needing a code deployment. This practice of progressive release allows us to gradually expose features. This enables us to validate the solution meets users expectations and is performant in real-world scenarios.
In each new deployment, all code paths are physically in production, but we don’t enable them for every customer. This decouples deployment (code being in production) from release (code being available to users). Using Charity Majors’ metaphor again, while deployment is a chainsaw, progressive release is a powerful scalpel, offering precise control over feature exposure.
Why Progressive Delivery?
When working on new features, it’s often beneficial to experiment with a small percentage of users first—perhaps even as small as 1%. This controlled exposure allows teams to gather feedback on usability, correctness, and other factors before increasing the rollout percentage. This incremental approach can be implemented at both deployment time and runtime.
Progressive delivery with feature flags
Feature flags enable or disable features in real-time without deploying new code. It provides flexibility in managing features across different user segments, environments, or stages of development.
Feature flags play a key role in progressive delivery by enabling gradual rollouts to specific user groups or percentages. This approach reduces risk by allowing teams to monitor performance and user feedback, making it easy to adjust or roll back changes if issues arise.
The Unleash approach to progressive delivery with feature flags
Unleash empowers teams to manage progressive delivery with precision and control, ensuring safer and faster deployments. Its flexible and robust feature flagging platform allows teams to experiment, reduce risks, and deliver better user experiences.
Key features that enable progressive delivery include:
- Kill Switches
Unleash provides kill switches to instantly disable problematic features, minimizing downtime and impact on users. This ensures swift issue resolution without the need for redeployments. - Rollbacks
Rollbacks allow teams to revert to previous feature states seamlessly, providing a safety net for unforeseen issues during rollouts. With Unleash, rollbacks can be performed instantly, reducing the risk of prolonged disruptions. - Strategy Constraints
Strategy constraints in Unleash enable targeted rollouts based on attributes like user location, environment, or custom criteria. This precise control supports gradual and risk-free feature deployment.
Open source options for feature management
Unlike proprietary software where users are bound to the product roadmap determined by the company (and its shareholders), an open-source feature management system allows you to modify and improve the software based on your specific use cases. Our users are not bound or dependent on the limitations of our code.
Unleash open source is available as a docker container, or click-to-deploy in Heroku and Digital Ocean. Choose your preferred deployment and get started in minutes.
While there are other proprietary tools such as LaunchDarkly, we believe there are a lot of benefits to using an open-source system like ours. Ready to implement Progressive Delivery in your DevOps pipeline? Explore how Unleash supports Progressive Delivery, or try it for free today.