HN Debrief

21 years and counting of 'eight fallacies of distributed computing' (2025)

  • Infrastructure
  • Programming
  • Cloud
  • Developer Tools

The post is a 2025 look back at the “eight fallacies of distributed computing,” a set of assumptions from the 1990s that still wreck systems today. The list covers ideas like “the network is reliable,” “latency is zero,” and “there is one administrator.” APNIC’s piece mostly reintroduces those fallacies and argues they still apply even though networking, cloud platforms, and hardware have changed a lot since they were coined.

If you build systems that cross machines, teams, or vendors, treat failure handling, retries, ordering, and observability as core product work, not plumbing you can bolt on later. Also stop assuming the hard parts start only when you adopt microservices. They start as soon as state and work are split across boundaries you do not fully control.

Discussion mood

Mostly approving and wry. People saw the fallacies as old but very much alive, especially in cloud and microservice-heavy systems, and used the post as a springboard to complain about teams that still design around idealized networks, databases, and hardware.

Key insights

  1. 01

    Most apps are already distributed

    Once code and state live across a browser, server, database, queue, and partner API, you already have distributed-systems problems whether or not you call it that. That reframes retries and async workflows as product design work. If users can land in weird intermediate states, you need explicit recovery paths and idempotent operations, not a hand-wave that they can click again.

    Map every user-facing workflow to the systems it crosses and identify where state can diverge. Add idempotency keys, recovery tooling, and user-visible status before those edge cases turn into support load.

      Attribution:
    • mrkeen #1
    • rusk #1
    • Nicook #1
  2. 02

    Cloud and microservices amplify the fallacies

    Cloud computing did not replace distributed-systems constraints. It industrialized them. More network hops, more managed services, and more organizational boundaries mean more latency variance and more partial failures in ordinary request paths. That is why microservices often feel expensive in practice. They move problems that were once local and debuggable into remote and probabilistic ones.

    Before splitting a service, count the new network boundaries and failure modes you are introducing. If the payoff is not clear, keep the boundary in-process and defer the operational tax.

      Attribution:
    • master_crab #1
    • aussieguy1234 #1
  3. 03

    The origin story is fuzzier than the post suggests

    The familiar list has a murky history. Several commenters pointed out that the first four fallacies were already circulating before they were pinned to Peter Deutsch, and that James Gosling’s hosting and endorsement helped canonize them. Even the dates are slippery, with references pointing back to 1992 or 1994 rather than a clean single origin. That makes the post less a definitive historical account and more a fresh retelling of a long-lived folk theorem.

    If you cite the fallacies in design docs or talks, treat them as shared engineering lore rather than a neatly authored paper. Link the primary historical references if attribution matters.

      Attribution:
    • rusk #1 #2 #3
    • stonogo #1
    • jrpelkonen #1
  4. 04

    Hardware blind spots now mirror network blind spots

    The local-computing riff landed because modern software often assumes infinite CPU, RAM, and cache forgiveness in the same way old systems assumed perfect networks. Several commenters tied this to a generational shift. Developers who started on constrained hardware built a reflex for memory layout and cache behavior, while many newer stacks bury those costs until scale or AI workloads make them visible again. The SIMD comment sharpened the point. High-level code can hide huge per-iteration overhead that vanishes when work is vectorized or moved down the stack.

    Profile before adding more machines or more services. If a hot path is local and data-heavy, inspect memory access, cache behavior, and vectorization opportunities before reaching for distributed fixes.

      Attribution:
    • jffhn #1
    • adornKey #1
    • bigiain #1
    • eric__cartman #1

Against the grain

  1. 01

    Ignoring limits often wins early anyway

    Perfect distributed-systems hygiene is not how most products get built. Shipping with slack, overprovisioning, and assuming hardware will get cheaper has created a lot of successful businesses, including in embedded. Teams often make the product first, then right-size performance and cost later if volume justifies it. That does not make the fallacies false. It does mean strict optimization from day one is often the wrong business move.

    Match your engineering rigor to the stage of the product. Use the fallacies to avoid catastrophic design mistakes, but do not let them block a fast path to validation when overprovisioning is acceptable.

      Attribution:
    • zephen #1 #2
  2. 02

    High availability is not every business model

    Some pushback landed on the idea that distributed-systems discipline should dominate every software decision. Plenty of profitable systems do not need telecom-grade uptime, and treating all applications like exchanges or carrier networks can lead to overengineering. The useful distinction is not whether availability matters. It is how expensive downtime actually is for your specific product and customers.

    Set reliability targets from business impact, not from prestige examples. Build for the cost of failure you actually face, then spend the rest of the budget on speed, features, or simplicity.

      Attribution:
    • shermantanktop #1
    • inigyou #1
    • IAmBroom #1

In plain english

APNIC
Asia Pacific Network Information Centre, a regional internet registry that also publishes technical blog posts about networking and internet operations.
idempotency
A property where repeating the same operation does not change the result beyond the first successful execution.
SIMD
Single Instruction, Multiple Data, a CPU feature that lets one instruction process several data values at once.

Reference links

Primary sources and history

Performance and energy use