Progressive Delivery

What is Progressive Delivery?

Progressive Delivery is an advanced deployment strategy that gradually rolls out new features or updates to a subset of users or systems in cloud environments. It involves techniques like feature flags, A/B testing, and canary releases to minimize risks associated with new deployments. Progressive Delivery enables more controlled and data-driven software releases in cloud-native applications.

Progressive delivery is an advanced software deployment strategy that aims to provide a more controlled and gradual release of new features to users. It is a methodology that has been born out of the need for organizations to reduce the risk associated with software releases, while also increasing the speed at which new features can be delivered. This approach is particularly relevant in the context of cloud computing, where the ability to rapidly deploy and scale applications is a key advantage.

In essence, progressive delivery is about breaking down the deployment process into smaller, more manageable stages, and then gradually increasing the exposure of the new software to users. This allows for any issues to be detected and resolved before the software is rolled out to the entire user base. The ultimate goal is to improve the quality of the software, reduce the risk of major issues, and increase the speed of delivery.

Definition of Progressive Delivery

Progressive delivery is a software deployment strategy that involves gradually rolling out new features to a subset of users before making them available to everyone. This approach allows teams to test and refine new features with a smaller audience, reducing the risk of a widespread issue if something goes wrong. It also enables teams to gather feedback and make necessary adjustments before a full-scale rollout.

The concept of progressive delivery extends the principles of continuous delivery and continuous deployment, adding an additional layer of control and risk mitigation. It incorporates practices such as feature flagging, A/B testing, canary releases, and phased rollouts, all of which provide mechanisms for controlling the exposure of new features to users.

Feature Flagging

Feature flagging is a technique that allows developers to turn features on or off without having to redeploy the application. This provides a way to hide new features from users until they are ready for release. It also enables teams to roll back a feature quickly if issues are detected after it has been released.

Feature flags can be used in a variety of ways, including for testing in production, A/B testing, canary releases, and dark launching (releasing features to a select group of users before they are made generally available). They provide a powerful tool for managing the risk associated with software releases, allowing teams to control who has access to new features and when.

A/B Testing

A/B testing is a method of comparing two versions of a webpage or other user experience to see which one performs better. It involves showing the two variants (A and B) to different subsets of users at the same time, and then using statistical analysis to determine which variant is more effective in achieving a desired outcome.

In the context of progressive delivery, A/B testing can be used to test new features with a small subset of users before rolling them out more widely. This allows teams to gather data on how the new feature is performing and make any necessary adjustments based on real user feedback.

History of Progressive Delivery

The concept of progressive delivery has its roots in the practices of continuous delivery and continuous deployment, which emerged as part of the Agile and DevOps movements. These practices involve automating the software delivery process to enable frequent, incremental releases, with the aim of reducing the risk and cost associated with software releases.

However, while continuous delivery and continuous deployment provide mechanisms for automating the release process, they do not inherently provide a way to control the exposure of new features to users. This is where progressive delivery comes in. The term was coined by James Governor, co-founder of RedMonk, in 2018, and it represents an evolution of these earlier practices, adding an additional layer of control and risk mitigation.

Continuous Delivery and Continuous Deployment

Continuous delivery is a software development practice where code changes are automatically built, tested, and prepared for release to production. It aims to make releases less risky and more rapid by enabling teams to release updates in small, incremental changes. This approach reduces the risk of major issues, as problems can be detected and fixed more quickly.

Continuous deployment takes this a step further by automatically deploying all changes that pass the automated testing phase. This means that new features and updates can be released to users as soon as they are ready, without the need for manual intervention. However, this approach also increases the risk of issues reaching users, as there is less opportunity for manual testing and review.

Use Cases for Progressive Delivery

Progressive delivery can be used in a variety of scenarios, but it is particularly well-suited to cloud-based applications where the ability to rapidly deploy and scale applications is a key advantage. Some of the most common use cases for progressive delivery include:

Reducing the risk of software releases: By gradually rolling out new features to a subset of users, teams can detect and fix any issues before they affect the entire user base. This can significantly reduce the risk of a major issue affecting a large number of users.

Testing in production: Progressive delivery allows teams to test new features in the production environment with a small subset of users. This can provide valuable feedback and data on how the feature performs in a real-world setting.

Gathering user feedback: By releasing new features to a small group of users, teams can gather feedback and make necessary adjustments before a full-scale rollout. This can help to ensure that the feature meets user needs and expectations.

Examples of Progressive Delivery

Many organizations are already using progressive delivery techniques to manage their software releases. For example, Facebook is known for its use of dark launches, where new features are released to a small group of users before they are made generally available. This allows the company to test and refine new features with a smaller audience, reducing the risk of a widespread issue if something goes wrong.

Another example is Netflix, which uses canary releases to gradually roll out new features. This involves releasing the new feature to a small percentage of users and then gradually increasing this percentage over time. This allows the company to monitor the performance of the new feature and make any necessary adjustments before it is rolled out to all users.

Conclusion

Progressive delivery represents a significant evolution in software deployment practices, providing a more controlled and gradual approach to releasing new features. By breaking down the deployment process into smaller, more manageable stages, and gradually increasing the exposure of the new software to users, it allows for any issues to be detected and resolved before the software is rolled out to the entire user base.

While progressive delivery requires a certain level of maturity in terms of automation and monitoring capabilities, the benefits in terms of reduced risk and improved quality make it a compelling approach for many organizations. As more and more companies move to the cloud and seek to leverage the advantages of rapid deployment and scalability, the adoption of progressive delivery is likely to continue to grow.

High-impact engineers ship 2x faster with Graph
Ready to join the revolution?
High-impact engineers ship 2x faster with Graph
Ready to join the revolution?

Do more code.

Join the waitlist