During some Scrum training classes, I have been asked, can teams practice Continuous Delivery (CD) , using the Scrum Framework? The answer is a resounding yes! Let's explore why some believe that Scrum only allows you to release at the most, every Sprint against what the Scrum Guide says.
What Scrum says
From my reading of the scrum guide, the Scrum framework requires a Scrum Team to deliver working software (product increment) at least by the end the Sprint. Here is a quote from the Scrum Guide:
"The heart of Scrum is a Sprint, a time-box of one month or less during which a 'Done', useable, and potentially releasable product Increment is created"
From this explanation, some teams I have worked with interpreted this to restrict your team to create a potentially releasable product only at the end of the time box. It is true that the Scrum Guide requires that you have a potentially releasable product increment at the end of the Sprint time box.
I interpret that statement in the guide to mean I can create many potentially releasable product increments during the sprint. To get to a potentially releasable increment at the end of a Sprint, I prefer to continuously validate that it is potentially releasable. In other words, the Scrum guide does not prohibit a continuous delivery model using the scrum framework.
Continuous Delivery Defined.
According to Carl Caum from the Puppet Blog, "Continuous Delivery doesn't mean every change is deployed to production ASAP. It means every change is proven to be deployable at any time." This fits my definition as well. I say that "Continuous Delivery means a team can deploy a feature whenever a product owner approves the feature and wants to deploy it." To be able to tell your product owner they can do this, does take time for the team to institute the right practices to enable CD.
How can I implement CD with my Scrum teams.
Now that we agree CD can be included in your implementation of scrum, how can you make sure that happens? First make sure that your Definition of Done helps CD can happen. Typically this includes a lot of automation, to make your CD work smoothly. Also I recommend good test automation (a full blog post in its own right).
Scrum encourages teams to adopt practices like, CD, unit testing etc. The Scrum Guide does not provide guidance around practices and tooling. The Scrum Guide encourages you to adopt good engineering practices. Scrum.org also provides guidance around good engineering practices. The course called the Professional Scrum Developer course provides exposure and interactions with these tools and practices. Teaching concepts including Continuous Delivery. Other good practices taught, that you need in your continuous delivery pipeline include:
- Automated unit tests
- Automated integration tests
- Good Testing practices
- Infrastructure as Code
Now Go forth and CD
Assuming you agree that CD and Scrum are not at odds, now create your strategy to implement CD within your Scrum Teams. Use training like the PSD, coaching or just trying this to get to a CD state. Remember that it takes time to implement these good practices. Good luck, now go forth and CD!