Understanding DevOps – Part 2: Continuous Integration and Continuous Delivery

In Part 1 of this series on Understand DevOps, I introduced the definition of the term DevOps. In Part 2, I am going to extend that definition to include two key components of a DevOps solution – Continuous Integration and Continuous Delivery. These are two concepts that focus on minimizing Cycle Time – the time from the inception of a requirements or user story to the time that capability is in the hands of the customer, or at least is integrated, tested and ready to be deployed to the customer (while you impatiently wait for say the App store to approve the new version of your App…). More on Cycle time in a later post.

Continuous Integration – Agile in practice:

Continuous Integration is a key component of Agile Development practices. Consider the scenario – You are a developer working on a Agile team. In fact, it is a large project, so there are multiple teams developing different components of the software application you are building. You do your work, based on the user stories you and your team are working on. At the end of the day, you do a ‘private build’ of your work to verify it builds and ‘deliver’ it to a team build server. Other team members also deliver their work. You all ‘integrate’ your work in the common build area and do an ‘Integration Build’. As you are working with other teams, you would then ‘deliver’ your teams work to a common cross team build server and do a system wide or application wide ‘Integration Build’. Doing these integrations and builds to verify them on a regular, preferably daily basis, is what is known as Continuous Integration.

The value that Continuous Integration brings to the table is that it forces developers and team of developers to integrate their individual work with each others as early as possible. This exposes integration issues and conflicts on a regular basis. To make continuous integration work, developers have to communicate more and ensure that their work includes changes from other developers that may impact the code they are working on. Developers are not only able to find and address integration issues regularly but also verify that the integrated application or component functions as designed. If one does not practice continuous integration, the process of integrating ones work with that of other developers on the team would probably only happen at the end of the sprint or worse – a multi-month iteration. This is leaving unaddressed, in fact, undiscovered risk in the application till too late. This would require developers to dedicate potentially significant time at the end of every sprint just to integrated their work and fix any issues. Agile methodologies require that this be avoided by integrating regularly and exposing and addressing any issues regularly, hence reducing risk.

Continuous Delivery – Extending Agile beyond Development:

Continuous Delivery is nothing but taking this concept of Continuous Integration to the next step. Once the application is built, at the end of every Continuous Integration build, deliver it to the next stages in the application delivery lifecycle. Deliver it to the QA team for testing and then to the operations team (the Ops in DevOps) for delivery to the production system. The goal of Continuous Delivery is to get the new features that the developers are creating, out to the customers and users as soon as possible. Now, all builds that come out of a Continuous Integration effort do not need to go QA, only the ‘good’ ones with functionality that is at a stage of development that it can be tested needs to go to QA. Similarly, all the builds that go thru QA do not need to go to production. Only those that are ready to be delivered to the users, in terms of functionality, stability and other NFRs should be delivered to production. To test out that the builds coming out are ‘production-ready’ they should be delivered to a staging or test area which is production like. This practice of regularly delivering the application being developed to QA and Operations for validation and potential release to customers is what is referred to as Continuous Delivery.

Some organizations have taken this notion of Continuous Delivery to the extreme. They really do deliver every update made by developers out to users on a regular basis. Flikr is one such example. They deliver multiple updates a day! While this works great for a website, it is probably not going to be viable for enterprise or mission critical software. In fact, I don’t want my bank to be updating their customer account management software several times a day. Take your time… I want access to my money NOW; I can wait for the latest feature.

More about DevOps and how Continuous Integration and Continuous Delivery fit into the broader DevOps practices and also how to best implement these two capabilities, in future posts. Follow this blog and me on Twitter to get latest updates.

Related Posts

Understanding DevOps:

Adopting DevOps:

Other DevOps Posts:

42 thoughts on “Understanding DevOps – Part 2: Continuous Integration and Continuous Delivery

  1. Sam says:

    I agree that Continuous Integration and Continuous Deployment are imperative to successful ALM. However, the database is still overlooked. Coordinating and deploying database changes is a challenging – yet critical – component of ALM and must be considered in order for Continuous Integration and Continuous Deployment to deliver the desired benefits. Read my thoughtshere

      1. Krishnasamy says:

        @sanjeev, tried again, not working for me, may be am i missing / mis-splet the URL, pls guide me with appropriate link, if so.

  2. Ashish Dave says:

    Hi Sanjeev,
    I am introducing DevOps in my team, as a part of which I am writing an executive summary on DevOps. One of the challenges I came across while researching, from many sources is that of changing requirements until the last minute. Where would requirements sit (Requirements life cycle) in the DevOps initiative? In Part 6 of your presentation you have shown a diagram (https://sdarchitect.wordpress.com/2013/10/16/understanding-devops-part-6-continuous-deployment/), which starts with the Dev environment. I was just wondering, since requirements impact Dev cycle, should we not include requirements cycle in DevOps also? To give you a brief idea of environment where we are. Our Dev team is still evolving in to an Agile model. My question may be very basic or out of context but we are impacted by changing requirements. Can you please throw some light on this please. Thanks.

    1. sdarchitect says:

      Ashish, you are bang on. Good requirements management are a pre-requisite to good DevOps adoption. The focus around needs to be two-fold – making sure you are building the right thing, and you are building it right. Fortunately Agile methodologies have a good handle on effective requirements management. The only additional point I would highlight would be to ensure traceability all thru the delivery pipeline. Every asset should be traceable back to requirements. Not an easy task, but something to aspire for. Using an integrated ALM toolset will certainly help here.

  3. MIles Mercer says:

    Good insight in this, however given your portrayal of DevOps and the link with fast paced, continuous, development and delivery I am thinking that the actual pioneers of that “philosophy” would have been the likes of Semantic, MacAfee or even earlier companies than this that needed to deliver multiple releases a day in response to specific stimulate or vulnerabilities. Its unfortunate that people feel the need to jump on the high profile buzz companies of what they believe are new generation and “sexy”, whilst forgetting that most “new” miracle philosophies/methodologies are just rehashes of old ones with a slightly different twist.

  4. Michael Wade says:

    Your perspective and understanding on two key component of DevOps Solutions – Continuous Testing and Continuous Delivery are interesting and the article is well-researched.
    You might like to check out this post on ‘10 Best Practices to Achieve Quality@Speed with Continuous Integration’. Here’s the link – http://www.gallop.net/blog/10-practices-to-achieve-quality-speed-continuous-integration/
    I would like to get your views as well.

    Thank you.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s