12 min read · Company Architecture Teardown · Mid → Senior Engineer
On a cold evening in Paris in 2008, Travis Kalanick and Garrett Camp couldn’t get a cab.
That single frustration became Uber — now the largest mobility platform in the world, operating in 70+ countries, 10,500 cities, with 130 million customers and billions of database transactions per day.
But between “two guys couldn’t get a cab” and “planet-scale ride-hailing platform” lies one of the most instructive engineering journeys ever documented: the story of how Uber shattered a monolith, built 2,200 microservices, broke those too, and then invented an entirely new architectural pattern to survive their own complexity.
This is that story.
Uber’s first version was built by contractors using the classic LAMP stack — Linux, Apache, MySQL, PHP. The code was written in Spanish. It ran on a single server. It proved the concept.
It also couldn’t handle more than a handful of concurrent users.
The core problem was concurrency. With a naive LAMP stack and no distributed coordination:
Two cars would be dispatched to one rider
One driver would be matched to two different riders simultaneously
The system would fall over under any real load
This wasn’t a failure — it was expected. The monolith existed to prove the idea worked. Once it did, Uber threw it away and built from scratch.

Comments
Nothing yet. Say the first thing.
Sign in to join the conversation.