Glossary

Duration percentiles

P50 is the pipeline duration half of runs beat; P95 is the tail only 1 in 20 runs exceeds. Why percentiles beat averages and why P95 sets developer experience.

What do P50 and P95 pipeline duration mean?

P50 and P95 pipeline duration are percentiles of how long pipeline runs take: P50 (the median) is the duration half of all runs finish under, and P95 is the duration 95% of runs finish under — only one run in twenty is slower.

How it is measured

Take a window of completed run durations, sort them, and read the value at the 50th and 95th positions of the distribution. Duration here means execution time, start to finish — the wait before the run starts is queue time, a separate metric with separate fixes. Providers draw that line in slightly different places: a GitHub Actions workflow run carries no completion timestamp — only created_at, run_started_at and updated_at (workflow runs API, as of 2026-07-28) — so a run-level duration there is an upper bound that still includes the queue wait, while GitLab reports a pipeline duration with queue time excluded (jobs API, as of 2026-07-28). Percentiles are therefore compared within a provider, not across two.

Percentiles exist because the average lies. A mean is dragged by outliers and hides bimodal distributions: a pipeline that runs in 4 minutes on a warm cache and 20 minutes on a cold one averages out to a duration nobody ever experiences. P50 describes the typical run; P95 describes the tail. The gap between them is itself diagnostic — a narrow gap means a consistent pipeline, while a wide one means high variance: cache misses, runner contention, retried jobs, or flaky behavior somewhere in the suite.

Why it matters

Developer experience is set by the tail, not the median. Each run has a 5% chance of landing beyond P95, so a developer who triggers ten runs a day has roughly a 40% chance of hitting the tail at least once that day — the slow runs are not rare events in anyone's week. And people plan around the worst case they remember: if P95 is 25 minutes, developers context-switch to something else after pushing, even when the median run would have finished in 8. The cost of that switching is a large share of what failed and slow builds actually cost.

Tail runs also point at causes averages smear away. A P95 dominated by one job's cold starts, or by retries piling extra attempts onto already-slow runs (the retry tax again), is actionable in a way "average duration went up 9%" never is — which makes percentiles the right starting point for diagnosing a slow pipeline.

TrimCI reports p50 and p95 run duration per provider in its PDF reports — overall and for successful runs only, plus a daily median trend for single-provider scopes — alongside a slowest-pipelines ranking per repository and pipeline, queue time and failure cost — so the optimization list starts with the runs that actually hurt, not the ones the average says are fine.

← All CI/CD terms

schedule Fast setup · 14-day free trial

See what your CI failures actually cost.

Connect GitHub Actions or GitLab CI with read-only access — never your source code — and get a ranked, dollar-costed fix list from your own pipeline data.