List functional requirements for the system (Ask the chat bot for hints if stuck.)...
Users can create accounts and keep track of their shortened links
Users can get a shortened link for a URL they provide
URLs should be available for a user-customizable set of time
Clicking on the shortened URL takes the user to the original URL
List non-functional requirements for the system...
There can be analytics that are stored regarding how often a link is clicked
Estimate the scale of the system you are going to design...
Expect 500 million links to be added each year
Define what APIs are expected from the system...
create_link(original_url, expiration_time)
follow_link(shortened_url)
create_account(user_name, password)
edit_link(user_id, link_id, new_link)
edit_link_name(user_id, link_id, new_name)
edit_link_expiration(user_id, link_id, expiration_time)
Defining the system data model early on will clarify how data will flow among different components of the system. Also you could draw an ER diagram using the diagramming tool to enhance your design...
Users table:
user_id - user_name - password (hashed)
Links table:
link_id - user_id - original_url - click_count - expiration
You should identify enough components that are needed to solve the actual problem from end to end. Also remember to draw a block diagram using the diagramming tool to augment your design. If you are unfamiliar with the tool, you can simply describe your design to the chat bot and ask it to generate a starter diagram for you to modify...
Explain how the request flows from end to end in your high level design. Also you could draw a sequence diagram using the diagramming tool to enhance your explanation...
Create URL:
Client sends request to API Gateway with URL. Request goes to the Link Service which adds the new URL to the Database along with a shortened URL which is returned to the client
Edit URL:
Client logs in through the user service and sees their URLs. They send a request to edit one of them with any updated information (name, URL, or expiration_time)
Follow URL:
User clicks on a shortened link which sends a request to the API gateway. This sends a request to the Link service which gets the original URL from the cache
Create Account:
User sends a request to the API Gateway which is forwarded to the User Service which handles the account creation
Dig deeper into 2-3 components and explain in detail how they work. For example, how well does each component scale? Any relevant algorithm or data structure you like to use for a component? Also you could draw a diagram using the diagramming tool to enhance your design...
Explain any trade offs you have made and why you made certain tech choices...
Try to discuss as many failure scenarios/bottlenecks as possible.
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?
Multiple caches for more robust and fast reading of original URLs