CI/CD Pipeline Implementation
A pipeline fast enough that people wait for it. Build time is a delivery constraint, and a twenty-minute pipeline changes how a team batches work whether anyone intends it to or not.
- Who
- Delivered by a senior team assembled for the engagement, against a defined scope.
What you're seeing
- Engineers start something else while the build runs.
- Usually means The pipeline has stopped being feedback and become an interruption. Past roughly twenty minutes people batch their changes to avoid waiting, and batching is what makes each deploy risky.
- Red builds get re-run before anyone reads them.
- Usually means The pipeline fails often enough for reasons unrelated to the code that failure has stopped carrying information. Everything it might catch is now uncaught.
- A one-line change runs the entire test suite.
- Usually means There is no selective execution. In a monorepo this is the single largest available saving, and it is usually left on the table because the dependency graph was never described.
- The artefact is rebuilt for each environment.
- Usually means What was tested in staging is not what ships to production. They are usually the same, and the times they are not are precisely the times it matters.
Build time is a delivery constraint
It is not developer comfort, and framing it that way is why it stays unfunded.
A slow pipeline makes batching rational. If a build takes twenty-five minutes, waiting for each small change is a bad use of an afternoon, so changes accumulate and ship together. Larger change sets are harder to review, harder to bisect when something breaks, and carry more risk per deploy. The pipeline’s speed has quietly set the team’s release size.
So the first step is measurement: where the minutes go per stage, and how often the pipeline fails for reasons unrelated to the code. Both numbers are usually a surprise to the people who built it.
Most of the saving comes from three places. Caching between runs. Running only what a change affects. And parallelising stages that were written sequentially because that was easier to reason about at the time.
Gates that mean something
Every blocking check needs a stated reason, and everything without one should not block.
The failure here is gradual. A check is added as advisory, someone makes it blocking because it kept being ignored, it starts failing for reasons unrelated to the change, and people learn to override. That habit is not confined to the check that taught it — once overriding is normal, the checks that genuinely mattered are being overridden too, and nobody notices because the pipeline still says it is enforcing them.
A short list of gates people respect is worth considerably more than a long list they route around.
Build once, promote the artefact
The same artefact moves through every environment, with configuration supplied externally.
Rebuilding per environment means the thing verified in staging is not the thing running in production. Usually they are identical. The occasions they are not — a dependency resolved to a different patch version, a build argument that differed, a cache that was warm in one place and cold in another — are precisely the occasions that produce an incident nobody can reproduce.
It also makes rollback cheap: promoting the previous artefact is a pointer change rather than a rebuild under pressure.
Where it sits
This capability sits under Platform Engineering, where the pipeline is the paved path itself, under Software Development where a build needs somewhere to run that its own team can operate, and under Engineering Velocity where build and review latency are frequently the largest measured items in the account of where time goes.
Two neighbours share the gate. QA & Test Strategy decides what the suite is responsible for and how long it may take. Release & Deployment Verification picks up after the deploy, which is the half of the path this one does not cover.
How the work runs
-
Measure the current pipeline
Where the minutes go, per stage, and how often the pipeline itself fails for reasons unrelated to the code.
-
Cut the critical path
Caching, parallelism, and cutting work that runs on every commit but only matters on some. Ten minutes is a working target; thirty changes team behaviour.
-
Make the gates meaningful
Every blocking check justified. A gate that is routinely overridden is worse than no gate, because it teaches overriding.
-
Build once, promote the artefact
The same artefact through every environment. Rebuilding per environment means the thing tested is not the thing shipped.
What arrives
- A pipeline with build time under an agreed budget, enforced
- Cached and parallelised stages with the dependency graph documented
- Quality gates each with a stated reason for blocking
- One artefact promoted across environments
What it costs your team
Around three hours a week from a lead engineer during setup, near zero afterwards.
How we decide
Build time is treated as a delivery constraint with a budget
Costs Holding a budget means occasionally rejecting a legitimate new step, or paying to make it faster.
A slow pipeline does not cost the minutes it takes. It costs the context switch, and then it changes behaviour: waiting becomes irrational, so changes get batched, so each deploy carries more, so deploys get scarier. Ten minutes for the gate that blocks a merge is a working target; past twenty the behaviour change is reliable.
Every blocking check has a stated reason, and the rest do not block
Costs It means demoting checks somebody added deliberately, and having that conversation with them.
A gate that is routinely overridden is worse than no gate, because the habit of overriding transfers to the gates that mattered. Blocking is for things that must be true. Everything else is advisory, and advisory checks that block are how a team learns that the pipeline is negotiable.
One artefact is built once and promoted through environments
Costs It requires configuration to be genuinely external, which some applications are not written to allow.
Rebuilding per environment means the thing tested is not the thing shipped. They are usually identical, and the occasions they are not are exactly the occasions that produce an incident nobody can reproduce. Promotion also makes a rollback a pointer change rather than a rebuild.
Where this has run
Frequently Asked Questions
Sources
- Martin Fowler — Continuous Integrationmartinfowler.com
- Martin Fowler — Continuous Deliverymartinfowler.com
- DORA — the four key metricsdora.dev
- Google Cloud — DevOps capabilitiescloud.google.com
Page reviewed

