What Is Scaling in System Design? Vertical vs Horizontal Explained Simply

NT
Nikhil Tomar
System Design
5 min read
Jul 19, 2025
What Is Scaling in System Design? Vertical vs Horizontal Explained Simply

Have you ever seen a website crash right after it gets featured on Reddit or goes viral on Twitter? One moment it’s smooth, the next, it’s completely down. Why does this happen, and how can companies like Netflix, Instagram, or Zomato serve millions of users simultaneously without breaking a sweat?

The answer lies in a key concept of system design — Scaling. Let’s break this down with relatable examples and understand the types of scaling used in the real world.

But then:

  • Pages stop loading.

  • APIs timeout.

  • The entire site goes down.

This isn’t bad luck.This is what happens when your system can’t handle the load.The solution? One word: Scaling.

🔧 What Is Scaling, Really?

Scaling means preparing your system to handle more users or data without crashing or slowing down.

Think of it like this:

A cheap phone with 2GB RAM works fine for calls and WhatsApp. But open 3 apps, a browser, and try playing a game — and it stutters, hangs, or even restarts. That’s exactly what happens to a server under heavy traffic.

When traffic increases, your backend server — say an EC2 instance on AWS — gets overwhelmed.It’s like trying to serve 5000 customers at a tea stall with one stove and one kettle.

So how do we fix this?

We scale. And scaling comes in two flavors: Vertical and Horizontal.

🧱 1. Vertical Scaling (aka Scaling Up)

Imagine you upgrade your server:

  • From 2GB to 16GB RAM

  • From 1 CPU core to 8 cores

  • From basic SSD to high-speed NVMe storage

That’s vertical scaling.

You’re improving the specs of the same machine so it can handle more work.It’s like upgrading your bike to a superbike — it goes faster and carries more weight, but you still only have one vehicle.

🔍 Where Is Vertical Scaling Useful?

  • SQL Databases often rely on vertical scaling because distributing structured queries across machines is hard.

  • Stateful applications (where the server stores session or user-specific data) also benefit because splitting “state” across machines is tricky.

If your server keeps track of “who is logged in,” spreading that memory across many machines can get messy.

⚠️ The Limit

You can’t keep scaling up forever.Eventually, you hit a hardware or cost ceiling. A machine can only go so big before it becomes unreasonably expensive or unavailable.

That’s when vertical scaling stops working — and horizontal scaling takes over.

🌐 2. Horizontal Scaling (aka Scaling Out)

When you can’t upgrade a single server anymore, the smarter option is:

Add more servers and share the work.

This is horizontal scaling.

You break the load into parts and hand it over to multiple machines — just like how a restaurant opens more counters to handle peak hours.

Let’s say 8 users hit your app:

  • Instead of all 8 overwhelming one server,

  • You split the load between Server A and Server B — 4 users each.

🧠 But Wait — How Do Users Know Which Server to Hit?

Here’s the thing:Clients (users) are not smart about your infrastructure.They don’t know you have 2 servers. They’ll just hit https://yourwebsite.com like always.

That’s where the load balancer comes in.

⚖️ Load Balancer: The Traffic Cop of Your Architecture

A load balancer sits in front of your servers and plays the role of a smart traffic router.

  • It accepts all incoming requests from users.

  • It keeps track of how busy each server is.

  • Then it forwards each request to the least busy or healthiest server.

Clients never talk to your servers directly.They talk to the load balancer. And the load balancer decides who handles what.

It’s like arriving at an airport check-in. You don’t choose which counter to go to — the staff tells you which is free. That’s what a load balancer does.

🧪 Horizontal Scaling in Real Life

Let’s bring it down to earth.

Example:

You have:

  • 1 Load Balancer

  • 3 Servers (A, B, C)

  • Traffic: 15 users visiting your app

The load balancer evenly distributes:

  • 5 → Server A

  • 5 → Server B

  • 5 → Server C

If Server B crashes, it routes users to A and C only.

This setup makes your app:

  • More resilient (one machine can fail without full breakdown)

  • More scalable (just add more machines when traffic spikes)

  • More efficient (balanced usage, fewer slowdowns)

No wonder horizontal scaling is the industry favorite.

🔍 Quick Comparison

Feature

Vertical Scaling

Horizontal Scaling

Adds More

Power to existing machine

More machines

Cost

Expensive beyond a point

Scales predictably with demand

Failure Resistance

One point of failure

Can survive server crashes

Use Cases

SQL DBs, Stateful systems

Web apps, APIs, Microservices

Complexity

Simple

Needs load balancers, sync

✅ What Most Companies Actually Do

They use both — a hybrid approach.

  1. Start with vertical scaling (easier to set up).

  2. When traffic grows, switch to horizontal scaling for resilience.

  3. Use managed services (like AWS Auto Scaling Groups or Kubernetes) to automatically add/remove machines.

Real-world apps like Netflix, Instagram, and Amazon don’t survive traffic surges by accident. They scale — smartly.

🔄 Bonus Concept: Scaling In and Scaling Down

  • Scaling Out: Add machines as traffic grows.

  • Scaling In: Remove idle machines when traffic drops (to save cost).

  • Scaling Up: Upgrade a machine’s resources.

  • Scaling Down: Reduce specs to control spend.

It’s all about matching your system size to current demand.

📌 Final Takeaway

If you want your app to stay fast, reliable, and online — no matter how many people show up — scaling is your superpower.

Without scaling, you’re running a one-man tea stall in Times Square.

With scaling, you’re Starbucks — every outlet, every counter, every barista working together seamlessly.