You’ve heard of the application economy and the idea that software is eating the world. How Nike is no longer just a shoe company, but a digital powerhouse. How banks now think of themselves as software companies who just happen to have banking licenses. How Uber created an app that has changed the way we use transportation. Being able to create great software quickly is the root of it all.
The folks at Puppet Labs put out a fantastic State of DevOps Report annually. Since 2014, each category—deployment frequency, lead time for changes, mean time to recovery, and change failure rate—has had a positive trend. This solidifies the stance that DevOps plays on today’s software stage. Indeed, the 2016 report revealed that high-performing organizations have demonstrated code deployments that are over 200 times more frequent, lead times that are 2,500 times faster, a mean time to recovery that is 24 times faster, and a change failure rate that is three times lower than their competition.
With Continuous Delivery, the Software Assembly Line Never Stops
If DevOps is a set of philosophies, then Continuous Delivery is the practical application of the teachings of DevOps. I think of it as DevTestOps. A CTO at a manufacturing company once told me that the line should never stop. In the world of DevOps, think of the software development lifecycle (SDLC) as the line and the software itself as the car being built. Continuous Delivery is a way to keep that line moving. We must move from being the machine to engineering the machine.
These are the rituals that I see high-performing teams following to take the principles of agile and put them into a practice that supports Continuous Delivery:
- Develop on a cadence, deploy on demand: Employ all the agility principles, from two-week sprints to delivering minimum viable products, on-demand deployments, and production as needed.
- Shift everything left: Shift nonfunctional requirements (performance, integration, user experience) from late-cycle testing to the start of the SDLC.
- Create centers around behavior/data/model-driven development: For instance, visually represent the requirements in a model flow, or increase quality by reducing the ambiguity in requirement interpretation by various actors.
- Automate everything: From automated code reviews to builds, implement automation at every layer of the architecture stack, including automated environment configuration, and finally, automated deployments.
- Generate synthetic test data: Develop on-demand data for testing, when needed, and mitigate risk by avoiding reliance on production sources.
- Implement trunk-based development: Move from release branching to check-in to trunk frequently, in conjunction with using canary deployments and feature toggles.
- Leverage service virtualization: Increase efficiency and reduce artificial waits by applying high availability to test environments for development, and by testing via simulation of behavior, data, and performance of applications.
- Release frequently: Perform small-batch releases into production frequently in order to promote manageable releases, easier rollbacks, faster fixes, and frequent input from the end user.
- Solicit feedback: Do this by always monitoring and incorporating automated health checks.
Following these practices leads to:
- Agile delivery
- Decreased mean time to resolution
- Increased speed to market
- Improved quality
- Excellent customer satisfaction
- Higher efficiency
- Reduced waste
- Reduced risk
- Low change failure rate
Attaining agility in the delivery of applications lets you be flexible and pivot directly on feedback from end users. The overhead of making changes should have an insignificant impact on the overall effort. Instead of going through time-consuming approval and requirement development processes, feedback is taken directly from the users, prototyped, and released for feedback from the users.
The Ultimate Payoff
Like many things in life, hard work and perseverance pay off. Why do I mention this? Because the journey of DevOps and Continuous Delivery requires not only a shift in the way we develop, test and deploy, it also requires a shift in culture and how we think about software.
It takes some time to nurture all of these philosophies. You may slow down at first, but eventually, the investment will pay off, and your company will be transformed into an innovative and agile organization that is able to compete in the new digital world.
Learn more in my original article, “DevOps Rituals with Continuous Delivery,” at http://bit.ly/2byoUCg.