Introduction to Continuous Delivery

Agile Manifesto

http://agilemanifesto.org/

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:
  1. The process for releasing/deploying software MUST be repeatable and reliable
  2. Automate everything!
  3. If something is difficult or painful, do it more often
  4. Keep everything in source control
  5. Done means "released"
  6. Build quality in!
    1. Test coverage, code styling, etc.
  7. Everybody has responsibility for the release process
  8. Improve continuously
4 Practices:
  1. Build binaries only once
  2. Use precisely the same mechanism to deploy to every environment
  3. Smoke test your deployment
  4. 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:
  1. Identify the system's constraint(s)
  2. Decide how to exploit the system's constraint(s)
  3. Subordinate everything else to the above decision(s)
  4. Elevate the system's constraint(s)
    1. 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).

results matching ""

    No results matching ""