top of page

Talk to a Solutions Architect — Get a 1-Page Build Plan

System Design in Simple Words: Learn It With a Hotel Story

  • Writer: Jayant Upadhyaya
    Jayant Upadhyaya
  • Jan 21
  • 7 min read

System design sounds like a big and scary topic. Many people think it is only for top engineers or only for interviews. But system design is not magic. It is just learning how to build a system that keeps working when users and traffic increase.


The easiest way to understand system design is to stop thinking in technical terms first. Instead, think like a normal person solving a real-world problem. After that, you can map the same idea into software.


This blog explains system design using a simple hotel story. No heavy jargon. The goal is to make you understand:

  • what system design actually means

  • why it matters

  • how systems grow step by step

  • why every improvement has trade-offs


By the end, you will understand common system design ideas like:

  • indexing (faster search)

  • load balancing (sharing work)

  • shared storage (shared memory like Redis)

  • horizontal scaling (adding more capacity)

  • API gateway (routing requests)

All using one story.


What Is System Design, Really?


Two hotels with receptionists on phones; one calm, one stressed. Queues of people at the larger hotel. Trees and luggage present.
AI image generated by Gemini

System design is simply this:

When more people start using your system, how do you keep it fast, correct, and reliable?


In the beginning, a simple setup works. But as users grow, small problems appear:

  • things slow down

  • people wait

  • mistakes happen

  • different parts stop agreeing with each other


System design is the process of fixing these problems step by step.


Start With a Simple Hotel


Imagine you own a small hotel. It is new and not very popular yet.

You have:

  • a reception desk

  • some rooms

  • 8 empty rooms available


You want to let people book rooms by phone. This is an old-fashioned story: no apps, no websites.

So you hire one customer support person.


How booking works

  1. A customer calls.

  2. Customer support checks if a room is available.

  3. If yes, they book a room.

  4. The customer comes later and gets the key.


This works perfectly when you have very few customers.


Growth Begins: More Users Start Calling


Now the hotel becomes popular. People recommend it. The number of customers increases.


Earlier, you had 1 customer calling. Now you have 4. Then 10. Then more.

At first, it still works.


But very soon, you hit the first real problem.


Problem 1: Checking Availability Takes Too Long


Receptionist looking stressed with open book; papers flying. Angry man on phone thinking of time. Clock on wall shows time.
AI image generated by Gemini

The support person is using a register (a notebook) to track bookings.


When a customer calls and asks, “Is any room available?”, the support person has to:

  • look through the register

  • check room by room

  • find which rooms are free


This takes time. The call becomes longer. Waiting increases. The support person gets stressed.


This is an important system design moment.

The problem is not the phone call itself.The problem is searching for availability is slow.


What this means in software

This is like having data in a database but no fast way to find what you need.

You are doing a slow scan every time.


Solution 1: Create Two Buckets (Available vs Booked)


Instead of checking the register every time, create a simpler method.


Imagine you have:

  • one green bucket for available room keys

  • one red bucket for booked room keys


At the start:

  • all keys go into the green bucket

  • red bucket is empty


How booking works now

  1. Customer asks if a room is available.

  2. Support person looks at the green bucket.

  3. If the green bucket has keys, rooms are available.

  4. Support person takes one key out.

  5. That key moves to the red bucket (room booked).


Now availability checking is instant:

  • no searching the register

  • no scanning room by room

  • just check the bucket


What this means in software

This is like using a better data structure.

Instead of searching everything, you maintain a list of “available resources.”


The “Bucket” in Code: Heap Example


Now map the bucket idea into code.

A bucket can be represented using a data structure such as a heap.


A heap helps you quickly pick an item:

  • without scanning everything

  • by keeping the best candidate on top


So instead of searching the entire database for free rooms, you check:

  • if heap size > 0, rooms exist

  • pop a room ID and assign it


This is a system design idea:use the right data structure so the system stays fast.


Problem 2: Too Many Calls for One Support Person


Stressed receptionist on dual phones at a desk with ringing lines and papers. A queue of four travelers with luggage waits behind her.
AI image generated by Gemini

Now the hotel becomes even more popular.

The number of calls increases so much that one customer support person cannot

handle it.


Calls start waiting. Customers get frustrated.

So you hire a second customer support person.


Now you have:

  • Support Agent A

  • Support Agent B


But there is a new problem.


Problem 3: Everyone Calls the Same Number


If you give customers two different numbers:

  • most customers still call the first number

  • because that is the number in your ads or visiting cards

  • or people don’t know the second number exists


Result:

  • Support A gets overloaded

  • Support B sits idle


You hired a second person, but you are not using them properly.

