Subscribe

Continuous delivery

App deployment at the push of a button.

Jaco Greyling
By Jaco Greyling, Chief technical officer, DevOps, at CA Southern Africa.
Johannesburg, 18 Feb 2016

The world is in the middle of a fundamental, global digital transformation in the way people consume and interact with products, services and information. The proliferation of software and mobile platforms is providing access to services to billions of mobile users around the world. It is unlocking new efficiencies and possibilities, while improving living standards for everyone.

This is the application economy, a huge new global economy that knows no geographic borders or limits. In this new economy, customers expect to connect with companies via software for fast, easy access to products, services and information. Winning and keeping customers depends on a company's ability to meet these expectations by constantly finding new ways to create and deliver value.

All companies are thinking and becoming more like "tech" companies, with digital business capabilities beginning to dominate every industry. The application economy leaders have already embarked on this transformation - by delivering new products and services via digital channels. In some cases, they are able to deploy application code 30 times more frequently than their lower-performing counterparts. They also deploy more resilient, high-quality applications that enable them to win, keep and serve their customers to achieve 106% higher revenue growth and 68% higher growth in profit.[1] This is not just confined to unicorns (start-up companies with a valuation of $1 billion or more), but is in the realm of possibility for all types of organisations - old, new, small or large.

Successful digital transformation requires continuous delivery, the new business imperative that enables companies to rapidly develop and deliver applications that drive superior user experiences and engage customers and staff.

Jez Humble, co-author of: Continuous Delivery, defines it as a set of principles and practices to reduce the cost, time and risk of delivering incremental changes to users.[2] The problem with current practices, however, is that written software is waiting uselessly until it is deployed, which increases cycle time - the time from deciding what is needed to make a change, to actually having it in production. The longer the release cycle, the more time the development team has to make incorrect assumptions before the deployment occurs, and the longer it will take to fix it. This has a huge impact on cost and time-to-market for any software project.

However, this doesn't mean companies are not tackling these inherent problems.

On your marks

Many companies today have already adopted some form of agile development to help improve development practices through incremental, iterative work cycles known as sprints. This has given birth to continuous integration, a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.

On the other end of the spectrum, IT operations have also made significant improvements. One example of this is the reduction of lead time to provision new hardware, due to increased business demands. Both hardware virtualisation and cloud services are examples of how operations can deliver new products in a fraction of the time it used to take a couple of years ago.

Despite all of these advances, there is still a missing piece to the puzzle - the deployment pipeline.

The deployment pipeline has its foundations in the process of continuous integration. This, in essence, is the principle of continuous integration taken to its logical conclusion. The aim of the deployment pipeline is threefold. First, it makes every part of the process of building, deploying, testing and releasing software visible to everybody involved. Second, it improves feedback so problems are identified, and so resolved, as early in the process as possible. Finally, it enables teams to deploy and release any version of their software to any environment at will, through a fully automated process. Only when there is control over the progression of every change - from introduction to release - can a company begin to optimise and improve the quality and speed of software into production.

All companies are thinking and becoming more like "tech" companies.

A software release can (and should) be a low-risk, frequent, cheap, rapid and predictable process. It is, therefore, vital to minimise cycle time so an effective feedback loop can be established.

What is the feedback process?

This involves testing every change in a fully automated fashion, as far as possible. If the build, deploy, test and release process is not automated, it is not repeatable. Every time it is done, it will be different. It is essential that everybody involved in the process of delivering software is involved in the feedback process through collaboration. This includes developers, testers, operations staff, database administrators, infrastructure specialists, and managers. A process based on continuous improvement is essential to the rapid delivery of quality software. Iterative processes help establish a regular heartbeat for this kind of activity.

Lastly, in traditional software factories, people always wait for a "good build" of the application for testing and deployment purposes. With a deployment pipeline implementation, this problem is completely removed - everybody should have the ability to see which builds are available to be deployed into the environments they care about, and be able to perform a deployment at the push of a button through release automation.

For this to work, every component - all artefacts relevant to a project - must be part of a configuration management system. A configuration management system establishes and maintains the integrity of the products of the software project throughout the project's software life cycle. By actively managing everything that can change in version control, the human capacity for making mistakes during repetitive tasks is removed. This inevitably leads to better quality software and aids the release process.

Continuous delivery is an integral part of any DevOps movement and the logical conclusion of a good agile development strategy. In a nutshell, continuous delivery addresses various issues - release errors, long time-to-market and high cost - in software delivery to create a highly automated, end-to-end deployment pipeline. This will inevitably bring the enterprises of today closer to the unicorns of tomorrow and level the playing fields.

[1] CA Application Economy Market Study commissioned by CA, conducted by Vanson Bourne, 2014
[2] J Humble, D Farley. 2010. Continuous Delivery. Crawfordsville, Indiana: Addison-Wesley

Share