Also reported as Food Review System · Food Review System with Reward Bonus · Menu Item Reviews
Design the review section of a food delivery app's menu item page.
The round: the onsite system design round. Eleven reports name it, and in most loops it is the system design question. Two reports say it opens with one of your past projects (about 15 minutes in one) before the design; a third also lists a project deep dive.
What the interviewer confirmed in the most detailed report:
Variants in other reports:
What reports say is probed: the database schema above all. How a posted review differs from a vote, how one user votes only once, and where vote counts live (Redis commands, eviction, what is lost). One Staff candidate had not reached the high-level design by minute 45 because of schema and API questions.
No report says which answers passed.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Naive approach with serious trade-off — being authored.
Solid baseline with reasonable trade-offs — being authored.
Production-grade approach with explicit trade-off rationale — being authored.
Cover happy path. Clarify scope. Identify the obvious bottleneck. Pick a reasonable storage and reasonable scaling approach.
All of the above plus: explicit failure handling, durability vs latency trade-offs, choose the right batching/caching strategy, articulate why.
All of the above plus: organizational concerns (rollout, migration, on-call), quantitative analysis, multi-region considerations, what could go wrong with the proposed solution at 10x scale.
What the reports say: the interviewer cares most about the data model. Have the Review and Vote tables, their keys and the one-vote rule ready to state quickly, then move to the diagram; one Staff candidate felt the schema and API questions in the first 45 minutes left them showing mid-level signal. Another interviewer barely spoke and left scale to the candidate, so come with your own numbers. Two reports open the round with a past project, and one interviewer asked whether the candidate knew DashPass.
Common mistakes: One table for both reviews and votes.; Enforcing one vote per user in application code instead of with a unique key.; Keeping counts only in Redis, so an eviction or restart loses them.; Treating ratings as read-only when every review writes one.; Designing for millions of writes per second when the reported scale is millions per day.; Paying a reward inline in the vote request, where two votes can both trigger it.
Edge cases to test: A user switches a vote from up to down (one count moves); the same vote sent twice; a user edits their rating (the average changes by the difference); an item with no ratings yet; two votes crossing the reward threshold at the same moment; a viral review taking many votes at once (ours).
Alternative approaches: Count votes from the vote table on read with an index on review id (no cache, fine for cold reviews at this scale); store counts on the review row (simple, but a hot review becomes one contended row); batch counter changes from a queue into the database (durable, one write per review per batch). These are our notes, not reported.
Send them this page. It is free to read, no account needed.
What you just read — canonical solution, follow-up arc, what passing candidates actually did — exists for all 12 DoorDash questions, refreshed monthly from new candidate reports.