Skip to content

Latest commit

 

History

82 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

System Design from First Principles

Understanding modern distributed systems by starting with the problems they were built to solve.

Welcome!

This repository documents my journey of learning System Design from first principles.

Instead of memorizing technologies or architectural patterns, the goal is to understand why they exist, what problems they solve, when they should be used, and how they're applied in real-world systems.

Every concept begins with a real-world problem, followed by the reasoning that led to the solution. Whenever possible, each topic is accompanied by a hands-on implementation to bridge the gap between theory and practice.

Throughout the repository, I use examples from applications like Uber, Netflix, WhatsApp, Instagram, and Amazon to connect concepts to real distributed systems.


What You'll learn

Foundations

  • Client-Server Architecture
  • Latency & Throughput
  • Scalability
  • Vertical vs Horizontal Scaling
  • Availability & Reliability

Networking

  • DNS
  • HTTP & HTTPS
  • TCP & UDP
  • CDNs
  • Reverse Proxies
  • Load Balancers
  • API Gateways

APIs & Communication

  • REST
  • GraphQL
  • gRPC
  • API Versioning

Microservices & Deployment

  • Monolith vs Microservices
  • Virtual Machines
  • Containers
  • Docker
  • Kubernetes

Performance

  • Caching
  • Cache Invalidation
  • TTL
  • Eviction Policies (LRU, LFU)

Distributed Systems

  • Databases
  • Replication
  • Sharding
  • CAP Theorem
  • Consistency Models
  • Message Queues
  • Event-Driven Architecture

Observability & Reliability

  • Logging
  • Monitoring
  • Distributed Tracing
  • Circuit Breakers
  • Rate Limiting

Case Studies

  • Designing Uber
  • Designing Netflix
  • Designing WhatsApp
  • Designing Instagram
  • Designing YouTube

Repository Structure

System-Design-From-First-Principles/

├── README.md
├── concepts/
├── hands-on/
├── case-studies/
├── diagrams/
└── images/


Learning Philosophy

This repository follows one simple principle:

Understand the problem before learning the solution. Rather than memorizing technologies, focus on the engineering challenges that led to their creation.

For example:

  • Why do we need a Load Balancer?
  • Why isn't one database enough?
  • Why do Docker and Kubernetes both exist?
  • Why are message queues necessary?
  • Why isn't caching as simple as storing data in memory?

By understanding the problem first, the solution becomes much easier to remember.


Progress

Hands-On

Case Studies

  • Designing Uber
  • Designing Netflix
  • Designing WhatsApp
  • Designing Instagram
  • Designing YouTube

Contributions

This repository primarily documents my personal learning journey, but suggestions, corrections, and discussions are always welcome. If you spot an error or have a different perspective, feel free to open an issue or submit a pull request.


If you find this repository helpful

If these notes help you understand System Design, consider starring the repository. It helps others discover it and motivates me to continue improving it.

Happy learning!

About

System Design from First Principles: A collection of notes, architecture diagrams, and real-world case studies exploring how modern distributed systems are designed and scaled.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors