DoorDash: Decomposing a Python Monolith
also called DoorDash Microservices Migration
DoorDash moved off a Python monolith as growth made deployment risk and scaling limits unmanageable, and used a facade to migrate incrementally.
The problem
DoorDash grew rapidly on a Python monolith. Their published accounts describe the familiar constraints arriving together: deployment of any change carried the risk of affecting everything, scaling was all-or-nothing so the whole application had to be scaled for the hottest path, a single bad code path could exhaust resources for unrelated functionality, and a growing engineering organisation was contending over one codebase.
For a marketplace with three sides — consumers, merchants and delivery drivers — and strong real-time requirements, the blast radius of a single deployment was the acute problem.
What they did
They decomposed into services, with a facade routing traffic so that functionality could be moved incrementally rather than in a single cutover. Services were extracted by domain, and the migration ran alongside continued product delivery over an extended period.
They also invested in the platform capabilities that make an estate of services workable — service discovery, standardised observability, deployment tooling — rather than treating decomposition as purely an application concern.
The trade-off
The costs are the standard ones and worth naming because they are frequently understated in the business case: network calls replacing function calls, distributed transactions replaced by eventual consistency and compensation, debugging across service boundaries, and a permanent per-service operational overhead.
Against that: independent deployment, scoped failure, per-service scaling, and teams that can move without coordinating.
The transferable lesson
The trigger for decomposition should be a named constraint, not a growth projection. DoorDash had concrete symptoms — deployment risk, scaling coupling, contention. Those justify the cost. "We will need it eventually" does not, and organisations that decompose on a forecast pay the full price for a benefit they may never require.
And the migration mechanism matters as much as the target. A facade with incremental routing means each step is individually reversible and value arrives continuously; a big-bang rewrite means the programme is exposed for its entire duration with nothing delivered until the end.