← DoorDash Interview Insights

DoorDash·Software Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
Jun 2026

Summary

System design round at DoorDash focused entirely on building a pay calculation and payout system for delivery drivers. Dense problem with a lot of moving parts, and the financial correctness angle made it trickier than a typical distributed systems question.

Questions Asked (4)

Q1

Design a pay system for DoorDash drivers that ingests delivery lifecycle events, computes per-delivery earnings, and pays out drivers on a regular schedule.

System DesignData ModelingTechnical Trade-offs
Author's notes

Spent the first few minutes just listing event types (offer, accept, pickup, dropoff, cancel) and the pay components (base, per-mile, per-minute, tips, promos).

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design an event-driven pipeline that ingests delivery lifecycle events, computes earnings idempotently, and schedules payouts. Focus on data modeling for events and earnings, and discuss trade-offs around consistency, latency, and fault tolerance.

Pro tip: Emphasize idempotency and exactly-once processing to avoid double payments, and discuss how to handle late or out-of-order events gracefully—these are critical in financial systems.

1. Clarify Requirements and Scale

Ask about expected event volume, payout frequency, latency requirements, and regulatory constraints. Define what constitutes a delivery lifecycle event and how earnings are calculated (base pay, tips, promotions, adjustments).

2. Design Event Ingestion and Storage

Propose a scalable ingestion layer (e.g., Kafka) to collect events from drivers and the delivery platform. Store raw events in a durable, append-only log or data lake for replayability and auditing.

3. Compute Earnings with Idempotency

Design a stream processing job that consumes events, aggregates per-delivery earnings, and writes to a ledger. Ensure idempotency using unique event IDs and deduplication, and handle late events with watermarks or windowing.

4. Schedule and Execute Payouts

Create a payout service that reads from the earnings ledger, batches payments per driver on a schedule (e.g., weekly), and integrates with a payment provider. Include retry logic and reconciliation.

5. Address Consistency, Monitoring, and Trade-offs

Discuss consistency models (eventual vs. strong), monitoring for anomalies, and trade-offs between latency and accuracy. Cover failure recovery, audit trails, and compliance.

Key Points to Mention

  • Idempotency and exactly-once processing to prevent duplicate payments
  • Event sourcing and CQRS for auditability and replayability
  • Handling late/out-of-order events with watermarks or event-time processing
  • Data modeling: delivery events, earnings ledger, and payout records
  • Scalability and partitioning strategies for high-volume event streams
  • Trade-offs between consistency, latency, and cost in payout scheduling

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

How do you ensure correctness and auditability when doing money calculations at scale, and what consistency guarantees does your ledger need?

System DesignTechnical Trade-offs
Author's notes

This is where I actually felt decent.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scale and requirements (e.g., transaction volume, latency, regulatory needs). Then describe a ledger design that uses integer arithmetic, double-entry bookkeeping, and idempotent operations, with consistency guarantees like ACID transactions and eventual consistency for reporting. Finally, discuss auditability through immutable logs and reconciliation processes.

Pro tip: Emphasize that correctness at scale requires a combination of strong consistency for critical writes and eventual consistency for read-heavy operations, and that auditability is achieved through append-only logs and cryptographic hashing. Mention that you'd validate with property-based testing and chaos engineering.

1. Clarify Requirements

Ask about scale (transactions per second), latency requirements, regulatory constraints, and consistency needs (e.g., strong vs eventual).

2. Design for Correctness

Use integer cents, double-entry bookkeeping, idempotency keys, and ACID transactions for critical writes to prevent double-spending and ensure balance invariants.

3. Ensure Consistency

Choose strong consistency (e.g., serializable isolation) for core ledger operations, and eventual consistency for derived data like analytics, with clear boundaries.

4. Implement Auditability

Maintain an immutable, append-only log of all transactions with timestamps and actor info, and use cryptographic hashing for tamper-evidence.

5. Reconcile and Monitor

