A list written at Sun Microsystems in the 1990s, and it still describes almost every distributed-systems bug written today — not because engineers haven't learned it, but because code that assumes these things is easier to write, and the assumptions only break under conditions that are easy to forget about until they happen.
3 min read
In the 1990s, engineers at Sun Microsystems noticed the same category of mistake showing up repeatedly in networked software: code written as though it were talking to something local and reliable, when it was actually talking across a network that is neither. They wrote down eight assumptions that new (and experienced) distributed-systems engineers habitually make — the fallacies of distributed computing — every one of them false, and every one of them still tempting to assume today.
Knowing the list doesn't automatically prevent the mistake, because code that assumes a reliable, instant, free network is genuinely simpler to write and read than code that defends against every possible failure. The practical skill this whole domain builds toward is knowing which assumptions are safe to make in a given context (a single data center's internal network fails far less often than a cross-region call) and designing deliberately for the ones that aren't — not eliminating every assumption uniformly, which would make simple systems needlessly defensive.
This list is really a preview of the whole domain: logical clocks (lessons 2–3) exist because you can't assume a shared, instant sense of time; replication and consensus (lessons 4–8) exist because you can't assume one machine is always reachable; failure detection (lesson 9) exists because you can't assume you'll be told when something breaks; and distributed transactions (lessons 10–11) exist because you can't assume an operation spanning multiple machines succeeds or fails as one atomic unit the way a single-machine transaction does.
Check your understanding
A quick comprehension check — not tracked, not graded, just for you.
1. What is the actual purpose of the 'Fallacies of Distributed Computing' list?
2. Why is 'the network is secure' one of the fallacies?
3. Why doesn't simply 'knowing the list' automatically prevent the mistakes it describes?
Distributed Systems Fundamentals