← Disney Interview Insights

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

SeniorPrefer not to say
Jul 2026

Summary

System design round at Disney for a data engineering role. The whole session was basically one giant pipeline design question with a bunch of follow-ups that got progressively harder. Left feeling okay about the high-level stuff but shaky on the correctness details.

Questions Asked (5)

Q1

Design an end-to-end clickstream ingestion and aggregation pipeline that handles roughly a billion events per day, covering everything from the client SDK through to the serving layer where analysts query daily aggregates.

System DesignTechnical Trade-offsData Modeling
Author's notes

This is the kind of question where you can talk for 45 minutes and still feel like you missed something.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale (1B events/day ≈ 11.6K events/sec average, with peaks), then walk through the pipeline layer by layer: client SDK, ingestion, processing, storage, and serving. Emphasize trade-offs at each stage, such as batching vs. real-time, and how you ensure exactly-once semantics, scalability, and cost-efficiency.

Pro tip: Quantify the scale early (e.g., 1B/day = ~11.6K/sec average, but design for 3-5x peaks) and discuss how you'd handle late-arriving data and reprocessing, as these are common real-world challenges that interviewers look for.

1. Clarify Requirements and Scale

Ask about event types, schema, latency requirements, data retention, and query patterns. Calculate average and peak throughput to inform design decisions.

2. Design Client SDK and Ingestion Layer

Propose a lightweight SDK that batches events and sends them asynchronously to a highly available ingestion endpoint (e.g., HTTP or gRPC). Use a message queue like Kafka or Kinesis to decouple producers and consumers, ensuring durability and backpressure handling.

3. Design Processing and Storage

Use a stream processing framework (e.g., Flink, Spark Streaming) to validate, enrich, and aggregate events in real-time or micro-batches. Store raw events in a data lake (e.g., S3) for reprocessing and aggregates in a columnar store (e.g., Redshift, BigQuery) for efficient querying.

4. Design Serving Layer and Query Patterns

Expose daily aggregates via a query service or directly through the data warehouse. Optimize for analyst queries with pre-aggregated tables, partitioning, and indexing. Consider caching for frequent queries.

5. Address Reliability, Scalability, and Trade-offs

Discuss exactly-once processing (idempotent writes, deduplication), monitoring, and cost. Compare batch vs. stream, and explain choices like partitioning keys and retention policies.

Key Points to Mention

  • Partitioning strategy (e.g., by event time and user ID) to ensure scalability and ordered processing per key.
  • Exactly-once semantics using idempotent producers and transactional writes, or at-least-once with deduplication.
  • Handling late-arriving data with watermarks and allowed lateness, and reprocessing capabilities.
  • Choice of storage: data lake for raw events (cheap, durable) and data warehouse for aggregates (fast queries).
  • Monitoring and alerting on lag, throughput, and error rates; auto-scaling ingestion and processing.
  • Cost optimization: tiered storage, compression, and choosing instance types for stream processing.

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

Q2

A user's device goes offline and syncs telemetry hours or even a day later. How do you make sure the daily aggregate stays accurate? Walk through how you'd handle late-arriving events, including what happens after the aggregate has already been finalized.

System DesignTechnical Trade-offsData Modeling
Author's notes

This tripped me up more than I expected.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements: define 'daily aggregate' (e.g., per user, per device, per metric), acceptable latency, and whether the aggregate is used for real-time dashboards or billing. Then propose a lambda architecture with a streaming layer for low-latency updates and a batch layer for corrections, using event-time processing with watermarks and a late-data handling strategy. Finally, discuss how to handle already-finalized aggregates via idempotent upserts and reconciliation.

Pro tip: Emphasize that late data is inevitable in mobile/IoT telemetry, so design for eventual consistency and make the pipeline idempotent and replayable. Mention that you'd store raw events for a retention period to allow reprocessing if business rules change.

1. Clarify requirements and constraints

