- The candidate turned an ambiguous prompt into a clear, testable problem.
- The candidate explained trade-offs and why they chose one option over another.
- The candidate adapted to hints from the interviewer and iterated on the design.
- Rushing straight into architecture without clarifying requirements or asking questions.
- Over-engineering: adding unnecessary caches, shards, queues, or multi-region complexity that makes the design too big to finish within the interview time.
Avoid jumping to the architecture or over-engineering. Use early clarifying questions and scope-limiting assumptions to produce a clear, focused design you can present in the time allowed.

- Judgment under ambiguity — can you convert a vague prompt into a concrete, testable scope?
- Technical depth — can you explain why a component (e.g., a cache) solves a problem and what trade-offs it introduces?
- Communication — can you explain the design clearly while iterating?
- Collaboration — do you ask clarifying questions and validate assumptions with the interviewer?
Use this six-step framework as your interview blueprint: clarify requirements, estimate scale, define APIs, create a high-level design, deep dive into the hardest parts, and identify bottlenecks and scaling strategies.
Spend a few minutes converting the vague prompt into a concrete problem definition. Ask questions and state assumptions out loud so the interviewer can correct them. For a simplified Instagram scope, confirm whether the following are required:
- Users can upload photos.
- Users can follow other users.
- Users can view a home feed populated by people they follow.
- The feed should load quickly on open.
Estimate scale and workload characteristics so your design choices are grounded in numbers. Example assumptions:
- 10,000,000 daily active users
- Each user views ~100 photos/week and posts ~1 photo/week
- Service is read-heavy (many more feed reads than uploads)

List a minimal set of APIs that satisfy your scoped features. For the simplified Instagram example:
Draw a simple architecture diagram with boxes for the main components that satisfy the requirements. For our Instagram example include:
- Mobile/web client
- App servers (API layer)
- User & follows database
- Photo storage (object store)
- Feed service (materialized feeds or on-demand computation)
- CDN for serving images
Pick 1–2 challenging components and go deep. For Instagram the home feed is typically the hardest problem:
- How does a post from a user with 1M followers appear in those followers’ feeds?
- Consider fanout strategies: push (write to each follower’s feed on write) vs pull (compute feed at read time).
- Discuss write amplification, read latency, consistency, and how to hybridize push and pull for different user classes (e.g., push for low-fanout users, pull for celebrities).

Call out the biggest bottlenecks and practical mitigation strategies. Prioritize the most likely pain points and give concrete fixes:
- Follows database bottleneck — add caching, denormalize follower lists for frequent reads, or shard by user ID.
- Photo storage throughput and capacity — store binaries in an object store and serve via a CDN.
- Read-heavy traffic — prioritize read-optimized approaches (caching, materialized feeds) and avoid premature write-side complexity.
Close the interview with a 30–60 second recap: the scoped problem, the key APIs, the high-level components, the deep-dive decisions and trade-offs, and the major bottlenecks with mitigation plans.
Now that you have the six-step framework, apply it to every system design question. Practicing this flow will help you make focused, testable designs and communicate them clearly under time pressure.