Uber Go Monorepo: Surviving 3000 Services

Picture this: one engineer's commit tanks 3,000 Uber services, delaying your ride across the city. That's the monorepo madness Uber just survived – barely.

Uber's Go Monorepo Nearly Killed Productivity – And How They Barely Saved It — theAIcatchup

Key Takeaways

  • Uber's Go monorepo handles 3,000 services but nearly collapsed under 1,000 daily commits without custom fixes.
  • Key fix: dependency graph analysis rebuilds only affected services, slashing times from 45 to 15 minutes.
  • Warning for scalers: monorepos amplify shared risks — tool up or break.

Your Uber ride vanishes mid-trip. Not because of traffic or a driver ghosting — no, some engineer’s code tweak just nuked 3,000 microservices at once. Uber’s Go monorepo strategy, that beast housing thousands of services in one repo, nearly turned their engineering org into a smoking crater.

That’s the real-world hit from monorepo scale gone wrong. Riders wait, drivers fume, and billions in revenue teeter. But Uber didn’t bail to polyrepos like the rest of us mortals. They doubled down, rebuilt their tooling, and clawed back control. Skeptical? I’ve seen this movie before — Google’s monorepo empire started with similar prayers and duct tape.

Look, most teams bicker over monorepo vs. polyrepo for a dozen services. Uber? They’re juggling 3,000+ Go microservices in one repo, slurping 1,000 commits daily. Each one a potential apocalypse.

The Numbers That’ll Make You Sweat

Before their fixes, builds dragged 45 minutes per commit. Engineers juggled parallel branches just to stay sane. Merge hell. Skipped tests. Wasted CPUs rebuilding unchanged crap.

Here’s the nightmare stat dump:

Services: 3,000+ Daily commits: 1,000+ High-impact commits (100+ services): 14/day Critical ones (1,000+): 3/day Average blast radius: 247 services per change

By sifting 500,000 commits, they clocked 1.4% hits nailing 100+ services. 0.3% vaporizing 1,000+. That’s not velocity — that’s Russian roulette.

“When thousands of services can be changed with a single commit to one of our monorepos, for example, upgrading the RPC library used by virtually every Go service at Uber, how do we minimize the blast radius of a bad change?”

That quote nails it. Straight from the trenches.

And the loop? Vicious. More commits mean bigger risks, slower reviews, fatter changes, rinse, repeat. Traditional safety nets — canaries, rollouts — laughable against atomic blasts across thousands.

Why Uber’s Go Monorepo Went Rogue

Back in pre-2021 hell, every push triggered full rebuilds. Tests? An hour slog. Developers hacked around it, quality tanked, productivity cratered.

One bad RPC tweak? Boom — 2,847 services rebuild in hours. Cascading failures everywhere. Ride dispatch dies. Payments glitch. Your Surge pricing spikes to Mars.

I’ve covered Valley blowups for 20 years. This screams classic hype trap: monorepos sound sexy for atomic changes, shared libs, easy refactors. But at Uber scale? Tooling cracks. Go lacks Google’s Bazel maturity — no magic incremental builds out the box.

Uber bet big on monorepo for Go velocity. Nearly lost the farm.

Their fix? Smart change impact analysis. Dependency graphs spotting direct and transitive hits. Only rebuild what’s touched.

Pseudocode glimpse:

type ChangeImpactAnalyzer struct {
    dependencyGraph *ServiceGraph
    changeDetector *GitChangeDetector
}

func (c *ChangeImpactAnalyzer) GetAffectedServices(commit string) []Service {
    // ... logic to dedupe affected services
}

Builds? Slashed to 15 minutes typical. High-impact ones still sting, but contained.

Can Uber’s Monorepo Fix Work for Your Team?

Here’s my unique take, absent from their tale: this echoes Google’s 2000s monorepo wars, but Go’s ecosystem lags. Google poured billions into Piper/Bazel. Uber? Homebrewing in Go, chasing 1,000 commits/day without that infra.

Bold prediction — they’ll OSS key bits soon, or polyrepos reclaim the crown. Why? Cost. Who’s making money? Not engineers waiting 45 minutes. Uber saves millions dodging outages, but scaling this to 10,000 services? Dream on without Bazel-like wizardry.

Short para punch: It works — for now.

But dig deeper. They mapped deps surgically. Critical paths get transitive scans. Low-risk? Skip the drama. Velocity soars, risks plummet.

Cynical aside — PR spin screams “unprecedented scale!” Nah. Just good ol’ dependency hell, monorepo flavor. Every mega-org hits it: Facebook, Microsoft too.

Processes evolved too. Risk-tiered reviews. High-blast changes need extra eyes. No more cowboy commits.

Why Does Monorepo Scale Scare Developers?

Real talk: it forces honesty. Polyrepos hide deps in repo walls — change one, others chug happy. Monorepo? Truth serum. That RPC lib tweak? Hits everyone, instantly.

Uber’s data exposed the liars. 0.3% commits own the pain. Fix those paths first.

For you? If you’re at 100 services, polyrepo’s fine. 1,000? Monorepo tempts, but prep the tooling or die.

They didn’t just optimize builds. Cultured caution. Pre-commit hooks. Blast simulators. Deployment gates.

Result: commits up, stability holds. Riders get cars. Engineers breathe.

But who’s really winning? Uber’s execs, hoarding outage-free billions. Engineers? Still chained to the beast.

Wander a sec — remember Twitter’s polyrepo mess pre-Musk? Flip side. Monorepos centralize, but centralize risk too. Uber mitigated; most won’t.

The Hidden Cost of Monorepo Hype

Buzzword bingo: “atomic changes,” “shared tooling.” Cute till it bites.

Uber admits: traditional CI crumbled. They rebuilt from atoms — git detectors, graphs, dedupers.

Dense dive: imagine graphing 3,000 nodes, edges everywhere. Daily 1,000 diffs. Compute that fresh per commit? Nope, cached smartly.

Critical paths flagged via ML? Nah, heuristics for now. But scale demands it.

My critique: they gloss growing pains. “Survived success”? Nearly didn’t. Engineers burned out first.

Historical parallel — Linux kernel’s git repo scaled via distrib computing. Uber’s solo.

Prediction: fork to OSS, watch forks explode. Or stagnate like internal Facebook tools.


🧬 Related Insights

Frequently Asked Questions

What is Uber’s Go monorepo?

A single Git repo holding 3,000+ Go microservices, handling 1,000 daily commits with smart impact analysis to avoid full rebuilds.

How did Uber fix monorepo build times?

By analyzing changed files against a service dependency graph, rebuilding only affected services — dropping times from 45+ to under 15 minutes.

Is a monorepo right for my team?

Only if you’ve got tooling for blast radius control; at small scale, polyrepos are safer and simpler.

Marcus Rivera
Written by

Tech journalist covering AI business and enterprise adoption. 10 years in B2B media.

Frequently asked questions

What is Uber's Go monorepo?
A single Git repo holding 3,000+ Go microservices, handling 1,000 daily commits with smart impact analysis to avoid full rebuilds.
How did Uber fix monorepo build times?
By analyzing changed files against a service dependency graph, rebuilding only affected services — dropping times from 45+ to under 15 minutes.
Is a monorepo right for my team?
Only if you've got tooling for blast radius control; at small scale, polyrepos are safer and simpler.

Worth sharing?

Get the best AI stories of the week in your inbox — no noise, no spam.

Originally reported by Dev.to

Stay in the loop

The week's most important stories from theAIcatchup, delivered once a week.