Menu
The Pragmatic Engineer·April 1, 2026

Scaling Uber: From Monolith to Microservices and Organizational Evolution

This article discusses Thuan Pham's tenure as Uber's first CTO, detailing the company's journey from a fragile monolith to a scalable microservices architecture during hypergrowth. It covers strategic decisions regarding organizational structure (program/platform split), technical rewrites, and the challenges of international expansion, offering valuable insights into system design trade-offs under extreme scaling pressure.

Read original on The Pragmatic Engineer

Uber's Architectural Journey: Stabilize, Re-architect, Scale

Thuan Pham's time at Uber can be broken into three phases: stabilizing a frequently crashing system, re-architecting it for growth, and scaling both the engineering organization and its underlying infrastructure. This journey highlights common challenges faced by rapidly growing startups, from initial monolith reliance to the strategic decomposition required for sustained expansion.

Monolith to Microservices: A Survival Strategy

  • Motivation: Uber's move to microservices was primarily driven by the need to survive hypergrowth and unblock engineering teams. The original monolith, "API," became a bottleneck as the company scaled past 100 engineers.
  • Decomposition Strategy: The rule was simple: all new features had to be built outside the monolith. This allowed teams to iterate independently without being blocked by the legacy system, even if the monolith itself continued to grow initially.
  • Phased Transition: Decomposing the monolith was a multi-year effort (around two years). It's crucial to understand that during such a transition, the monolith might even increase in size before it starts to shrink, as new features are still being added while migration occurs.
  • Current State: Interestingly, Uber's microservice count actually decreased slightly by 2026 (around 4,500) from its peak in 2016 (around 5,000), suggesting ongoing refactoring and consolidation.

The Program/Platform Split: Organizational Architecture

The concept of cross-functional "program" teams (focused on end-user features) and dedicated "platform" teams (providing foundational services and tools) was introduced *before* the microservices transition became widespread. This organizational split was crucial for improving execution speed when the traditional backend, frontend, and mobile team structure became a bottleneck. It created self-sufficient teams capable of delivering features end-to-end, enabling faster development cycles aligned with the burgeoning microservices architecture.

💡

Key Learning: Architecture Follows Growth

The article emphasizes that the "right" architecture is fluid and dependent on a company's growth stage. Expecting multiple rewrites during hypergrowth is normal; it signifies that the company is outgrowing its existing architectural choices, which is a sign of success rather than failure. This highlights the importance of adaptable system design and a willingness to evolve core systems.

In-house Tools and Global Engineering

  • Necessity of Internal Tools: Rapid growth necessitated the development of sophisticated in-house tools to support operations, deployment, and development, as off-the-shelf solutions often couldn't keep pace with Uber's unique scaling challenges. (e.g., observability platforms, custom frameworks like Ringpop).
  • Global Talent Acquisition: Recognizing that great engineering talent is global, Uber strategically opened engineering offices worldwide (e.g., Denmark building the trip datastore, Schemaless) to tap into diverse talent pools and bring opportunities to developers.

Impact of Naming Conventions and AI

As system complexity grew, the importance of clear and professional service naming conventions became critical for system navigation and new engineer onboarding. Whimsical names created unnecessary friction. Furthermore, the article touches on AI's role, noting that while AI raises the floor for code generation, the real challenge and value lie in using AI to build new features on complex, legacy codebases with existing dependencies, where "swarm coding" with orchestrated AI agents is being explored.

monolithmicroservicesorganizational structurescalinghypergrowthplatform teamsprogram teamsCTO

Comments

Loading comments...