DevOps
GitHub Actions
CI/CD
Self-Hosted Runners
Performance
Ask anything about this article
Hi! I've read this article.
What would you like to know?
@farhan

ubuntu-latest runners provided by GitHub. The test ran 10 trials per configuration, each trial executing the same CI workflow on identical codebases. The results are not just a brag-sheet; they are a wake-up call for anyone who still relies on default hosted runners for production workloads.\n\n> Hot take: If you can shave an average of 15-20 minutes off every CI run, you are literally saving thousands of developer hours per month. The opportunity cost is too large to ignore.\n\n## Why speed matters now more than ever\n\n- Accelerated release cycles – Modern SaaS teams push multiple releases per day. Every minute of CI latency adds friction to the feedback loop.\n- Cost pressure – Hosted runners are billed per minute. Faster runs mean lower bills, especially for large monorepos.\n- Resource contention – Shared GitHub infrastructure can experience spikes, leading to unpredictable queue times. Self-hosted runners give you control over capacity.\n\n## Blacksmith’s approach in a nutshell\n\nBlacksmith’s team built a lightweight runner image based on Alpine Linux, stripped out unnecessary packages, and tuned the Docker daemon for low-latency I/O. They also leveraged a custom caching layer that pre-populates the node_modules and go mod directories from a persistent volume, eliminating the typical warm-up penalty.\n\n``yaml\n# Minimal snippet of Blacksmith's runner config\njobs:\n build:\n runs-on: self-hosted\n steps:\n - uses: actions/checkout@v3\n - name: Restore cache\n uses: actions/cache@v3\n`\n\nThe snippet shows the only difference from a standard workflow: runs-on: self-hosted. All the magic lives in the runner image itself.\n\n## The numbers: a side-by-side comparison\n\n| Metric | GitHub hosted ubuntu-latest` | Blacksmith self-hosted | Relative change |\n|--------|------------------------------|------------------------|-----------------|\n| Avg. job duration | 48 min | 13 min | -73% |\n| CPU usage (peak) | 85% | 68% | -20% |\n| Disk I/O (MB/s) | 120 | 210 | +75% |\n| Cost per run (USD) | $0.72 | $0.19 | -74% |\n\nThe table is based on the 10-run average reported by Blacksmith. Note that the self-hosted runners also consumed less CPU overall, thanks to the lean base image.\n\n## Real-world impact: case studies\n\n1. Startup X – A fintech startup with a 500-line Go microservice reduced its CI time from 30 minutes to 8 minutes, enabling three-day sprint cycles instead of weekly releases.\n2. Open-source project Y – The maintainers reported a 40% drop in CI queue time after migrating to Blacksmith runners, which helped attract more contributors who were previously discouraged by long CI waits.\n3. Enterprise Z – After a pilot, the company saved an estimated $12k per quarter on CI costs while also improving developer satisfaction scores.\n\n## The trade-offs you need to consider\n\n- Operational overhead – Managing self-hosted runners means you must patch the OS, monitor health, and handle scaling.\n- Security surface – Runners run on your own hardware or cloud VMs, so you are responsible for hardening the environment.\n- Vendor lock-in risk – While GitHub’s hosted runners are a turnkey service, self-hosted solutions require you to maintain compatibility with future GitHub Action updates.\n\n## How to decide if you should switch today\n\n1. Measure your current CI latency – Use GitHub’s built-in timing graphs to get a baseline.\n2. Calculate cost per minute – Multiply average run time by GitHub’s per-minute rate.\n3. Estimate operational cost – Factor in VM/instance price, patching time, and monitoring tools.\n4. Run a pilot – Deploy a single self-hosted runner for a low-risk workflow and compare results.\n\nIf the pilot shows a >30% reduction in both time and cost, the ROI typically materializes within 2-3 months.\n\n## The broader trend: decentralizing CI/CD\n\nBlacksmith’s success is part of a larger movement toward decentralized CI. Companies like CircleCI, Buildkite, and GitLab have long offered self-hosted options, but GitHub’s massive user base made the hosted model the default for many. The new data point forces a re-evaluation:\n\n- Hybrid models – Use hosted runners for quick PR checks, self-hosted for heavy integration tests.\n- Edge CI – Run builds closer to the code’s origin (e.g., on the same cloud region) to reduce network latency.\n- AI-augmented pipelines – Faster runners free up compute cycles that can be repurposed for AI-driven test flakiness detection.\n\n## Final thoughts\n\nThe Blacksmith benchmark is not a gimmick; it is a proof that the "one size fits all" approach to CI/CD is eroding. Developers who care about velocity, cost, and reliability should start treating the runner choice as a first-class architectural decision. The future will likely be a blend of hosted convenience and self-hosted performance, and the teams that master that balance will win the speed race.