Why Study System Design?

NT
Nikhil Tomar
Backend
6 min read
Jul 19, 2025
Why Study System Design?

And Why Your Node.js + MongoDB Personal Project Won’t Survive Real-World Scale

If you’re a developer who has ever built a backend in Node.js with a simple database like MongoDB or MySQL and connected it to a React or Android frontend, you’ve likely tasted the joy of seeing your first full-stack application run end to end. The “client” makes a request, the “server” responds, and the “database” stores your data.

It works. It feels amazing.

But here’s the bitter truth:This architecture would crumble if 10 million users joined your app tomorrow.It might even crash if 10,000 joined at once.

So what’s the missing piece?System Design.

System Design Is Not Just About Big Tech Interviews

Let’s first kill a common myth: “System Design is for FAANG interviews.”No — System Design is for anyone building systems that real people will use.

Whether you're building a portfolio site that suddenly goes viral or launching a startup that gets featured on Product Hunt, your system needs to scale, stay alive, and perform — no matter what.

That’s what System Design teaches you.

The Personal Project Architecture (and Why It Breaks)

Let’s revisit the architecture most of us start with in college or side projects:

Client (React/Android) → Backend Server (Node.js/Express) → Database (MongoDB)

You deploy the server and DB on Heroku or Render or Vercel, test some APIs using Postman, maybe add JWT for login — and it works perfectly… ...for 1 user. Or 100. Maybe 1000.

Now imagine:

  1. What if 1 million users open your app at the same time?

  2. What if someone tries to overload your backend with garbage requests?

  3. What if your database dies or hits connection limits?

  4. What if data is lost during a write operation?

  5. What if latency spikes and a page takes 8 seconds to load?

You suddenly realize — Your system isn’t just code. It’s a living organism that needs to breathe, recover, defend, and grow.

Let’s Make It Real: Think of Instagram

Instagram may feel simple — upload a photo, like, comment, follow. But think deeper.

When you post a photo:

  1. The image is uploaded (probably to an object store like Amazon S3).

  2. A metadata entry is written to a database.

  3. Followers need to see your post — perhaps via a news feed service.

  4. You may get real-time notifications when someone comments.

  5. The photo is compressed, thumbnails generated, stored across replicas.

  6. And all this needs to happen in <300 milliseconds.

Now scale that to 1 billion users.

Can your Node.js app with a single database handle that? Can your monolith backend compress, store, notify, and update feeds with zero delay?

No.

That’s why you study System Design.

Concept #1: Scaling Horizontally

If 1 server handles 1000 users, why not add 10 more servers?

Exactly. That’s called horizontal scaling. System design helps you understand load balancers, statelessness, and distributed sessions so you can spin up multiple instances of your backend to serve millions of users in parallel.

Think of a food delivery app: If 10 people are hungry, 1 chef can cook. If 10,000 are hungry, you need 100 chefs with a kitchen manager (load balancer) to assign orders.

Concept #2: Database Bottlenecks and Caching

When traffic grows, your database will struggle. Reads and writes slow down.

Solution? Introduce caching. Use Redis or Memcached to store frequently accessed data in memory. Now, if a user requests the same profile 5 times, the backend doesn’t have to query the database each time.

Like a coffee shop keeping the most-ordered drinks ready on the counter. No need to brew each time.

Concept #3: Asynchronous Processing with Queues

Some operations don’t need to be real-time.

Let’s say a user uploads a video. You don’t have to convert, compress, and tag the video before sending a response. That would make the user wait.

Instead, enqueue this task using message queues (like RabbitMQ or Kafka) and let a background worker handle it.

It’s like a restaurant: The chef starts cooking as soon as the order is placed, but the waiter doesn’t make you stand there. You sit, and the food comes when ready.

Concept #4: Availability and Fault Tolerance

Real systems fail — hardware crashes, processes die, networks disconnect.

A single point of failure is dangerous. System design teaches you how to build redundancy — multiple instances of servers, databases with replication, fallback mechanisms, circuit breakers.

Like a plane with multiple engines. One fails — the other keeps flying.

Concept #5: Monitoring and Observability

Once your system is live, how do you know it’s healthy?

System design involves setting up logs, alerts, dashboards, traces. You use tools like Prometheus, Grafana, New Relic, or Datadog to know when something breaks before your users scream on Twitter.

Think of it like a car dashboard — speedometer, fuel gauge, warning lights. Without it, you’re driving blind.

Concept #6: Security at Every Layer

College projects rarely consider real-world threats.

What if someone:

  • Injects SQL to drop your database?

  • Sends 100,000 requests per second to crash your app (DDoS)?

  • Logs in with a stolen session token?

System design brings in rate limiting, input validation, firewalls, WAFs, HTTPS, OAuth, and role-based access.

You don’t leave your house unlocked just because no one has broken in yet.

Connecting It All: System Design Is About Thinking in Systems

Here’s what you need to internalize:

System Design is not just a set of tools — it’s a way of thinking.

When you build with system design in mind, you stop writing just "APIs" and start thinking of services. You stop saving "data" and start designing data flows. You stop reacting to errors and start anticipating failure points.

It’s about proactively building for the messy, unpredictable, chaotic real world.

So, Why Study System Design?

Because your app deserves to survive and thrive — not just function during a hackathon demo.

It’s the difference between building a cardboard house and an earthquake-resistant skyscraper.

It’s what turns you from a coder into an engineer.

Final Thought: Learn by Modeling Real Systems

Don’t just read theory. Practice by modeling actual systems like:

  1. Design Twitter — focus on fan-out, feed generation.

  2. Design Uber — focus on real-time matching and location data.

  3. Design WhatsApp — focus on message queues and end-to-end encryption.

  4. Design Netflix — think about content delivery and bandwidth optimization.

And always ask: “What would break if 1 million users showed up right now?”

Because in the real world, one day — they just might.