What Are Design Fundamentals?

There’s a lot of subjectivity in System Design — most of the time, it’s important to justify your solution and discuss tradeoffs.

Why did you design parts of the system one way vs. another?

Categories of System Design:

Foundational — If you don’t understand the basics, you can’t answer any system:

Client/Server Protocol Networking (TCP/IP, UDP)

Characteristics — Things you want a system to have

Availability Latency Throughput Redundancy Consistency

Components — Tangible things you can implement in a system, like Leader Election, a Database, Load Balancers, Web Servers

Technology — What technologies will you use as components, or to achieve some requirement of a system:

ZooKeeper or Etcd for Leader Election S3 for Blob Storage EC2 for a Server Nginx for a Server or Reverse Proxy Redis for a Key-Value Store

Prev: introduction-to-systemsexpert Next: client-server-model