DEV Community

Cover image for DoorDash’s Coding Interview Lets You Use AI. Here’s My 60-Minute Practice Plan.
Emily Woods
Emily Woods

Posted on Originally published at Medium Fully Autonomous

DoorDash’s Coding Interview Lets You Use AI. Here’s My 60-Minute Practice Plan.

One small project, a running clock, and a way to show that you understand the code your assistant helped you write.

An hourglass beside a laptop with a small code diff. AI is allowed, but the clock still runs.

One change you can explain is a useful place to start.

Being allowed to use AI in a coding interview sounds like the moment you can finally relax. Then you remember that someone will be watching you decide what to ask it, which changes to accept, and what to do when the result looks convincing but behaves strangely.

Honestly, that last part deserves its own practice session.

Imagine reaching minute forty with a beautifully reorganized project and no clear explanation for why a refund request landed in the wrong queue. Your assistant has been very busy. Unfortunately, so has the clock.

I prefer a preparation plan that makes this situation visible while there is still time to learn from it. So let’s spend an hour making one small change, following the consequences, and leaving enough evidence that another engineer can understand what happened.

First, what DoorDash actually described

In its March 2026 engineering interview announcement, DoorDash described replacing traditional coding rounds with a 60-minute AI-assisted working session. Candidates work in their own development environment, use integrated AI tools, and contribute to a supplied project.

Its evaluation includes getting oriented, checking AI output, debugging, controlling scope, and explaining tradeoffs. Completing every task is less important than demonstrating good judgment, although speed still matters.

That gives us something much more useful to prepare for than a vague instruction to get better at prompting.

I am trying to write to focus on that engineering format.

Follow the instructions for your particular round and confirm tool permissions with your recruiter, because permission in one session does not automatically apply to the rest of an interview loop.

The schedule below is my proposed rehearsal, not DoorDash’s official agenda or a question I claim to have received. Our support-ticket example is an original practice project.

Five practice stages across sixty minutes: orient, define scope, implement and review, check behavior, and hand off.

Use the time boxes as checkpoints, then adjust when the work gives you a reason.

Give yourself a project small enough to understand

Before starting the timer, choose a tiny API project that already accepts a support message, assigns a queue, and saves the ticket. Use a tutorial project you can run locally, or ask an assistant to scaffold this practice app in advance. Keep the feature change for the timed session.

We only need three pieces here.

  • An endpoint accepts a nonempty text message.

  • A classifier chooses delivery, billing, or general support.

  • A storage function records the ticket and its assigned queue.

For this exercise, an in memory store is enough. Existing validation rejects empty or whitespace only messages. We are routing requests to human teams, so nothing in this app actually issues a refund.

Let the starting classifier be deliberately ordinary Python.

def classify(text):
    message = text.casefold()
    if 'order' in message:
        return 'delivery'
    if 'payment' in message:
        return 'billing'
    return 'general'

Our new requirement is to send messages containing refund to a dedicated refunds queue. That rule should take priority even when the same message contains order or payment. Everything else keeps its existing behavior.

Yes, the rule is intentionally simple. The interesting work is discovering where it belongs, handling overlapping conditions, and checking that the saved result matches the decision.

Minutes 0–8 are for finding your way through one request

Start the project and send a message that already works. For example, Where is my order? should reach the delivery queue under the starting rules.

Follow that message from the endpoint into the classifier and then into storage. Read the actual functions involved, including any validation around them. Keep a tiny map beside your editor so you can return to it when the assistant suggests changing six other files.

A support message flows from POST /tickets through classify(text) into save(ticket, queue), with delivery as the expected stored queue.

Trace one existing behavior before adding another.

AI can help locate the route and its callers, but open the referenced code yourself. A confident description of a function is still only a description until you connect it to the running application.

If setup fails, capture the exact error and explain the next thing you are checking. Silently spending ten minutes asking the assistant to try again makes your reasoning difficult to follow.

By the end of this stage, aim to explain where the message enters, where its queue is chosen, and where that choice is stored. You do not need a guided tour of every folder.

Minutes 8–15 are for deciding what counts as finished

Before requesting code, write the behavior you expect. For our deliberately limited keyword exercise, these examples make the priority rule concrete.

  • refund goes to refunds.

  • payment refund also goes to refunds, because the new rule wins.

  • REFUND my order goes to refunds, regardless of capitalization.

  • payment failed still goes to billing.

  • Where is my order? still goes to delivery.

  • hello still goes to general, while blank input remains invalid at the endpoint.

Notice how much work that second example does. Without it, two people can implement different rule orders and both believe they understood the requirement.

Also decide what stays outside this change. No new dashboard, no automatic money movement, and no database migration unless the existing schema genuinely requires a new allowed queue value.

