How DoorDash Built a Great AI Shopping Assistant: It's Not Just the Model — It's Tools and Memory That Make It Work

After the memory system launched, grocery checkout conversion rose roughly 24%, and automated evals scaled daily eval volume from 1 human review to 2,000+ runs.
By DoorDash Engineering Blog07-14 · 14 min read⚑ Company PR · read with that in mind
🎧 Listen to the podcast0:00 / --:--
0:00 / --:--
Deep Dive · XiaoHu Explains
TL;DR
  • DoorDash launched Ask DoorDash, an AI assistant that searches restaurants, plans meals, and builds shopping carts through natural-language conversation, now in gradual rollout on iOS in parts of the US.
  • The architecture splits into four layers — an orchestrator agent, specialized domain agents, a shared tool layer, and managed services — with business logic living in the shared tool layer instead of being stuffed into prompts.
  • A three-tier memory system (long-term memory via offline batch processing, in-session memory updated in real time, and conversational memory with explicit extraction) powers personalization: 7 days of production data showed memory-backed grocery checkout conversion up roughly 24%, basket size up 17%, conversation turns down 7%, and restaurant recommendation conversion up 15%.
  • A homegrown eval framework uses AI to simulate users running against recorded tool data, running 2,000+ automated evals a day, lifting agent quality scores by 8 points and shrinking regression testing from 6 hours to 20 minutes — enabling a model backbone migration that cut latency by 35% without hurting quality.
⚑ Stance notice: This piece draws on DoorDash's official engineering blog trilogy and public remarks from co-founder Andy Fang. The conversion rate, basket size, and eval-scale figures cited are DoorDash's own self-reported results from a 7-day production window, not independently audited.
1Launch Update

What DoorDash Just Shipped

Starting in June 2026, DoorDash published three consecutive engineering blog posts detailing a newly launched AI shopping assistant, Ask DoorDash: its runtime architecture, its memory system, and the eval framework that made the launch possible.
Describe what you want to eat or buy in a single sentence, and the AI searches restaurants, plans meals, and builds your cart — now in gradual rollout on iOS in parts of the US.
◆
The hard numbers: the eval team scaled daily quality evaluation from roughly 1 piece of employee human feedback to 2,000+ automated evals a day; a full regression test went from 6 hours of manual work down to 20 minutes.
One sentence say what you want to eat or buy Within 2 minutes AI builds your cart Order/tweak about 5x faster than manual

Right now only two scenarios are live: restaurant search and grocery shopping — Android and web aren't there yet. Early data shows roughly 70% of messages are discovery-type requests, like "ramen nearby," "what should I eat tonight," or "how do I shop for vegetarian dinners this week." Most users go back and forth several times within the same conversation, tweaking as they go, rather than asking once and leaving. DoorDash also notes that the most common production failure mode right now is "facts not matching up" — recommending a restaurant that's actually closed, quoting a price that doesn't match the shelf, or saying something got added to the cart when it actually didn't. The fix follows the same idea in every case: every factual statement the AI makes must come from an actual tool call to the real system data, not a guess based on context.

2Runtime Trace

What Actually Happens Behind One Order

"Build me a $60 vegetarian grocery list for two" looks like one sentence, but a lot happens behind it. DoorDash walked through a real three-turn conversation example that shows which steps actually need the AI, and which don't need it at all.
Turn 1"Build me a $60 vegetarian grocery list for two"
Check user memory (diet preferences/brands/order history) Search nearby open grocery stores Check single-store inventory Verify prices/promotions Plan the display widget Generate reply copy
Turn 2User directly swaps the pasta brand on the cart widget, removes a yogurt already at home, changes quantities
Directly edits the cart object Subtotal recalculates in real time against latest inventory prices
Turn 3"Add some salad ingredients too"
Reads the user-edited cart Checks inventory at the same store Adds ingredients within remaining budget Renders the updated list
Goes through the AI modelNo AI, edits data directly

