Skip to content

System Design/Architecture

binhnguyennus/awesome-scalability: The Patterns of Scalable, Reliable, and Performant Large-Scale Systems 看不完的系統服務架構 (有些連結已不在)

System Design

via: ByteByteGo mail (EP141: How to Ace System Design Interviews Like a Boss?)

Follow this 7-step process to do well in a System Design Round

1. Requirements Clarification
   In the first step, clarify functional and non-functional requirements. Ask questions to understand the core features of the system as well as non-functional aspects such as data volume, availability, scale, etc.

2. Capacity Estimation
    Next, estimate the capacity of the system. Focus on attributes like the number of users, traffic, storage/memory needs, and compute and networking requirements.

3. Create High-Level Design
    Break down the system into components such as client apps, servers, load balancers, databases, etc.

    Start with drawing a simple block diagram that shows these components and their potential interaction with each other. Focus on the data flow.

4. Database Design
    Model the data and choose the right database type for the system. Once done, focus on the database schema.

5. Interface Design
    Next, focus on the interfaces to the system. This could be API endpoints or event models exchanged between the various components of the system. Also, choose a communication approach such as REST, GraphQL, gRPC, or an event-driven

6. Scalability and Performance
    Address the scalability, performance, and latency aspects of the system by suggesting techniques that will be used. For example, vertical and horizontal scaling, caching, indexing, denormalizing, sharding, replication, CDNs, etc.

7. Reliability and Resiliency
    Lastly, address the reliability and resiliency of the design. Identify single points of failure and mitigate their impact.