Limited-time offer: 80% off every plan

See plans

Food Delivery Platform System Design Interview: Dispatch First

A spoken-style walkthrough of the food delivery platform system design interview: scoping a three-sided marketplace, choosing push or pull dispatch, and narrating trade-offs out loud.

By Emily Miller14 min read

The food delivery platform system design interview is the case where strong engineers lose points fastest, because the domain feels familiar. You have ordered dinner. You know the screens. So you start drawing boxes, and by the time you notice the interviewer wanted to hear you reason, half the slot is gone.

This walkthrough gives you a repeatable order of operations for the food delivery platform system design interview: scope first, name your requirements, put rough numbers behind them, then design. Each step below is written the way you would say it out loud, including the sentences that signal judgement rather than recall.

Why This Case Trips Up Strong Candidates

The trap is familiarity. A smaller, more abstract case forces you to think; a food delivery platform lets you coast on product knowledge, and coasting reads as shallow. A compact case such as the Rate Limiter System Design Interview: Reasoning Out Loud makes the contrast obvious: there, the constraints do the work for you. Here, you have to impose the constraints yourself.

Three things make this case harder than it looks:

  • Three user types, one clock. The customer, the restaurant and the courier each have requirements, and they compete for the same forty minutes of interview. If you spend ten minutes on the customer app you have already made a scoping decision, whether you meant to or not.
  • Physical operations in real time. Unlike a rate limiter, state changes constantly and geography is part of the data model. A courier is not a row you update; a courier is a moving object with a position, a queue of offers and a delivery in progress.
  • Ambiguity that must be bounded, not solved. "Design a food delivery platform" is not a question with one answer. It is a question about which version of the problem you choose to solve and whether you can defend that choice.

The goal of what follows is not a diagram to memorise. It is an order of operations you can speak through calmly, even when the interviewer interrupts.

Step 1: Scope Before You Design

Start with questions whose answers change the design. Not "what tech stack?" — those questions are cheap. Ask:

  • Single city, one country, or global?
  • Delivery only, or pickup as well?
  • On-demand only, or scheduled orders too?
  • Do we own the courier fleet, or is it a marketplace of independent couriers?

Then write down what you are deliberately leaving out, and say why. "I am going to skip payments, ratings and promotions. They matter in production, but they do not change the core dispatch and ordering design, and I would rather spend the time on the parts that do."

That sentence does more for your score than another box on the diagram. It shows you can bound an ambiguous problem. The same habit of gathering system design requirements out loud is worth practising on smaller cases too; it transfers directly to this one.

Then pick a concrete starting scale, out loud, and promise to revisit it: "I am assuming one city, a few thousand restaurants and tens of thousands of orders a day, with a dinner-rush peak — I will come back to that when we talk about dispatch." A stated assumption with a promise to revisit it gives the interviewer something concrete to push on, and it shows you know which later decision depends on it.

Step 2: Functional and Non-Functional Requirements

Separate the flows you will design from the ones you will merely mention. Naming system design trade offs out loud is the general habit; here is how it applies to this case.

Core flows. Browse a menu, place an order, restaurant accepts, courier is assigned, order is tracked, delivery is confirmed. These are the spine of your answer.

Secondary flows. Cancellation, refunds, courier location updates, restaurant menu updates. Name them in one breath and move on.

Non-functional priorities. Here is where the case gets interesting, and where you should be explicit:

  • Low-latency order tracking — the customer refreshes the map every few seconds and expects movement.
  • High availability for order placement — if ordering is down at dinner, the business is down.
  • Eventual consistency for menus and courier locations — a menu that is thirty seconds stale is fine; a lost order is not.
  • Durability for order and payment records — these are the records you cannot reconstruct.

Then say which requirement you would sacrifice first under pressure, and why. "If I had to give something up, it would be menu freshness. Customers tolerate a slightly stale menu far better than a failed order." That single sentence is often what separates a strong answer from a list, and it is often the part interviewers probe hardest.

Step 3: Back-of-the-Envelope Numbers

Here the arithmetic earns you the right to make later design choices. Do it out loud, and use it. Numbers that never come back are decoration.

  • Orders per second at peak. If a city does tens of thousands of orders a day, the average is small, but dinner concentrates a large share of them into a couple of hours. Estimate the peak, not the average, and say why the spike matters.
  • Courier location writes. If each active courier writes a position every few seconds, and thousands of couriers are active at peak, that is a steady stream of writes far larger than the order volume. Say that sentence — it justifies the next design decision.
  • Read-to-write ratio. Menu browsing and search dwarf order placement by orders of magnitude. That asymmetry is why discovery and transactions get different treatment later.

