System Design

Turning a product's requirements into a first design for a web system, and knowing what each part is there for.

  • 11 topics
  • 100 cards
  • 63 questions
  • Beginner to Advanced
Share

Starting a Design

Turning a product's requirements into numbers a design can be checked against.

  • Requirements and trade-offs: deciding what a system must do and how well, so a design has something to be checked against.

    Beginner to Intermediate9 cards · 5 qnot started

  • Back-of-the-envelope estimation: turning users and their actions into requests a second, storage and downtime, before choosing a single part.

    Beginner to Intermediate8 cards · 6 qnot started

The Parts of a System

The parts a request passes through, and what is added to them as load grows.

  • The building blocks of a web system: DNS, CDNs, application servers and databases, and the path a request takes through them.

    Beginner to Intermediate11 cards · 8 qnot started

  • Load balancers, reverse proxies and API gateways: the three kinds of server that sit in front of yours, and the one job each is for.

    Beginner to Intermediate10 cards · 5 qnot started

  • Caching: keeping copies of frequent reads close, deciding when they go stale, and the ways a cache can take a system down.

    Beginner to Advanced9 cards · 8 qnot started

  • Scaling a web system up or out: bigger machines or more of them, what has to be stateless first, and what autoscaling cannot catch.

    Beginner to Advanced9 cards · 5 qnot started

Moving Data Around

How clients, servers and services exchange data: now, later, and a page at a time.

  • Client-server communication: polling, server-sent events, WebSockets and webhooks, chosen by who sends and how often.

    Beginner to Intermediate10 cards · 5 qnot started

  • Message queues and publish/subscribe: handing work off without waiting, and choosing between one reader and many.

    Beginner to Intermediate9 cards · 6 qnot started

  • API pagination with offsets and cursors: returning large results a page at a time without skipping rows or slowing down.

    Beginner to Intermediate8 cards · 5 qnot started

Choosing a Design

Putting the parts together into a style, and into a first design for a brief.

  • Software architectural styles: monoliths, layers, microservices, events and serverless, and the team and product each one fits.

    Beginner to Advanced10 cards · 5 qnot started

  • System design heuristics: matching a pressure such as read-heavy traffic or global users to the pattern that answers it.

    Intermediate to Advanced7 cards · 5 qnot started