Switch to:
The fallacies of distributed systems

The fallacies of distributed systems

Distributed systems are now the beating heart of modern applications, enabling scalability, resilience, and high performance. However, designing distributed systems involves non-trivial challenges, and many errors stem from the so-called fallacies of distributed systems, a list drawn up by Sun Microsystems (yes, the same ones who created Java) that highlights erroneous assumptions often made by specialists unfamiliar with these contexts, and that deserves careful examination.

Treating the network as reliable is one of the most common mistakes. Connections can fail, suffer interruptions, or be compromised by cyber attacks, and every distributed system must be designed to face these eventualities. A microservice that does not handle timeouts risks leaving requests pending, with blocks that propagate to other services, so robust systems must provide recovery mechanisms such as automatic retransmissions and failover strategies.

Assuming that latency is zero is another dangerous premise. The time required for data transfer between nodes can severely affect performance, especially in applications that require fast responses: a system marketed as “real-time” analytics might provide outdated data if network delays are not considered. Mitigating these problems requires optimizing communication flows and using nodes that are geographically close to users.

Bandwidth is also frequently treated as if it were unlimited. Even the most modern networks have finite capacity, and saturating traffic causes slowdowns and interruptions. Video streaming services are a classic example: sending uncompressed content can quickly degrade the user experience, and the solution lies in compression techniques, data aggregation, and selective transmission of only essential information.

Network security is another recurring fallacy. Every node added to a distributed system represents a potential vulnerability, and without adequate protection data in transit can be intercepted, manipulated, or stolen. Security cannot be an afterthought: it must be integrated from the beginning through encryption protocols, strong authentication, and careful credential management.

The stability of network topology is an aspect that is often underestimated. In a distributed environment nodes can join, leave the network, or change position, and overly rigid configurations, such as using a fixed IP address to connect to a specific server, break at the first change. Well-designed systems must therefore include dynamic discovery mechanisms capable of adapting to an ever-evolving network.

The existence of multiple administrators is rarely considered. Distributed systems often operate on multiple administrative domains, each managed by different entities, and this complexity can generate inconsistencies in configuration and adopted protocols. A misconfigured firewall in one domain can prevent access to crucial resources in another, making cooperation between administrators and the adoption of shared standards indispensable.

Transport cost is equally overlooked. Every data transfer between nodes consumes resources, including time, bandwidth, and, in cloud services, money. An application with unoptimized API calls can generate unexpected expenses, so it is essential to design workflows that minimize unnecessary transfers and leverage local or regional caches.

Finally, the network tends to be thought of as a homogeneous medium. Networks differ in terms of speed, stability, and connection type, and an application designed for wired networks may behave very differently on mobile connections, characterized by higher latency and frequent interruptions. To ensure reliable operation on a global scale, distributed systems must automatically adapt to variable network conditions.

To address these challenges, software professionals rely on established models and design patterns that improve the resilience, security, and scalability of systems, managing intrinsic complexity before small issues can propagate.

Data management

In a distributed system, data management is crucial for maintaining consistency and performance. Techniques like caching allow temporarily storing the most requested data in memory, reducing the load on databases and lowering access times, with benefits particularly evident in high-demand scenarios where data is frequently read but rarely modified. Synchronization between the various nodes is equally essential to avoid inconsistencies: without it, data might be outdated or contradictory across different nodes, and data replication becomes one of the main solutions to ensure that every node always has the most up-to-date information.

Modular design

Dividing a system into independent modules or components allows managing migrations, updates, and changes in a gradual and safe way, since each module is designed to function autonomously and changes to one component do not necessarily affect the entire system. This separation facilitates maintenance and scalability: when a part of the system needs to be updated, you can intervene on the single module without stopping everything, minimizing downtime and reducing the risk of introducing large-scale errors, since each component can be tested individually before being integrated into the main system.

Robust messaging

In a distributed system, communications are susceptible to delays, packet losses, and temporary failures, and preventing these problems from compromising the entire system requires implementing retry patterns that allow automatically retrying operations that did not succeed. If a microservice fails to receive a response due to a network error, a retry mechanism ensures that the request is repeated without causing interruptions in the system flow, preventing momentary failures from turning into a chain reaction with broader consequences.

Security

In a distributed architecture every node is potentially a vulnerable point, and integrating security measures directly into the system design is fundamental from the earliest phases. This includes adopting encryption to protect data in transit, advanced authentication to verify that only authorized users and systems can access resources, and secure management of secrets, meaning the protection of sensitive credentials like API keys or passwords. A secure system ensures that, even if a node is compromised, the impact on the entire system remains contained.

Understanding and addressing the fallacies of distributed systems is not just a technical aspect, but represents an approach to designing resilient, secure, and scalable systems. In a context where cloud and distributed architectures are now the standard, every software specialist should integrate these principles from the earliest design phases, to build solutions capable of responding to the needs of an increasingly complex and interconnected digital world.

Ranieri Vannozzi

The author

Ranieri Vannozzi

Freelance software developer and consultant

I have been writing code since 2008, working on enterprise development, cloud-native architectures and technical leadership. On HeroHubs I write about what I run into every day on real projects, from code to architecture and artificial intelligence.

Article written with AI assistance and reviewed by the author.

Related Posts

Canary vs Blue Green: how to eliminate downtime

Architecture

March 2026

Canary vs Blue Green: how to eliminate downtime

A guide to software release strategies: discover how Blue Green and Canary deployment can protect your business and improve user experience.

Hexagonal architectures: a new perspective with ports and adapters

Architecture

October 2025

Hexagonal architectures: a new perspective with ports and adapters

Discover hexagonal architecture (ports and adapters): principles, benefits, practical examples, and how to improve testability, maintainability, and flexibility in modern software projects.

Agent as a Service (AaaS): the future beyond SaaS

Architecture

August 2025

Agent as a Service (AaaS): the future beyond SaaS

Explore the Agent as a Service (AaaS) model: how autonomous AI agents are revolutionizing software, surpassing SaaS, and transforming business processes and automation.

SST: the future of serverless on AWS

Architecture

July 2025

SST: the future of serverless on AWS

Discover SST (Serverless Stack): the framework revolutionizing serverless development on AWS. Benefits, user experience, scalability, and best practices for cloud-native projects.

Firebase real-time database: the right choice for real-time applications?

Architecture

June 2025

Firebase real-time database: the right choice for real-time applications?

Explore the pros, cons, and alternatives of Firebase real-time database: a complete guide to choosing the best solution for real-time apps and platforms.

LinkedIn and Apache Kafka: 7 trillion messages a day

Architecture

June 2025

LinkedIn and Apache Kafka: 7 trillion messages a day

Discover how LinkedIn uses Apache Kafka to process 7 trillion messages daily: architecture, scalability, open-source innovations, and best practices for real-time big data.

Software architecture: which one to use?

Architecture

May 2025

Software architecture: which one to use?

A guide to major software architectures: advantages, disadvantages, and use cases for client-server, layered, microservices, event-driven, serverless, and more for modern projects.

Microservices or monolith: still a current debate?

Architecture

March 2025

Microservices or monolith: still a current debate?

Microservices vs monolith: advantages, disadvantages, and use cases to choose the best software architecture for your project in 2025.

AWS, Cloudflare, Supabase and others: which one to choose?

Architecture

February 2025

AWS, Cloudflare, Supabase and others: which one to choose?

A guide to choosing the ideal cloud provider: AWS, Cloudflare, Supabase, Google Cloud, Azure, DigitalOcean, Vercel, Netlify, and Heroku compared for every project need.