Progressive delivery is a modern software development for gradually rolling out new features in order to limit the potential negative impact and gauge the user engagement with new product features.
The term progressive delivery was invented by James Governor at RedMonk who wanted to capture a wide range of new software development practices that went beyond just continuous delivery.
Progressive delivery requires that you are already using continuous integration and continuous delivery (CI/CD) as part of your software delivery pipeline.
Next, you need to be using feature flags or feature toggles to control access to your features. As part of progressive delivery, those flags are not just boolean flags (ON/OFF) but can be targeted to specific audiences or percentage of your total traffic (similar to canary deployments). More advanced progressive delivery techniques even allow for different experiences or configuration options by audience.
Another component of progressive delivery is the ability to be able to run A/B tests on top of your feature flags to statistically validate the customer impact. While not every feature has to be an A/B test, progressive delivery requires that you are able to do A/B tests.
One final component of progressive delivery is observability. Observability goes beyond traditional monitoring techniques and as explained by Honeycomb, "In the world of software products and services, observability means you can answer any questions about what’s happening on the inside of the system just by observing the outside of the system, without having to ship new code to answer new questions."
Progressive delivery allows development teams to release features quickly with less risk. When developing new software and then releasing it to your end-users, traditional QA and testing strategies can only surface a portion of the potential performance issues and customer sentiment incidents that might arise from a bug or poorly designed experience. This results in uncertainty and greater potential risk when launching a new product or service.
Progressive delivery allows for testing in production with a subset of your user base, so you can QA in your production environment while minimizing the blast radius of any potential bugs. By using feature management you can also quickly rollback any changes that turn out to be detrimental.
Progressive delivery provides the ability to gradually release your feature to progressively larger audiences starting with your internal teams, then beta testers, and followed by percentages of your production traffic.
If you detect errors, performance spikes, or user backlash, just roll back - all without redeploying code. Since you aren't going from 0% to 100% rollout, if you detect an issue at 1% of your traffic, you've only potentially impacted 1% of revenue or 1% of customer satisfaction.
Progressive delivery makes your release process more resilient. Additionally, the use of experimentation (or A/B testing) as a part of the progressive delivery process enables you to not only reduce risk but also iterate and determine the best possible experience for your end-users.
Many of the leading software companies like Google, Facebook, Microsoft and Amazon already employ progressive delivery at scale. For instance, these companies roll out their new products typically market by market to a small percentage of users in each market.
Oftentimes, they will start with a small English speaking market like New Zealand before rolling out to larger markets. Often these rollouts are in the form of A/B tests where they measure the impact of new features on core product metrics along with verifying that the features don't impact application performance metrics like error rates, latency and utilization.
Optimizely provides a free solution called Optimizely free feature flagging, which enables teams to progressively release new features to different audiences using feature flagging. It's paid offering, Optimizely server-side experimentation includes this functionality but also adds A/B testing on top of those feature flags along with real-time metric and statistical significance reporting to understand the impact of changes to applications.
Optimizely's solutions provide a robust way for teams that want to adopt progressive delivery to make their release process more resilient while proving the value of what they are building.