What Is Continuous Delivery?
What Is Continuous Delivery?
A combination of building great teams, establishing the culture, and setting up automation will enable you to have Continuous Delivery in your organization.
Join the DZone community and get the full member experience.Join For Free
Atomist is your platform for self-service software delivery. Try it for free today!
Most businesses today need their software changes (new features, bug fixes, and updates) to come out quickly. This environment is competitive and it is driven by customers who have little patience for long wait times or inferior products. Customers either need it now or needed it yesterday. Not only are the time frames for product releases short, but the demand for quality is higher than ever. You can’t create shortcuts to shorten the release cycle that result in a lesser-quality product. If so, your business will be negatively affected in many ways. Assuredly, your costs will go up due to unnecessary and repeated development. More importantly, your customers’ faith and trust will be impacted, which can cost you in loss of business.
This scenario can have you asking how your business can function competitively and even thrive in this fast-paced business environment. The answer is through the Continuous Delivery discipline. This article discusses a high-level perspective of Continuous Delivery: what it is, what the attributes and key elements are, and how you can get there.
What Is Continuous Delivery?
According to Martin Fowler, a software developer who specializes in agile and extreme programming and who is a thought leader on Continuous Delivery:
“Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.”
This succinctly defines the process we call Continuous Delivery.
Attributes and Key Elements
These are primary attributes of continuous delivery:
- IT as a cost center.
- Continuous delivery.
- A commitment to continuous learning and improvement.
In order to create an environment that can produce software quickly, efficiently, and of high quality, you must have a culture that embraces agility and adaptability. This culture permeates all areas across the organization such as the business centers, the developers, the testers, quality assurance, and operations. Teams are made up of stakeholders across all functions that are responsible for designing, building, testing, and operating the software systems.
Each team has a unified mission — the successful delivery of a high-quality product — and each team member is responsible. Everyone recognizes that each person and each team is a partner in the process.
There is a reduction of the fear of failure and blame. There is an inherent expectation of trying new things and, sometimes when new things are tried, they fail. It’s OK to fail; in fact, failure is encouraged because it is through trial and error that innovation occurs. As a result, there is a high quality of work life in the culture.
IT as a Cost Center
Traditionally, IT has been a cost center and, as such, it has had to operate within the constraints to which a cost center is bound. Being a profit-loss center means that pressure is felt to be profitable for the company. Many times, this leads to an environment that is counter-productive to innovation.
In Continuous Delivery, IT is seen as part of the strategic assets of the company and its processes and capabilities are aligned with overarching organizational needs. When IT is no longer viewed as a cost center, it can be seen more as a center of innovation where business problems are solved, resulting in satisfied customers, which leads to higher revenues.
Automation is critically important in a Continuous Delivery shop. Without the use of automation tools, you simply can’t respond quickly and be adaptable to changing requirements. Automation provides you the ability to move through the deployment pipeline channels swiftly and with high levels of confidence.
Through automation, you are able to engage in a regular iterative workflow with short cycle times where the workflow is based on small, frequent changes. The traditional Waterfall environment has long project cycles with manual testing and coding that increases the risk of human error. Using automation, the human error risk is reduced and/or eliminated. As a result, confidence in the quality of the product increases.
Tools that enable quick monitoring and measuring are necessary to the Continuous Delivery environment. Configuration management and version control are equally as important. Tools that provide shared access to knowledge and reporting are key elements in the ability to deliver on a continuous basis. Without quick feedback loops, alerts, and version control in the deployment pipeline, you cannot achieve effective continuous delivery.
Automation tools such as Puppet and Chef allow you to test in the environment where the problem occurs so you know what has happened upstream. When testing manually, it may not be easy to get this information.
Through establishing a culture that promotes innovation, creating a workflow that is based on small frequent changes, and using automation that enables the instantaneous communication necessary in the deployment pipeline, you can have Continuous Delivery.
In Continuous Delivery, the deployment process becomes iterative and can be daily and even hourly. However, this doesn’t mean that you are releasing products to your end-user that frequently; it only means that you can if needed. You actually build the cycles in such a way that a product can be released at any time. Because of automation, you have a thoroughly tested product that can be released by a one click process. Fast rollbacks are possible through immediate feedback from testing. You predefine failure scenarios and have automated alerts back to development teams, which greatly shortens the cycle.
A Commitment to Continuous Learning and Improvement
The continuous delivery discipline includes a strong commitment to learn and improve. This commitment is a foundation for the process and of the culture. When you are open to innovating, trying and failing, you are also open to learning from failures and improving based on new knowledge. This becomes an iterative process just as the deployment pipeline is iterative in its cycle. Agile began this way of thinking and project development, and there are lessons from Agile that continuous delivery has implemented.
- Teams trust each other and work effectively across functions.
- All stakeholders are involved from the beginning in designing, building, running and testing.
- The design of the requirements is communicated to those who are tasked with the building, testing and operating.
- Communication is imperative throughout the cycle for continuous delivery to work correctly.
- All players are committed to common values, ensuring alignment.
- Teams are empowered to make decisions for issues that are not foreseen; learning is built into the process.
- Agile allows adaptability and predictability.
- Teams find minimum requirements for a solution.
- Limit work-in-progress (WIP).
- Start with small requirements and build solutions.
- Commit to a process where you learn as you go.
How to Get There
Our discussion of Continuous Delivery wouldn’t be complete without referencing the book Continuous Delivery by Jez Humble and Dave Farley written in 2011. This book is a complete look at everything you need to know about the discipline. It is beyond the scope of this article to go into the book, but we strongly encourage you to read it if you are serious about continuous delivery for your business.
So, how do you get to Continuous Delivery?
First, evangelize the culture in your organization and create teams across functions that can be coached to incorporate the mindset. Next, establish the key attributes and elements into the deployment cycle. Then, set up the deployment pipeline such that testing is automated and iterative. Feedback loops back to the developers when testing shows that there are fixes needed, but builds are pushed on to more testing when everything is OK, and eventually, the product is released. Lastly, continually improve your processes, and learn and expand your capabilities.
In summary, it will be a combination of building great teams, establishing the culture, and setting up automation that will enable you to have Continuous Delivery in your organization.
For more information, view our complete recording of the Continuous Delivery 101 webinar.
Published at DZone with permission of Chris Knotts , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.