Work out runner capacity instantly with clear inputs, formula shown and shareable results.
Builds in flight follow Little's law: arrival rate multiplied by build duration. Runner count is that concurrency divided by the utilisation you are willing to run at, and the utilisation target matters because queue wait grows as rho/(1-rho): at 90 percent utilisation a 12-minute build waits nearly two hours, while at 70 percent it waits under half an hour.
Runner sizing
concurrency = builds per hour x duration / 60; runners = ceil(concurrency / utilisation target); queue wait ~ rho x duration / (1 - rho)
Because arrivals are bursty. Queueing theory says wait time explodes near saturation, and CI traffic clusters around commits and merge windows rather than arriving smoothly.
They give clean environments and elastic capacity, at the cost of losing local caches. A shared remote cache recovers most of that.