← DoorDash Interview Insights

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

SeniorPrefer not to say
Jul 2026

Summary

DoorDash system design round, one big question about state management that sprawled into basically every frontend architecture topic imaginable. Felt like they wanted to see if I could hold a coherent opinion across ten different sub-problems at once rather than just recite library docs.

Questions Asked (1)

Q1

Compare Redux with modern frontend state and data management approaches, and design an end-to-end strategy for a React SPA that needs to consume multiple APIs, support offline viewing, pagination, optimistic updates, and error retries.

System DesignTechnical Trade-offsAPI & Integrations
Author's notes

This question is massive and they absolutely know it.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by comparing Redux with modern alternatives like React Query, Zustand, and Context API, focusing on trade-offs in complexity, caching, and server-state management. Then design a layered architecture that separates server state (React Query) from client state (Zustand/Redux), and detail how to handle offline, pagination, optimistic updates, and retries using appropriate tools and patterns.

Pro tip: Emphasize that Redux is not obsolete but should be reserved for complex client state, while server state is better managed by specialized libraries like React Query. Mention DoorDash's scale and need for reliability to justify choices like IndexedDB for offline and exponential backoff for retries.

1. Compare Redux with Modern Approaches

Discuss Redux's strengths (predictable state, dev tools, middleware) and weaknesses (boilerplate, overkill for server state). Contrast with React Query (server state, caching, retries), Zustand (lightweight client state), and Context (simple, but not for frequent updates).

2. Define State Management Strategy

Propose a hybrid approach: use React Query for server state (API data, caching, pagination, retries) and a lightweight client state manager like Zustand or Redux Toolkit for global UI state (e.g., cart, modals).

3. Design Offline and Data Persistence

Outline offline support using service workers for caching assets and IndexedDB (via localForage or Dexie) for storing API responses. Use React Query's persistence plugin to hydrate cache on load.

4. Implement Pagination and Optimistic Updates

For pagination, use React Query's infinite queries or cursor-based pagination. For optimistic updates, use React Query's onMutate to update cache immediately, with rollback on error.

5. Handle Error Retries and Synchronization

Configure retries with exponential backoff in React Query. For offline mutations, queue them in IndexedDB and replay when online, using a library like react-query-offline or custom logic.

Key Points to Mention

  • Redux vs. React Query: server state vs. client state separation
  • Offline support with service workers and IndexedDB
  • Pagination strategies: cursor-based vs. offset-based
  • Optimistic updates with rollback on failure
  • Error retries with exponential backoff and jitter
  • Data synchronization and conflict resolution when coming back online

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