
The Anatomy of Scalable Systems
An exploration of the fundamental ideas behind scalable systems, from a single server to distributed architectures, and the reasoning that drives each step.

When people first hear the term System Design, it sounds intimidating.
Distributed Systems. Load Balancers. Microservices. Fault Tolerance. High Availability.
It feels like there's an entire dictionary of fancy terms you're somehow expected to know.
I used to think the same.
Then I realized something interesting.
None of these concepts were invented because software engineers wanted complicated names. Every concept in system design exists because, at some point, someone faced a business problem and needed a solution. The technical terms came later.
So instead of talking about software, let's build something together.
A hospital.
Imagine you're a doctor. After years of hard work, you've finally saved enough money to open your own hospital. It's small. One building, one reception desk, a handful of nurses, a few doctors, and one operating theatre.
Life is simple. Patients arrive, they're treated, and they go home.
Everything works perfectly.
At least... for now.
Vertical Scaling: Doing More With the Same Infrastructure
A few months pass.
Word spreads. People begin recommending your hospital to their friends and family, and soon the waiting room is packed every morning. Doctors barely get time to breathe, while nurses constantly rush from one patient to another.
The obvious question is:
What would you do?
Would you immediately spend millions building another hospital?
Probably not.
The first thing you'd do is make the existing hospital more capable. You'd buy better MRI machines, upgrade the operating theatre, install faster diagnostic equipment, expand the emergency room, and hire a few experienced doctors.
Notice something.
You still have one hospital. You're simply increasing its capacity.
Software engineers solve growth the same way. Before buying another server, they upgrade the existing one by adding more CPU power, more memory, faster storage, or better hardware.
This approach is called Vertical Scaling.
Preprocessing: Moving Work Away From Peak Hours
Eventually, another problem appears.
Every morning, nurses spend hours sterilizing equipment, arranging medicines, and preparing patient files. By the time everything is ready, patients have already started arriving.
Doctors wait.
Patients wait.
Everyone loses time.
Then someone asks a simple question:
"Why don't we prepare everything before the hospital even opens?"
Instead of doing this work during the busiest hours, the staff begins preparing everything at 4 AM when the hospital is almost empty.
Nothing about the hospital changed. The staff aren't working harder. They've simply moved work to a quieter time.
Software systems do exactly the same thing. Reports are generated overnight, images are processed in the background, and expensive work happens before users ask for it.
This idea is called Preprocessing.
Eliminating Single Points of Failure
One Monday morning, your chief surgeon calls.
"I won't be able to come in today."
Suddenly, surgeries are delayed, appointments are cancelled, and patients become frustrated.
The entire hospital depends on one person.
That's dangerous.
What would you do?
You'd hire another experienced surgeon who can immediately step in whenever needed.
Software systems face the same problem. If an entire application depends on one server, a single failure can make the entire website disappear.
That's why engineers build backup servers and automatic failover systems.
The original server is known as a Single Point of Failure, while the backup contributes to Redundancy and High Availability.
Horizontal Scaling: Expanding Beyond One Building
Five years later, your hospital has become one of the most trusted hospitals in the city.
Patients arrive from everywhere. Waiting lists stretch for weeks.
Adding another MRI machine isn't enough anymore. Hiring another surgeon won't solve the problem either.
The building itself has reached its limit.
This time, the answer is different.
You build a second hospital.
Both hospitals provide the same services, allowing patients to visit whichever one has availability.
Instead of making one hospital bigger, you've created multiple hospitals that share the workload.
Software engineers solve this by adding more servers instead of endlessly upgrading one.
This is called Horizontal Scaling.
Microservices: Specialization at Scale
As your hospitals continue growing, doctors naturally begin specializing.
Some become heart surgeons. Others focus on pediatrics, orthopedics, radiology, or pathology.
Imagine sending every patient to a random doctor.
It would be chaos.
Instead, every department owns a specific responsibility and becomes exceptionally good at it.
Software evolves the same way. Instead of one giant application doing everything, separate services manage user accounts, payments, notifications, search, and recommendations.
This architectural style is called Microservices.
Distributed Systems: Bringing Services Closer to Users
Years later, your hospital chain becomes nationally recognized.
Patients from Sydney, Melbourne, Perth, and Brisbane all want treatment.
Building one enormous hospital in a single city doesn't help someone living thousands of kilometres away.
So you open hospitals across the country.
Patients visit whichever hospital is closest, reducing travel time while improving reliability. Even if one hospital temporarily closes, the others continue serving patients.
Software engineers distribute servers across different regions for exactly the same reason.
This approach is called a Distributed System.
Load Balancing: Intelligent Traffic Distribution
Now you own hospitals across the country.
A patient arrives.
Which hospital should treat them?
The nearest one?
The least busy one?
The one with the shortest waiting time?
Patients shouldn't have to decide.
Instead, you build a central coordination centre that constantly monitors waiting times, available beds, doctors, and current workload before directing every patient to the most appropriate hospital.
Software systems have a component that performs exactly the same job.
It's called a Load Balancer.
Decoupling: Independent Systems That Work Together
Think about ambulances.
Do ambulance drivers need to know how heart surgery works?
No.
Likewise, surgeons don't need to understand how ambulances calculate routes.
Each team focuses only on its own responsibility.
Because of this separation, the ambulance service could later transport patients to an entirely different hospital without affecting the surgeons.
Software follows the same philosophy.
Keeping components independent makes systems easier to replace, upgrade, and maintain.
This principle is known as Decoupling, or Separation of Concerns.
Observability: Logs and Metrics
One day, patient complaints begin increasing.
Waiting times are longer. Emergency care slows down. The pharmacy takes forever.
You ask what changed.
Nobody knows.
Because nobody kept records.
So you begin recording everything: patient arrivals, surgeries, ambulance dispatches, medicines issued, and every significant event.
Soon, patterns emerge.
Emergency waiting times spike every Friday evening. One operating theatre consistently takes longer. One department outperforms the others.
Individual records tell you what happened.
Summaries tell you what's happening overall.
Software engineers call these Logs and Metrics.
Extensibility: Designing for Future Growth
Ten years later, your hospital is thriving.
You decide to open an oncology centre, a rehabilitation centre, a maternity wing, and a research laboratory.
If every new department required rebuilding the entire hospital, growth would become impossible.
Fortunately, your hospital was designed with expansion in mind.
Software should work the same way.
Today's application might sell books. Tomorrow it might sell groceries. Next year it could stream movies.
A system that can evolve without being rewritten is called an Extensible System.
High-Level Design vs Low-Level Design
Notice what we never discussed.
We never drew architecture diagrams. We never talked about databases, cloud infrastructure, or servers.
Yet we've quietly covered some of the most important concepts in system design:
- Vertical Scaling
- Preprocessing
- Single Point of Failure
- Redundancy
- High Availability
- Horizontal Scaling
- Microservices
- Distributed Systems
- Load Balancing
- Decoupling
- Logs
- Metrics
- Extensibility
Every one of these ideas exists because someone first faced a business problem. Only later did software engineers give those solutions technical names.
That's what High-Level Design really is.
It answers:
What should we build?
Once that's decided, Low-Level Design focuses on implementation.
It answers:
How exactly should we build it?
about the author

Aneesh
Founder, son and storyteller (sometimes)
Aneesh is a Software Engineer and the Founder of A Niche Show! Podcast. He is currently a postgraduate student in the Department of Computer Science and Software Engineering at UWA. His interests span software systems, data analytics, artificial intelligence, and business consulting.