Ask about the definition of 'daily aggregate', the expected volume and velocity of late events, and the tolerance for inaccuracy. Determine if the aggregate is used for real-time decisions or historical reporting.

2. Design event-time processing with watermarks

Use a stream processing framework (e.g., Flink, Spark Structured Streaming) that supports event-time processing and watermarks to handle out-of-order events. Define a watermark delay that balances latency and completeness.

3. Implement a late-data handling strategy

For events arriving after the watermark, either update the aggregate via a side output or store them in a separate late-data store for batch correction. Use idempotent writes to avoid double-counting.

4. Handle finalized aggregates with reconciliation

If the aggregate is already finalized (e.g., written to a data warehouse), run a periodic batch job that reprocesses raw events for the affected time window and updates the aggregate. Ensure the update is idempotent and versioned.

5. Monitor and validate accuracy

Set up monitoring for late-event rates and data quality checks. Compare streaming and batch results to detect discrepancies, and alert on anomalies.

Key Points to Mention

  • Event-time vs processing-time semantics and watermarks
  • Idempotent writes and exactly-once processing
  • Lambda architecture (streaming + batch) for reconciliation
  • Storing raw events for reprocessing and auditability
  • Trade-offs between latency, cost, and accuracy
  • Use of a late-data side output or dead-letter queue

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

Q3

Network retries cause duplicate events to show up in the pipeline. What's your strategy for exactly-once processing? Compare idempotent sink writes versus transactional two-phase-commit sinks, and explain where dedup state lives and how you keep it from growing forever.

System DesignTechnical Trade-offs
Author's notes

Felt more confident here.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying that exactly-once processing is achieved through a combination of at-least-once delivery and idempotent or transactional sinks, then compare the two approaches in terms of complexity, performance, and guarantees. Finally, discuss deduplication state management, including storage location and strategies to bound its growth.

Pro tip: Emphasize that exactly-once is end-to-end and requires coordination between source, processing, and sink; avoid claiming it's possible without idempotency or transactions. Mention that dedup state growth is often the hidden cost, and propose practical solutions like TTL and compaction.

1. Define exactly-once semantics

Explain that exactly-once means each event affects the final state exactly once, despite retries. Clarify that it's typically implemented as at-least-once delivery plus deduplication or idempotent writes.

2. Compare idempotent sink writes vs. transactional 2PC sinks

Idempotent sinks use unique keys (e.g., event IDs) to upsert, ensuring repeated writes don't duplicate. Transactional sinks use two-phase commit to atomically write output and commit offsets, but add latency and complexity.

3. Discuss trade-offs

Idempotent sinks are simpler, more scalable, and work with eventually consistent stores, but require a dedup key and may not work for non-idempotent operations. Transactional sinks provide stronger guarantees but require coordination and can be slower.

4. Explain dedup state management

Dedup state can live in the sink (e.g., unique constraint), in an external store (e.g., Redis, RocksDB), or in the stream processor's state. To prevent unbounded growth, use TTL, compaction, or windowing based on event time.

5. Summarize and recommend

Choose based on requirements: idempotent sinks for simplicity and scalability, transactional sinks for strict atomicity. Always bound dedup state with TTL or compaction to avoid resource leaks.

Key Points to Mention

  • Exactly-once requires end-to-end coordination; it's not a single component's responsibility.
  • Idempotent writes rely on unique event IDs and upsert semantics; they are simpler and often preferred.
  • Transactional 2PC sinks (e.g., Kafka transactions) provide atomicity but add latency and operational complexity.
  • Dedup state can be stored in the sink, external cache, or processor state; each has trade-offs.
  • To bound dedup state, use TTL, compaction, or time-based windows; consider the impact of late data.
  • Mention real-world examples: Kafka's exactly-once semantics, Flink's two-phase commit, or database upserts.

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

Q4

Traffic spikes 10x during a live event. How do you detect that the pipeline is falling behind, and what's your autoscaling and back-pressure strategy to catch up without dropping data?

System DesignTechnical Trade-offsRoot Cause Analysis
Author's notes

