Reliability and speed by 'push to main' mentality - Håvard Høiby - NDC Oslo 2024

Learn how pushing directly to main branch with feature flags, small increments, and "dumb code" can make your development process faster & more reliable.

Key takeaways
  • Maintain only production environment, no staging/development environments - this reduces complexity and forces better practices

  • Push directly to main/master branch from day one - enables faster integration and learning from production workloads

  • Break changes into small, atomic increments rather than large PRs:

    • Reduces risk
    • Makes rollbacks easier
    • Enables faster feedback
    • Simplifies code review
  • Use feature flags extensively:

    • Test new features in production
    • Control rollout
    • Easy rollback capability
    • Decouple deployment from release
  • Employ expand/contract pattern for breaking changes:

    • Add new version alongside old
    • Gradually migrate traffic
    • Remove old version when safe
  • Embrace incidents and errors:

    • Build blameless culture
    • Learn from mistakes
    • Monitor application metrics over infrastructure
    • Have clear incident response process
  • Write “dumb code”:

    • Keep it simple
    • Minimize abstractions
    • Make it easy to understand and modify
    • Focus on explicit over clever
  • Enable developers to be autonomous:

    • Trust teams to deploy
    • Give access to production tools
    • Allow direct fixes without process overhead
    • Empower decision making
  • Test based on impact and criticality:

    • More testing for critical paths
    • Less ceremony for low-risk changes
    • Use production data for testing
    • Monitor real usage over synthetic tests
  • Optimize for speed of integration:

    • Minimize time from idea to production
    • Remove artificial process barriers
    • Learn from production quickly
    • Continuously deliver small changes