ABOUT THIS CHAPTER   Delivery is the activity in which the rest of the development process comes together. As such, delivery provides a useful lens through which to discuss several aspects of more effective Agile development.

In this chapter, I refer to both delivery and deployment. “Delivery” refers to preparing the software in every way needed to make it ready for deployment but not actually deploying it. “Deployment” refers to taking that last step to put the software into production.

The last step required to get to delivery is integration. In Agile development, the goal is to have both continuous integration (CI) and continuous delivery or deployment (CD). CI and CD are cornerstone practices of DevOps.

Continuous integration is not literally “continuous.” The term is used to mean that developers are checking code into a shared repository often—typically multiple times per day. Likewise, continuous delivery does not literally mean “continuous.” In practice, it means delivery that is frequent and automated.

Software development activities tend to flow from more open-ended, creative, nondeterministic activities, such as requirements and design, to more closed-ended, deterministic activities, such as automated testing, commit to trunk, user acceptance testing, staging, and production. People are good at the more open-ended upstream activities that require thinking, and computers are good at the more deterministic downstream activities that need to be done repetitively.

The closer you get to delivery and deployment, the more sense it makes to automate the activities so that they are performed by computers.

For some companies, the ideal is fully automated deployment, which requires a fully automated deployment pipeline, including automating repetitive tasks. This illustration shows which tasks can potentially be automated:

Get hands-on with 1200+ tech skills courses.