Free tech learning for everyone, from basics to pro

Distributed SystemsSystems ArchitectureBeginner

What distributed systems are and why they are hard

In short: A distributed system is a group of computers that work together so users see one service. Spreading work across machines gives scale and resilience, but the network is unreliable, nodes fail independently and clocks disagree, so designs must expect things to go wrong.

What a distributed system is

A distributed system is a set of separate computers, called nodes, that cooperate over a network and appear to users as a single service. When you search the web, stream a film or pay by card, dozens or thousands of machines handle your request. You never see them individually; you just see an answer.

Organisations build distributed systems for three main reasons:

  • Scale: one server can only hold so much data and handle so many requests. Adding more machines (scaling out) raises the ceiling.
  • Availability: if one machine fails, others keep the service running.
  • Latency: placing nodes near users in different regions cuts response time.
Single server versus distributedSingle serverSimple to build and debugOne clock, one memoryFails completely or not at allLimited by one machineDistributed systemHarder to build and testEach node has its own clockFails partly and unpredictablyScales out by adding nodes
Figure 1. Moving from one server to many trades simplicity for scale and resilience.

Why they are hard

Why distributed systems are hardDistributed systemmany nodes, one serviceNetwork delaysmessages arrive lateLost messagesno reply, no cluePartial failuresome nodes dieNo shared clockclocks driftConcurrencyupdates collideScalemore nodes, morefaults
Figure 2. The main sources of difficulty when one service is spread across many machines.

On one computer, a function call either works or throws an error, and every part of the program shares the same memory and clock. Across a network, none of that holds.

  • The network is unreliable. Messages can be delayed, duplicated, reordered or lost. If you send a request and hear nothing, you cannot tell whether the request was lost, the server crashed, or the reply is still on its way.
  • Partial failure. Some nodes can be down while others are up. A disk can fill on one machine while the rest run normally. The system must keep working in a half-broken state.
  • No global clock. Each machine has its own clock, and they drift apart. Even with NTP (Network Time Protocol) you cannot fully trust timestamps to order events across machines.
  • Concurrency. Many clients update shared data at the same time, so conflicting writes must be detected and resolved.

The fallacies of distributed computing

A well-known list from engineers at Sun Microsystems describes false assumptions that newcomers make. In plain terms, do not assume that:

False assumptionReality
The network is reliableLinks and switches fail; packets drop
Latency is zeroEvery hop adds delay, especially between regions
Bandwidth is infiniteLarge transfers compete for capacity
The network is secureTraffic must be encrypted and authenticated
Topology does not changeNodes are added, moved and replaced constantly
There is one administratorMany teams and providers control parts of the path
Transport cost is zeroSerialisation and data transfer cost time and money
The network is uniformMixed hardware, links and protocols are normal

Designing for failure

Good distributed designs accept that failure is normal and plan for it. Common techniques include:

  1. Use timeouts on every remote call so a slow node cannot hang the caller.
  2. Retry with exponential backoff and jitter, and make operations idempotent so a repeated request does no harm.
  3. Replicate data so losing one node does not lose data (see replication and sharding).
  4. Use health checks and load balancers to route around failed nodes.
  5. Choose the right consistency level for each piece of data (see CAP and PACELC).

Tip: in exams and interviews, the phrase "partial failure" is the single best summary of why distributed systems are harder than single-machine programs.

At work, you meet these ideas when a microservice times out, a database replica lags behind, or two data centres disagree about the latest value. Recognising the underlying cause makes troubleshooting much faster.

Practice

A client sends a request and gets no reply after 5 seconds. What can it conclude?
Very little: the request may have been lost, the server may have crashed, or the reply may be delayed. This is why retries must be safe (idempotent).
Why can you not simply order events across servers by their timestamps?
Each server has its own clock and clocks drift, so timestamps from different machines are not reliably comparable.
Name two reasons to build a distributed system rather than buy a bigger server.
Any two of: scaling beyond one machine, surviving machine failure, and lower latency by placing nodes near users.

Key takeaways

  • A distributed system is many nodes that act as one service.
  • They give scale, availability and lower latency.
  • Unreliable networks, partial failure and clock drift make them hard.
  • Timeouts, idempotent retries and replication are basic defences.
  • Assume failure is normal and design for it.
Tracks your learning on this device only. See your progress on the learning paths.

About the author

Mohamed Fayas

Founder of FM TecHub. CCNA certified, with a BTEC HND in Network Engineering, and BEng (Hons) in Computer Networking and Cloud Security. He writes practical, plain-English guides on networking, security and cloud.

More about the author

Original content written by Mohamed Fayas for FM TecHub. © 2026 FM TecHub. You're welcome to share a link to this page; please don't copy the text elsewhere without permission.

Stay up to date by email

New notes, tools and security news from FM TecHub, explained simply. Free.

We only use your email to send these updates. See our privacy policy.