Uber traded an always-green trunk for faster AI-scale merges

Its merge queue now relaxes some conflicts and validates the combined state after landing, with a verified-good fallback.

PDPreetam DwivediSpeaker · UberMAManjari AkellaSpeaker · Uber
Channel
AI Engineer
Published
Nov 9, 2026
Video
27:35
Read
4 min
Slides
12
Original
English
Open on YouTube
Scroll to read and the video shrinks to the bottom-right corner. Captions follow your reading language.
Reading languageAvailable in 2 languages
You're reading the original English.
SUMMARY

In 30 seconds

At Uber, AI-driven changes helped push peak merges from about 90 to 130 per hour in early 2026, while the slowest 5% of landing times rose from 30 minutes to three or four hours. Preetam Dwivedi and Manjari Akella say the team shaped traffic and allowed weakly overlapping changes to proceed in parallel. That means some combinations can break the main branch, so a separate system validates landed commits and tracks the last verified-good state. They report roughly 300 peak merges per hour with a 30-minute 95th-percentile landing time by October.

  1. 1A 44% rise in peak merges pushed the 95th-percentile wait to hoursDwivedi reports roughly 90 to 130 merges per hour from January to March 2026, while landing time rose from 30 minutes to three or four hours.
  2. 2Admission gating lifted throughput but made developers rescheduleRestricting expensive changes during busy hours increased throughput from about 130 to 160 per hour; a deferred queue later automated resubmission.
  3. 3Weak conflict links can be relaxed to run more work in parallelThe queue scores overlapping build targets, keeps stronger links and drops weaker ones to reach a configured parallelism target.
  4. 4The faster queue allows some untested combinations onto mainAkella reports around 250 merges an hour after conflict relaxation; the resulting risk requires post-merge validation.
  5. 5A verified-good pointer protects consumers when main breaksStovepipe checks landed commits and advances the verified reference only after validation passes; an on-call engineer handles fixes or reverts.
  6. 6The team reports 300 peak merges an hour and a 30-minute P95The October result compares with roughly 90 merges an hour at the January baseline.

Takeaways

  1. Measure the trade-off between merge throughput and the time developers wait.
  2. Defer expensive changes automatically when peak traffic makes them block smaller work.
  3. Rank conflict strength to recover parallelism, while acknowledging combinations that will not be tested before merge.
  4. Maintain a verified-good reference and a recovery process when accepting post-merge validation.
  5. Use project-level health and automated recovery as possible next improvements.
FULL TEXT

Read the edited text by chapter

Transcript only
01

Why individually passing changes can break main

Dwivedi explains Uber’s monorepo scale and how SubmitQueue tests likely combined states.

Uber’s monorepo scale
SLIDE 1 / 12Uber’s monorepo scaleThe speakers show the contributor and weekly change volumes across six major repositories.

Preetam Dwivedi says Uber has six major monorepos with more than 5,000 contributors, over 36,000 commits and 27,000 pull requests per week. The talk focuses on the Go repository, its largest and a major source of scaling challenges.

Two changes can each pass tests against the same original trunk but fail when combined. If A merges first and B was never tested with A, merging B can break the main branch. At the scale of thousands of developers, such failures impose a continuing recovery burden.

Passing separately can still break main
SLIDE 2 / 12Passing separately can still break mainChange B was not tested against the state created when A landed.

Uber's SubmitQueue tests plausible future states before merging, so that changes can land while keeping the trunk green. It analyzes affected build targets to run independent work in parallel, uses historical results to prioritize likely useful speculative builds, and lets smaller ready changes bypass slower large ones.

How SubmitQueue scales
SLIDE 3 / 12How SubmitQueue scalesTarget analysis, speculative builds and bypassing large changes help the queue process work.
02

AI-driven demand overwhelms the old merge queue

More frequent changes increased tail latency despite preserving an always-green trunk.

Dwivedi says AI-generated work changed the arrival rate: peak merges rose from roughly 90 per hour in January 2026 to 130 in March, a 44% increase. At the same time, the 95th-percentile landing time grew from about 30 minutes to three or four hours, even though the trunk stayed green.

The increase in peak merge demand
SLIDE 4 / 12The increase in peak merge demandThe slide compares January and March 2026 peak merge rates.
03

Shape peak traffic and defer expensive changes

Admission gating protects throughput, while deferral removes the need for developers to resubmit manually.

Manjari Akella describes three responses: admission gating to shape traffic, a deferred queue to reduce the burden on developers, and conflict relaxation to recover parallelism. Each comes with a trade-off.

Admission gating classifies requests by cost, for example by the build targets they affect. Small changes can enter during busy periods, while expensive changes that touch many targets are initially rejected so they do not block the active queue.

Admission gating
SLIDE 5 / 12Admission gatingSmaller changes enter the active queue while expensive changes are held back during peak hours.

Akella says this raised business-hour throughput from roughly 130 to 160 merges per hour, an increase of over 20%. The cost was that developers had to find a quiet time and resubmit; maintainers of widely used libraries were especially affected.

Deferral replaces rejection with a persistent waiting queue. Developers submit once, and the system moves expensive requests into the active queue when capacity permits, often outside peak hours. That removes the need to reschedule manually, but it does not eliminate the wait.

