Fallacies of Distributed Computing
Eight assumptions everyone makes about networks, and every one of them is false. A checklist for any design that crosses a process boundary, including the browser.
In the 1990s, engineers at Sun Microsystems (L Peter Deutsch and others) wrote down the assumptions that newcomers to distributed systems make, and which eventually burn them. Thirty years on, the list hasn’t aged a day.
The eight fallacies
| Fallacy | Reality | What to do about it |
|---|---|---|
| 1. The network is reliable | Packets drop, connections reset, cables get cut | Timeouts, retries with backoff, idempotent operations (Message Delivery Semantics) |
| 2. Latency is zero | Every hop costs milliseconds; a chatty design costs seconds | Batch calls, cache, avoid N+1 requests |
| 3. Bandwidth is infinite | Payloads compete for limited pipes, especially on mobile | Paginate, compress, send diffs |
| 4. The network is secure | Anything on the wire can be read or tampered with | TLS everywhere, authenticate every hop |
| 5. Topology doesn’t change | Servers come and go; deploys move everything | Service discovery; clients that reconnect |
| 6. There is one administrator | Many teams, vendors and policies share the path | Clear ownership, contracts, observability |
| 7. Transport cost is zero | Serialisation, egress fees and infrastructure all cost | Measure it; choose formats deliberately |
| 8. The network is homogeneous | Different hardware, protocols and versions everywhere | Standard protocols; tolerate old clients |
Why they bite
Each fallacy is tempting because it’s nearly true in development. On your laptop, the “network” is localhost: fast, reliable, secure and unchanging. The bugs only appear in production, under load, at the worst moment. The fallacies are really a list of the ways failure sneaks in.
The frontend is a distributed system too
A browser talking to an API is two computers on an unreliable network. Real-time UIs make this vivid:
- A WebSocket will drop. Topology changes every time you deploy, so the client must reconnect with jitter and replay what it missed.
- A page that fires twenty requests on load is learning fallacy two the hard way.
- A mobile user in a tunnel is fallacy one and three.
In practice
I use the list as a design-review checklist: for each arrow on the diagram, which fallacy does it assume? It’s caught missing timeouts, unbounded retries and a “simple” polling design that would have hammered a backend. When something does go wrong anyway, Observability is how you find out which fallacy it was.
- #distributed-systems
- #networking
- #reliability
- #system-design
↩ Linked from (6)
- CAP TheoremEvergreen
"Pick two of three" is the slogan, and it's misleading. Networks will partition (see the Fallacies of Distributed Computing), so P isn't optional. The real statement is: when a partition happens, choose C or A.
Related: Synchronization · Threads and Processes · Types of Failure · Fallacies of Distributed Computing
- Message Delivery SemanticsEvergreen
Over an unreliable network (Fallacies of Distributed Computing), true exactly-once delivery is impossible. What systems actually offer is exactly-once processing: deliver at least once, and make sure processing a message…
- ObservabilityGrowing
…region slow only for logged-in users?" — using only what the system emits. In a distributed system, where the Fallacies of Distributed Computing guarantee surprises, that difference matters.
- Rolling Out an API GatewayGrowing
Fallacies of Distributed Computing · Building a Low-Code BPMN Workflow Platform · Internal Developer Platform
- WebSocketsEvergreen
…a reconnect storm. Deploys drop connections. Drain gracefully. The network topology does change — one of the Fallacies of Distributed Computing. Security. Authenticate during the handshake, check the Origin header, and…
↪ Links to (4)
Related by topic
- Evergreen
Architecture Decision Records
Career - Growingmetaphor
Balance Is a Control Loop
Calisthenics Lab - Growing
FLP Impossibility
Distributed systems - Growing
Heartbeat
Distributed systems