Approach - rFronteddu/general_wiki GitHub Wiki

Requirements Clarifications - Clarify Ambiguities

  • Design questions are often open-ended and they don't have ONE correct answer.

System Interface Definition

  • Establish a contract for the system and gain visibility in how to satisfy the requirements.

Back-of-the-envelope estimation

  • Estimate the scale of the system to guide decisions on scaling, partitioning, load-balancing and caching.
    • Expected Scale of the system?
    • Storage?
    • Bandwidth?

Defining Data Model

  • Clarify how data will flow among different components of the system and guide partitioning and management (storage, transportation, encryption, etc.) and which database to use.

High-level Design

  • Draw a block diagram with 5-6 boxes representing the core components of our system that solve the problem end-to-end.

Detailed Design

  • Dig deeper into two or three components, present different approaches, their pros and cons, and explain why we will prefer one approach on the other.

Identify and resolve bottlenecks

  • Discuss bottlenecks and possible mitigation approaches:
    • Is there any single point of failure?
    • Do we have enough replicas of the data?
    • Do we have enough copies of services running?
    • How are we monitoring performance and system liveness?*