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?*