← Dropbox Interview Insights

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

SeniorPrefer not to say
May 2026

Summary

Dropbox system design round focused entirely on file processing APIs, starting simple and then getting progressively harder. Two-part question that felt like a real engineering conversation more than a gotcha session.

Questions Asked (2)

Q1

Design a synchronous REST API for processing a list of files, where the client submits file IDs and gets back results for all of them in a single response. Include request/response format and high-level backend components.

API & IntegrationsSystem DesignTechnical Trade-offs
Author's notes

Started with POST /processFiles taking a JSON array of file IDs, returns per-file results with status and any output or error.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (file count limits, file sizes, timeout, partial failure handling) and then propose a synchronous REST endpoint that accepts a list of file IDs and returns a single response with per-file results. Outline the request/response schema, then describe the backend components (API gateway, validation, parallel processing, aggregation) and discuss trade-offs like timeouts and partial failures.

Pro tip: Acknowledge the synchronous constraint but mention that for large lists you'd need pagination or async patterns; showing awareness of limits demonstrates maturity. Also, define a clear error contract per file so clients can handle partial failures gracefully.

1. Clarify requirements and constraints

Ask about expected number of file IDs, file sizes, processing time, timeout limits, and whether partial success is acceptable. This shapes the design and shows you think before coding.

2. Define the REST endpoint and request/response format

Propose a POST endpoint like /process-files that accepts a JSON body with an array of file IDs. Define a response with an array of results, each containing file ID, status, and either data or error.

3. Outline backend components and flow

Describe the API layer (validation, auth), a processing orchestrator that fans out requests to a file service or worker pool, and an aggregator that collects results. Mention parallel processing with bounded concurrency.

4. Address error handling and partial failures

Explain how to handle individual file failures without failing the whole request, using per-file status codes and error messages. Discuss timeouts and how to avoid blocking indefinitely.

5. Discuss trade-offs and scalability

Highlight limitations of synchronous processing for large lists and suggest alternatives like async jobs or pagination. Mention idempotency, rate limiting, and monitoring.

Key Points to Mention

  • Request/response schema with per-file results and error details
  • Parallel processing with bounded concurrency to avoid resource exhaustion
  • Timeout handling and partial failure semantics
  • Idempotency and retry safety for file processing
  • Scalability limits of synchronous APIs and when to switch to async
  • Validation, authentication, and rate limiting at the API layer

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

Q2

Now assume file processing can take several minutes and the list could be large. Redesign the system to handle this asynchronously, including job submission, status tracking, result retrieval, idempotency, and reliability across crashes and restarts.

System DesignTechnical Trade-offsData Modeling
Author's notes

This is where it got interesting.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design an asynchronous job processing system with a queue, worker pool, and persistent job store. Focus on idempotency, status tracking, and crash recovery, and discuss trade-offs between consistency, latency, and cost.

Pro tip: Use idempotency keys and a state machine for job status to handle retries and crashes gracefully; this shows you understand real-world reliability concerns beyond just happy-path design.

1. Clarify Requirements and Scale

Ask about expected file sizes, number of files, processing time, concurrency, and SLA for job completion. Determine if results need to be stored and for how long.

2. High-Level Architecture

Propose a system with an API layer for job submission and status, a message queue (e.g., SQS, Kafka) for decoupling, and a pool of workers for processing. Include a database for job metadata and a blob store for results.

3. Job Lifecycle and Idempotency

Define job states (e.g., PENDING, PROCESSING, COMPLETED, FAILED) and transitions. Use idempotency keys to ensure duplicate submissions don't create multiple jobs. Workers should check job status before processing to avoid duplicate work.

4. Reliability and Crash Recovery

Ensure jobs are persisted before enqueueing. Use visibility timeouts or acknowledgments so failed workers don't lose jobs. Implement retries with exponential backoff and dead-letter queues for poison messages.

5. Status Tracking and Result Retrieval

Provide APIs for clients to poll job status and retrieve results. Store results in a durable store (e.g., S3) and return pre-signed URLs. Consider push notifications (webhooks) for completion.

Key Points to Mention

  • Idempotency keys to deduplicate job submissions and ensure exactly-once processing semantics.
  • State machine for job status with atomic transitions to handle concurrent updates and crashes.
  • Message queue with at-least-once delivery and worker acknowledgment to prevent job loss.
  • Retry policies with exponential backoff and dead-letter queues for failed jobs.
  • Persistent storage for job metadata and results, with appropriate indexing for status queries.
  • Trade-offs between consistency (e.g., strong vs eventual) and availability/latency in status tracking.

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