List non-functional requirements for the system...
Estimate the scale of the system you are going to design...
Define what APIs are expected from the system...
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...
Store Content - Blob storage, keep track of path in nosql DB
Content - nosql
User - sql
Followers - nosql
Interactions - no sql
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...
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...
User uploads content to their profile
User wants to view latest Feed
User views Reels videos
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...
Transcoder - how to encode raw content and get several different formats as output
Feed API - determines the latest content to deliver to the user display based on the followers the user interacts with the most
Explain any trade offs you have made and why you made certain tech choices...
SQL vs nosql - for some tables sql makes sense based on estimated size and schema, for others like content and interactions the estimate size could grow exponentially so scale and flexibility would be solved with nosql
blob storage for content makes sense because the content contains larger file sizes that can be streamed to the user based on several things like target viewing device and chunk if streaming video
Try to discuss as many failure scenarios/bottlenecks as possible.
Could see one user with many followers upload content and followers looking to update latest feed at the same time. In this case the Feed API will be very stressed with the high volume
What are some future improvements you would make? How would you mitigate the failure scenario(s) you described above?
Replicas of DBs, the content and interactions DB would be partitioned well using nosql solutions like cassandra and would also make sense to keep separate DBs for writes and reads with replication system to track of consistency between replicas
Compaction of old data. Users are most likely to interact with the latest content produced by followers. However, we still need to preserve old content so it is available when user would like to use it. To help cut down on storage costs we could implement a compaction system that determines when content is stale and will compact to a smaller size or keep only lower resolutions of the content rather than high resolution which is larger in size and the cost to store it