Step 1: Requirement Clarifications - Ask questions about the exact scope of the problem we are trying to solve. - Open-ended Step 2: Back-of-the envelope estimation - Estimate the scale of the system we are going to design - Focus Areas: scaling, partitioning, load balancing, caching 1) What scale is expected from the system? (e.g., number of new tweets, number of tweet views, number of timeline generations per second) 2) How much storage will we need? We will have different storage requirements if users can have photos and videos in their tweets 3) What network bandwidth usage are we expecting? This will be crucial in deciding how we will manage traffic and balance load between servers. Step 3: System Interface Definition - Define what APIs are expected from the system. This will establish the exact contract expected from the system and ensure if we haven't gotten any requirements wrong. e.g., for twitter postTweet ( user_id , tweet_data , tweet_location , user_locati...