← DoorDash Interview Insights

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

Senior
May 2026

Summary

System design round at DoorDash for a payments-adjacent service role. Two meaty architecture questions, both requiring you to think about real production failure modes rather than just textbook answers. Left feeling like I could've gone deeper on the storage trade-offs.

Questions Asked (2)

Q1

If an upstream service your system depends on suddenly starts responding very slowly, how do you keep your own service within its latency SLA?

System DesignTechnical Trade-offs
Author's notes

I jumped straight to circuit breakers and the interviewer seemed fine with that, but I think I undersold the timeout strategy piece.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by acknowledging the problem and framing it as a resilience and latency management challenge. Then walk through a layered defense strategy: detection, isolation, degradation, and fallback, while emphasizing trade-offs between consistency and availability. Conclude with how you'd validate and iterate on the solution.

Pro tip: Mention that you'd set aggressive timeouts and use circuit breakers to fail fast, but also highlight the importance of monitoring and alerting on upstream latency to detect issues before they impact your SLA. This shows you think proactively, not just reactively.

1. Detect and Isolate

Monitor upstream latency and error rates; use timeouts and circuit breakers to quickly detect and isolate the slow dependency, preventing thread pool exhaustion.

2. Degrade Gracefully

Implement fallbacks such as cached responses, default values, or reduced functionality to maintain core service availability while the upstream is slow.

3. Control Traffic

Apply rate limiting, load shedding, or queueing to protect your service from being overwhelmed by requests waiting on the slow upstream.

4. Optimize and Adapt

Consider asynchronous calls, parallel requests, or batching to reduce the impact of upstream latency; dynamically adjust timeouts based on observed performance.

5. Validate and Iterate

Test the solution under load, measure impact on SLA, and continuously refine based on monitoring and feedback.

Key Points to Mention

  • Timeouts and circuit breakers to fail fast and prevent cascading failures
  • Fallback strategies: cached data, default responses, or degraded functionality
  • Load shedding and rate limiting to protect your service
  • Asynchronous processing or parallel calls to reduce latency impact
  • Monitoring and alerting on upstream latency to detect issues early
  • 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.

Q2

For a service that tracks order state and calculates payment data, how do you decide between Redis, a relational database, or something else? Walk through the trade-offs and what you'd actually recommend.

System DesignTechnical Trade-offsData Modeling
Author's notes

This one tripped me up more than I expected.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the access patterns and consistency requirements for order state and payment data, then compare Redis and relational databases against those needs. Recommend a hybrid approach: a relational database as the source of truth for orders and payments, with Redis for caching and high-speed reads where appropriate.

Pro tip: Emphasize that payment data demands ACID transactions and durability, which Redis alone cannot guarantee; use Redis only for non-critical, read-heavy paths like order tracking dashboards, and always fall back to the database for writes.

1. Clarify Requirements

Ask about read/write ratios, latency SLAs, consistency needs (e.g., strong vs eventual), and data volume. Identify that order state and payment data are critical and require durability and transactional integrity.

2. Evaluate Redis

Discuss Redis strengths: in-memory speed, sub-millisecond latency, and support for simple data structures. Note weaknesses: limited durability (even with AOF), no multi-key ACID transactions, and higher cost per GB for large datasets.

3. Evaluate Relational Database

Highlight relational DB strengths: ACID compliance, strong consistency, mature tooling, and support for complex queries and joins. Acknowledge potential bottlenecks: vertical scaling limits and higher latency under heavy read load.

4. Consider Hybrid and Alternatives

Propose a hybrid: relational DB as source of truth for orders/payments, Redis as a cache for read-heavy endpoints (e.g., order status lookups). Mention alternatives like NewSQL (Spanner, CockroachDB) if global scale and strong consistency are needed.

5. Make a Recommendation

Recommend starting with a relational database (e.g., PostgreSQL) for core order and payment data, adding Redis for caching and session management. Plan for scaling via read replicas, sharding, or migrating to NewSQL if needed.

Key Points to Mention

  • ACID transactions and durability for payment data
  • Redis persistence limitations (RDB/AOF) and risk of data loss
  • Read-heavy vs write-heavy access patterns and caching strategy
  • Latency requirements and SLAs for order tracking
  • Scalability options: read replicas, sharding, NewSQL databases
  • Cost implications of in-memory storage vs disk-based storage

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