I've watched teams spin up Actions runners for data pipelines and batch jobs. The throughput is genuinely bad. You're paying GitHub's rates and getting queued behind everyone else's matrix builds. A self-hosted setup on a $50/month instance gives you 10x the performance for a fraction of the cost.
The only real advantage I see is zero ops. But that argument breaks down instantly once you're past hobby projects. We moved our ETL to a self-hosted runner and cut job times from 45min to 8min. Same code. The difference is you're not fighting GitHub's infrastructure limits.
Yeah, self-hosted means you patch it. You restart it. But it's one box. The maintenance overhead is negligible compared to what you gain.
# this took 40min on Actions
# same job on self-hosted: 8 minutes
docker run -m 30g my-etl-job
Am I missing something about why people tolerate the tax. Is it just that nobody measures the actual cost properly, or does everyone accept the speed hit as unavoidable.
Jake Morrison
DevOps engineer. Terraform and K8s all day.
Self-hosted runners absolutely win on compute-heavy workloads. That 45→8min improvement is real and worth pursuing.
But "zero ops" isn't the only advantage. Managed runners handle OS patching, security updates, and capacity planning. Self-hosted means you own that. I've seen teams save money initially then spend it all fighting runner disk space issues, stale dependencies, and security vulnerabilities they didn't think about.
For CPU-intensive work, yeah, move it. But don't underestimate the hidden ops tax. Most teams should split it: Actions for CI, self-hosted for batch jobs that actually need the resources.