Turn 2 is the key design choice here: when the user taps around and edits the cart widget, those edits change the cart object directly, without another AI model judgment call — the AI sits idle. That means the most time-consuming step, "call the AI," gets cut out of most of the interaction entirely.

6-8x
AI calls triggered by Turn 1 alone, plus multiple tool calls
20-30 sec
End-to-end latency for Turn 1
Trace diagram of a single grocery shopping request
The original trace diagram from DoorDash's engineering blog: the chain of AI calls and tool calls behind a single grocery shopping request. · Source: DoorDash Engineering Blog
3System Layers

How the Four-Layer Architecture Divides Labor

Ask DoorDash isn't a brand-new system built from scratch — it's a layer added on top of DoorDash's existing platform. The whole architecture splits into four layers, and business logic lives in exactly one of them, not in the prompts.
1 · Assistant Runtime
The client, the Gateway that handles message delivery and session state, the Orchestrator that decides which agent takes this turn, and two domain agents: one for restaurant discovery and one for grocery shopping.
2 · Managed Agent Services
Artifacts (widgets like carts and store cards, stored as versioned objects), session state, and consumer memory. This layer only had to be built once — any other team at the company building agents can plug straight in without rebuilding it.
3 · Shared MCP Tool Layer (where business logic lives)
MCP stands for Model Context Protocol — think of it as a standardized toolbox every agent can call into: search, recommendations, cart, checkout, order history, memory retrieval are all tools in that box. Grocery rules, promo math, inventory checks — all live in the tools, not in the prompts.
4 · DoorDash Backend Services
The same search, catalog, order history, cart, and merchant systems shared with the rest of the app. Every backend upgrade automatically benefits the Assistant.
An analogy: the A2A protocol

The orchestrator agent and domain agents talk to each other through a protocol called A2A (agent-to-agent) — like different departments in a company agreeing on a shared memo format: as long as the format matches, the restaurant team and the grocery team can each develop and ship independently, without being locked together for releases.

One detail worth noting is "agent stickiness": if the user's last turn was about groceries and this turn says "add it to the cart," the system defaults to keep routing to the grocery agent instead of re-deciding from scratch, until the user's intent clearly shifts. Each agent runs on Google's Agent Development Kit, with the AI model per role configurable — if something goes wrong, you can swap the model for just that role without shipping a new release.

DoorDash Assistant runtime architecture diagram
DoorDash Assistant runtime architecture: the client, Gateway, orchestrator agent, domain agents, and the managed services and tool layer underneath. · Source: DoorDash Engineering Blog
Four engineering pillars of agent development
Four engineering pillars: intelligence (memory and personalization), evals, platform (runtime and tools), and user experience. · Source: DoorDash Engineering Blog
4Core Mechanism · Memory

The Memory System: Getting the Agent to Remember Who You Are

Core Innovation One

Every conversation an agent has starts from zero — it doesn't know who it's talking to. DoorDash's problem to solve was turning scattered user data into "the right context at the right moment," using a three-tier memory system plus a four-stage memory pipeline.

After this system launched, memory-backed grocery conversations saw checkout conversion rise roughly 24%, and the odds of the agent misreading user intent drop roughly 33%. DoorDash splits memory into three tiers, each updating on a completely different cadence.
Memory TierUpdate CadenceWhat It Holds
Long-term memoryDaily/weekly batchDiet preferences, dining habits, brand preferences, favorite stores
In-session memoryReal-timeCurrent cart, what's being searched right now, items just viewed then skipped
Conversational memoryGenerated as the conversation happensThings the user explicitly says in this conversation that should be remembered long-term

Having these three memory tiers isn't enough on its own — the AI still has to figure out which categories of memory to check for a given turn. DoorDash breaks that process into four stages:

Intent & scope resolution
→
Query planning
→
Retrieval & ranking
→
Context packaging

