In a modern and evolved organization you would ideally find teams leveraging Continuous Integration and Continuous Delivery (CI/CD) pipelines. CICD enabled faster and more reliable delivery of software to customers by automating the build, test, and deployment processes. Ideally allowing your customers to receive releases in a predictive manner, the outcome of your team sprints, ultimately reducing risk compared to conducting those steps manually. But releasing your features to all users at once, such as unexpected bugs, compatibility issues, or negative user feedback.
That’s where progressive delivery comes in. Progressive delivery is an approach that extends CI/CD with feature flags, gradual rollouts, and observability. It allows developers to release new features or changes to a subset of users first, and then monitor and evaluate their impact before rolling them out to the rest of the user base. This way, developers can reduce the risk of deploying faulty or unwanted features, and gain valuable insights from real user behavior and feedback.
This article explores how progressive delivery can enhance your CI/CD pipeline, and what are some of the tools and patterns that can help you implement it.
What are the benefits of progressive delivery?
Progressive delivery offers several benefits for software development teams, such as:
- Faster feedback loop: By releasing features to a small group of users first, developers can get immediate feedback on the functionality, usability, and performance of their features. This can help them identify and fix issues early, and iterate on their features based on user data and preferences.
- Reduced risk: By releasing features gradually, developers can minimize the blast radius of potential failures or errors. If something goes wrong, they can quickly roll back or disable the feature without affecting the entire user base. This can also prevent customer dissatisfaction and loss of trust.
- Increased confidence: By releasing features incrementally, developers can avoid the stress and uncertainty of big-bang releases. They can also verify that their features work as expected in production, and that they deliver the desired outcomes and value for the business and the users.
What are the tools and patterns for progressive delivery?
There are many tools and patterns that can help you implement progressive delivery in your CI/CD pipeline, such as:
- Feature flags: Feature flags are toggles that allow you to turn features on or off for different segments of users, without redeploying the code. They enable you to test new features in production, perform A/B testing (or multivariate testing), and control the rollout of features to different groups of users. Feature flags can also help you mitigate risk by allowing you to quickly disable a feature if it causes any problems or negative feedback. Some popular tools for feature flag management are LaunchDarkly, Flagship, and Split.
- Canary releases: Canary releases are a technique that involves deploying a new version of the software to a small percentage of users, and then gradually increasing the percentage until the new version is fully rolled out. This allows you to monitor the performance and behavior of the new version, and compare it with the previous version. If you detect any issues or anomalies, you can stop the rollout and rollback to the previous version. Some popular tools for canary releases are Flagger, Istio, and Spinnaker.
- Observability: Observability is the ability to monitor and understand the internal state of a system by looking at the external outputs. It is crucial for progressive delivery, as it allows you to measure the impact of your features on key metrics such as latency, error rate, throughput, and user satisfaction. Observability also helps you identify and troubleshoot issues, and gain insights into user behavior and preferences. Some popular tools for I’ve used in this space are Prometheus and Grafana.
Getting started with progressive delivery
Below are suggested steps you can follow to get started with progressive delivery:
- Define your goals and metrics: Before you start rolling out new features, you need to define what are the goals and metrics that you want to achieve and measure. For example, you might want to increase user engagement, retention, or conversion rate. You also need to define how you will measure these metrics, and what are the thresholds or targets that you want to reach.
- Segment your users: Next, you need to segment your users into different groups based on criteria such as location, device, behavior, or preferences. You can use feature flags to assign different features or versions to different segments, and test how they perform and react. You can also use observability tools to monitor and analyze the data from each segment, and compare them with the baseline or control group.
- Roll out features gradually: Once you have segmented your users and assigned features to them, you can start rolling out features gradually. You can use canary releases to deploy features to a small percentage of users first, and then increase the percentage over time. You can also use feature flags to control the rollout of features, and adjust them based on the feedback and data you receive. You can also use observability tools to track the performance and impact of features, and detect any issues or anomalies.
- Learn and iterate: Finally, you need to learn from the feedback and data you collect, and iterate on your features accordingly. You can use observability tools to visualize and analyze the data, and identify what works and what doesn’t. You can also use feature flags to experiment with different variations of features, and optimize them for the best results. You can also use feature flags to rollback or disable features if they cause any problems or negative feedback.
In agile, customer value is God, and you validate and iterate by releasing to segments of your customer base, as part of continuous experimentation in a continuous delivery man we.
Progressive delivery is a powerful approach that can enhance your CI/CD pipeline, and help you deliver software that is not only fast and reliable, but also user-centric and value-driven. By using tools and patterns such as feature flags, canary releases, and observability, you can reduce the risk and uncertainty of software releases, and increase the confidence and satisfaction of both developers and users.