List the key functional requirements for the system (Ask the AI for hints if stuck)...
- User submits long URL -> System returns short URL
- User uses generated short URL -> System automatically redirects them to long URL
- User can define their own short URL format and expiry date
List the key non-functional requirements (performance, scalability, reliability, etc.)...
- System must have 99.99% uptime
- System must redirect the user to the original URL <100 ms
- System must be able to automatically scale to support spikes in network traffic
Estimate the scale of the system. Consider daily active users, read/write ratio, storage requirements, bandwidth, and any relevant QPS calculations...
- Assuming 100M short URL are being created per day
- 100:1 read to write ratio
- Read requests per second (RPS) = 100M x100 / 86400 sec per day = 115740
- Write requests per second (WPS) 100M / 86400 sec per day = 1157
Define the APIs expected from the system. This is your chance to analyze and define the read and write paths so that you can come up with the high-level design...
Describe the overall system architecture. Identify the main components needed to solve the problem end-to-end. Use the diagramming tool to create a block diagram.
Define the data model. Identify the main entities, their attributes, and relationships. Consider the choice of database type (SQL vs NoSQL) and justify your decision based on access patterns...
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.