- All playbooks
- Build the merge-queue speculations most likely to be needed
Build the merge-queue speculations most likely to be needed
Analyze conflicts between queued changes, build independent ones concurrently, and spend CI on the speculative builds most likely to decide a change.
How Uber used this technique
Read what Uber changed and follow the original sources.
Build the merge-queue speculations most likely to be needed
Translated to GitHub Actions
- What Uber built
- Uber's SubmitQueue builds a tree of speculative builds and ranks each by the chance its result decides a change.
- Your GitHub Actions version
- In a merge queue, build the speculations most likely to be needed first and run changes that touch different targets concurrently.
SubmitQueue speculates on the outcome of every pending change and builds a tree of the possible builds. Its conflict analysis prunes that tree so changes touching different targets build concurrently. A probabilistic model, fed by predicted build times and a success predictor, ranks each speculative build by the chance its result decides a change. Only builds above a threshold run, and smaller changes that can bypass a large conflicting change ahead of them get priority.
Across the Go, iOS and Android monorepos, CPU hours fell 44.70% for Go (1,485 to 821 hours), 34.86% for iOS (472 to 307) and 52.23% for Android (729 to 348). Source
P95 waiting time fell 44.67% for Go (33.69 to 18.64 minutes), 33.32% for iOS (14.86 to 9.91) and 31.66% for Android (25.36 to 17.33). Source
- Use it when
- The repository lands changes through a merge queue, and queued builds are often cancelled or rebuilt when an earlier change lands.
- Before applying it
- A threshold set too high makes changes wait longer under heavy load; Uber tunes it from historical build data for each monorepo.
- GitHub Actions adaptation
- Compare the source system with your own workflow before applying this translation.
Company Playbooks
- Read Anthropic’s playbookRun only affected tests
- Read DoorDash’s playbookRun build and test in parallel, sharded across CI agents
- Read Linear’s playbookBenchmark the same job on faster hardware
- Read Mastra’s playbookStarSling runners for the slowest test workflow
- Read OpenAI’s playbookRank CI fixes by the minutes they save
- Read Ramp’s playbookMove a CPU-bound test suite to a faster CPU
- Read Shopify’s playbookLet an agent iterate against one CI metric
- Read Spotify’s playbookBuild arm64 on native arm64 runners
- Read Stripe’s playbookRun only the tests a change can reach
- Read Uber’s playbookBuild the merge-queue speculations most likely to be needed