In the digital age, speed is everything and no-one wants to be left behind. Being slow to react is the first and, most likely, final nail in the coffin for a 21st century company. The rigidity of the traditional ?waterfall? development approach was overhauled by the ?agile? philosophy. And with agility, things have changed; it's brought into reality the idea of continuous delivery.
Move With the Times or Get Left Behind
But what is continuous delivery? Simply put, it?s the ability to push any kind of change, be it new functionality, code updates, bug squashes or the like, into production environments quickly and safely. Not only this, but each release must be stable and sustainable. Continuous delivery eradicates pesky time-consuming processes and freeze periods, as it removes the need for dedicated silos of integration and testing. This is all achieved by creating code which is always in a state fit for deployment. In theory, continuous delivery enables us to release stable code to production at any given time ? an approach demanded by the needs of the end user and impossible to achieve through waterfall-styled development.
Those who have adopted continuous delivery are already reaping the rewards. They?re seeing how it significantly improves your time-to-market: as your changes can be published almost instantly, you?re no longer restricted by a rigid release schedule. You become much faster to react, to iron out bugs and release features. Your customers are more satisfied than before, which is what we ultimately strive for.
Shipping a release has traditionally been momentous, something we want to shout about, and rightly so. Ironing out those bugs or releasing those long sought-after features is no small feat and takes a huge amount of effort from everyone involved. There?s nothing worse than shipping, only for new bugs to crop up, or the software to crash. Continuous delivery allows you (in theory) to continually deploy ? just not always to customers. Pushing your stable code to UAT environments or staging reduces the risk around the production release. Now, you?re no longer deploying once every few months: you can be releasing every single day.
There are often barriers, inefficiencies and hidden costs in the release cycle which, historically, went unnoticed until launch. Continuous delivery highlights all these flaws, making them clear to the business and senior management members, who are in charge of making decisions. Pipelines will be much more transparent: you?ll know where and when manual, human input will be required, where bottlenecks will crop up, where automation can be implemented. The pipeline now creates a clear incentive for a dynamic software delivery schedule, replacing a notion of dissatisfaction with costly, long and arduous release windows.
Flexibility is one of the main selling points of the model. Yes, there is an initial outlay in terms of infrastructure, in both software and operational architectures, but once this seed is sown, the benefits are there to be reaped. Features and fixes are now available to be pushed to specific individuals or customer subsets, ensuring the functionality works as expected. Or the features can remain dormant within the product, awaiting a future release which could be sparked by a marketing push for example. In the past, trying to devise such functionality would have been a logistical and costly nightmare. With continuous delivery, it?s par for the course.
The rewards speak for themselves. Like I said, continuous delivery is simple ? in theory. The difficulties arise in its implementation.
The Pains of Changing
The main challenge you may encounter while trying to implement continuous delivery will probably be organizational. While more and more companies are working toward implementing a DevOps culture ? structurally, they may not yet be ready for continuous delivery. You?ll still find plenty of firms are split into seemingly countless divisions, each of which ?owns? a particular product, feature, or codebase. Each division is going to have its own goals, targets and KPIs it must meet. Trying to bring these ?opposing? factions together can be a logistical nightmare which could prove to be the undoing of your dreams of agility.
Therein lies the problem. For large companies, it can take months, if not years, to move complex applications to continuous delivery. It requires a complete mindset overhaul to adapt to this new process. New behaviors and practices must be learned, and architecture will probably need revisiting, as will software development processes. Top-down changes must be implemented in order to promote a culture of collaboration.
In all honesty, continuous delivery can seem a tough sell when presenting the concept to senior management for a number of reasons. Firstly, they have their own day-to-day tasks to see to, which depending on seniority levels, are going to take up much of their time. They may not be as tech-minded as yourself and may not be able to immediately see the benefits of implementation. They also have their own views, priorities, and goals, which may vary from yours.
The barriers to employing continuous delivery may seem insurmountable at times but, as we?ve seen, the benefits of the approach speak for themselves. That?s how you?ll sell the approach to senior stakeholders.
Automation Is the Key
Continuous delivery has revolutionized the way we develop and release software, but without automation, arguably it wouldn?t be possible at all. Automating the entire pipeline, from code submission, through testing and environmental deployments is crucial to being able to obtain true continuous delivery.
The entire philosophy is built around flexibility, around agility; code changes and releases could be occurring at any time. Without the right automation processes in place, saving manual testing, deployment, and releases, we?d be back at square one: the cumbersome waterfall approach. Manually overseeing each of these processes would completely defeat the entire goal of continuous delivery. But, like I said, times really have (a) changed.