List the key functional requirements for the system (Ask the AI for hints if stuck)...
List the key non-functional requirements (performance, scalability, reliability, etc.)...
Estimate the scale of the system. Consider daily active users, read/write ratio, storage requirements, bandwidth, and any relevant QPS calculations...
if we say that each character can be represented by a 100 different characters, then 11 characters has 1 trillion possible hashes and 12 has 10 trillion. Let's make it so that the string is 20 characters long to ensure there are no hash collisions then, we need 20 bytes to store that. 20 bytes for the hash and 80 bytes for the url is 100 bytes. 100 bytes at a million users is 0.1 GB so it is feasible to have this system be on a single instance.
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.
to scale the system infinitely, we need to store items in the cache based on a key, in this case, we can use the target url as the key and index and then split the caches and the Databases on that key/index.
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.