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...
There are a few major functions in this app
We can summarize these as the following:
Models
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.
Design for the Posting service
Design for the feed:
Deep dive into 2-3 key components. Explain how they work, how they scale, discuss tradeoffs, capacity, and any relevant algorithms or data structures.
The fanout service uses a message queue to publish and subscribe to any changes that would impact the user's feed. We don't need real-time responses, so we send the request to a message queue to fan out workers to work on updating the feed cache. The fanout service should also check the user DB to update the user's followers' feeds. The fanout service requires a read to the User DB to ensure that the users are getting their followed users' tweets.
The feed service will need to search for the latest tweets with the highest likes; maybe we can do a search timeboxed to tweets posted today and sort them by likes and then by the time posted. We would only need a feed cache instead of a feed database. There should likely be two caches, one for your follower's ranked tweets and one for the globablly ranked tweets so we don't rerun the feed service unnecessarily.