Skip to content

System Design Basics

Before designing a System

  1. Clarify the system requirements and agree on the scope of system.
  2. User Cases
    • who will be using it
    • how they are going to use it
  3. Constraints
    • traffic and data handling constraints at scale
    • scale of the system(req/s, req types data write/s, data read/s)
    • other requirements such as multi-threading, read or write oriented
  4. Abstract Design(High-level architectures)
  5. Sketch the important components and connections between them
    • application service layer
    • list of required services
    • data storage layer
    • load balancers, service partitions, database(master/slave db clusters), caching system
  6. Component Design
  7. component + API
  8. object oriented design
    • map features to modules
    • relationship among modules:
    • singeletons (uniq instance)
    • compositions (made up of many other objects)
    • inheritance
    • Database Schema Design
  9. Understanding Bottlenecks