Step 4: Core Data Model and API Surface

In a food delivery platform system design interview, this section is where you show you can move between levels of detail without losing the thread. Keep it short. The interviewer wants to see that movement, not to watch you enumerate columns.

Entities: customer, restaurant, menu item, order, order state transition, courier, assignment, delivery.

The one modelling decision worth dwelling on: make order state an explicit state machine, not a free-text status field. States like placed, accepted, preparing, awaiting courier, picked up, delivered, cancelled, with defined legal transitions. This gives you a clean answer later when the interviewer asks what happens if a courier drops mid-delivery — you already have the vocabulary.

Sketch a handful of endpoints and name the path each one stresses:

  • GET /restaurants?near= — read-heavy discovery.
  • GET /restaurants/{id}/menu — read-heavy, cacheable.
  • POST /orders — write-heavy, must be idempotent.
  • POST /couriers/{id}/location — very high write volume, short retention.
  • POST /orders/{id}/accept — a state transition with a race condition hiding inside it.

Step 5: High-Level Architecture for the Food Delivery Platform

Now draw, and narrate the split as you draw it.

Separate the read-heavy discovery path — search, menus, restaurant metadata — from the write-heavy transactional path — orders, assignments, state transitions. They have different traffic shapes, different consistency needs and different scaling stories.

Put a queue between order placement and downstream work: notifications, dispatch, analytics, receipts. The customer's POST /orders should return as soon as the order is durably recorded, not after five other systems have acknowledged it.

Be precise about caching. Menus and restaurant metadata are excellent cache candidates — read-mostly, tolerant of staleness. Order state and courier availability are terrible ones — they change constantly and a stale read causes a real-world mistake.

Treat the courier location pipeline as a high-write, short-retention stream rather than durable relational rows. Positions from two minutes ago are mostly worthless; the latest one matters. Say that, and the design choice explains itself.

Step 6: The Dispatch Problem, and the Trade-Offs Inside It

This is the heart of the food delivery platform system design interview, and the part where your reasoning is most visible. Slow down here.

Push versus pull. In push-based dispatch, the system ranks nearby couriers and offers the order to them, one at a time or in a small batch, with a short acceptance window. In pull-based claiming, the order goes into a pool and couriers accept from it. Push gives you more control over who gets the work and better delivery-time estimates; pull is simpler and scales more gracefully, but tends to reward whoever is fastest to tap rather than whoever is best placed.

The reasoning that earns points. Say what happens when a pushed offer expires: the order has burned its acceptance window, the next courier in the ranking is offered it, and the delivery estimate slips a little each time. Then say how offer fan-out trades off: offering to one courier at a time keeps couriers from being pinged constantly, but a slow or distracted courier delays the order; offering to several at once raises the fill rate and shortens waits, at the cost of couriers seeing offers they lose. A sentence you could say out loud: "I would start with sequential offers and a short window, measure how often offers expire, and widen the fan-out only if fill rate is the bottleneck — because courier annoyance is a real cost too."

Batching. Assigning one order at a time is simple and fast to reason about. Batching two or three orders that share a route improves courier utilisation and lowers cost, at the price of longer individual delivery times and a harder assignment problem.

Geography. Partition dispatch by region. A global dispatch service that considers every courier on earth is usually the wrong answer — it adds latency and coordination for no benefit, because a courier in another city can never serve this order.

Then name the trade-off explicitly and pick a side: courier utilisation versus delivery time versus fairness. "I am optimising for delivery time in the first version, because that is what customers notice, and accepting lower utilisation as the cost." An interviewer can argue with a stated position. They cannot argue with a vague one.

Here is how that sounds out loud, as an example of a candidate scoping the case and committing to a dispatch position in one continuous answer:

"Before I draw anything, let me bound this. I will assume one city, a few thousand restaurants, tens of thousands of orders a day with a dinner-rush peak, delivery only, on-demand only, and a marketplace of independent couriers. I am leaving out payments, ratings and promotions, because they do not change the ordering or dispatch design. For dispatch, I would start with push: rank nearby couriers, offer to one at a time with a short window, and move to the next if it expires. That gives me control over delivery estimates. The cost is that a slow courier delays the order, so I would measure expired offers and widen the fan-out only if fill rate becomes the bottleneck. I am optimising for delivery time first and accepting lower courier utilisation as the price."