Run periodic reconciliation against external systems, set up alerts for discrepancies, and use property-based testing to validate invariants.

Key Points to Mention

  • Double-entry bookkeeping and integer arithmetic to avoid floating-point errors
  • Idempotency and exactly-once processing to handle retries safely
  • ACID transactions with serializable isolation for critical writes
  • Event sourcing or append-only logs for audit trails
  • Reconciliation processes and monitoring for discrepancies
  • Trade-offs between consistency, availability, and latency (CAP theorem)

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

How would you make event processing idempotent so duplicate delivery events don't result in drivers being paid twice?

System DesignAPI & Integrations
Author's notes

Blanked for a second.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the event flow and where duplicates can occur, then propose an idempotent consumer design using a unique event ID and a deduplication store. Emphasize transactional guarantees between deduplication and payment updates, and discuss how to handle retries and failures gracefully.

Pro tip: Mention that idempotency should be enforced at the payment service boundary, not just the event consumer, to protect against duplicates from any source. Also, highlight the importance of monitoring duplicate rates and having a reconciliation process for edge cases.

1. Clarify the event flow and duplicate sources

Ask questions to understand how events are produced, delivered, and consumed, and where duplicates might originate (e.g., at-least-once delivery, retries).

2. Design an idempotent consumer

Propose using a unique event ID (e.g., delivery ID) and a deduplication store (e.g., Redis or database) to track processed events. Ensure the check-and-set is atomic.

3. Ensure atomicity between deduplication and payment

Use a transaction or a two-phase approach to guarantee that marking an event as processed and updating driver payment happen atomically, preventing partial failures.

4. Handle failures and retries

Discuss how to handle cases where the deduplication store is unavailable or the payment update fails, including retry policies and dead-letter queues.

5. Monitor and reconcile

Mention the need for monitoring duplicate rates, alerting on anomalies, and having a reconciliation job to detect and correct any missed duplicates.

Key Points to Mention

  • Unique event ID (e.g., delivery ID) as idempotency key
  • Deduplication store with atomic operations (e.g., Redis SETNX or database unique constraint)
  • Transactional outbox pattern or two-phase commit to ensure atomicity
  • Idempotent payment API that accepts an idempotency key
  • Retry logic with exponential backoff and dead-letter queues
  • Monitoring, alerting, and reconciliation for duplicate events

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

Walk through how you'd handle a driver disputing their pay for a specific delivery.

System DesignProduct Sense & Ideation
Author's notes

Didn't see this coming as a system design question.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scenario and then walk through a systematic investigation, from data validation to resolution. Emphasize a user-centric approach while balancing technical and business constraints, and propose scalable solutions.

Pro tip: Show empathy for the driver while maintaining objectivity; mention that you'd use this as an opportunity to identify systemic issues and improve the platform, not just resolve one dispute.

1. Clarify the Dispute

Ask specific questions to understand the driver's claim: which delivery, what pay was expected vs. received, and any evidence they have. This ensures you address the right problem.

2. Gather Data

Pull relevant data from multiple sources: delivery records, GPS logs, timestamps, pay calculation rules, and any customer feedback. Verify the accuracy and completeness of the data.

3. Analyze and Identify Root Cause

Compare expected vs. actual pay, check for common issues like missing tips, incorrect distance calculation, or system errors. Determine if it's a one-off or systemic issue.

4. Resolve and Communicate

If the dispute is valid, correct the pay promptly and inform the driver. If not, explain clearly with evidence. Always communicate respectfully and transparently.

5. Prevent Recurrence

Propose improvements to prevent similar disputes: better pay transparency, automated checks, or driver education. Consider scalable solutions like ML models to detect anomalies.

Key Points to Mention

  • Data validation and integrity checks
  • Pay calculation logic (base pay, tips, promotions, distance, time)
  • Driver communication and support channels
  • Root cause analysis and systemic fixes
  • Scalability and automation (e.g., anomaly detection)
  • Metrics to track dispute rates and resolution times

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.