Take "I want to make chicken tikka masala" as an example: step one, intent resolution, recognizes this as a recipe request, so what needs checking is brand preference and portion-size preference, not nearby restaurants. Step two, query planning, splits it into an "exact-keyword lookup for brand preference" plus a "semantic query for portion history," searching only within grocery-related memory partitions. Step three, retrieval and ranking, runs those in parallel and puts the most recently confirmed "usually buys two portions" at the top. Step four packages everything into a handful of structured facts stuffed into the prompt — say, "two portions, usually buys Oatly oat milk, no meat" — and the agent picks ingredients based on those few lines, instead of dumping hundreds of historical memories on it all at once. Query planning itself is parameterized along three dimensions: whether to search by semantic similarity, exact keyword match, or pull directly from structured fields; which memory partition to search; and boundaries like result count limits, similarity thresholds, and time windows.

To make keyword retrieval actually work, the system also builds a Memory Bank Index at the start of every conversation — a list of the vocabulary that actually exists in this user's current memory, stuffed into the prompt — and the agent searches against that index; searching for terms not in the index just wastes tokens. For especially large memory blocks like order history, the agent first does a lightweight "peek" to get summary info like record count and availability, then decides whether it's worth pulling in the full content, instead of dumping the entire order history into context up front.

When Memory Meets Shelf Reality, Who Gives Way

Memory and current reality are two different things. If a user who "always buys Oatly" happens to hit a store with none in stock, the agent discovers this while checking inventory and switches to an alternative; if a user said "$60 budget" but the cheapest way to cover this week's list actually comes to $72, the AI tells the user honestly rather than faking a $60 total. This reconciliation isn't a separate layer — it happens within the same turn, where the agent first pulls stored preferences, then checks them against the real-time prices, inventory, and hours returned by the search and cart tools; when memory conflicts with reality, the plan adjusts to match reality.

Three memory tiers operating on different time scales: long-term memory, in-session context, conversational and explicit memory
The three memory tiers run at different rhythms: long-term memory batches offline, in-session context updates in real time, and conversational memory records preferences the user states out loud. · Source: DoorDash Engineering Blog, Part 2
Memory system architecture diagram
Memory system architecture: the full chain from memory generation, the tool orchestration layer, storage, and access policy, through to serving each agent. · Source: DoorDash Engineering Blog
5Memory Lifecycle

How a Memory Forms — and How It Gets Precisely Forgotten

A single shopping session might have 20 turns of conversation, most of which are throwaway search results and tool responses — maybe only one or two lines are actually worth remembering long-term. DoorDash uses a three-stage async pipeline to pick those one or two lines out of the noise.

How a Sentence Becomes a Usable Memory

Signal (triggered async right after the user finishes speaking, no added delay)
→
AI extraction & classification (is this a durable signal?)
→
Dedup & merge (compared against existing memory before writing)
What was said

"We're vegetarian, still buying for two this week."

Memory written
CategoryDiet preference
ContentHousehold is vegetarian, usually buys for two
DurationLong-term, unless the user says otherwise

But if a sentence is just "this one's for a friend, needed tonight," that's a one-off statement and gets skipped — it doesn't go into long-term memory. The bar for "durable" shifts by scenario too: in a restaurant context, "I don't feel like ramen" defaults to being read as a passing mood, unless the user uses explicit durability words like "always" or "never" — otherwise recording it would have the agent avoid noodle dishes forever after; in a grocery context, an offhand "I like Oatly" is exactly the kind of brand signal worth remembering long-term. Price-sensitivity preferences only count if the user actively initiated it — say, they asked "what's cheap at Safeway" themselves — that gets recorded; but if they merely accepted an AI-recommended cheap store passively, that's not treated as a lasting judgment about the person.

"Forgetting" Is Harder Than "Remembering"

If a user says "forget that I like the grilled cheese from Nova's," doing a crude delete by similarity or keyword match would easily wipe out other memories related to "Nova" or "cheese" that the user actually still wants kept.

Semantic retrieval of candidates (memories related to Nova/grilled cheese)
→
AI judges each one individually for whether it should actually be deleted
→
Synchronous deletion, confirming in the reply exactly what was removed

