In this article, I explain what Continuous Deployment is within the SAFe® DevOps Health Radar and why it is essential for delivering value quickly and safely. Please note that everything discussed here is under the license of Scaled Agile, and that the Scaled Agile Framework is a framework to be used as a toolbox. Take out of this toolbox what fits your needs and what solves your problems.
Where Continuous Deployment Fits#
Continuous Deployment is the third dimension in the SAFe DevOps pipeline. Before it comes Continuous Exploration, where we work with customers and the business to form hypotheses, understand market needs, define a minimal architecture, and break epics into features. After that, Continuous Integration takes those features, breaks them into user stories, implements them, commits code to version control, and produces verified deployable artifacts in a staging environment.
With Continuous Deployment, we take these verified artifacts and bring them into production continuously, making everything ready for release.
Why Continuous Deployment Matters#
In traditional deployment practices, deployment and release are the same thing. Teams stack up all features from one, two, or three months and then deploy and release everything together. This carries enormous risk because of the massive amount of changes involved.
Continuous Deployment solves this by working with small batch sizes. We continuously deploy small changes into production, which increases the flow of value massively. The key principle here is separating deployment from release.
Separating Deployment from Release#
This is one of the most important concepts to understand:
- Deployment is bringing the compiled code into production with the feature flag turned off.
- Release is switching on the feature flag so that users can access the new functionality.
This separation enables us to release on demand. All changes are already in production, and the business decides when the time is right to release a feature. This has a massive impact on time to market.
The Four Activities of Continuous Deployment#
Continuous Deployment consists of four activities: Deploy, Verify, Monitor, and Respond.
Deploy#
The first activity is deploying into production. We bring the compiled code into production with the feature toggle off. A feature toggle is essentially an if-statement in the code that allows us to configure whether a feature is on or off. This enables dark launches, where functionality is already in production without being visible to users.
Verify#
Once our deployable artifact has been deployed to production, we need to verify that everything is working correctly. We do this by executing a subset of the tests that were already run during the integration phase. If any of these tests fail, we perform an immediate rollback to the latest stable version.
Monitor#
During the architecture phase, we designed for operability. All the log statements and telemetry that we built into the system during the development cycle now feed into our monitoring system. This allows us to track application health, system performance, end user behavior, incidents, and business value.
Respond#
Things can and will go wrong in production. When they do, we need to respond quickly. We set alerts and thresholds on top of our monitoring system so that we get notified before users are affected. When something does happen, we use cross-team collaboration to resolve the issue and ensure business continuity.
How Fast Is This Process?#
Let me make this very concrete. A feature gets broken down into a user story. The user story gets developed, the build server creates a deployable artifact, and that artifact gets verified and deployed to a staging environment. From there, we can immediately deploy into production, verify with a subset of tests, start monitoring, and get alerted if something goes wrong.
This whole process can be done within minutes or hours. There is absolutely no need to stack up all changes for months and deploy them in one big chunk.
The Result#
When Continuous Deployment is done well, you have:
- A stable production system with the latest changes
- A monitoring system that tracks features, performance, user behavior, incidents, and business value
- An alerting and notification system for rapid response
- The ability to release on demand, giving the business control over when features go live
Continuous Deployment enables small batch sizes with high frequency and low risk. By separating deployment from release, the business decides when the time is right. This has a massive positive impact on time to market.
