Martin Fowler's description, first written in 2000 and revised in 2024, defines the practice as each member of a team merging their changes into the codebase together with their colleagues' changes at least daily. The supporting practices follow from that sentence: everything in a version-controlled mainline, an automated build, a build that tests itself, every push to the mainline triggering a build, a broken build fixed immediately, a fast build, work in progress hidden behind flags rather than branches, testing in a clone of production, visible status and automated deployment. The automation is what organisations purchase; the daily merge is what changes the outcome.
The pipeline itself is a program that runs on every push to the repository. It checks out the commit, installs dependencies, compiles or bundles, runs the linter and the unit tests, often builds a container image, and reports a pass or a fail back to the pull request within minutes. Hosted runners make this a configuration file rather than a server to maintain; the GitHub Foundations exam covers Actions at that level, and the DevOps Engineer Expert exam expects a candidate to design the whole chain. The DevOps and CI/CD courses teach the configuration; a team's own release history demonstrates why the configuration alone is not enough.
- Continuous integration: merge to the mainline daily; every merge is built and tested automatically.
- Continuous delivery: every change that passes the pipeline is deployable, and the release to production is a button.
- Continuous deployment: the button is removed; every passing change goes to production on its own.
Branch strategy decides whether the practice is real. Long-lived feature branches postpone integration by definition, and the merge at the end of three weeks is where conflicting assumptions, renamed functions and duplicated work meet. Trunk-based development keeps branches to hours or a day and hides unfinished features behind flags so that incomplete work can ship dark. The research summarised in Accelerate links this to four measurable outcomes, deployment frequency, lead time for changes, change failure rate and time to restore service, and found that teams which integrate and deploy more often also break production less, which contradicts the common assumption that caution means releasing less often. Git makes short branches cheap; the team's habits decide whether they stay short.
