Multi-stage continuous integration

[1] Multi-stage continuous integration takes advantage of a basic unifying pattern of software development: software moves in stages from a state of immaturity to a state of maturity, and the work is broken down into logical units performed by interdependent teams that integrate the different parts together over time.

The risk of build failure increases exponentially as the number and locations of developers grow.

See for example the popular Git-Flow branching model [3] On a frequent basis, the team will decide to go to the second phase: integration with the mainline.

The team's branch must have all changes from the mainline merged in (the equivalent of a workspace update), there must be a successful build and all tests must pass.

Ideally, changes make it to the main integration area just as frequently as when doing mainline development.