Skip to content

Low-Level System Design (LLD)

Overview

Welcome to Section 6 — Low-Level System Design (LLD). This section teaches how to convert high-level architecture into clean, modular, and testable Java code. We focus on class design, interaction patterns, design patterns in practice, and small component implementations that appear frequently in system design interviews and production code.

LLD emphasizes:

  • Translating HLD decisions into classes and interfaces.
  • Applying SOLID, Clean Architecture, and test-first thinking.
  • Building small, composable components (cache, rate-limiter, queue, key-value store).
  • Writing idiomatic, maintainable Java code and unit tests.

Who should take this

  • Engineers preparing for FAANG-style interviews (backend / platform roles).
  • Mid-level engineers who want to improve implementation skills and code design.
  • Mentors and tech-leads who want to teach practical LLD patterns.

Prerequisites

  • Java (OOP, generics, exceptions).
  • Basic algorithms & data structures (arrays, maps, trees).
  • Basic HLD concepts (microservices, CAP, scaling patterns).
  • Familiarity with unit testing (JUnit) is recommended.

Learning Objectives

  • Design modular, testable Java components from requirements.
  • Apply design patterns (Factory, Strategy, Observer, Builder, Repository).
  • Understand trade-offs: thread-safety, performance, memory, and testability.
  • Build components with clean APIs and clear separation of concerns.

How to use this section

  • Each lecture contains: concept explanation, a Java implementation, unit tests, and a short exercise.
  • Start with component-level lectures (cache, rate limiter) then progress to system components (booking, notification pipeline).
  • Clone the starter repo (see repo in frontmatter) to run examples and tests locally.

Roadmap / Lecture List (planned)

  1. LLD: Introduction & Best Practices (this hub)
  2. Class Design Fundamentals — DTOs, Entities, Value Objects
  3. Repository Pattern & Persistence Abstractions (Java)
  4. Cache Design — LRU / LFU / TTL caches + unit tests
  5. Rate Limiter — Token Bucket & Leaky Bucket implementations
  6. Queue & Worker Pattern — Retry, DLQ, idempotency
  7. Circuit Breaker & Bulkhead Patterns
  8. API Gateway / Adapter Layer design (validation, auth)
  9. Search Autocomplete — Trie-based LLD
  10. Leaderboard — Sorted data structures & persistence strategies
  11. Notification Service — Fanout & backoff strategies
  12. Booking/Reservation Component — Consistency & locking primitives
  13. Distributed Cache Client — Connection pooling & serialization
  14. Testing LLD — Mocking, integration tests, contract tests
  15. Refactoring Monolith Modules — Extracting services & interfaces
  16. Capstone: Small Microservice (User + Booking + Notifications) with tests

Each lecture will include: objectives, design decisions, Java code, test suite, and an exercise with autograder-friendly unit tests.


Example: Modular Java Structure (refined)

A compact sample to illustrate layers and improvements:

java
// Domain model (immutable value object)
public final class User {
    private final String userId;
    private final String name;
    private final String email;

    public User(String userId, String name, String email) {
        Objects.requireNonNull(userId, "userId");
        Objects.requireNonNull(name, "name");
        Objects.requireNonNull(email, "email");
        this.userId = userId;
        this.name = name;
        this.email = email;
    }

    public String userId() { return userId; }
    public String name() { return name; }
    public String email() { return email; }
}

Repository & Service highlights:

  • Use Optional<User> instead of null.
  • Throw domain specific exceptions (e.g., UserNotFoundException).
  • Consider thread-safety: use ConcurrentHashMap for in-memory stores in multi-threaded demos.
  • Provide interfaces to enable testing & swapping implementations.

Exercise (starter)

Implement a TTL cache:

  • Requirements: put(key, value, ttlMillis), get(key), eviction policy based on TTL.
  • Tests: concurrent get / put, expired entry removal, memory leak checks.
  • Suggested time: 45–90 minutes.

Assessment & Certification

  • Short quiz after each lecture (concept + architecture questions).
  • Two coding assignments with unit tests (auto-graded).
  • Pass criteria for badge: complete 75% content + all assignments submitted & passing.

Resources & Starter Repo

  • Starter Java project with templates, tests, and CI: (replace with your repo).
  • Recommended books: Clean Architecture (Robert C. Martin), Design Patterns (Gang of Four), Refactoring (Martin Fowler).

Instructor Note

This section is practical and code-first. You’ll learn by implementing small components, reading a short design doc, and running tests. Aim for readability and testability over clever one-liners.