IT:AD:Continuous Delivery

Summary

@ccaum: Continuous Delivery doesn't mean every change is deployed to production ASAP. It means every change is proven to be deployable at any time.

IT:AD:Continuous Delivery is about ensuring ensure code is always in a deployable state (built, tested, packaged) in order to get changes of all types – new features, configuration changes, bug fixes and experiments – into the hands of users on demand, safely and quickly in a sustainable way.

IT:AD:Continuous Delivery recognizes that coded Unit and Static Tests cannot catch all business logic – unfortunately process maturity ends up dictating how much of the functional testing is automated (as opposed to IT:AD:Continuous Deployment which depends on all functional testing being automated).
Many projects are still somewhere on the continuum between barely more than IT:AD:Continuous Integration (with packaging added to the mix, but all functional testing still being manual) and the upper more mature practices ensuring that all functional testing is automated.

When implemented maturely, IT:AD:Continuous Delivery can completely eliminates the code freeze, integration, testing and hardening phases that traditionally follow “dev complete”.

Either way, in a IT:AD:Continuous Delivery based project, deployment to PROD remains a decided operation – unlike IT:AD:Continuous Deployment.

Version Control ServiceBuild AutomationContinuous IntegrationContinuous DeliveryProcess maturity heavilyaffects the level ofconformance toContinuous Delivery (CD).Automation of Static+DynamicSecurity, Performance,Compliance, Functional,Post-Deployment Testsrange from 0 to 100%.(Functional) Test AutomationContinuous TestingContinuous Accredited DeliveryDepends on 100%conformance toContinuous Deliveryintentions.Continuous DeploymentUnit/Static/Dynamic Testsusesimprovesimprovesimprovesimprovesusesmay usesome orall ofimprovesmay useuses

A key concept of IT:AD:Continuous Delivery is small batches of work continually fed to the next step – automated or manual – will be consumed more easily and issues found earlier. This system is easier for the developer because issues are presented to the developer before the task has left their memory.

ACiD

  • Advantages:
    • When implementing IT:AD:Continuous Testing completely eliminate the integration, testing and hardening phases that traditionally followed “dev complete”, as well as code freezes.
    • When properly implemented, fulfills the following principle from the Agile manifesto:
      • “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
    • Aims to deliver to end users early and quickly, and implement feedback.
    • Lowers risk: by implementing coding practices appropriate to delivery often, risk is lowered.
    • Faster time to market.
    • Higher quality:
    • Lower cost: by investing in build, test, deployment and environment automation, we substantially reduce the cost of making and delivering incremental changes to software by eliminating many of the fixed costs associated with the release process.
  • Considerations:
    • Some risk adverse organisations find IT:AD:Continuous Delivery more comfortable to understand than IT:AD:Continuous Deployment.
    • Answers the following questions:
      • Does the new feature work correctly on a production like server environment?
      • Do the packages install correctly?
      • Does the automated process that will be used throughout the delivery pipeline work? (one package, same delivery, many times, to all environments)
  • Disadvantages:
    • Without the formal requirement to implement IT:AD:Continuous Testing, some organisations never begin to automate the Functional Testing, negating most of the advantages delivered by other teams using Agile methodologies, and the organisation only gets to a subset of the following characteristics of IT:AD:Continuous Testing:
    • Test early,
    • Test faster,
    • Test often
    • Automate.

Continuous Deployment compared to Continuous Deployment Delivery

The fundamental difference is that IT:AD:Continuous Delivery is when you make your software product available to the customer but the decision to upgrade/install it is manual. In the case of desktop apps, they have to download/install the update, and in the case of a web service, someone has to authorize it's deployment to live.

IT:AD:Continuous Deployment is when the upgrade is automatically deployed.

In other words, with IT:AD:Continuous Delivery, a product can be automatically delivered to production at the touch of a button, once approved – whereas with IT:AD:Continuous Deployment it is automatically deployed to end production.

The second fundamental difference between the two is that whereas IT:AD:Continuous Delivery can use some [[IT/AD/Continuous Testing/]] [[IT/AD/Continuous Deployment/]] relies on using IT:AD:Continuous Testing to test the totality of the solutions's functionality.