CONCEPT Cited by 2 sources
Monolith vs microservices pendulum¶
Definition¶
The observed oscillation of engineering orgs between monolith and microservices architectures as they grow, stall, or reorganize — with neither pole being a destination. A team that decomposed a monolith into services often finds itself years later introducing "macroservices" (fewer, bigger services) or a unified GraphQL data-access layer that effectively re-consolidates the logical API surface.
Canonical 2022 datapoints¶
- Airbnb (Source:
sources/2022-07-11-highscalability-stuff-the-internet-says-on-scalability-for-july-11th-2022):
- 2008–2017 monolith + monorepo, ~$2.6B revenue.
- 2017–2020 microservices (split by dedicated migration team).
- 2020–present "micro + macroservices": unified APIs, central data aggregator, service-block facade APIs. Thrift → GraphQL as the unified data access layer.
- Shopify — still runs a Ruby monolith, decomposing internally for developer productivity rather than splitting into services (Shopify engineering).
- Stack Overflow — 14-year .NET monolith, 1.3B views/month on 9 on-prem servers; removed fragment cache years ago with no measurable latency impact (systems/stack-overflow-architecture).
- Wave — $1.7B company, 70 engineers, "a Python monolith on top of Postgres."
- Steven Lemon — "rather than separate our monolith into separate services, we started to break our solution into separate projects within the existing monolith."
2024 Uber datapoint — the 2011→2014→2018→2020 pendulum¶
The textbook real-world instance on this wiki. Per Josh Clemm's 2024-03-14 retrospective (sources/2024-03-14-highscalability-brief-history-of-scaling-uber):
- 2009 → 2011: LAMP monolith → PHP/MySQL.
- 2011: two-monolith — dispatch (Node.js) + API (Python).
- 2013–14: SOA decomposition of the API monolith into ~100 Python/Tornado microservices, with the whole service-oriented architecture platform built to support the split (TChannel, Hyperbahn, Thrift, Clay, Flipr, M3, Jaeger).
- 2018: The pendulum swings back toward consolidation. Uber's 2018 Project Ark response to the distributed monolith of "thousands of microservices, 12,000 repos, 5-6 systems doing 75% the same thing" — language consolidation to Java + Go, 12,000 repos → 5 per-language monorepos.
- 2020: Partial re-swing toward structured services with the four-layer Edge Gateway — explicit Edge / Presentation / Product / Domain service tiers. Not a return to monolith; a right-sized-services structure with clear contracts.
- 2021+: Fulfillment Platform rewrite is a re-consolidation of the matching stack into a single NewSQL-backed platform — explicitly because the 2014-era micro-service sprawl couldn't cleanly support new flow types (reservations, batching, airport queues).
The Uber arc shows the pendulum doesn't swing just twice — over 15 years, it oscillates continuously, each swing at a different level of the stack.
Core tension¶
Microservices sell velocity + team independence and buy distributed-systems tax — network hops, partial failure, cross-cutting feature complexity, org-chart coupling. Monoliths sell simplicity, low latency, single-deploy and buy team contention and deploy-granularity coupling. Neither tool is universally right; the pendulum swings because the trade-offs are real in both directions.
The characteristic failure mode in either direction: "you weren't doing it right" — a self-fulfilling prophecy that prevents honest retrospective. (Source: sources/2022-07-11-highscalability-stuff-the-internet-says-on-scalability-for-july-11th-2022).
Heuristics from practitioners¶
- jedberg (HN): "every startup I advise I tell them don't do microservices at the start. Build your monolith with clean hard edges between modules and functions so that it will be easier later, but build a monolith until you get big enough that microservices is actually a win."
- @hkarthik: "The longer an engineer works in a monolith, the more they yearn to decompose it into micro-services. The longer an engineer works across a ton of micro-services, the more they yearn for the days of working in a monolith."
- @jpetazzo (OH): "we have over 170 microservices, because our principal engineer is very knowledgeable about distributed systems."
Key insight¶
Right-sizing services is a continuous problem, not a destination. A monolith can be properly service-based on the inside without being distributed on the outside. The count of repos means nothing; what matters is internal code organization and API boundaries.
Related¶
- concepts/conways-law — the org-chart-shapes-architecture corollary that drives many splits.
- concepts/service-oriented-architecture — the mid-point on the pendulum between monolith and full microservices.
- concepts/distributed-monolith — the characteristic failure mode that forces the pendulum to swing back toward consolidation.
- concepts/microservices-migration — the transitional operational playbook.
- patterns/unified-graphql-backend-for-frontend — the consolidation pattern many post-microservices orgs adopt.
- patterns/language-consolidation-for-fleet-standardization — Uber's 2018 Project Ark response to the distributed-monolith state.
- systems/stack-overflow-architecture — canonical monolith- at-scale datapoint.
- companies/uber — the 15-year real-world pendulum case study, oscillating across multiple levels of the stack.
- companies/highscalability.