System Design
Learn how to design scalable, reliable systems β from load balancers to distributed databases.
Introduction to System Design
What system design is, why it matters, and how to think about building systems that scale.
Client-Server Architecture
The foundation of every application on the internet. Understanding how clients and servers communicate is the starting point for all system design.
REST vs GraphQL vs gRPC
Three ways to design APIs β each with different tradeoffs. Learn when to reach for each one.
SQL vs NoSQL
Two fundamentally different approaches to storing data. Learn the tradeoffs and when to reach for each one.
Caching
Don't do the same expensive work twice. Caching is one of the most powerful tools for building fast, scalable systems.
Load Balancers
How to distribute traffic across multiple servers to avoid single points of failure and scale horizontally.
Message Queues
How async messaging decouples services, absorbs traffic spikes, and keeps systems resilient.
CDNs β Content Delivery Networks
How content gets delivered to users fast regardless of where they are in the world.
Proxies β Forward vs Reverse Proxy
Two types of proxies, two different jobs. Forward proxies protect clients, reverse proxies protect servers.
Consistency and Availability Tradeoffs
In distributed systems you can't have everything. Understanding the tradeoff between consistency and availability is fundamental to every design decision.
CAP Theorem
In any distributed system you can only guarantee two of three properties β Consistency, Availability, and Partition Tolerance.
Horizontal vs Vertical Scaling
Two ways to handle more traffic β make your server bigger or add more servers.
Database Sharding
When your database gets too big for one machine, you split it across many. That's sharding.
Replication and Consistency
Copying data across multiple nodes for reliability and read performance β and the consistency challenges that come with it.
Rate Limiting
Controlling how many requests a client can make in a given time window β protecting your system from abuse and overload.
Microservices vs Monolith
Should you build one big application or many small ones? The answer depends on where you are and where you're going.
Consistent Hashing
A clever technique for distributing data across nodes that minimises reshuffling when nodes are added or removed.
Database Indexing Deep Dive
Indexes are the single biggest lever for database performance. Here's how they actually work under the hood.
Blob Storage β Storing Files, Images and Videos at Scale
Databases are for structured data. Blob storage is for everything else β images, videos, documents, backups.
Polling vs Webhooks vs WebSockets
Three patterns for getting data as it changes β each with different tradeoffs for real time applications.