That wording scores because it states assumptions, names what it excludes, picks a mechanism, names its cost and commits to an objective — all before a single box is drawn.

Step 7: Reliability, Failure Modes and Bottlenecks

The failures are where you show you have thought past the happy path. Walk through them before you are asked.

  • The restaurant never accepts. The order needs a timeout and a fallback: cancel with a clear message, or re-route to another restaurant if the menu matches.
  • The courier drops mid-delivery. The state machine already has the vocabulary. Reassignment becomes a state transition, not an emergency.
  • The location stream backs up. Shed old positions rather than queueing them; the newest position is the one that matters.
  • Duplicate order placement. Make POST /orders idempotent with a client-supplied key, so a retry does not create a second dinner.

Then talk about graceful degradation. Keep order placement working even if recommendations, ratings or live tracking are degraded. The ordering path is the one that must not fall over.

Finally, name the first bottleneck you would expect — usually the write path around order placement and dispatch at peak — and say how you would measure it. A latency percentile on the order endpoint and a queue-depth metric on dispatch are honest starting points. Naming that bottleneck out loud is often what turns a food delivery platform system design interview answer from a tour of components into a diagnosis.

Step 8: Practising the Food Delivery Platform System Design Interview Out Loud

Reading this article is not practice. Saying it is.

Rehearse the same case three times with different constraints: single city, then global, then scheduled orders. The design changes each time, and your flexibility is what the interviewer is testing.

Record yourself and check three things: did you state your assumptions, did you name your trade-offs, and did you summarise before moving to the next section? Most candidates do the third one badly — a ten-second recap before each new section makes the whole answer easier to follow.

Use this self-review checklist after each run:

  • Scope: did I ask questions that changed the design, and state what I left out?
  • Numbers: did I estimate peak, not average, and reuse the numbers later?
  • Data model: did I keep it short and make order state explicit?
  • Trade-offs: did I pick a side and say what it cost?
  • Failure modes: did I cover the three obvious ones without being prompted?
  • Wrap-up: did I summarise the design and name what I would do with more time?

The skill you are building here is spoken reasoning under mild pressure, and it improves the same way any spoken skill does: repeat the run, review the recording against the checklist, and adjust one thing next time.

The takeaway: the food delivery platform system design interview rewards narration over recall. Scope first, bound the problem, put numbers behind your claims, and say your trade-offs out loud. Do that three times with different constraints and the case stops being a trap.

Frequently asked questions

How long should a food delivery platform system design answer take?

In a typical 45 to 60 minute slot, a suggested split is roughly five to ten minutes on scoping and requirements, a similar stretch on estimates and the data model, the largest share on architecture and dispatch, and the last few minutes on reliability, bottlenecks and a wrap-up. Treat it as a rough guide rather than a rule; covering each stage and saying when you are moving on matters more than the exact minutes.

Should I design the courier dispatch algorithm in detail during the interview?

Design the shape of it, not the optimisation. Compare push-based offering with pull-based claiming, discuss batching and geographic partitioning, then state which objective you are optimising for and what it costs. Deep-diving into a ranking function before you have covered failure modes usually costs you more points than it earns.

Do I need to cover payments and refunds in this system design question?

Name them and move on. Phrase the exclusion in one sentence: "I am leaving out payments and refunds because they sit behind the ordering and dispatch design I want to spend our time on." If the interviewer insists, sketch a payment record written after the order is durably stored and a refund as a compensating entry, then return to dispatch.

Is it better to start with the data model or the high-level architecture?

Neither first. Scope, then requirements, then rough estimates, then the data model and API surface, then the high-level architecture. The data model is short and gives you vocabulary for the architecture discussion — particularly the order state machine, which you will reuse when discussing failures.

How do I handle the interviewer changing the scale halfway through?

Treat it as a gift, not a disruption. Restate the new constraint, say which parts of your design survive unchanged and which break, then adapt one or two components rather than redesigning everything. Naming what still holds is as valuable as naming what does not.

What is the most common mistake in the food delivery platform system design interview?

Rushing into boxes because the domain feels familiar, and never stating assumptions or trade-offs. The second most common is spending too long on the customer-facing app while the dispatch problem — the genuinely hard part — gets five minutes at the end.

Practise the walkthrough out loud