Deletion works differently from saving: saving is triggered asynchronously and adds no latency, while deletion runs synchronously, so the agent can tell the user in its reply exactly which items were removed. There's also no single expiration rule across all memory: cooking oil bought 80 days ago is probably still in the kitchen; milk bought 12 days ago has probably been finished; a self-stated preference like being vegetarian has no expiration at all, unless the user changes their mind. How long a memory should live depends on what it actually is, not a one-size-fits-all decay formula.

6Core Mechanism · Evals

How Do You Know the Agent Is Actually Any Good?

Core Innovation Two

There's no single correct answer for an agent conversation, and manual spot-checking doesn't scale. DoorDash built an automated eval framework that turns "did this conversation actually help the user" into something that can run daily and be measured.

The framework has four parts: a rubric that sets the standards, a transcript builder that turns raw logs into readable evidence, a conversation simulator that can generate conversations in bulk, and an AI judge that replaces manual scoring.
Rubric · Scoring standards

Each standard is written as a binary judgment call — for example, "did the recommended restaurant meet the user's stated delivery time, budget, and dietary restrictions." Each standard first checks whether it even applies to this scenario before scoring, so reorder-specific checks don't accidentally get deducted against a recipe scenario.

Transcript Builder · Log processing

Every conversation is instrumented via OpenTelemetry and stored in ClickHouse. Raw logs carry too much information, so a Python script slices them into evidence tailored to each scoring standard — the judge only sees the slice it needs.

Conversation Simulator · Simulated conversations

An AI plays the user, running through a full conversation against a pre-written scenario script, paired with a pre-recorded set of tool response data (not querying the real database) — guaranteeing every run of the same scenario starts from an identical baseline, so scores stay comparable.

AI Judge · Automated scoring

Uses the GEPA algorithm to iteratively refine the scoring prompt until it matches human-labeled judgments; once calibrated, it can automatically review 2,000+ conversations a day.

An analogy: the tool fixture

During evals, calls don't actually hit live inventory or order APIs — they replay a pre-recorded, fixed response instead. That way, no matter how many times the same test scenario runs, the starting conditions are always identical, so any score change can be attributed to the agent itself, not random factors like whether the shelf happens to have stock today.

An analogy: GEPA prompt optimization

An algorithm that automatically rewrites the scoring prompt: it keeps generating new versions of the prompt, keeps the one that best matches human-labeled results, and repeats the calibration until the AI judge's judgment gradually converges with a real human reviewer's.

50×8
A typical offline eval run covers 50 scenarios, 8 runs each, 400 conversations total
6 hrs → 20 min
For the same conversation volume, manually generating them one by one took 6+ hours; the simulator compresses that to about 20 minutes
Eval system mirrors production runtime architecture
Evals are split by layer: orchestration routing, guardrails, and domain agent capability are each measured independently, mirroring the structure of production runtime. · Source: DoorDash Engineering Blog, Part 3
Eval system architecture diagram
Eval system architecture: how the rubric, trace logs, AI judge, and other modules combine into a complete eval system. · Source: DoorDash Engineering Blog
7Real-World Cases

How the Eval System Caught Two Real Incidents

This eval system isn't just a dashboard for show — two real cases show exactly what it caught and what it verified.

Case One: The AI Sounded Like It Was Reading Code Out Loud

What live scoring flagged

The agent did complete the task, but its replies to the user leaked internal system jargon — words like "reorder skill," "fetch," "in parallel" — sounding like it was reporting to another program, not like a shopping assistant talking to a person.

After the fix

The agent's communication rules were reorganized, separating internal skill instructions from user-facing language. Offline validation showed this class of issue dropped 11%; a full regression run across all scenarios confirmed no new issues were introduced, and live monitoring after launch confirmed the improvement held.

Case Two: Swapping the Model Tanked the Score

When Gemini 3.5 Flash launched, DoorDash's agent was running on Claude Sonnet 4.6. Flash's benchmark numbers suggested it could be faster, and the team wanted to switch over to cut latency — but swapping the backbone model is a high-risk change, and they needed to confirm quality hadn't dropped before shipping it.

