Continuous Delivery: Benefits and Challenges of Automation

Archaic, waterfall methods of development and release are yielding to a new model where software is envisioned, specified, coded, integrated, tested and released within a continuous, seamless process. Continuous integration, delivery and deployment forgoes the fits and starts of linear, throw-it-over-the-wall methodologies in favour of a transparent, stable and highly responsive development pipeline based on build/release cycles of a day or less. A critical component in implementing continuous delivery is a high degree of automation all along that pipeline.

Signs That Your Enterprise Can Benefit from Continuous Delivery

If any of these conditions apply to your organization’s software development and delivery processes, then you should be taking a hard look at switching to a continuous delivery model:

  • Release times are long and getting longer. This is probably due to a combinatorial increase in complexity, which CD is particularly equipped to deal with.
  • Your projects require a large number of contributors, who are dispersed across time zones. CD increases cross-team efficiency by eliminating wait times for other teams to fix defects.
  • Development and test teams are bloated with experts and owners whose functions become bottlenecks to rapid, constant delivery of tested code.
  • Your organization’s software requires frequent updates, especially to fix security issues.
  • If your software is web-based in any degree, you need CD to in order to rapidly introduce incremental features to maintain distance ahead of the competition.
  • The cycle time between feature conception, implementation, analytics and revenue generation is too long to respond effectively to market trends.

Benefits of Continuous Delivery

The largest benefits of continuous delivery to any software development process are stability and increased responsiveness. Because continuous development depends on a build/test cycle of no more than a day, everyone works from the same shared source trunk, which eliminates disruptive branch merges. Responses to requirement modifications, new defects or feature additions are done incrementally and rapidly with more predictability. Bugs are not allowed to linger and improvements lead the competition rather than react to them.

Furthermore, continuous delivery enables your organization to discard batch processes that do not scale with the growth of development teams and software complexity. The overhead of planning for an increasing number of contributions for each iteration and increased testing complexity vanishes when pre-defined workflows for contributions and their testing are used instead. This has the side effect of reducing the number of face-to-face coordination meetings too.

Additionally, when development and delivery become continuous, there is no need for team members to shift between “modes” of development, test and release. Everyone along the pipeline benefits from increased focus on their prime contributions without disruptive, stressful context switches.

The Necessity of Automation

The ultimate ideal of a continuous delivery paradigm is a one-click process that can be initiated by anyone. The degree to which your enterprise can achieve that state of nirvana depends critically on embracing automation every step of the way.

Attainment of that state requires automating code analysis, unit testing, integration/build/regression testing, environment provisioning, defect reporting/repair, staging, release production and deployment. Complete automation often demands cultural changes, infrastructure build-out and re-architecting the software itself. In the latter case, a shift to SOA for all of the enterprise’s software is most complementary to a continuous delivery model. In every point where automation is applied, a high degree of scalable parallelism is absolutely essential to meet daily or higher frequency development/release cycles.

Take, for example, Mozilla’s development process for their Firefox browser. Every code commit automatically triggers an automated build/test process requiring hundreds of hours of CPU time. An enormous amount of investment was required to build the infrastructure to accomplish this, but the benefit is an extremely shorter developer feedback cycle and the ability to test quickly over multiple platforms and OSs.

Other companies utilize continuous development/delivery processes to produce release-quality software several times a day. They can introduce micro-features complete with analytics in a day or two that measure user response in nearly real time that results in the most useful and acceptable product features almost instantly.

For most organizations, the shift to continuous delivery is a seismic event. A recipe for failure is to regard it as something that can be accomplished in an organization’s “spare time.” Even given top priority, a shift to CD is likely to take several months depending on current practices, infrastructure and the ability of the organization’s culture to adapt.

The benefits include more efficient utilization of code and test staff, closely-knit teams, rapid feature introduction and increased confidence in quality due to the natural stabilizing effect that continuous delivery brings to software development. It will enormously hasten the enterprise’s response time to customer and market demands as well.