Consumer lag as the primary signal, scale out stream processing workers, Kafka absorbs the burst as a buffer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining how you would detect the pipeline falling behind using key metrics like consumer lag, queue depth, and processing latency. Then outline a multi-layered autoscaling strategy that scales consumers and possibly producers, combined with back-pressure mechanisms to avoid data loss. Emphasize trade-offs between latency, cost, and data integrity, and how you would validate the solution under load.

Pro tip: Mention that you would set up alerts on leading indicators like consumer lag growth rate, not just absolute lag, to catch issues before they become critical. Also, discuss the importance of idempotent processing and dead-letter queues to handle failures without dropping data.

1. Detection

Identify metrics that signal the pipeline is falling behind, such as consumer lag, queue depth, processing latency, and error rates. Set up monitoring and alerts with thresholds based on normal and spike conditions.

2. Autoscaling Strategy

Implement horizontal scaling of consumers based on lag or queue depth, using auto-scaling groups or Kubernetes HPA. Consider scaling producers or upstream systems if they can be throttled.

3. Back-pressure Mechanisms

Apply back-pressure to slow down producers when consumers can't keep up, using techniques like blocking queues, rate limiting, or reactive streams. Ensure data is buffered durably (e.g., Kafka) to prevent loss.

4. Catch-up and Data Integrity

Once scaled, ensure consumers can catch up by processing in parallel and possibly increasing batch sizes. Use idempotent processing and dead-letter queues to handle failures without dropping data.

5. Validation and Iteration

Test the strategy with load tests simulating 10x spikes, measure recovery time, and refine thresholds and scaling policies. Document runbooks for incident response.

Key Points to Mention

  • Consumer lag as a primary metric for detection
  • Horizontal scaling of consumers with auto-scaling policies
  • Back-pressure techniques like rate limiting and blocking queues
  • Durable buffering (e.g., Kafka) to prevent data loss
  • Idempotent processing and dead-letter queues for error handling
  • Trade-offs between scaling speed, cost, and data consistency

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

Q5

A bug in the aggregation logic shipped yesterday. How do you recompute corrected aggregates from the raw event store without disrupting live ingestion?

System DesignData Modeling
Author's notes

Straightforward if you've done this before.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

First, clarify the scope of the bug and identify the affected time window and aggregate types. Then propose a side-by-side recomputation using a separate job that reads from the raw event store and writes to a new aggregate table, followed by a controlled swap or backfill. Emphasize idempotency, checkpointing, and validation to avoid disrupting live ingestion.

Pro tip: Mention that you would version the aggregation logic and use a shadow pipeline to compare old vs. new aggregates before switching, which shows you prioritize correctness and zero downtime.

1. Assess impact and define scope

Determine which aggregates are wrong, the time range affected, and whether the bug is in the logic or data. This helps bound the recomputation and avoid unnecessary work.

2. Design a side-by-side recomputation pipeline

Create a separate batch or streaming job that reads raw events from the event store and computes corrected aggregates into a new table or topic, leaving the live pipeline untouched.

3. Ensure idempotency and checkpointing

Make the recomputation job idempotent and checkpoint its progress so it can be safely restarted without duplicating or missing data, especially if it runs alongside live ingestion.

4. Validate and compare results

Run the new aggregates in shadow mode and compare against the old ones for a sample or full range to catch discrepancies before swapping.

5. Swap or backfill with minimal disruption

Atomically switch reads to the new aggregates or backfill the corrected data into the existing store, using feature flags or blue-green deployment to avoid downtime.

Key Points to Mention

  • Idempotent recomputation to handle retries and exactly-once semantics
  • Checkpointing and progress tracking for long-running jobs
  • Shadow pipeline or dual-write for validation before cutover
  • Versioning of aggregation logic to enable rollback
  • Backfill strategy that doesn't impact live ingestion (e.g., rate limiting, separate resources)
  • Monitoring and alerting for data quality and pipeline health

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