“Continuous Delivery” is a modern approach to software engineering aiming at the production and release of software more frequently, in shorter and rapid cycles. The objective is to establish faster got-to-market times, optimize the development and delivery cycle, ensure speedy resolution of issues and establish a stable, reliable, repeatable and possibly automated end-to-end process for software delivery and deployment, thereby saving time, money and effort.
In their book “Continuous Delivery”, Jez Humble and Dave Farley define the following eight principles as the basics for Continuous Delivery to be executed with the best results.
The process for releasing/deploying software MUST be repeatable and reliable
Release management can be a highly fragmented practice. For continuous delivery to be effectively and smoothly implemented, an effective consistency must be followed in processes and platforms being used from the IDE to QA. This will prevent errors, reduce complications, overheads and time of managing multiple environments and of course, simplify and streamline operations, in all ensuring faster delivery cycles.
Today, it hardly makes sense not to automate a process, especially if it is repeatable and can be managed remotely by a process or code. Automation is the main key to faster releases because manual processes are error prone and time-consuming, not to mention inefficient. This applies to all processes in the application lifecycle from build, development, release and testing.
If something is difficult or painful, do it more often
This is not just an age-old motivational saying but makes great sense when it comes to efficient software delivery. Repeated application of troublesome procedures enables faster detection and repair of whatever is causing the trouble, improving the entire processes and performance of things that actually work well.
Keep everything in source control
A key enabler of continuous delivery is the creation of a strong core or foundation as a “source”, on which release iterations can be built upon and tracked by strict version-control, enhancing performance and efficiency with each iteration.
“Done” should mean “released”
A universal definition of what the final production version of the software should be is imperative for continuous delivery. The outcome of the project must not mean different things to different people. The final delivery should be marked “done” only when a release fully confirms to a single pre-defined, agreed upon, final outcome.
Build quality in!
The very essence of continuous delivery is to find and fix errors in the code (bugs) as fast as possible and put the software back into production before those bugs can do much damage. This can be achieved by making feedback loops as short as possible, and by keeping developers in the know during release cycles, so that any issues cropping up can be rectified on the go or in an immediately following release.
Everybody has responsibility for the release process.
The biggest change the software development process has seen in the recent years is that traditional boundaries between processes and departments have blurred. No one works in silos anymore. For continuous development to happen, everyone involved in the process from program managers, developers, IT, testers etc. need to work in tandem and be knowledgeable about the entire process flow. This is also the essence of DevOps.
Technology changes at a rapid pace. A way to make sure you don’t fall behind or let these changes get the better of your processes and systems is to continuously monitor these changes and stay ahead of them by improving your methods to match them. Continuous Delivery cannot be accomplished without continuous improvement.
Implementing continuous delivery for an organisation’s processes will go a long way towards developing efficient, robust and high-quality software production, deployment and delivery practices at substantially lesser cost and effort. Testhouse has an advanced continuous delivery and DevOps practice incorporating all its fundamental principles, ensuring faster releases of high-quality software at the most reasonable cost, providing Testhouse’s clients with vital strategic and competitive advantages when it comes to achieving their and their customers’ business goals.