Deferring expensive requests
SLIDE 6 / 12Deferring expensive requestsA persisted queue releases requests automatically when capacity allows.
04

Relax weak conflicts to recover parallelism

Scored overlaps allow more independent queues, but some combinations land untested.

The third change addresses how overlapping build targets serialize requests. If A overlaps B, B overlaps C, and so on, a chain of connected changes may be treated as one component, limiting parallel work even when some overlaps are weak.

Relax weaker conflicts
SLIDE 7 / 12Relax weaker conflictsThe system ranks overlaps instead of treating all of them as equally strong.

Conflict relaxation scores the strength of overlap rather than treating every overlap as equally important. SubmitQueue keeps stronger relationships and drops weaker links until it reaches a configured amount of parallelism. The score combines target overlap and newly introduced dependency edges.

In Akella's example, six requests are divided into three independent queues by dropping the weakest links. Instead of continually rebuilding the entire conflict graph, the system assigns the new request's relationships when it enters the queue and preserves prior decisions and speculative builds.

Splitting a chain into parallel queues
SLIDE 8 / 12Splitting a chain into parallel queuesRemoving weak links creates three independent groups in the example.
The throughput and safety trade-off
SLIDE 9 / 12The throughput and safety trade-offHigher parallelism means some combinations land without joint pre-merge testing.

Akella reports that conflict relaxation raised peak-hour throughput from around 160 to about 250 merges per hour, sometimes more. The price is that some combinations land without being tested together, so the trunk can break. Post-merge validation becomes necessary.

05

Validate landed commits and retain a verified state

Stovepipe checks main after merges, maintains a verified pointer and alerts an on-call engineer on failure.

Dwivedi returns to the A and B example: each change passes separately but their combined state can fail after landing. Uber uses Stovepipe to validate commits after they merge, detect a broken build and trigger a recovery process.

Stovepipe tracks two references. Main advances as changes land; verified main stays at the latest state known to pass. If commits B through D fail validation, verified main remains at A. When a later state passes, the verified pointer can advance to it.

Main and verified main
SLIDE 10 / 12Main and verified mainThe verified reference stays at the last passing commit when a later state fails.

When Stovepipe detects a failure, it alerts the on-call engineer, who prepares a fix or revert and sends it through SubmitQueue. Stovepipe keeps validating the changing trunk and moves the verified pointer once a state passes. Recovery is currently manual.

06

Results and next improvements

The team reports higher peak throughput and plans batching, finer-grained health and faster recovery.

Dwivedi reports that by October 2026 peak throughput reached roughly 300 merges per hour, while the 95th-percentile landing time was about 30 minutes. The speakers compare this with the approximately 90-per-hour January baseline. SubmitQueue and Stovepipe are developed in the open.

Reported throughput and landing time
SLIDE 11 / 12Reported throughput and landing timeThe October 2026 slide reports about 300 peak merges per hour and 30-minute P95.

The team is exploring batching related changes to reduce duplicate builds, reporting health at the service or project level instead of only for the whole repository, and automating fixes or reverts to reduce recovery time.

Planned improvements
SLIDE 12 / 12Planned improvementsThe team lists batching, project-scoped health and automated recovery.

The resulting strategy is hybrid: test important relationships before merge, relax weaker ones to gain throughput, and validate the landed state afterwards. Consumers can use the verified-good state while the system continues checking main.

More from this channel

7 slides19:41EN
AI Engineer· Nov 9, 2026A high-reliability automation starts by routing the hard cases awayMatthew Jewkes · Standard CyberneticsMatthew Jewkes describes separating critical errors, ambiguous decisions and unusual exceptions in a biopharma indexing workflow.Agent engineeringWorkflow automationEvals+1
7 slides22:01EN
AI Engineer· Nov 9, 2026Zach Lloyd: make the software factory measurable and editableZach Lloyd · WarpWarp’s CEO proposes recording agent runs, scoring failures and testing changes to the workflow on real tasks.Software factoriesCoding agentsEvals+2
3 slides15:25EN
AI Engineer· Nov 9, 2026Hassan and Omar El Mghari: When an AI financial forecast is right for the wrong reasonsHassan El Mghari, Omar El Mghari · Together AIA Costco membership-fee model passed basic checks and landed close to reported results, but an audit uncovered offsetting assumptions.AI in financeEvalsAgent engineering
3 slides14:38EN
AI Engineer· Nov 9, 2026Jemima Abu: Give coding agents accessibility rules from the startJemima Abu · CAISA product engineer shows how semantic HTML, reusable components and explicit agent skills can help teams build more usable interfaces.Coding agentsProduct & UXAgent skills
4 slides21:12EN
AI Engineer· Nov 9, 2026Tom Moor: Give coding agents the product context that code cannot showTom Moor · LinearLinear’s workflow carries customer requests, past decisions, review history and human feedback from intake through implementation and review.Coding agentsProduct & UXAgent engineering
2 slides15:35EN
AI Engineer· Nov 9, 2026Mislav Ivanda: Choose an execution boundary before an agent frameworkMislav Ivanda · DaytonaThe Daytona engineer compares local approvals, embedded runtimes and sandboxed machines for running agent-generated code.Sandboxes & isolationAgent engineeringInfrastructure & deployment