Patterns first
Skip the skill-by-skill grind. Learn the six system shapes interviewers expect you to recognise on sight, and use the patterns as the scaffold for everything else.
For: Engineers who learn by shape, not by topic list
After this path
Recognise which of six system shapes a prompt maps to within the first two minutes, and narrate the v1 → v2 → v3 scaling path cold.
- 1Pattern
Read-heavy
Reads dominate writes by 10:1 or more. Every layer exists to keep the primary out of the hot path.
Why this, here: 70% of prompts. The default shape. Know the scaling path by heart.
- 2Pattern
Write-heavy
Writes arrive faster than any single node can persist them synchronously. The design is about absorbing, spreading, and deferring them.
Why this, here: The other half — ingest-heavy, partitioned-by-key, LSM storage.
- 3Pattern
Fan-out: on write vs on read
Where does the work live — at write time (push to every follower's inbox) or at read time (gather from each followed user)? Both break at the extremes; hybrids win.
Why this, here: Twitter / feed problem distilled. Hybrid is the senior answer.
Checkpoint
Self-quiz: say the v1 → v2 → v3 scaling narrative for read-heavy out loud, without peeking. If any stage is fuzzy, loop back before continuing — the rest of the patterns compose on top of this one.
- 4Pattern
Producer-consumer / work queue
Decouple rate of production from rate of consumption with a durable queue and autoscaled workers.
Why this, here: Every system with async side-effects is a variation of this.
- 5Pattern
Long-running tasks
Accept work with 202 + job_id, process asynchronously, and let clients track progress via poll, push, or webhook.
Why this, here: Tested in 1 in 3 rounds. Four pieces always: job store + queue + worker pool + status channel.
Checkpoint
Name the four pieces of the async job pattern without looking: job store, queue, worker pool, status channel. Now map each piece to a concrete technology you’d defend in a round.
- 6Pattern
Real-time delivery
Poll, long-poll, SSE, or WebSocket — the choice is about update frequency, direction, and how many persistent connections you can afford.
Why this, here: Push, not poll. WebSockets / SSE. Know when to reach for it.
- 7Pattern
Classic request-response
The boring default. Synchronous HTTP with a cache. Works for 70% of APIs and you should say so.
Why this, here: The boring default. Naming it first is a senior signal.