Progressive deployment is a strategy for gradually deploying changes, with the goal of minimizing risk and maximizing feedback. There are many different approaches that can be taken when deploying code and configuration changes to production systems. In this post, we’ll explore some of the most popular progressive deployment strategies and their pros and cons.
Whether you’re looking to minimize risk or maximize speed (aka velocity), there’s a strategy here for you. So let’s get started!
Canary Deployments
What are Canary Deployments?
Canary deployments are progressive deployments that involve the gradual increase of traffic to users as baseline performance metrics are analyzed and indicate normal behavior. If the behavior during a canary deployment is outside the normal acceptable operating bounds a rollback is initiated, either manually or automatically. This strategy enables developers to evaluate the effects of deployments and ensure new code does not result in any disruptions or negative user experiences.
The practice of canary deployments has evolved quickly since its introduction, allowing software teams to improve app reliability while offering feedback mechanisms for optimizing released features in near real time. Furthermore, by keeping deployment risks minimal, this process also helps maximize user engagement by reducing downtime to near zero and allowing engaging new features to reach larger audiences faster.
When to choose Canary deployments: when you need highly granular control.
Blue/Green Deployments
What are Blue/Green deployments?
Blue/Green deployments are a progressive deployment technique that involves creating two identical sets of infrastructure, one of them blue and the other green. This enables the deployment of different versions of the application to both environments. The blue environment is typically used for the current production, while the green environment is used for the new features.
When the green environment has been validated, the traffic from production is shifted over to it leaving the blue environment unchanged. This approach also allows us to switch back to the original version if any issues are noted with the newer version. Adopting blue/green deployments helps ensure a seamless user experience because new versions are first tested and validated before they go fully live in production.
When to choose Blue/Green deployments: when you need a fast, seamless user experience.
Rolling Deployments
What are Rolling deployments?
Rolling deployments are a continuous deployment methodology that allows for incremental changes to be tested and eventually deployed over time. This is the most commonly reported progressive strategy for enterprise companies. The process of continuous deployment starts with the build phase, which is then followed by the continuous integration phase where automated testing and versioning are done. Once this is complete, a new version is released to the staging environment to be tested further.
If all tests pass, it gets deployed to production either incrementally or all at once depending on the size and number of new features. This practice allows for smoother feature updates and less downtime rather than taking downtime to deploy everything at the same time.
When to choose Rolling deployments: when you need very low downtime at scale.
Not to be Confused with Deployment
The following strategies often get confused with continuous deployment strategies. However, they are not. They are however important strategies when it comes to your software release and user experience assurance strategy. Each of the following strategies still requires a continuous deployment solution to deploy the actual software. Therefore, these are release strategies, not progressive deployment strategies.
Dark Launches
Dark launches are releases that allow you to gradually introduce a new feature or improvement. The focus of dark launching is risk aversion; features that introduce potential breaking changes are tested first on a small scale instead of everywhere at once. This allows teams to detect any issues quickly, roll back the release if necessary, and make improvements before deploying the improvement or fix and releasing it broadly. Additionally, dark launches improve testing and validate assumptions about user experience and performance: teams can get direct and real-time feedback about how the feature works in a production environment.
A/B Testing
A/B testing is an essential tool in releasing software, enabling developers to make informed decisions on the effectiveness of their changes. A/B testing involves creating two variants (A and B) of an application that have slight differences – for example, a difference in background color or the placement of a menu item. Data about usage and user interaction is then gathered for both versions to identify which one produces better results. This type of testing is invaluable for developers striving to create the most effective product possible.
Feature Flags
Feature flagging is a valuable tool when it comes to releasing new features and functionality. By utilizing this technique, organizations can deploy their code into a production environment without exposing it to customers, allowing them to quickly test and iterate on new features while minimizing the risk of disruption. Feature flagging also allows companies to selectively turn features on or off depending on user preferences, giving them the flexibility to customize the experience based on user behavior and feedback. All in all, feature flagging ensures more consistent performance across workspaces and can lead to better customer experiences.
So Why Progressive Deployment Strategies?
If you’re not using progressive deployment strategies like canary deployments or blue-green deployments, or release strategies like dark launches, A/B testing, or feature flagging then there is a lot of opportunity to reduce the risk to your business, increase scalability, and improve your developers’ and customers’ experience. These are all practices that provide safety nets and enable fast development cycles.
The key to success is automating the Continuous Deployment processes so that valuable engineer time isn’t being wasted. That’s where CD-as-a-Service comes in: it’s a turnkey solution that helps you achieve continuous deployment.