Honest reasons to bring your own runner
- Cost. If your bill is dominated by macOS or large-runner minutes, self-hosting on a Mac mini or homelab box pays back in a quarter.
- Hardware. Apple Silicon for MLX. NVIDIA H100 for training. ARM for cross-arch tests. None of these are standard hosted runners.
- Network access. Tests need to talk to a service inside your private network — a database, a Vault instance, an internal API. Hosted runners can't reach those.
- Persistent caches. Build caches that survive between runs at the filesystem level — Docker layer cache, pip cache, conda envs.
- Reproducibility on a known image. Your team's exact OS / package set, not a moving target.
Honest reasons NOT to
- You're a small team. Maintaining 1–3 self-hosted runners is fine; maintaining 30+ becomes its own job.
- Security overhead. Self-hosted runners run untrusted code (your contributors' PRs). Default isolation is weak — you have to add it.
- You don't actually have any of the listed reasons. 'Cool to have' isn't a reason.
The decision matrix
If even one of the five honest reasons applies, self-host. Otherwise, hosted runners are almost always cheaper than the engineering time of running your own.