1 - Listen to problem statement

  1. Use cases
  2. Out of scope
  3. Constraints

2 - Ask questions to interviewer

  1. Users/customers
  2. Scale
  3. Performance
  4. Cost

3 - Write down functional requirements

  1. "The system has to count video view events"
    1. countViewEvent(videoId)countEvent(videoId, eventType)processEvent(videoId, eventType, function)processEvents(listOfEvents) (what happened at the end to parameterized function?)

4 - Write down non-functional requirements

<aside> ☝ The ‘System Design Interview’ Youtube channel ****video author has an awkward splitting of scalability and performance. DDIA has a clean definition of the scalability concern: "how do we maintain good performance when our load parameters increase by some amount?"

5 - High-level architecture

<aside> 💁🏻‍♂️ Use https://excalidraw.com/ to do diagramming and split-screen with the system design google document.

</aside>

6 - Detailed design

  1. Get specific about data, transmitted and stored
    1. What we're storing the data in (DB)
    2. How we're storing the data. What is its structure?
    3. Processing the data