AO
Back
DoorDash Common Problems

Design a Food Item Review System (Ratings, Reviews, Up/Down Votes, Rewards)

Also reported as Food Review System · Food Review System with Reward Bonus · Menu Item Reviews

System DesignhardLast reported October 2026
By AceOffer · Updated October 2026 · Reported 11× across 41 reports

Understanding the Problem

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:

  • The page shows an item's name, image, average rating and a list of reviews.
  • A user who bought the item can write a review with a rating from 0 to 5. One review per user per item.
  • Users can upvote or downvote other users' reviews. One choice at a time, but a user can switch from up to down. A vote is a different thing from a rating.
  • Scope: one restaurant, one menu, many items. No need to model the front end.
  • Scale: about 10,000 reviews a day, and votes and ratings each in the millions of requests a day (not millions per second). Reviews are read more often than written; for ratings the interviewer said reads and writes are about 50/50.
  • Sorting reviews, showing the first few, and showing vote counts were discussed.
  • Paying users based on their votes was mentioned only as a later direction (P0 is the item page, posting reviews, and voting).

Variants in other reports:

  • A reviewer whose review gets many upvotes is rewarded automatically, and must be rewarded only once (two reports).
  • Eventual consistency is acceptable (one report).
  • An older report adds a second requirement: settle drivers' earnings at the end of each month based on their deliveries.
  • One interviewer gave no requirements or scale at all and said "you decide".

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.

Functional Requirements

Structured requirements coming soon. For now, see the full problem statement above and the deep-dive prompts below.

Non-Functional Requirements

Latency, throughput, availability, consistency targets — being authored.

The Set Up

Defining the Core Entities

Core entities (Request, Batch, Worker, Cache, etc.) — being authored.

The API

POST /endpoint → describe request shape GET /endpoint → describe response shape (API spec being authored)

High-Level Design

Component diagram + walkthrough mapping each functional requirement to a system flow — being authored.

Potential Deep Dives

These are the directions the interviewer is likely to push you. Each one has multiple valid solutions at different quality tiers.

1)How big is 'large scale' here? Estimate the requests for reviews, votes and ratings, and the read/write ratio of each. (when: Reported; one interviewer answered with 10,000 reviews a day and millions of votes a day)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

2)Do reviews need sorting and pagination? Do you show the first five? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

3)When a user writes a review, do you also update the item's rating? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

4)How do you store and show the upvote and downvote counts? Is there another way to store them? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

5)Which Redis command do you use for the counter, and what does the update look like? (when: Reported; after the candidate proposes Redis)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

6)How do the cache and the database get updated? Does the read path go to Redis or to the database? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

7)Under high traffic, how does Redis behave and which eviction policy do you use? If a count is evicted before it is written to the database, is it lost? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

8)Are your review table and your user-review table duplicates? Can the data model be simplified? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

9)What exactly does the user-review table record? Give an example of one user voting on several reviews. Why do you need this table? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

10)How do you limit a user to one vote per review and still let them change it? (when: Reported in three reports)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

11)How do you make sure a reviewer is rewarded only once? (when: Reported in two reports, with the reward extension)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

12)Relational or non-relational for each table? If the vote table is very large, is querying or scanning it by review id reasonable? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

13)Even with Redis aggregating, the database still takes many count writes. How does it handle them? (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

14)Draw the full read and write path: the entry point, every component, and which databases are updated. (when: Reported)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

15)How would you settle drivers' earnings at the end of each month based on their deliveries? (when: Reported in one older report, as a second requirement)

Bad

Naive approach with serious trade-off — being authored.

Good

Solid baseline with reasonable trade-offs — being authored.

Great

Production-grade approach with explicit trade-off rationale — being authored.

What is Expected at Each Level?

L4 / Mid-level

Cover happy path. Clarify scope. Identify the obvious bottleneck. Pick a reasonable storage and reasonable scaling approach.

L5 / SeniorTarget

All of the above plus: explicit failure handling, durability vs latency trade-offs, choose the right batching/caching strategy, articulate why.

L6 / Staff+

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.

Insider Notes

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.

Prepping for DoorDash with friends?

Send them this page. It is free to read, no account needed.

More DoorDash Questions

Free preview

Every question in the DoorDash catalog gets this depth

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.

$59/mo — or $50/mo with the 3-month pass · cancel anytime
DoorDash · System Design · Last reported October 2026
Is this helpful?