How to deliver continuously - Christian Johansen - NDC Oslo 2024

Learn practical techniques for continuous delivery including trunk-based development, keystoning, incremental changes, and automation to ship software faster and safer.

Key takeaways
  • Work in small increments and batches, making tiny commits that can be safely pushed to the main branch
    • Practice trunk-based development (main branch development) instead of long-lived feature branches
  • Use keystoning technique to incrementally build new features by:
    • Creating small, complete pieces of work
    • Establishing connection points for future work
    • Building features piece by piece rather than all at once
  • Keep the system always working and deployable by:
    • Making sure code compiles and tests pass with each commit
    • Working as if every commit could go to production
    • Fixing build/test failures immediately
  • Break large changes into smaller, safer changes:
    • Extract functions and move code gradually
    • Use feature flags for larger changes when needed
    • Make additive changes rather than destructive ones
  • Automate testing and deployment:
    • Have automated tests that you can trust
    • Set up continuous integration pipelines
    • Enable quick feedback on changes
  • Benefits of this approach include:
    • Higher quality software with fewer mistakes
    • Improved developer happiness and retention
    • Better software delivery performance
    • Reduced merge conflicts and integration problems