Backend System Design

Jem Young
Netflix
7 hours, 17 minutes CC
Backend System Design

Course Description

Everything is a System! Grab your favorite diagramming tool and develop the system-thinking skills to solve complex backend design challenges related to scaling, data storage, reliability, and performance. Discover that every architecture decision comes with tradeoffs and approach your next complex distributed system design with confidence.

This course and others like it are available as part of our Frontend Masters video subscription.

Preview

What They're Saying

This is a solid course that covers the core concepts of backend system design.
Michał Mikołajewicz
Michał Mikołajewicz

Course Details

Published: December 19, 2025

Rating

4.9

Learn Straight from the Experts Who Shape the Modern Web

Your Path to Senior Developer and Beyond
  • 250+ In-depth courses
  • 24 Learning Paths
  • Industry Leading Experts
  • Live Interactive Workshops

Table of Contents

Introduction

Section Duration: 16 minutes
  • Introduction
    Jem Young introduces the course by discussing the importance of scoping in system design, sharing lessons from past interview failures. He also covers what makes a quality system, relevant metrics, and key aspects of scaling, including the CAP theorem and trade-offs in system design.
  • Systems Thinking
    Jem introduces systems thinking, explaining how understanding component interactions helps with seeing the big picture. He stresses planning, designing for flexibility, and using diagramming to communicate and collaborate effectively.

Recognizing Systems

Section Duration: 43 minutes
  • Everything is a System
    Jem emphasizes the importance of recognizing the systems around us, using home remodeling and car components to show how uncovering hidden complexities can improve understanding and effectiveness.
  • Design a Pizza Shop Exercise
    Jem instructs students to design a pizza shop by outlining the ordering process and creating a flow diagram. He encourages comparing approaches, emphasizing breaking tasks into steps and the value of critical thinking in system design.
  • What is a Distributed System
    Jem explains that distributed systems involve parts located in different places to handle failure and scalability. He also walks through the core components of a system design, including clients, databases, servers, load balancers, and caches, emphasizing their roles and importance in building products or services.
  • Visualizing Flow of Data Exercise
    Jem guides students through the visualizing flow of data exercise to map information flow between clients, servers, caches, and databases. He explores variations like mobile clients and specialized caches, emphasizing understanding components and boundaries for effective system design.

Requirements

Section Duration: 1 hour, 54 minutes
  • Identify Requirements
    Jem explains 'how to build anything' by breaking systems into core components, using an example of a bathroom remodel. He stresses translating business requirements and demonstrates designing a to-do app by scoping, defining requirements, and considering user interactions.
  • Functional Requirements Exercise
    Jem instructs students to scope a mobile banking app to a single account and define functional requirements. He emphasizes understanding the domain and encourages analyzing existing apps while considering transactions, security, and performance.
  • URL Shortener Functional Requirements
    Jem guides students through designing a URL shortening service, focusing on functional and non-functional requirements. Consider security, capacity, user levels, and link expiration, and emphasize critical thinking, MVP features, and understanding the domain.
  • Todo App Functional Requirements
    Jem guides students through CRUD apps, explaining create, read, update, and delete operations. Using a to-do app example, he covers functional requirements like viewing, creating, editing, deleting, and other features such as sorting and filtering.
  • CAP Theorem
    Jem discusses the CAP theorem, explaining consistency vs. availability trade-offs in distributed systems. Using the example of his old car, he highlights reliability and covers key metrics like availability, resiliency, and consistency in system design.
  • Making Trade-Offs Exercise
    Jem instructs students to consider trade-offs in system design, prioritizing properties like consistency and availability across applications such as banking apps, URL shorteners, and online stores. He emphasizes weighing decisions carefully, understanding requirements, and acknowledging inevitable failures in distributed systems.
  • System Quality
    Jem introduces system quality, emphasizing reliability, observability, security, scalability, adaptability, and performance. He discusses trade-offs and the importance of considering user behavior, seasonality, and cost when meeting non-functional requirements.
  • Non-Functional Requirements
    Jem introduces non-functional requirements, emphasizing their role in ensuring system quality. He also explains how to define them by considering system performance, security measures, scalability, expected user load, request rates, and data protection needs.
  • Non-Functional Requirements Exercise
    Jem instructs students to consider non-functional requirements for a banking app, focusing on system quality beyond user functions. He guides them to address security, performance, observability, encryption, audit trails, availability, and compliance.
  • URL Shortener Non-Functional Requirements
    Jem instructs students to consider non-functional requirements for URL shorteners, covering response time, latency, and URL length. He also discusses setting parameters like maximum URL length and expiration, highlighting impacts on database choices and system efficiency.

High-Level Design

