System Design

HLD and LLD: scaling, caching, sharding, queues, microservices and design patterns.

Course Information

LevelAdvanced — final year
Duration10 weeks
Credits3
Pre-requisiteDSA track, plus basic databases and networking.
MaterialOpen source — every module links to its original tutorial

About This Track

System design asks a different question from DSA: not “what is the fastest algorithm” but “what happens when ten million people use this at once”. The track is split into high level design — the boxes and arrows of a large system — and low level design, which is clean object oriented code and design patterns.

The reading list is built on the open source System Design Primer repository on GitHub and the GeeksforGeeks system design tutorial. Design patterns are studied from Refactoring Guru, and every case study ends by comparing our design with a real engineering blog.

What You Will Learn

Syllabus

Module wise plan. Every row links to the open tutorial we follow for that module.
#ModuleTopics CoveredWeeksStudy Material
1 HLD Foundations Client-server, latency numbers, capacity estimation, availability, SLA 2 System Design Primer
2 Scaling & Load Balancing Vertical vs horizontal, load balancer algorithms, stateless design, CDN 2 GfG System Design
3 Caching & Databases Redis, cache strategies, eviction, indexing, sharding, replication, CAP 2 GfG CAP Theorem
4 Async & Microservices Message queues, Kafka, pub-sub, API gateway, service discovery, rate limiting 2 ByteByteGo Blog
5 Low Level Design OOP, SOLID, UML, singleton, factory, observer, strategy, decorator 1 Refactoring Guru
6 Case Studies URL shortener, rate limiter, WhatsApp, YouTube, Uber, notification service 1 roadmap.sh System Design

Code From The Lab

Sample from Module 5 — Strategy pattern in the LLD module

// One payment service, many payment methods - no if-else chain.
interface PaymentStrategy {
    void pay(double amount);
}

class UpiPayment implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using UPI");
    }
}

class CardPayment implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("Paid " + amount + " using card");
    }
}

class Checkout {
    private PaymentStrategy strategy;                  // open for extension,
    Checkout(PaymentStrategy s) { this.strategy = s; } // closed for modification
    void placeOrder(double amount) { strategy.pay(amount); }
}

Video Lectures

Click the thumbnail to open the video playlist for this track:

Watch System Design video lectures

Recorded College Session

Video Playlists

Open Source Study Material

These are the exact open sources the notes for this track are prepared from.

SourceBest Used ForLink
System Design Primer The most starred open source system design repo on GitHub Open
GeeksforGeeks System design tutorial with HLD and LLD examples Open
Refactoring Guru Design patterns explained with diagrams and code in many languages Open
ByteByteGo Blog Weekly breakdowns of how large real systems are built Open
Stack Overflow The scalability and design-patterns tags for architecture debates Open
takeUforward Low level design and OOP interview preparation Open

Lab Projects

  1. Design a URL shortener and defend your ID generation choice
  2. Design a rate limiter and implement the token bucket in code
  3. LLD of a parking lot or a splitwise clone with UML diagrams
  4. Re-design one of your own earlier projects for 1 million users

Your Progress

Modules finished in this track:

0 of 6

Self rated confidence: 0 of 6