Plugged Flash into offline evals — score dropped sharply
→
Evals pinpointed the real cause: a formatting compatibility issue
→
After a targeted fix, score matched Sonnet

What the evals uncovered was a formatting compatibility problem, not a capability gap: Flash formatted some tool parameters differently than Sonnet did — for example, passing a JSON object somewhere a string was expected; and some conventions baked into the system prompt that Sonnet could infer on its own, Flash couldn't pick up. The fix was equally targeted: on one side, deterministic error-correction logic was added to tool inputs, so malformed parameters get corrected rather than the call simply being dropped; on the other, conventions that were previously left implicit in the prompt were spelled out explicitly — for instance, explicitly requiring the exact store name as given in the data, with no rephrasing allowed. After the fix, a re-run of the evals matched Sonnet's score, within the noise margin of the eval system itself. After launch, tracking live quality and engagement metrics showed latency down 35% with no drop in quality.

8Reusability

What This System Delivers Beyond Ask DoorDash

The value of this architecture isn't confined to the Ask DoorDash feature alone.

Business logic living in a shared MCP tool layer, instead of being hardcoded into prompts, means the same search, cart, and inventory tools can be picked up directly by any other team at the company building AI features. Every time the backend service is upgraded, all the agents built on top of it automatically benefit, without each team having to reintegrate separately.

Memory is designed as an independent tool layer, not a feature that belongs to any one agent. If one agent learns during a shopping conversation that "this household is fully vegetarian," other agents — reservations, delivery recommendations, whatever — can immediately use that fact, without every team having to re-solve extraction, dedup, and retrieval on their own.

Automated evals compressing regression testing from 6 hours to 20 minutes means model or prompt changes can be validated in tens of minutes. A high-risk move like "swap the backbone model" can pass through a low-risk offline environment first, before ever being exposed to real users.

Cart edits changing versioned objects directly, without a round trip through the AI model, is an approach to cutting end-to-end latency that doesn't depend on the model itself getting faster — a pattern directly transferable to any "AI plus real-time inventory or pricing" application.

9Production Numbers

What the Production Data Actually Says

To close out, a set of hard numbers showing the real scale of this system's effects today. All figures below are DoorDash's own self-reported data from a 7-day production window, not a third-party audit.
Memory-related
24%
Relative increase in checkout conversion for memory-backed grocery conversations
17%
Relative increase in grocery basket size
7%
Relative decrease in conversation turns for grocery scenarios
15%
Relative increase in restaurant recommendation conversion for open-ended queries
33%
Relative decrease in the odds of the agent misreading user intent, with memory support
Eval-related
2,000+/day
Eval scenarios the framework now runs automatically per day, versus roughly 1 piece of employee feedback before launch
+8 points
Increase in agent quality score after the eval system launched
6h → 20min
Time needed for a full regression test, from manual to automated
35%
Latency reduction after migrating from Claude Sonnet 4.6 to Gemini 3.5 Flash, while holding quality steady
Experience-related
5x
Per co-founder Andy Fang, building a cart from a single prompt is roughly 5x faster than doing it manually
<2 min
Per Andy Fang, the time it takes to complete building a cart
Building a good AI agent is already hard. Knowing whether it's actually good is harder.Raghav Saboo, Head of Recommendations and Search, DoorDash
Sources: DoorDash's engineering blog trilogy "Building DoorDash Assistant" (published June-July 2026) and an InfoQ report summary dated July 13, 2026. Production figures cited — conversion rates, basket size, eval scale — are DoorDash's own self-reported results from a 7-day production window, not independently audited.
Source
DoorDash Engineering BlogDoorDash Engineering Blog·Read the source
↑ End of article
✓ This article is free to read in full

Members can copy or download the full Markdown, and let their AI subscribe and ask.

Read the original ↗
📮 New explainers, straight to your inbox

Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.