Subscribe

The never-ending story

Continuous delivery is made up of continuous integration and continuous deployment.

Charlene Tshitoka Mulamba
By Charlene Tshitoka Mulamba, Consultant developer at ThoughtWorks South Africa.
Johannesburg, 25 Jun 2014

Continuous delivery is a key concept within the Agile approach to software development - a dynamic methodology that builds software from the ground up, in layers, with updated iterations released at regular intervals within the development cycle.

Two key components of continuous delivery include continuous integration and continuous deployment. Continuous integration is helpful when a distributed team works on the same code base. The framework for this process ensures developers can implement a pipeline of changes or add functionality, and that each change is tested to ensure the new code being pushed into the environment doesn't break existing code. If it does break, this approach enables developers to see why and where, and modify it appropriately. This ensures everything integrates smoothly and the build process continues on plan without bugs or breaks.

Continuous deployment refers to the process of publishing code for the user or client, to interact with and give feedback on it at any point. With one click, code can be sent into the production environment and someone can use and interact with the software to make sure it does what it needs to.

The system is not necessarily complete at this stage, but pieces of it are functional and can be published for feedback before the whole project goes live. Continuous deployment means pieces of code can be taken from idea to 'go live' without having to develop the whole system, which would have had to use older software development methodologies like Waterfall.

As such, implementing continuous delivery in any Agile-driven development project will allow developers to build and test critical pieces of software on the fly, to see if they're viable, meet the client/end-user's requirements, and - more importantly - if they work. If not, then changes and adjustments can be made before more functionality is layered on. This creates a more efficient and effective approach to software development, which is gaining widespread acceptance globally due to the many benefits.

Something else Agile developers are trying to do as part of the continuous delivery approach is to automate the underlying infrastructure. Automating infrastructure means all actions are scripted - from operating system to software and configuration. As such, an environment can be easily replicated or duplicated if it goes down, with minimal downtime.

By automating infrastructure, the benefits include the peace of mind of knowing that if a system has an unrecoverable failure, it can be recreated without taking weeks - everything is downloaded and installed in the shortest possible time, to the exact specification required.

New ways of thinking

Unfortunately, the continuous delivery approach inherent in Agile software development is not being widely used in South Africa, or the rest of Africa yet, despite its many benefits.

Rather develop the critical portion of the system upfront and quickly see if the idea is viable.

If more projects adopted this approach then there wouldn't be such a disconnect with the initial brief and the final outcome in many instances. The continuous feedback between developers, IT and business owners ensures the solution is addressing the problem and answering the brief. It also delivers a final solution that works and is ready for operation.

Waterfall methodologies require that all the work is done upfront before it is tested against measurable requirements. As such, it is often discovered that the turnkey part of the program does not work. By getting the turnkey portion of the system to users as soon as possible, through the process of continuous delivery, developers can see if a project is feasible. This is particularly critical for start-ups that have limited funding. Instead of spending all funding on developing a system based on an idea that may not fly, rather develop the critical portion of the system upfront and quickly see if the idea is viable.

Both from a start-up perspective and for established environments, it also makes sense to prove a concept before building it. Additionally, by using Agile methodologies, a system can be built in pieces of viable functionality so that, if at any point it seems too much time and/or resources have been spent on a system, development can be stopped but the software will still be working.

Making the transition

Any company that wants to consider adopting the Agile and continuous delivery approach should first look at their existing code base and how it is managed.

Set up a pipeline to manage changes to the existing code - in other words, implement continuous integration, with a team of people that can collaborate together on the code before implementing continuous delivery. Once the integration part is understood, users can look at how continuous deployment works.

There is any number of tools online that can be used to build a continuous integration pipeline, some of which are free and open source.

Share