Introduction to Continuous Delivery
Agile Manifesto
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Value the items on the right, but value the items on the left more
2-4 week sprints
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Continuous Delivery: creating a repeatable and reliable process for delivering software in order to deliver high value software to customers fast
8 Principles:
- The process for releasing/deploying software MUST be repeatable and reliable
- Automate everything!
- If something is difficult or painful, do it more often
- Keep everything in source control
- Done means "released"
- Build quality in!
- Test coverage, code styling, etc.
- Everybody has responsibility for the release process
- Improve continuously
4 Practices:
- Build binaries only once
- Use precisely the same mechanism to deploy to every environment
- Smoke test your deployment
- If anything fails, stop the line!
Continuous Delivery Pipeline
The key pattern that enables continuous delivery. It provides visibility into production readiness and gives feedback on every change of your system.
Source control--->Build binaries--->Deploy to test environments--->Test binaries--->Human approval--->Production
An aspect of continuous delivery that seeks to automate away the human approval step is continuous deployment.
Optimizing the Pipeline:
- Identify the system's constraint(s)
- Decide how to exploit the system's constraint(s)
- Subordinate everything else to the above decision(s)
- Elevate the system's constraint(s)
- Any optimization not related to the system constraint is useless since it will not increase the system flow
Read more about the Theory of Constraints in The Phoenix Project.
The Need for Feedback
The faster we fail in the delivery pipeline, the sooner we can fix and retry. We need feedback in the system to help us identify where we need to optimize (including in the IDE - naming conventions, best practices, correct architecture).