1. Clarify the requirements

“Design Twitter” is too big. The first 5 minutes of the interview should narrow scope by negotiating what’s in and out.

Functional requirements

Pick a small core. A safe set:

Explicitly defer the rest unless the interviewer pushes: search, trending, DMs, retweets/quotes, replies, hashtags, notifications, ads, analytics. Don’t pretend you’ll build all of it.

Non-functional requirements

These shape the architecture more than the features do.

Core entities

Before sizing or APIs, name the objects you’re modeling. Fields and storage come later (chapter 4) — for now, just the nouns:

Timeline isn’t a stored entity in the same sense as the others — it’s computed. Calling it out now is what makes the fanout discussion (chapter 6) meaningful later.

What to confirm out loud

Three questions worth asking the interviewer:

  1. “Should the timeline be strictly chronological, or ranked?” — Strictly chronological is much simpler. Ranking adds an ML layer.
  2. “Are we serving global users?” — If yes, you need multi-region replication and edge caches.
  3. “What’s the scale?” — Anchor on something concrete (e.g. 300M DAU). You’ll use this in capacity estimation next.

The trap

Candidates often dive straight into databases and queues. Don’t. The reason fanout vs. pull is interesting at all is the read/write ratio and the celebrity problem — both of which only exist because of the requirements you set here.

Spend 5 minutes on requirements. Write them on the board. Refer back to them when justifying every later decision.