Section Duration: 19 minutes
  • Modeling
    Jem discusses data modeling, emphasizing understanding requirements and creating clear specifications. He also covers entity modeling and API design, including defining system actions and determining entities, properties, and relationships.
  • Protocols
    Jem discusses HTTP protocols, its stateless nature, and the role of context and metadata. He also covers WebSockets for bi-directional communication and compares protocols like gRPC, REST, and GraphQL.
  • Protocol Scenarios
    Jem walks students through protocol scenarios, comparing WebSockets and HTTP for real-time updates and trade-offs like battery use. He discusses which protocols suit each case, using examples such as REST for banking APIs and gRPC for microservices and video processing.
  • API & Endpoints
    Jem demonstrates API design by translating business requirements into code, emphasizing listing endpoints for simplicity and efficiency. He notes that after defining entities and APIs, the next step is addressing data flow and scaling.

Scaling

Section Duration: 12 minutes
  • Vertical vs Horizontal Scaling
    Jem introduces system scaling, explaining the differences between vertical scaling (adding power to one server) versus horizontal scaling (adding servers). He also discusses trade-offs, including complexity in horizontal scaling and potential bottlenecks and costs in vertical scaling.
  • Load Balancers
    Jem discusses the role of load balancers in horizontal scaling to manage multiple servers efficiently. He explains their importance for system stability and scalability and discusses considerations like refactoring code and preventing bottlenecks during scaling.
  • Scaling the Todo App
    Jem demonstrates adding a load balancer to a todo app, showing its placement and function. He also demonstrates how to sketch a cluster setup, explains scaling with multiple servers, and briefly discusses using a cache to handle high user loads efficiently.

Data Storage

Section Duration: 2 hours, 16 minutes
  • Data Storage Overview
    Jem introduces common system design components, stressing domain understanding over structure. He covers scoping problems (and stating what’s out of scope in interviews) and explains when to choose relational vs. non-relational databases, emphasizing simple solutions based on data and storage needs.
  • Relational Databases
    Jem explains the differences between relational and non-relational databases, including data consistency, schema flexibility, migration costs, and scaling. He emphasizes choosing the right database early to avoid expensive changes and to scale effectively.
  • Non-Relational Databases
    Jem introduces non-relational (NoSQL) databases and outlines four main families, including document stores, key value stores, and column databases. He highlights common examples like MongoDB, Redis, DynamoDB, Cassandra, and HBase, explaining their strengths in flexibility, speed, caching, and handling less structured data.
  • Partitioning & Sharding
    Jem explains how relational databases scale using partitioning and sharding, outlining how each improves performance. He emphasizes understanding data distribution and choosing the right shard key to scale effectively while preserving transactions.
  • Availability: Primary, Replica, & Snapshots
    Jem explains database availability, focusing on uptime, replication, and preventing data loss. He covers replication approaches and trade-offs, and emphasizes combining strategies to ensure resiliency and performance.
  • Caching
    Jem introduces caching as storing frequently used data close to where it is needed to reduce latency and load. He covers common caching strategies and their trade-offs between performance, consistency, and complexity.
  • Caching Tradeoffs & Invalidation
    Jem explains cache as a secondary data store, focusing on the balance between performance and freshness. He covers cache invalidation, eviction strategies, and how to choose the right approach for a given use case.
  • Estimations
    Jem introduces estimations as a way to understand system scale and bottlenecks using reasonable assumptions. He demonstrates this with an example estimating database storage for 100,000 users.
  • Scaling a System Exercise
    Jem explains how to scale a system for higher traffic by reviewing core technologies, adding caching, and applying vertical scaling and partitioning. He also covers using read replicas to handle heavy load efficiently.
  • Autosave System Design
    Jem introduces autosave for to-dos, covering trade-offs like save frequency, read write ratios, and cross-device syncing. He also highlights added complexity around permissions, metadata, and collaborative editing.

Security

Section Duration: 18 minutes
  • Termination
    Jem explains how HTTPS termination works, where encrypted traffic should be decrypted, and the performance trade-offs involved. He compares terminating at the load balancer versus keeping traffic encrypted end-to-end for sensitive or compliant systems, highlighting the security risks of internal services and logging.
  • Authentication & Authorization Strategies
    Jem explains the difference between authentication and authorization, and why each matters in secure, scalable systems. He compares sessions, JWTs, and other auth strategies, highlighting trade-offs between stateful and stateless approaches in distributed and microservice architectures.

Asynchronous Workflows

Section Duration: 1 hour, 12 minutes

Wrapping Up

Section Duration: 2 minutes
  • Wrapping Up
    Jem wraps up the course by emphasizing the importance of building high-level architecture first, reasoning through assumptions step by step, and understanding trade-offs in system design. He highlights key lessons on async workflows, message brokers, databases, and making practical design decisions.

Learn Straight from the Experts Who Shape the Modern Web

  • 250+
    In-depth Courses
  • Industry Leading Experts
  • 24
    Learning Paths
  • Live Interactive Workshops
Get Unlimited Access Now