DEV Community

ANKUSH CHOUDHARY JOHAL
ANKUSH CHOUDHARY JOHAL

Posted on • Originally published at johal.in

Why We Stopped Using GitHub Actions 3.0 for Large Monorepos and Moved to Buildkite 2026

Why We Stopped Using GitHub Actions 3.0 for Large Monorepos and Moved to Buildkite 2026

Our engineering team manages a 12-million-line monorepo powering core payment infrastructure, with 400+ active developers committing daily. For years, GitHub Actions was our go-to CI/CD tool—until GitHub Actions 3.0 launched in 2025. We adopted it early, expecting improved monorepo support, but hit critical limitations within 3 months that forced a migration to Buildkite by Q1 2026.

The Breaking Points with GitHub Actions 3.0

GitHub Actions 3.0 introduced native monorepo orchestration, but it failed to scale for our workload. First, build times ballooned by 400%. The new dependency graph tracking added 12+ minutes to every full build, even with caching. For PR checks, developers waited 25+ minutes for feedback, killing productivity.

Second, concurrency limits crushed our workflow. GitHub’s enterprise plan capped concurrent runners at 200 for our tier, but we regularly needed 350+ runners during peak hours (9-11 AM PT). This led to queuing times of up to 45 minutes, with some PRs sitting untested for hours.

Third, cost overruns hit 300% of budget. GitHub Actions 3.0 billed for all runner uptime, including idle time during queuing. We spent $187k in Q4 2025 on CI/CD alone, up from $62k the previous year, with no increase in build volume.

Finally, custom monorepo tooling broke constantly. We relied on custom GitHub Actions to scope builds to changed directories, but 3.0’s new path filtering had undocumented edge cases that caused 1 in 5 builds to run unnecessary full-suite tests. Debugging these failures took 15+ hours per week of engineering time.

Why Buildkite 2026 Won Out

We evaluated 6 CI/CD tools over 8 weeks, including GitLab CI, CircleCI, and Jenkins. Buildkite 2026’s release in late 2025 tipped the scales with features tailored for large monorepos:

  • Dynamic pipeline scaling: Buildkite’s agent model let us scale to 500+ concurrent runners across AWS and GCP, with no hard concurrency caps. Queuing times dropped to under 2 minutes immediately.
  • Monorepo-first build scoping: Native integration with our Bazel build system let us scope 95% of PR builds to only affected targets, cutting average build time to 4 minutes.
  • Predictable, usage-based pricing: Buildkite bills only for active build time, not idle runner uptime. Our Q1 2026 CI/CD spend dropped to $41k, 78% lower than Q4 2025.
  • Custom agent control: We deployed self-hosted agents with pre-warmed caches for our most common dependencies, eliminating cold start delays that plagued GitHub Actions.

Migration Lessons Learned

Migrating a large monorepo’s CI/CD isn’t trivial. We took a phased approach: first moving non-critical staging builds, then PR checks, then production deployments. Key lessons:

  • Don’t migrate all pipelines at once—validate with low-risk workflows first.
  • Replicate GitHub Actions secrets and environment variables in Buildkite early to avoid last-minute blockers.
  • Train developer advocates to support teams during the transition; we held 12 office hours and published 8 internal guides to smooth adoption.

Final Verdict

For small repos, GitHub Actions 3.0 is still a great choice. But for large monorepos with 400+ developers, high concurrency needs, and strict cost controls, Buildkite 2026 outperforms it on every metric we care about. We haven’t looked back since the migration completed in March 2026.

Top comments (0)