← DoorDash Interview Insights

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

SeniorPrefer not to say
Jul 2026

Summary

System design round at DoorDash, one big question that sprawled into basically every hard distributed systems topic at once. Felt like they were stress-testing how far you could go before you started hand-waving.

Questions Asked (1)

Q1

Design a recurring donation service where users can schedule charges to a charity every 3 days. Cover the API for creating and canceling schedules, the worker that triggers each charge, async payment processor integration, idempotency on the charge path, failure handling, and how users view their donation history. Also discuss data modeling and how the system scales.

System DesignAPI & IntegrationsData Modeling
Author's notes

This one kept expanding.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design the data model and API for creating/canceling schedules. Describe the worker architecture for triggering charges, focusing on idempotency and failure handling, and finally cover history viewing and scaling considerations.

Pro tip: Emphasize idempotency and exactly-once processing by using idempotency keys and transactional outbox patterns; this shows you understand real-world payment system challenges.

1. Clarify Requirements and Scale

Ask about expected user base, donation volume, payment processor SLAs, and whether schedules can be modified. Establish assumptions for scale (e.g., millions of users, thousands of charges per second).

2. Design Data Model and API

Define entities: User, Charity, DonationSchedule, Charge, PaymentMethod. Design RESTful APIs for creating and canceling schedules, including request/response formats and error codes.

3. Design Worker and Charge Triggering

Describe a distributed scheduler (e.g., cron-based or queue-based) that polls due schedules and enqueues charge jobs. Ensure idempotency by using unique job IDs and idempotency keys with the payment processor.

4. Handle Failures and Async Integration

Outline retry logic with exponential backoff, dead-letter queues, and reconciliation with the payment processor. Discuss how to handle partial failures and notify users.

5. History Viewing and Scaling

Design an API for users to view donation history, possibly with pagination and filtering. Discuss scaling strategies: sharding by user ID, read replicas, caching, and partitioning schedules by time buckets.

Key Points to Mention

  • Idempotency keys and exactly-once processing to prevent duplicate charges
  • Transactional outbox pattern for reliable event publishing
  • Retry mechanisms with exponential backoff and dead-letter queues
  • Data model: schedules, charges, and payment methods with proper indexing
  • API design: REST endpoints for create/cancel schedule and list history
  • Scaling: sharding, partitioning by time, and using a distributed scheduler like Quartz or Temporal

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