Field guide · Verify

A pipeline is fast only when engineers trust its answer.

CI performance combines wait time, execution time, reliability, diagnostic quality, and cost. Optimizing one while ignoring the others moves the frustration rather than removing it.

Queue + execution
Signal over retries
Cost per validated change

Untrusted CI creates unofficial workflows.

When failures are frequently unrelated to the change, engineers retry jobs, ignore red builds, merge around checks, or reproduce the result manually. The pipeline may still be running, but it is no longer functioning as a dependable decision system.

Speed and trust reinforce each other. Short feedback makes correction inexpensive; reliable feedback makes the result actionable. Both are needed to keep changes small and delivery predictable.

A retry is not a repair.

Automatic retries can protect delivery temporarily, but they also hide failure rate and spend. Track the first attempt separately from the eventual result.

Warning signs in CI and tests.

Queue time is invisible

Teams optimize jobs while changes wait longer for a runner than they spend executing.

Green after retry

Eventual success hides how often the first attempt produced an unusable answer.

Serial pipeline stages

Independent work waits behind coarse phases or one artifact-producing job.

Every change runs everything

Test scope grows with the repository even when dependency evidence could narrow it.

Failures lack ownership

Infrastructure, product, and flaky-test failures land in one undifferentiated queue.

Spend rises faster than throughput

More runners reduce symptoms without improving the amount of reusable or necessary work.

Follow one change from push to decision.

Separate arrival, queue, setup, execution, upload, and result publication. Then classify unsuccessful runs by cause. This reveals whether the governing constraint is capacity, graph design, test behavior, environment stability, or diagnostics.

Latency

Time to first result

p50 and p90 from push to a useful pass or failure.

Capacity

Queue time by runner class

Demand, saturation, provisioning delay, and platform-specific shortages.

Trust

First-attempt pass rate

The result before automatic or manual retries alter the story.

Tests

Flake and failure taxonomy

Product defects, deterministic test defects, infrastructure, and unknown causes.

Reuse

Cache and artifact effectiveness

Work avoided, transfer overhead, and duplication between stages.

Economics

Cost per validated change

Total compute and service cost divided by useful decisions, not job count.

Design for a fast, explainable decision.

01

Pipeline graph

Expose dependencies, run independent work concurrently, remove duplicate setup, and keep non-blocking work off the merge path.

02

Runner capacity and placement

Match machine classes to workloads, scale against queue objectives, and distinguish provisioning delay from execution cost.

03

Caching and artifact promotion

Reuse verified outputs across stages and environments instead of rebuilding equivalent artifacts repeatedly.

04

Test selection and sharding

Balance shards by observed duration, isolate long-tail suites, and use dependency-aware selection where the risk model supports it.

05

Flaky-test control

Identify, assign, quarantine when necessary, and repair unreliable tests while preserving visibility into the quality debt.

06

Failure observability and ownership

Surface the failing layer, relevant logs, reproduction context, and responsible team without making engineers investigate the CI platform first.

What a CI reliability engagement produces.

We map the end-to-end path for representative changes, quantify queues and execution, classify failure history, and identify the jobs that control the merge decision. Improvements may include graph changes, cache and artifact strategy, sharding, runner policy, test ownership, or better failure evidence.

The handoff includes a latency and reliability scorecard, clear service objectives, and a small number of operational signals that show whether the pipeline is getting healthier.

Next guide

Build-system transformation

Know when the current system needs repair—and when its architecture has become the constraint.

Continue →