I like having one sentence that keeps the session honest. We are adding a routing rule and preserving the surrounding behavior. It gives you something specific to return to when a helpful suggestion starts growing into a renovation.

Minutes 15–35 are for a change you can review

Now give the assistant the relevant context and a bounded request. This is a reusable prompt for our practice project.

Inspect the ticket route, classifier, storage call, and existing checks. Add a refunds queue for any message containing refund, ignoring case, and give that rule priority over order and payment. Preserve existing validation and all other routing behavior. Explain which files need changing before editing. Keep the patch focused and flag any schema restriction that prevents saving the new queue.

Then read the diff as it arrives. If the assistant changes the response shape, removes validation, or introduces a new abstraction, ask what requirement made that necessary. Sometimes there is a good reason, and sometimes your little routing task has acquired a framework.

Watch what happens when the new rule comes last

Suppose the proposed code inserts the refund condition just before the final fallback.

if 'payment' in message:
    return 'billing'
if 'refund' in message:
    return 'refunds'

That looks reasonable when you try refund by itself. But payment refund hits the earlier return and never reaches the new condition.

Under our agreed requirement, the fix is to put the refund check before both existing routing checks. Now the implementation expresses the priority we decided on, rather than depending on whichever order the assistant happened to produce.

A sprawling multi-file rewrite is contrasted with a focused refund-routing change and the payment refund example that checks it.

Keep the review connected to an observable behavior.

Explain that reasoning while you work. You can say that the first matching branch returns immediately, so a message containing two keywords needs an explicit precedence rule. That is more informative than narrating every keystroke or reading the assistant’s explanation aloud.

Before moving on, search for places that assume there are exactly three queues. A classifier can return the right string while a schema, enum, or storage check rejects it. The request path you traced earlier helps you find that boundary.

Minutes 35–50 are for checking the behavior independently

Run the existing checks and add the examples you wrote before implementation. Keep their expected answers tied to the requirement, even if the assistant suggests changing them to match its output.

For the classifier, the overlapping keyword example gives us a compact check.

assert classify('payment refund') == 'refunds'
assert classify('REFUND my order') == 'refunds'
assert classify('payment failed') == 'billing'

Then go one level wider. Submit a refund message through the endpoint and inspect the stored ticket. Confirm that the response and persisted queue agree. A unit check of the classifier cannot establish that the endpoint calls it correctly or saves its result.

Try a blank message through that same endpoint, too. It should still be rejected under our starting contract. Sending it directly to the classifier would check a different boundary, because validation belongs to the route in this example.

Keep one awkward message in your pocket

Try I do not want a refund. Our substring rule sends it to refunds, even though a person reads the intent differently.

This is where you can show judgment without turning the session into an NLP project. The implementation follows the simplified rule, but the rule has a product limitation. Explain that distinction and ask whether the requirement should change.

If it should, agree on the revised behavior before editing again. If it should not, record the limitation and keep the scope intact. In production, a structured category field or a more carefully evaluated classifier might be appropriate, but neither appears for free because we noticed an awkward sentence.

After this rehearsal, a different task can reveal whether the review habit transfers. Try an AI-assisted cache review exercise and choose a case where two plausible implementations produce different answers. The point is to practice defending the expected behavior again.

Minutes 50–60 are for an explanation someone else can use

Protect a little time for the handoff. Show a normal request, an overlapping-keyword request, and the saved result. Keep the relevant code visible so your explanation has something concrete behind it.

Then write four short notes that describe the change, the evidence, the tradeoff, and the next step. For this practice project, the handoff can fit on a notebook page.

A handoff notebook records the refund priority change, a checked input, the limits of keyword matching, and the next improvement.

Use this as a handoff template after checking your own implementation.

If part of the task is unfinished, describe exactly what remains and how you know. Perhaps the classifier checks pass but storage still rejects the new queue value. That is a useful, specific state of the work; saying that the feature is basically done hides the remaining problem.

Leave a clear account of what AI contributed and which decisions you made. Owning the result includes being able to explain the boundaries of your evidence.

Make the next rehearsal slightly less comfortable

For another attempt, ask a friend to choose one small change without giving you the implementation. They might introduce a new queue, change rule precedence, or require a reason code alongside the chosen queue.

Keep the same hour, but stop trying to reproduce the exact solution from this article. Your useful practice is the sequence of decisions that gets you from an unfamiliar request to behavior you can demonstrate.

Afterward, look for where your time actually went. Did you understand the project before editing? Did the patch grow beyond the requirement? Could you explain a failing example before asking for a fix? Choose the weakest moment and rehearse that part again.

I find this a much more useful ambition than sounding impressive every minute. You can be curious, ask for clarification, catch a mistake, and still leave someone confident that you understand the work.

AI may help you write the change quickly. Your job is to leave the next engineer with a change they can trust for clearly stated reasons.

~ Emily

Top comments (0)