When one platform runs everything: eleven years of Monzo's architecture
How Monzo's architecture changed between 2015 and 2026: one uniform platform of thousands of Go services on Kubernetes and Cassandra, what that uniformity bought, what it cost in two published platform-wide outages, and why the 2025 remedy was an 18-service standby bank on a second cloud provider rather than variety inside the platform.
A single-company dig, reconstructed from Monzo's own incident reports and engineering posts, its conference talks, and the archive banners and commit dates in its public repositories. It gives an architect the decade's forcing functions in order, a decision table with the condition that flips each choice, four incidents with transferable design rules, the cost ratio and scope of a minimum viable standby, and a six-rung ladder for building the same pattern at a scale they can test.
The published justification for a second platform on a second cloud is not that clouds fail: Monzo states that a bug in its own code or processes is at least as likely to cause an outage as a provider failure, which is also the argument against the hot replica most teams propose.
What you get out of it
- Both of Monzo's platform-wide outages came through the change path, not the request path: a planned etcd expansion in 2017 and a planned Cassandra cluster join in 2019.
- The 2017 outage was widened by its own remediation: restarting several hundred mesh instances at once exposed a version incompatibility a running instance never hit.
- If the risk you hedge is your own code, the standby must share none of it, which is what bounds it to 18 services, one-way replication, advice messages and about 1% of the primary platform's operating cost.
- Uniformity is the asset that lets one central team migrate 2,800 services, and it is the same property that makes every shared-infrastructure change a bank-wide event.
- In-house components that wrap a standard survive (typhon, 2015, still modernised in 2026) while those that substitute for one get retired, and the retirement shows up as a repository archive banner before it shows up in any blog post.
Scope
Why this, now. Monzo's standby bank launched in March 2025, the same month as the UK operational-resilience deadline, and was activated publicly again in August 2026 with some customers still unable to transact, so the pattern is now both widely copied and freshly questioned.
What it does not cover. The mobile applications, credit and fraud models, ledger internals and Monzo's cost base beyond published ratios; also absent from the public record, and marked open rather than inferred, are how either platform's Kubernetes control plane is provisioned after 2022 and any datastore detail after 2021.
Other field guides
Changing what the services stand on: ten years of ByteDance, read from its own repositories
An organisation past a certain size cannot ask its services to change, so when the layer beneath them becomes the constraint it replaces that layer a…
24 sources · 7 organisations · 5 postmortemsHardening the wrong plane: ten years of Cloudflare's architecture
A single-company dig: Cloudflare, 2016 to 2026, reconstructed from eight of its own incident reports, its engineering accounts of Pingora, Quicksilve…
30 sources · 12 organisations · 9 postmortemsReplacing the package with the image: ten years of Red Hat changing the unit of change
Four generations of one host operating system, reconstructed from the artefacts the decisions were taken in: Fedora CoreOS design records and tracker…
30 sources · 10 organisations · 4 postmortems