Start from your current CI
Two numbers describe what your CI uses today:- Peak concurrent jobs: the most CI jobs running at once on a busy day.
- Runner size: the vCPUs of the machines those jobs run on.
CI runners
4 vCPUs is the practical minimum for a runner that runs Bazel. Without remote execution, a job’s actions all run on its runner, so the runner’s vCPUs set how many run in parallel. A larger runner builds a job faster, up to the parallelism the build has. With remote execution, the runner runs Bazel and sends actions to the fleet, so smaller runners can keep hundreds or thousands of actions in flight. That lowers the CI runner capacity you need:- Smaller runners. A job no longer needs a large machine to build quickly.
- Fewer runners at peak. Faster jobs finish sooner, so fewer run at the same time.
Remote execution
Each worker in a pool runs a number of action slots, and the vCPUs per slot are yours to set:
A deployment can have several pools, one per platform or machine shape, each sized on its own. A pool’s ceiling is its maximum workers times the vCPUs per worker. To estimate what that ceiling should be:
- Concurrent builds. Peak actions in flight is the sum across every build running at once, from CI and from developers.
- Bazel’s
--jobs, the most actions one build keeps in flight. Builds on remote execution raise it far above the runner’s core count; Parallelize remote execution uses 32 times the core count as a starting point. - The build’s own width, how many actions are ready to run at once. Only cache misses reach the fleet, so a warm cache keeps most builds far below
--jobs. A full uncached build is the widest you’ll see.
A worked example
A team runs 40 Bazel jobs at peak on 16 vCPU runners, 640 vCPUs in all.
At that floor, a job running alone can use far more than its old 16 vCPUs, and 40 jobs at once queue for the fleet. The trial measures where your peak sits, and adjusts both numbers: peak concurrent jobs falls as jobs get faster, and the fleet’s ceiling goes up or down with how wide your builds run.
Bring to the first call
- Peak concurrent Bazel jobs, and the runner sizes they run on
- Your CI provider
- The platforms you build for: Linux x86 or Arm, GPU, macOS
- Pull request wall time today, p50 and p90
- Whether developers will use remote execution from their laptops
- Hosted by Aspect, or self-hosted in AWS or GCP

