List functional requirements for the system (Ask the chat bot for hints if stuck.)...
List non-functional requirements for the system...
Estimate the scale of the system you are going to design...
Writes/day:
50,000 locations, each location holds 5KB of data, and that's updated 2 times a day
50,000*5KB*2/day = 100,000KB writes/day
= 100 MB/day
Reads/day:
100,000 users, reading the weather 2 times a day
100,000*5 KB*2 = 1,000,000 KB reads/day
= 1 GB/day
Define what APIs are expected from the system...
User API:
getweather(location) - Will get and display the weather for a given location.
setfavorite(location) - Will allow users to add various locations to their 'favorites' list.
searchlocation(location) - Will allow users to search for new locations.
listlocations(favorites) - Will be a feed that will list the user's saved locations weather reports.
getLocation(current_location) - will get the user's location to populate the weather for their current location.
Weather Data API:
realtime_update(location) - will update the weather at a location
send_alert(location) - will update the database and send an alert to the location with severe weather and all users in that current location.
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...
SQL database
Users Table
Locations Table
Weather Table
Users will have their current location if allowed and then also a list of favorited locations they can add through searching
When searching for locations, users will query the locations table. When searching the weather at a specific location, the locations table will refer to the weather table which will contain all the data regarding the weather at that location on various days
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...
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?