What is Continuous Delivery

Continuous Delivery is the automation of the processes involved in getting code prepared for release. Traditionally, the development team would pass their work on to a quality assurance team for testing who would then, in turn, pass on their work to a release team for deployment. Much of the procedures for the hand-off and even the work itself, is very manual with testers manually testing the software and release engineers manually moving files from one environment to another.

Many organizations have moved to a model where the work has become automated. In other words, developers focus on building a pipeline which incorporates tests and release processes as software. 

The software world has come to the conclusion that the automation of these processes results in significantly better software than manual techniques. Evidence of this change in thought is primarily found in the popularity of movements like:

  • Test-Driven Development (TDD) – one of the earliest movements to automate the development pipeline. Roughly, the idea is to develop your tests first, then implement software that meets those tests. The argument for the style is that if you have the developer develop the tests for the software they write the tests will be of higher quality. However, you should get:
    • Only as much software as is needed for the features provided
    • Complete or near complete test coverage
  • DevOps – Popularized by the book The Phoenix Project,  the idea is to bring the operations team and the development team together when developing software. The belief is that the best people to operationalize software are the people who built it.
  • Business-Driven Development (BDD) – Similar to TDD but take it a step further back to actually author your requirements in a machine-readable way using tools like Python Behave & Java Cucumber. The requirements then test the software as you build it.
  • GitOps and ChatOps – Using git (typically GitHub) and chat tools (typically slack) to control the test and release process of software. 
  • DevSecOps/SecDevOps – Adding Security to the idea of developers and operators working together. The idea is that if you bring security concerns into every aspect of the software production lifecycle you will have better, more secure software than if it is applied externally or retrofitted.

All of these topics are well beyond the scope of this Learning Path.