DoorDash virtual onsite has been approved; the difficulty level was average.
Doordash Phone Screen and Virtual Onsite Interview 2025
USA | DoorDash Debugging Onsite
[USA] DoorDash Code Craft Round
Midlevel SWE RoleDoordash System Design Interview
7 more experiences below
Summary
I had a virtual onsite interview with DoorDash where the difficulty level was average. The interview process included a branding round, system design, and debugging questions. I managed to write a solution for the Trie tree implementation but faced challenges with the codebase and follow-up questions.
Full Experience
My DoorDash virtual onsite interview has been approved, and the difficulty level was average. The hiring manager was very nice and kept asking follow-up questions about the impact. In the branding round, I worked on a file system and had to implement a Trie tree. I talked a bit about OOP fundamentals. I managed to write the solution with some difficulty — the codebase was quite large and I didn’t write tests. Follow-up questions: how to handle multithreading, and how to serialize.
The system design round dug deep into my recent project. The system design topic was messaging. They asked follow-up questions about the schema and how messages are sent.
The debugging round was also a high-frequency question (felt like this was the question). The follow-ups didn’t seem to have a single standard answer — I talked about multithreading, edge cases, and monitoring.
Interview Questions (3)
I worked on a file system and had to implement a Trie tree. I talked a bit about OOP fundamentals. I managed to write the solution with some difficulty — the codebase was quite large and I didn’t write tests.
The system design topic was messaging. They asked follow-up questions about the schema and how messages are sent.
The debugging round was also a high-frequency question (felt like this was the question). The follow-ups didn’t seem to have a single standard answer — I talked about multithreading, edge cases, and monitoring.
Summary
I recently went through the phone screen and virtual onsite interview process at Doordash for a position in 2025. The interviews covered a range of topics including data structures and algorithms, system design, coding craft, debugging, and behavioral questions.
Full Experience
I had my interview experience with Doordash, encompassing both a phone screen and a virtual onsite for a 2025 role.
During the Phone Screen, I encountered a question that required me to build an adjacency map for a given tree structure. Following that, I had to determine the time it would take to 'flood' the entire tree, which was an interesting graph traversal problem.
The Virtual Onsite was quite comprehensive, broken down into several distinct rounds:
- Code Craft: This session involved a coding question centered around dasher pay. I was tasked with structuring the code to effectively solve the problem and then demonstrate its execution.
- Debugging: I was presented with a scenario involving a broken round robin network router. My challenge was to identify and fix the issues to ensure all the test cases ran successfully.
- System Design and Domain Knowledge: This combined session had two parts. For Domain Knowledge (DK), I discussed a significant project I had worked on previously. In the System Design (SD) portion, I was asked to design a food review application from scratch.
- Hiring Manager Chat: This was a discussion-based round where I answered questions about my past professional experiences and the key deliverables I was responsible for in previous roles.
Interview Questions (2)
Given a tree, the task is to first construct its adjacency map. Subsequently, determine the minimum time required to 'flood' or propagate information across the entire tree, implying a traversal mechanism where nodes are processed sequentially or in waves.
Design a scalable and robust food review application. This typically involves considering aspects such as user authentication, submitting and viewing reviews, rating systems, searching for restaurants, data storage (reviews, restaurants, users), image uploads, and potential features like social sharing or recommendation engines.
Summary
I had an onsite debugging interview at DoorDash, where I focused on identifying and fixing logic bugs within a mock Dasher Assignment Service, followed by discussions on test cases and optimization.
Full Experience
I recently went through an onsite interview with DoorDash, which was structured around a debugging exercise. The session began with a 5-minute introduction, followed by a 50-minute hands-on debugging task, and concluded with 5 minutes for Q&A. My primary task was to analyze a main.py file that contained the business logic for a mock Dasher Assignment Service, designed to assign dashers to deliveries. The goal was to pinpoint logic bugs, identify bad design and coding practices, and then improve the codebase, with a strong emphasis on resolving logic issues first. I was provided with several interfaces: User, Dasher, RemoteDeliveryRecordingService (a stubbed logging service), and DeliveryAssignmentService. The DeliveryAssignmentService was the central piece, containing functions like addDasher, pickKey, adjustMap, and pickDasher, which all had subtle but critical logic flaws. After successfully identifying and rectifying these bugs, the interviewer engaged me in a follow-up discussion about additional test cases and how I might further optimize my corrected solution beyond the initial broken implementation.
Interview Questions (1)
You are presented with a single main.py file (or its equivalent in your chosen programming language) which encapsulates the business logic for a mock Dasher Assignment Service, responsible for assigning dashers to deliveries. Your task is to identify and correct logic bugs, as well as bad design and coding practices, with a priority on fixing logic bugs. You are given the following interfaces to work with:
Userclass: Contains anIDattribute; you need to instantiate with an ID.Dasherclass: A specialized, lightweight wrapper around theUserclass.RemoteDeliveryRecordingService: A stubbed logging service. While in a real production environment you would query logs from a storage service (e.g., Splunk, DataDog), for this exercise, you are not required to query log statements. It serves as a placeholder for potential extension. Stubbed functions include:recordDasherAdd(dasherId, timestamp)andrecordDasherPicking(dasherId, timestamp).DeliveryAssignmentService: The primary code component. Its constructor takes an instance ofRemoteDeliveryRecordingService. The functions with existing implementations (which require debugging) are:
a. addDasher(id): Takes an ID and creates a Dasher object to add to a pool.b. pickKey(): A random integer function that selects a random ID from the pool.c. adjustMap(key): A helper function that attempts to process the pool after a dasher has been picked.d. pickDasher(): CallspickKey(), records the picked dasher usingRemoteDeliveryRecordingService, and then callsadjustMap().
Summary
I successfully navigated the Code Craft round for a Midlevel SWE role at DoorDash, which focused on a collaborative problem to design and implement Dasher payout logic within a new Payments Service microservice. The experience was positive, and I passed the round.
Full Experience
I recently had my Codecraft round for a Midlevel SWE position at DoorDash. This wasn't a typical LeetCode-style problem; instead, it was a collaborative coding exercise with the interviewer. I found the discussion incredibly engaging, and the interviewer was genuinely present and interested in my thought process, which I really appreciated. I successfully passed this round.
Interview Questions (3)
As part of migrating from a monolith to a micro-service architecture, my team was tasked with building a new Payments Service, specifically the Dasher payout logic. My project involved creating an API with a POST /payout endpoint that takes dasherId as input and outputs the dollar amount the dasher gets paid. This endpoint needed to request delivery information from a separate upstream service (which could be mocked for the exercise).
The payment model's first version was based on the time a Dasher spends fulfilling each order. Given a sequence of order activities for a Dasher on a given day, I needed to calculate the pay based on these rules:
- Base pay rate: $0.3 per minute
- Multi-order pay rate: # ongoing deliveries * base pay rate
What would be the edge cases you can think of in your implementation of the Dasher payout logic? Discuss and correct for those, and test your code.
What would happen if the upstream service (for delivery information) had high latency? What would you do to mitigate this?
Summary
I recently had a system design interview with Doordash, where I was tasked with designing a system for customer reviews and rewards based on review quality.
Full Experience
My interview with Doordash focused on a challenging system design problem. I was asked to design a comprehensive system for customers to submit reviews on ordered food items and a mechanism to reward them based on the quality of their contributions. During the discussion, I outlined the high-level architecture, including user-facing components, backend services for review submission and processing, and a sophisticated system for evaluating review quality to disburse monetary rewards. I considered various aspects like data storage for reviews, user profiles, and reward transactions, along with API design for different functionalities. We also touched upon scalability considerations for handling a large volume of reviews and ensuring the fairness and accuracy of the reward system. It was an insightful and engaging session.
Interview Questions (1)
Design a system that allows Doordash's customers to add reviews on ordered food items and earn monetary rewards based on the quality of their reviews.
Summary
I was presented with a challenging algorithmic problem during my Doordash interview that involved navigating a city grid to calculate distances to the nearest DashMart and then identifying the DashMart serving the most customers.
Full Experience
During my recent interview with Doordash, I encountered an interesting algorithmic challenge. The main problem revolved around a city map represented as a grid, where I had to determine the shortest distance from various given locations to their closest DashMart. This required careful consideration of open and blocked roads, suggesting a graph traversal algorithm like Breadth-First Search (BFS). A follow-up then extended this by introducing customers and asking to find the DashMart that would serve the maximum number of customers based on proximity. This entire scenario tested my ability to model real-world problems using data structures and algorithms.
Interview Questions (2)
A DashMart is a warehouse run by Doordash that houses items found in convenience stores, grocery stores, and restuarants. We have a city with open roads, blocked-off roads, and DashMarts.
City Planners want you to identify how far a location is from its closest DashMart. You can only travel over open roads (up, down, left, right). Locations are given in [row, col] format.
Example 1
[ ['X', ' ', ' ', 'D', ' ', ' ', 'X', ' ', 'X'],
['X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X'],
[' ', ' ', ' ', 'D', 'X', 'X', ' ', 'X', ' '],
[' ', ' ', ' ', 'D', 'X', 'X', ' ', 'X', ' '],
[' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X'],
[' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X'] ]
Such that:
' 'represents an open road that you can travel over in any direction (up, down, left, or right)'X'represents a blocked road that you cannot travel through.'D'represents a DashMart.
locations = [[200, 200], [1, 4], [0, 3], [5, 8], [1, 8], [5, 5]]
Return a list of the distances from a given point to its closest DashMart.
Expected Answer: In this case, you should return [-1, 2, 0, -1, 6, 9]
Find the DashMart that can serve the maximum number of customers. Customers will be served by their closest DashMart. Customers are represented by 'C' in the city plan.
Summary
I recently interviewed at DoorDash for a backend position and was ultimately rejected. The process involved system design, hiring manager discussion, debugging, and a coding round, but I left unsatisfied due to perceived misalignments in expectations.
Full Experience
I recently went through the DoorDash interview process for a backend role and wanted to share my experience. Unfortunately, I was rejected after completing all rounds.
Round 1: System Design + Domain Knowledge
The problem I faced was centered around an Ads Click Aggregator. The interviewer was from the Data Engineering team. I found this conversation quite challenging, partly because the interviewer seemed relatively new to conducting such design interviews. The flow felt a bit off, and the discussion focused on areas I didn't feel were core to the problem, making it hard to properly showcase my system design skills.Round 2: Hiring Manager Discussion
This was a straightforward round, involving standard behavioral questions.Round 3: Debugging
In this round, I was given a piece of code that contained 3–4 bugs, which I successfully fixed. The interviewer then followed up with questions about optimizations, which I was also able to address.Round 4: Code Craft
I had anticipated this round would evaluate my understanding of OOP principles, class creation, and overall code structure. However, the interviewer seemed solely concerned with the problem-solving logic and getting a running code solution.Overall, I left feeling unsatisfied with the interview process, primarily due to a lack of alignment in expectations and how some of the interviews were conducted.
Interview Questions (2)
Design a system for an Ads Click Aggregator. This round involved discussions around system architecture, data processing, and handling scale for aggregating clicks on advertisements.
Given a piece of code containing 3-4 bugs, identify and fix them. Follow-up questions focused on optimizing the corrected code.
Summary
This post describes a Doordash phone interview experience, detailing a specific algorithmic problem called 'Closest DashMart' which involves finding the distance to the nearest DashMart in a grid.
Full Experience
Closest DashMart
Problem Statement A DashMart is a warehouse run by DoorDash that houses items found in convenience stores, grocery stores, and restaurants. We have a city with open roads, blocked-off roads, and DashMarts.
City planners want you to identify how far a location is from its closest DashMart.
You can only travel over open roads (up, down, left, right).
Locations are given in [row, col] format.
Example 1 [
0 1 2 3 4 5 6 7 8
['X', ' ', ' ', 'D', ' ', ' ', 'X', ' ', 'X'], # 0
['X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X'], # 1
[' ', ' ', ' ', 'D', 'X', 'X', ' ', 'X', ' '], # 2
[' ', ' ', ' ', 'D', ' ', 'X', ' ', ' ', ' '], # 3
[' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X'], # 4
[' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X'] # 5
]
' ' represents an open road that you can travel over in any direction (up, down, left, or right). 'X' represents an blocked road that you cannot travel through. 'D' represents a DashMart.
list of pairs [row, col]
locations = [
[200, 200],
[1, 4],
[0, 3],
[5, 8],
[1, 8],
[5, 5]
]
answer = [-1, 2, 0, -1, 6, 9]
Provided:
- city: char[][]
- locations: int[][2]
Return:
- answer: int[] Return a list of the distances from a given point to its closest DashMart.
Interview Questions (1)
A DashMart is a warehouse run by DoorDash that houses items found in convenience stores, grocery stores, and restaurants. We have a city with open roads, blocked-off roads, and DashMarts.
City planners want you to identify how far a location is from its closest DashMart.
You can only travel over open roads (up, down, left, right).
Locations are given in [row, col] format.
Example 1 [
0 1 2 3 4 5 6 7 8
['X', ' ', ' ', 'D', ' ', ' ', 'X', ' ', 'X'], # 0
['X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X'], # 1
[' ', ' ', ' ', 'D', 'X', 'X', ' ', 'X', ' '], # 2
[' ', ' ', ' ', 'D', ' ', 'X', ' ', ' ', ' '], # 3
[' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X'], # 4
[' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X'] # 5
]
' ' represents an open road that you can travel over in any direction (up, down, left, or right). 'X' represents an blocked road that you cannot travel through. 'D' represents a DashMart.
list of pairs [row, col]
locations = [
[200, 200],
[1, 4],
[0, 3],
[5, 8],
[1, 8],
[5, 5]
]
answer = [-1, 2, 0, -1, 6, 9]
Provided:
- city: char[][]
- locations: int[][2]
Return:
- answer: int[] Return a list of the distances from a given point to its closest DashMart.
Summary
I had a phone screen with Doordash for an E4 role in USA and was rejected. The interview included a problem focused on maximizing calories given a budget constraint on dollar amounts.
Full Experience
Maximize calories when calories and dollar amounts were given. Dollar amount cannot exceed given Allowed amount.
Interview Questions (1)
Maximize calories when calories and dollar amounts were given. Dollar amount cannot exceed given Allowed amount.
Summary
I had a phone screen with Doordash for a Software Engineer role where I was asked a modified version of 'Binary Tree Maximum Path Sum'. Despite solving most of it, I missed a corner case and was ultimately rejected.
Full Experience
Hi all, I had my phone screen recently with Doordash.
Question: https://leetcode.com/problems/binary-tree-maximum-path-sum/description/
He called leaf nodes "live nodes" and wanted the maximum sum of a path that starts and ends at a live node. I solved it but missed a corner case.
I had to run my code so make sure you know syntax for setting up a running environment, like create a TreeNode, and set the left and right nodes etc.
Got rejected in the end
Interview Questions (1)
Summary
I had a phone screen for an E4 role at Doordash in the USA. I was rejected after the interview, which focused on a modification of the LRU cache problem.
Full Experience
Modification of LRU cache.
Alice, an engineer, notices that a database for dasher assignments is slowing down due to the number of dashers and entries in the database. She notices that recently assigned dashers are more likely to be looked up and would like to cache these dashers so that lookup is faster.
This database stores the most recent delivery that a dasher made (looking up a dasher returns a single delivery id that they were last assigned). Specifically, she would like the cache to support the following functions:
put(dasher_id: Int, delivery_id: Int). Adds the delivery that a dasher is working into the cache. If the dasher exists in the cache, then the delivery is updated (and this key, value pair is now the most recently used pair)
get(dasher_id: Int). Gets the most recent delivery for a dasher. Returns -1 if the dasher_id is not in the cache
The server only has space to store capacity dasher’s information in the cache. Alice decides that only the most recently updated dashers should be stored in the cache (ones that had put called most recently). When the cache goes above capacity, the oldest entry is removed from the cache. The cache is initialized with the following function:
init(capacity: Int). Initializes the cache with specified capacity
Interview Questions (1)
Alice, an engineer, notices that a database for dasher assignments is slowing down due to the number of dashers and entries in the database. She notices that recently assigned dashers are more likely to be looked up and would like to cache these dashers so that lookup is faster. This database stores the most recent delivery that a dasher made (looking up a dasher returns a single delivery id that they were last assigned). Specifically, she would like the cache to support the following functions:
put(dasher_id: Int, delivery_id: Int). Adds the delivery that a dasher is working into the cache. If the dasher exists in the cache, then the delivery is updated (and this key, value pair is now the most recently used pair)
get(dasher_id: Int). Gets the most recent delivery for a dasher. Returns -1 if the dasher_id is not in the cache
The server only has space to store capacity dasher’s information in the cache. Alice decides that only the most recently updated dashers should be stored in the cache (ones that had put called most recently). When the cache goes above capacity, the oldest entry is removed from the cache. The cache is initialized with the following function:
init(capacity: Int). Initializes the cache with specified capacity
Summary
I interviewed with DoorDash for a Staff Software Engineer role in February 2024, completing a phone screen and four virtual onsite rounds covering data structures, algorithms, system design, and behavioral questions. Despite largely performing well, I was ultimately rejected due to failing to solve a specific follow-up question, which left me feeling incredibly disheartened.
Full Experience
Phone Screen
My interview journey with DoorDash for a Staff Software Engineer position began in February 2024 with a phone screen. The problem presented was a variation on the LeetCode problem 'Swim in Rising Water'. I managed to successfully navigate this round.
Virtual Onsite
Round 1: Data Structures & Algorithms
The first onsite round involved a problem asking for the maximum path sum, with the specific constraint that the path must connect only leaf nodes. I chose an iterative approach, as I often find formulating recursive solutions challenging. Although my iterative code was about twice the length, it passed all test cases. The interviewer then posed a follow-up: evaluating the path between any two 'active' nodes, where nodes would be flagged as active during creation. Unfortunately, I was unable to solve this follow-up question correctly.
Round 2: Data Structures & Algorithms
The second round featured a problem conceptually similar to 'Making A Large Island'. I initially solved it correctly using a Breadth-First Search (BFS) approach. The interviewer then requested a Depth-First Search (DFS) solution, which I also provided successfully.
Round 3: System Design
This round was focused on designing an online coding platform. I made sure to clarify all requirements thoroughly, discussed various tradeoffs, and maintained clear communication throughout the design process. I was pleasantly surprised when the interviewer expressed satisfaction with my design and commended my approach at the end, which gave me a nice confidence boost.
Round 4: Behavioral
The final round was a behavioral interview, primarily using the STAR (Situation, Task, Action, Result) pattern. It turned out to be a very engaging conversation, largely because the manager had extensive prior experience in my specific domain and showed genuine interest in my background and career path.
Result & Reflection
Despite my efforts, I received a rejection. The feedback explicitly mentioned the follow-up question from Round 1 that I couldn't solve, which was incredibly frustrating. It feels truly disheartening that one challenging follow-up question can negate weeks of intense preparation and effort.
As an average software engineer, I've consistently found interviews to be tough, regardless of how much I prepare. Over the last decade, I've interviewed with 67 different companies and only managed to succeed three times. My current job situation, marked by unfulfilled promises and a difficult work environment, combined with the pressures of family responsibilities, makes this ongoing job search particularly grueling. I'm also on a visa, which limits my options. A recent disappointing performance review without a raise was the final straw that propelled me back into intense interview preparation. My nights and weekends have blurred into endless study, and my social life has vanished. However, I am not giving up until I find a better opportunity; I strongly believe I deserve more, and my hard work will eventually pay off.
Interview Questions (6)
A coding problem similar to LeetCode's 'Swim in Rising Water' but featuring a slight, unspecified twist on the original problem statement. (Specific twist not detailed.)
Given a tree or graph structure, find the maximum path sum where the path is strictly confined to connecting only leaf nodes.
As a follow-up to the 'Max Path Sum with Leaf Nodes Only' problem: given a graph where certain nodes are designated as 'active' (indicated by a flag passed during node creation), evaluate the path between any two active nodes.
A problem similar to LeetCode's 'Making A Large Island' (Problem 827), where the objective is to change a single '0' to a '1' in a grid of 0s and 1s to connect existing islands, thereby creating the largest possible island.
Design a scalable and robust online platform for coding. This involves considerations for core functionalities such as code editing, compilation/execution, real-time collaboration, user management, and system architecture. The specific scope and features would need to be clarified with the interviewer during the discussion.
Standard behavioral interview questions designed to assess past experiences and competencies, typically requiring answers structured using the STAR (Situation, Task, Action, Result) method.
Preparation Tips
Despite a long history of struggling with interviews and significant family responsibilities, I dedicated myself to rigorous interview preparation. This involved sacrificing my nights and weekends to studying, which severely impacted my social life. My commitment was driven by a recent disappointing performance review and a strong belief that my persistent hard work will ultimately lead to a better opportunity.