What is progressive delivery?
Progressive delivery, which can also be referred to as progressive rollout or phased rollout, is a software development practice that allows you to gradually roll out new features to users to limit impact on end-users and obtain feedback for improvement purposes.
Progressive delivery builds on the concept of continuous delivery and encompasses deployment strategies such as a/b testing, ring deployment and canary deployment.
How to do progressive delivery?
Progressive delivery involves releasing your features to a small group of users, who would usually be your most relevant users that would give you the most constructive feedback, through phased rollouts.
This would allow your team to work according to this feedback to optimize the release by catching and fixing any bugs before releasing to the rest of your users.
By using feature flags, you would be able to control which users have access to your new features by toggling these features on or off to limit the impact on users.
There are many different ways to implement gradual rollouts. All these methods can be considered to come under the umbrella of progressive delivery.
One such way is canary deployment. This is where a small percentage of users get access to your feature; these are users that share similar attributes and can give the most relevant feedback to improve your product. You may also want to consider a dark launch, which is another way to gradually release your feature but without pointing out this feature to users.
Another way is through ring deployments. This is where users are divided into rings with each ring representing a group that undergoes the feature rollout. Therefore, the process could start with your internal users and then once the new functionality is tested, the features are released to the next ring and so on.
You may also choose to do a blue-green deployment. This is where there are two identical production environments; one is active while the other is not. Once you have completed all your changes, these are deployed in the second environment. A router would then direct traffic to the environment where the changes are active and tested on a subset of users while the first environment is inactive.
An alternative to blue/green deployment would be feature flags, which allow for targeted rollouts without having to maintain two production environments.
Additionally, progressive delivery allows room for experimentation. For example, through A/B testing you can test how different variations of a feature perform to see which one has the best impact on your pre-selected users. This would then be chosen for a broader rollout once the experiment is done.
Benefits
Nowadays, there’s more pressure than ever to release software quickly. As a result of working under such pressure under tight time constraints, this could inevitably lead to bugs, which then could lead to disaster and a tarnished reputation amongst your users.
This is where the true value of progressive delivery lies. It allows developers to release much more frequently and in smaller batches so that users can get new higher quality features much quicker. Just as quick, you can roll back if anything goes wrong.
As it is impossible to detect all bugs before a release as some bugs can only be detected once they start affecting real users but with progressive delivery, this bug only affects a small percentage of users.
It also gives an opportunity for teams to see how their new variation is performing, whether it does optimize the user experience and so they can choose which variation is working best before rolling out to everyone else.
Progressive delivery also provides a less risky way to practice continuous integration and continuous delivery as it mitigates the risk of continuously pushing code to production by allowing any unfinished changes to be toggled off.
Thus, with feature flags, progressive delivery vastly improves a CI/CD pipeline by allowing for safe rollouts to a small user base and quick rollbacks if anything goes wrong in production.
Conclusion
Progressive delivery unlocks rapid releases. The steps towards progressive delivery are straightforward; with careful planning and the right tools, you can ensure your future releases are quicker and risk-free. Most importantly, phased rollout gives you full control over your feature rollout process.
A feature management system, such as AB Tasty‘s server-side feature, allows you to segment your user base by assigning specific flag values to different user segments. This way, you can gradually release features to different target groups resulting in more stable, higher-quality releases.