The design method
A repeatable way to run any frontend design prompt: clarify requirements, shape the architecture and data model, define the interface, go deep on the hard parts, and defend the trade-offs — with interactive references.
A frontend system-design prompt — "design a news feed", "design autocomplete" — is open-ended on purpose. The skill being tested isn't the feature; it's whether you can run the design: scope it, structure it, and defend your choices, out loud, in order. This page is the method the rest of the section's case studies all apply. It teaches a way of thinking, so its demos are interactive references, not server labs — and every worked example is one answer, not the answer.
A framework for any prompt
Run every prompt through the same ordered stages. The order matters: each stage's output feeds the next, and skipping ahead (naming components before you've scoped, say) is the most common way a design goes wrong.
- Clarify requirements → architecture → data model → interface & data flow → deep dives → trade-offs. (A common shorthand is RADIO.)
- Budget your time. Spend the first fifth scoping and the middle on architecture and interface; leave room to go deep on the one or two genuinely hard parts rather than covering everything shallowly.
- Think aloud and drive. State assumptions, write down what's out of scope, and lead the discussion through the stages instead of waiting to be asked.
- Step the framework through a sample product in the demo to see how each stage lands differently for a feed, a typeahead, a chat app or a design system.
Try it: step the framework through a product
01 · Clarify requirements
~15% of your timeTurn a vague prompt into a scoped problem before designing anything.
Example: clarify requirements for a news feed
Scroll, post, like/comment, media. Ask: how personalised, how fresh, which devices, read-heavy vs write-heavy?
What to produce
- The core user flows that must work (functional)
- The non-functional bar: performance, accessibility, offline, i18n, security, device/network
- An explicit list of what's out of scope, and the assumptions behind it
Common mistakes
- Designing before scoping
- Treating it as backend scale rather than the client experience
- Never writing down what you're not building
One worked example; another team might render a news feed entirely on the client, or rank it differently — the method is the constant, the answers aren't.
Do: Follow the stages in order, timebox them, and go deep where the problem is actually hard.
Avoid: Jumping to components or libraries before requirements, or spreading equally thin across every stage.
Read more:GreatFrontEnd: system design playbook(opens in a new tab)web.dev: Learn(opens in a new tab)
Requirements and scoping
Scoping is where seniors separate from mids. Before any design, split what the product does (functional) from how well it must do it (non-functional), and say out loud what you are not building.
- Functional requirements are the user-visible flows that must work. Keep the first pass small and prioritised — a working core beats a broad sketch.
- Non-functional requirements — performance, accessibility, offline, internationalisation, security, device and network — usually decide the architecture more than the feature list does.
- Scope cuts are requirements too. "Out of scope: real-time, admin, i18n" is a design decision; stating it shows judgement and buys time for the hard parts.
- The same prompt is a different build under different constraints: an offline-first feed, an SEO-critical feed and a watch feed share almost no architecture.
Try it: scope a sample product
An infinite, personalised feed of posts with media and interactions.
Functional (what it does)
- Scroll an endless feed
- Create a post with text and media
- Like and comment, with the count updating
- Pull to refresh / load newer
Non-functional (how well)
- Performance
- Fast first screen; smooth 60fps scroll over thousands of items.
- Accessibility
- Keyboard and screen-reader support; new items announced politely.
- Network
- Works on flaky mobile; images degrade gracefully.
- Freshness
- How stale may the feed be — seconds, or minutes?
Ask first
- How is the feed ranked, and on the client or the server?
- How fresh must it be?
- Which media types, and what sizes?
- Mobile-first or desktop too?
The non-functional bar and the scope cuts shape the design as much as the feature list: the same news feed is a different build offline-first, or SEO-critical, or for a watch.
Do: Ask clarifying questions first, write functional and non-functional lists, and name explicit scope cuts.
Avoid: Assuming the prompt's scale and audience, or treating accessibility and performance as afterthoughts.
Read more:web.dev: Core Web Vitals(opens in a new tab)MDN: Accessibility(opens in a new tab)
Trade-offs and non-functionals
Most of the design is a handful of recurring decisions. There is rarely a single right answer — the senior move is to name the options, tie each to the non-functional bar it serves, and say which you'd pick and why.
- Rendering strategy (CSR / SSR / SSG / streaming) trades first paint, SEO and freshness against complexity and cost.
- Data fetching & caching, pagination, and state location each have a small menu of options with clear forces picking between them.
- Realtime transport (polling / SSE / WebSocket) follows from how live the data must be and what you can operate.
- Every decision should trace back to a requirement: you choose cursor pagination because the feed shifts, not because it's fashionable. Explore each decision's options in the demo.
Try it: compare the options for a decision
Where and when the HTML is produced shapes load, SEO and interactivity.
PerformanceSEOFreshnessCSR
Ship a shell; the client renders everything.
- Wins
- Simple hosting; app-like after load.
- Costs
- Slow first paint; weak SEO; needs JS.
SSR
Render HTML per request on the server.
- Wins
- Fast first paint; fresh; SEO-friendly.
- Costs
- Server cost; hydration; TTFB tied to data.
SSG
Render HTML at build time.
- Wins
- Fastest, cacheable, cheap.
- Costs
- Stale until rebuilt; not for per-user data.
Streaming / RSC
Stream server-rendered chunks, hydrate islands.
- Wins
- Fast perceived load; less client JS.
- Costs
- More complex; newer model.
There's no single winner — each option serves the performance, seo, freshness bar differently. The senior answer names the assumption and the alternative, not just a pick.
Do: Tie each choice to the requirement it serves, state your assumption, and name the alternative you'd switch to if it changed.
Avoid: Declaring one option "best" with no context, or optimising something that isn't the bottleneck.
Read more:web.dev: Rendering on the web(opens in a new tab)GreatFrontEnd: system design playbook(opens in a new tab)
Next: the case-study pages apply this method to concrete prompts. The first, Design a news feed, picks up where this framework's worked example leaves off, followed by Design an autocomplete; a chat app and a design system follow.