This is exactly what happens in software too.


Solution 2: One Public Number + Internal Distribution


Instead of giving two numbers to customers, you create one reception number.

Customers call only this number.


Inside the hotel, the reception forwards calls to Agent A or Agent B.

This helps balance the work.


What this means in software

This is a load balancer.

Instead of users deciding which server to hit, users hit one entry point.


The load balancer distributes traffic to multiple servers behind it.


How Load Balancer Maps to Servers


Imagine two servers:

  • Server 1 has its own address (IP)

  • Server 2 has its own address (IP)


If users choose directly, most will go to one server.

So you add a load balancer with one public address.

Users always hit the load balancer.


Load balancer sends requests to Server 1 and Server 2 in a fair way.

That’s the core idea.


Problem 4: Two Agents, Two Buckets, Wrong Results


Hotel lobby scene: two receptionists, one sweating, the other calmly giving keys. Confused guests queue with question marks overhead.
AI image generated by Gemini

Now comes a tricky problem.

Each support agent has their own green bucket and red bucket.


So:

  • Agent A has some available keys

  • Agent B has some available keys

But over time, buckets can become uneven.


Example

Agent A gets many calls in a row.

Agent A books all keys from their bucket.


Now:

  • Agent A thinks “no rooms left”

  • but Agent B still has keys


If the load balancer sends the next call to Agent A, the customer will be told:“Sorry, no rooms available”


But that is wrong.Rooms exist, but Agent A’s local bucket is empty.

This is a false signal.


Solution 3: Shared Bucket for Everyone


The fix is simple:

  • remove the separate buckets

  • create one shared bucket for the hotel

  • both agents access the same bucket


Now any agent can correctly see the real availability.



What this means in software

This is shared state.

Instead of keeping data inside each server’s memory, you move it to a shared system.


A common example is Redis, which is an in-memory distributed cache.

So both servers read and write availability from one shared place.


The Trade-Off: Speed vs Consistency


But nothing is free.

Earlier, each agent had their bucket on the desk:

  • fast access

  • no walking


Now the shared bucket is across the room:

  • agents must walk to it

  • it takes a little more time


In software:

  • local memory is faster

  • network calls are slower

  • shared storage adds latency


So what is the benefit?

  • correctness

  • consistency

  • no wrong answers


This is a core system design truth:


System design is always about trade-offs.Here the trade-off is:

  • slightly slower

  • but always correct


Scaling the Hotel: Horizontal Scaling


Now assume your hotel grows even more.

All rooms are full most of the time. So you add more rooms.


You can do this by:

  • adding another floor

  • buying a nearby building

  • expanding the property


This is called horizontal scaling.

In software, horizontal scaling means:

  • adding more servers

  • instead of trying to make one server bigger


More servers help you handle more traffic.


One More Layer: The Gatekeeper (API Gateway)


Hotel lobby scene; doorman welcomes guests through large doors. People queue at reception desks on each side. Neutral color palette.
AI image generated by Gemini

As the hotel becomes larger, you might offer different services:

  • basic rooms

  • premium rooms

  • banquet hall

  • restaurant bookings


Now you may want a system that routes customers based on what they need.


A person at the entrance can ask:

  • “Do you want premium service or basic service?”

  • then send the customer to the correct reception


In software, this is like an API Gateway.

It becomes a front door that:

  • receives requests

  • decides where they should go

  • routes them to the correct internal service



The Big Lesson: System Design Is Not Memorization


System design cannot be learned by memorizing definitions only.


Real learning happens like this:

  1. Start with a real-world problem.

  2. Solve it in a simple way.

  3. Notice what breaks when scale increases.

  4. Add one improvement.

  5. Understand the trade-off.

That’s the true method.


Terms You Should Know (Simple Meaning)


Even if system design is not about memorizing, some terms should be familiar:

  • Load Balancer: splits traffic across servers

  • Redis / Distributed Cache: shared fast memory used by many servers

  • Horizontal Scaling: adding more servers or more capacity units

  • API Gateway: one entry point that routes requests to services

  • Latency: delay (extra time) caused by network hops

  • Consistency: everyone sees the same correct data


Final Takeaway


System design is just structured problem solving.

Start simple. Grow step by step. Fix problems as scale increases.


The hotel story shows the exact pattern:

  • fast search needs better structure (bucket/heap)

  • too many requests need distribution (load balancer)

  • separate copies cause wrong answers (shared state / Redis)

  • growth needs scaling (more rooms/servers)

  • complexity needs routing (API gateway)

That is system design.



It is not magic. It is not a list of buzzwords. It is learning how to build systems that keep working when the world gets bigger.






Comments


bottom of page