NewThe Learning module is now liveSee what's new
Back to LearningBeginner

System Design 101

This course introduces the fundamentals of system design through practical examples and common patterns used to draw a first-pass request path in real systems.

1000+students
17chapters
8hours
AuthorJ. Li·Senior Engineer·
AmazonEx-Amazon

About this course

System design is the process of turning product requirements into scalable, reliable, and maintainable software architectures.

This course introduces the fundamentals of system design through the request path a first design actually needs: network, API, a primary store, cache, load balancer, and a queue, plus the safety of rate limits and retries. It is designed for software engineers who want stronger architecture skills and a building-block vocabulary before full system-design interview prompts.

You will learn how to open an ambiguous prompt, separate functional and non-functional requirements, estimate scale, trace a request, shape a client contract, model data for access patterns, and choose the next box when a simple path starts to break—without needing replicas, shards, or consensus yet.

What You Will Learn

  • How to approach a system design interview: clarifying questions and requirements
  • Back-of-the-envelope estimation
  • The network path: DNS, transport, TLS, HTTP, and latency
  • API contracts: resources and operations, protocol style, pagination, versioning, and errors
  • Data modeling: access patterns, identity, relationships, and storage paradigms
  • Database indexing and the write cost of a fast read
  • Caching placement, freshness, and stampede failure
  • Load balancing across interchangeable instances
  • Message queues and moving work off the request thread
  • Rate limiting and admission control
  • Idempotency so retries do not repeat visible side effects
  • Content delivery networks and putting cacheable bytes near the user
  • API security and auth (optional)
  • Distributed unique IDs (optional)
  • Timeouts, retries, backoff, and caller-side circuit breaking (optional)
  • Realtime transports: polling, SSE, and WebSockets (optional)
  • Monitoring, logs, and alerts: golden signals, SLOs, and pages that matter (optional)

How This Course Works

Rather than memorizing architectures, the course focuses on why each box exists on the path.

For each topic, we start with a simple solution, identify where it breaks as traffic or correctness pressure grows, and introduce the next component to solve a specific scale, latency, or safety problem. Neighbor topics are pointers, not a second copy of the same mechanism.

By the end of the course, you should be able to draw a complete first-pass request path, defend the trade-offs behind those boxes, and know which follow-ups (copies, shards, consistency, failover) belong in Advanced System Design or a full design prompt.

Who This Course Is For

This course is suitable for software engineers who already understand basic backend development and want to move from building individual features to reasoning about a first-pass system.

No previous distributed-systems expertise is required. End-to-end prompts such as designing a URL shortener or a news feed, and topics such as replication and consensus, are out of scope here.

Chapters