Problem

A branch per project is where the time and money go.

Each project keeps its code on its own branch until its go-live — a quarter or more, even when the organisation releases every month. Then come late, painful merges and a test environment per project.

Parallel projects on long-lived branches

  • Code waits for the project, not the release. The organisation may release every month, but a project going live once a quarter keeps three months of work on its own branch.
  • Merge cost. Branches that live for months integrate late, and merging them takes days of work — "merge hell".
  • Environment cost. Every isolated branch needs its own test environment, each with its own set-up and running cost.
  • Release risk. A release carries whatever projects were merged into it. One late or faulty project holds back the others.
  • Late feedback. Problems between projects show up only when they merge, just before go-live.
Long-living feature branches
project Amainproject B
merged back only at go-live work waiting for its project's go-live main merged back after every release

Who feels it

The same branches, seen from each seat.

The way out: trunk-based development

Everyone merges small changes into one main branch, often. Feature toggles are what make it safe.