Anyone experienced with traditional IT environments will probably be familiar with the age-old tension between releasing new features and guaranteeing stability. In these unfortunate circumstances, development and production teams work separately from one another, paving the way for a series of issues in both delivery fluidity and compatibility.
This is very much akin to sprucing up a big, circular cake and somehow attempting to fit it into a much smaller — possibly star-shaped — box for delivery. Just as you would likely have to slice the cake up in order to make it fit inside the awkward packaging, due to the natural differences between development and production environments, operations teams must tweak any code that is sent their way.
Of course, in this day and age, the industry demands agility. So in order to get around this issue and expedite the delivery process, here at Software Planet, we make use of continuous deployment — a practice that while admittedly requiring a series of big changes to attain, has the power to take your production capacity to exciting new levels.
DevOps and CI/CD
The first step towards achieving continuous deployment is to implement DevOps, a development method that focuses on collaboration, communication, integration and crucially, the automation of processes between software engineers and other IT professionals.
In stark contrast with other techniques, in a DevOps environment, the entire team is held responsible for delivering both features and stability. This is effectively seen in two core practices — continuous integration and continuous delivery (often referred to jointly as CI/CD).
The process of regularly building and testing your software automatically is known as continuous integration (CI). This was first devised by Martin Fowler, a renowned programmer and public speaker, and a co-signatory of the Agile manifesto.
In practice, developers are required to integrate their code into a common repository multiple times each day. Every update is subsequently verified by an automated build, which enables teams to detect problems early on. Effectively, therefore, although CI does not entirely get rid of errors, it does make them significantly easier to locate and correct.
Concurrently, because integration happens so often, a lot of time is saved, so developers are free to spend most of their time working on delivering new features.
Continuous delivery (CD), for its part, is simply the next logical step. Now that developers are constantly running tests, it becomes possible, at least in theory, to release your software at any point in time.
Of course, this does not mean that CD practitioners will literally be delivering a new version of their application with every passing nanosecond. It does, however, imply that a real commitment exists to ensure their code is kept in a release-ready state at all stages.
Step it up with the other CD
Now, onto the fun stuff! Once you have your CI/CD practices in place, you can start actually delivering new features and fixes as soon as they are ready. This is what we mean by continuous deployment (CD2).
In the cloud especially, this practice has become increasingly common, as developers are able to quietly update their services in the background, at the mere push of a button. Netflix, for example, deploy new code thousands of times each day, while Amazon is said to do the same every 11 seconds!
Of course, there is an infinite spectrum of possibilities here, but the key uniting factor is that companies embracing continuous deployment are able to offer higher quality products at breakneck speeds.
Unfortunately, however, despite these benefits, implementing DevOps is not the easiest task. In fact, many organisations would rather relay all the reasons in the world (read: excuses) as to why they are unable to do so.
Yet with the right mindset and tools, you can get your company off the ground and on its way towards full automation.
First and foremost, it is important to note that DevOps is not just a process, but a business culture. In order to successfully implement it, you must find a way to get everyone onboard or face a technical shipwreck. This is why it is so vital to make sure that all your teams are well briefed and acquainted with the many reasons behind adoption.
Be realistic in your goals and expectations too, as not everyone may be willing to join in at first. But by starting small with a pilot project and a strong team of cross-functional players, you can garner fast results and sell your experiment as the target to be aimed for, and ultimately, as a driver of cultural change.
As you may have guessed, however, good intentions and talented staff can only take you so far. In order to reach CD2, you must also meet some very important technical requirements.
The obvious first step is to thoroughly analyse and document all the systems, processes and procedures used in your company for both software development and network administration.
For organisational purposes, you will also need to implement a series of metrics that can track any changes that are made to your procedures while also measuring success. This should include analytical tools as well as the trained staff who will then sieve through the vast information in order to generate comprehensive — and comprehensible — reports.
Have your cake and eat it
When a baker works closely with the catering team, he can easily ensure that the final result will be custom-fit for the send-off packaging. Similarly, by implementing CI/CD and CD2 practices, you can join together two previously independent teams to remove pointless hurdles in development and ensure that deployment runs smoothly and effectively.
Embracing DevOps as part of the Agile process makes perfect sense for many medium-to-large IT teams. At Software Planet, we have found that it allows us to react quickly to product and market missteps, and above all, to deliver immediate value to all of our customers.