← Disney Interview Insights

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

SeniorPrefer not to say
Apr 2026

Summary

Disney data engineer system design round, pretty intense. The whole thing was centered on a single large-scale clickstream pipeline problem and they kept drilling into the hard parts: late data, deduplication, and keeping dashboards fresh under load spikes.

Questions Asked (8)

Q1

Design an end-to-end pipeline to ingest, process, and serve roughly one billion clickstream events per day, with near-real-time dashboards and accurate daily aggregates for finance. Walk through ingestion, stream/batch processing, storage, and how aggregates are computed and served.

System DesignTechnical Trade-offsData Modeling
Author's notes

This was the main question and it ate up most of the session.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements: event volume (~1B/day, ~12K/sec average, peak 5-10x), latency for dashboards (seconds to minutes), accuracy for finance (exact daily aggregates), and retention. Then propose a lambda architecture with a streaming path for near-real-time and a batch path for accurate aggregates, detailing each component and trade-offs.

Pro tip: Emphasize that finance requires exactly-once semantics and reconciliation between streaming and batch; propose using a streaming engine with exactly-once guarantees (e.g., Flink) and a batch layer that recomputes from raw data to ensure accuracy.

1. Clarify Requirements and Scale

Ask about event volume, peak rates, latency SLAs for dashboards, accuracy requirements for finance, data retention, and query patterns. Calculate average and peak throughput to inform design.

2. Design Ingestion Layer

Propose a scalable ingestion pipeline: clients send events to a load balancer, then to a distributed message queue (e.g., Kafka) partitioned by key (e.g., user ID or session ID) for ordering and scalability. Ensure durability and replayability.

3. Design Stream Processing for Near-Real-Time

Use a stream processor (e.g., Flink, Spark Streaming) to consume from Kafka, perform windowed aggregations (e.g., 1-minute tumbling windows), and write to a fast serving layer (e.g., Redis, Cassandra) for dashboards. Handle late data with watermarks and allowed lateness.

4. Design Batch Processing for Accurate Aggregates

Store raw events in a data lake (e.g., S3, HDFS) for batch processing. Periodically (e.g., hourly/daily) run batch jobs (e.g., Spark) to recompute aggregates from raw data, ensuring correctness and reconciliation with streaming results. Write to a data warehouse (e.g., Redshift, BigQuery) for finance.

5. Design Storage and Serving Layers

Use a lambda architecture: speed layer (streaming) for real-time dashboards, batch layer for accurate aggregates, and serving layer that merges both. For dashboards, use a low-latency store; for finance, use a warehouse with ACID guarantees. Discuss trade-offs (e.g., cost, complexity).

Key Points to Mention

  • Partitioning strategy in Kafka for scalability and ordering (e.g., by user ID).
  • Exactly-once processing semantics in stream processing (e.g., Flink checkpoints, idempotent writes).
  • Handling late/out-of-order data with watermarks and allowed lateness.
  • Lambda architecture vs. Kappa architecture trade-offs; why lambda for finance accuracy.
  • Reconciliation between streaming and batch aggregates to ensure consistency.
  • Storage choices: Kafka for ingestion, S3/HDFS for raw, Redis/Cassandra for real-time, Redshift/BigQuery for batch.

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

Q2

How do you detect that your pipeline is falling behind the incoming event rate, and what mechanisms keep it caught up during traffic spikes?

System DesignTechnical Trade-offs
Author's notes

I talked about consumer lag metrics and autoscaling, which is the obvious answer.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining how you monitor pipeline lag using metrics like consumer lag, queue depth, and processing latency, and how you set alerts based on thresholds. Then describe the mechanisms you use to keep the pipeline caught up, such as autoscaling, backpressure, and load shedding, and how you validate their effectiveness during traffic spikes.

Pro tip: Emphasize that you not only detect lag but also have a runbook for mitigation, and you continuously test your pipeline's resilience with load tests and game days to ensure it can handle Disney-scale traffic spikes.

1. Define and monitor lag metrics

Identify key metrics such as consumer lag, queue depth, and end-to-end latency. Set up dashboards and alerts with thresholds that indicate when the pipeline is falling behind.

2. Diagnose root causes

When lag is detected, quickly determine if it's due to increased input rate, slow processing, resource contention, or downstream bottlenecks. Use tracing and profiling to pinpoint the issue.

3. Implement scaling and backpressure

Describe how you dynamically scale consumers (e.g., via Kubernetes HPA or auto-scaling groups) and apply backpressure to upstream producers to prevent overload.

4. Apply load shedding and prioritization

If scaling isn't enough, explain how you shed non-critical load or prioritize high-value events to maintain overall system stability.

5. Validate and iterate

Continuously test the pipeline with load tests and chaos experiments, and refine thresholds and scaling policies based on learnings from incidents.

Key Points to Mention

  • Consumer lag monitoring (e.g., Kafka lag, Kinesis iterator age)
  • Autoscaling based on lag or CPU utilization
  • Backpressure mechanisms (e.g., rate limiting, queue size limits)
  • Load shedding and prioritization strategies
  • Alerting and on-call runbooks for lag incidents
  • Load testing and chaos engineering to validate resilience

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

Q3

A user's device goes offline and syncs hours or even days later. How do you keep daily aggregates accurate when events arrive well after the period they belong to?

System DesignProduct Analytics & Metrics
Author's notes

Late-arriving data is one of those things I thought I knew but struggled to explain cleanly under pressure.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Acknowledge the late-arriving data problem and propose a lambda architecture with a batch layer for corrections and a speed layer for real-time estimates. Emphasize the use of event-time processing, watermarks, and idempotent updates to ensure accuracy and eventual consistency.

Pro tip: Mention that you would track the lag between event time and processing time as a metric to monitor data completeness, and set a business-defined SLA for when daily aggregates are considered final.

1. Clarify Requirements

Ask about the acceptable latency for daily aggregates, the expected volume of late data, and whether real-time or batch processing is preferred.

2. Design Event-Time Processing

Use event timestamps (not processing time) to assign events to their correct period, and handle out-of-order events with watermarks or allowed lateness.

3. Implement a Lambda Architecture

Maintain a speed layer for low-latency approximate aggregates and a batch layer that reprocesses all data to produce accurate, corrected aggregates.

4. Ensure Idempotent Updates

Design the aggregation logic to be idempotent so that reprocessing late events does not double-count; use unique event IDs or upserts.

5. Monitor and Validate

Track data completeness metrics (e.g., percentage of events received per day) and set up alerts for anomalies; periodically reconcile batch and speed layer results.

Key Points to Mention

  • Event-time vs. processing-time semantics
  • Watermarks and allowed lateness in stream processing
  • Lambda architecture (batch + speed layers)
  • Idempotent writes and exactly-once processing
  • Data completeness metrics and SLAs
  • Reprocessing and backfill strategies

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

Q4

Network retries mean the same event can arrive multiple times. How do you guarantee each event is counted exactly once in your metrics?

System DesignTechnical Trade-offs
Author's notes

Went straight to dedup keys and idempotent writes.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by acknowledging that exactly-once counting is impossible with pure at-least-once delivery, so you need idempotency or deduplication. Then describe a concrete mechanism like event IDs with a deduplication store, and discuss trade-offs around storage, latency, and accuracy.

Pro tip: Mention that you can use a probabilistic data structure like a Bloom filter for memory-efficient deduplication, but be clear about false positives and when to fall back to exact methods.

1. Clarify the delivery semantics

State that network retries imply at-least-once delivery, so duplicates are inevitable. Exactly-once counting requires either idempotent processing or deduplication.

2. Choose a deduplication strategy

Propose using a unique event ID (e.g., UUID) and a deduplication store (e.g., Redis, database) to track seen IDs within a time window. Alternatively, use idempotent counters keyed by event ID.

3. Handle windowing and retention

Explain that deduplication requires a time window or TTL to bound storage. Discuss how to handle late events and whether to use event time or processing time.

4. Address scalability and trade-offs

Discuss scaling the deduplication store (sharding, partitioning by event ID) and trade-offs between accuracy, latency, and cost. Mention alternatives like Bloom filters for approximate deduplication.

5. Summarize with a concrete example

Give a brief example: e.g., using Kafka with idempotent producers and a deduplication layer in Flink or a custom consumer that checks a Redis set before incrementing a counter.

Key Points to Mention

  • At-least-once vs exactly-once semantics
  • Idempotency keys or unique event IDs
  • Deduplication store (Redis, database) with TTL
  • Windowing and late-arriving events
  • Trade-offs: storage cost, latency, accuracy
  • Probabilistic data structures (Bloom filter) for memory efficiency

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

Q5

Your streaming path produced a DAU number at 11:59pm, then at 3am a batch of device events from the previous day arrives. Walk through exactly how the day's DAU gets corrected and how downstream consumers learn the number changed.

System DesignData ModelingProduct Analytics & Metrics
Author's notes

Follow-up question and honestly the hardest one.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Walk through the end-to-end correction flow: detect late data, reprocess the affected day's events, update the DAU metric in the serving layer, and propagate the change to downstream consumers. Emphasize idempotency, exactly-once semantics, and versioning to ensure correctness and consistency.

Pro tip: Mention that you would version the DAU metric and emit change events with the new value and version, so downstream consumers can reconcile without full reprocessing. This shows you understand both data engineering and consumer contracts.

1. Detect and validate late data

Identify the late batch, verify its event timestamps belong to the previous day, and check for duplicates or malformed records. Trigger a reprocessing job for that day's partition.

2. Reprocess the day's events

Re-run the aggregation for the affected day using the original events plus the late batch, ensuring idempotency by deduplicating on event ID or using a deterministic merge. Compute the corrected DAU.

3. Update the serving layer

Atomically update the DAU value in the serving store (e.g., a key-value store or OLAP cube) with the new value and a new version number. Keep the old value for audit or rollback.

4. Notify downstream consumers

Emit a change event (e.g., to a message queue or webhook) containing the metric name, date, new value, and version. Downstream systems can then update their caches or trigger further processing.

5. Ensure consistency and reconciliation

Provide APIs for consumers to query the latest version and reconcile if needed. Monitor for further late data and repeat the process if necessary.

Key Points to Mention

  • Idempotent reprocessing to avoid double-counting
  • Exactly-once semantics in stream processing
  • Versioning of metrics for consistency and auditability
  • Change data capture (CDC) or event-driven notification to downstream
  • Handling of late data windows and watermarks
  • Impact on downstream SLAs and how to minimize disruption

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

Q6

Compare exactly-once semantics in Flink versus Spark Structured Streaming. When would you pick each, and where can each still produce duplicates even with those guarantees in place?

Technical Trade-offsSystem Design
Author's notes

I know both tools but comparing them on exactly-once specifically was trickier than I expected.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by defining exactly-once semantics as end-to-end processing guarantees, then contrast Flink's native checkpointing and two-phase commit sinks with Spark Structured Streaming's micro-batch and epoch-based approach. Discuss trade-offs in latency, throughput, and operational complexity, and give concrete scenarios where each is preferred. Finally, highlight common failure points where duplicates can still occur, such as non-idempotent sinks or external side effects.

Pro tip: Emphasize that exactly-once is only as strong as the weakest link in the pipeline—often the sink or external system—and that true end-to-end guarantees require idempotent writes or transactional sinks. Mention that Disney's streaming use cases (e.g., real-time personalization) often prioritize low latency, which may favor Flink, but Spark's integration with the Databricks ecosystem can be a deciding factor.

1. Define exactly-once semantics

Clarify that exactly-once means each record affects the final state exactly once, typically achieved via checkpointing and replayable sources. Distinguish between internal (state) and end-to-end (sink) guarantees.

2. Explain Flink's approach

Describe Flink's lightweight distributed snapshots (checkpoints) and how sinks like Kafka or filesystems use two-phase commit for transactional writes. Note that Flink's exactly-once is native and low-latency.

3. Explain Spark Structured Streaming's approach

Describe Spark's micro-batch model with write-ahead logs and idempotent sinks, and how it achieves exactly-once via replaying batches. Mention that Spark's guarantees are often end-to-end with idempotent sinks but can have higher latency.

4. Compare and choose

Compare latency, throughput, operational complexity, and ecosystem. Recommend Flink for low-latency, high-throughput, event-driven applications; Spark for unified batch/streaming, easier integration with existing Spark workloads, and when micro-batch latency is acceptable.

5. Identify duplicate scenarios

Discuss where duplicates can still occur: non-transactional or non-idempotent sinks, external side effects (e.g., API calls), checkpoint/savepoint restore issues, or when sources are not replayable. Emphasize that exactly-once is not guaranteed if the sink cannot participate in transactions.

Key Points to Mention

  • Flink's checkpointing mechanism and two-phase commit protocol for sinks
  • Spark Structured Streaming's micro-batch execution and idempotent sink requirements
  • Trade-offs: latency (Flink lower) vs. simplicity and ecosystem (Spark often easier)
  • End-to-end exactly-once requires transactional or idempotent sinks; otherwise duplicates possible
  • Common duplicate sources: non-idempotent external calls, sink failures after checkpoint, non-replayable sources
  • Use cases: Flink for real-time fraud detection or personalization; Spark for ETL pipelines with batch and streaming unification

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

Q7

One partition is getting hammered by a hot key, causing lag on just that partition. How do you detect and fix it without repartitioning the whole topic?

Root Cause AnalysisSystem Design
Author's notes

Fun question.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by explaining how to detect the hot key using per-partition metrics and consumer lag, then propose targeted fixes like key salting, local aggregation, or dedicated topic/partition for the hot key. Emphasize that the solution should avoid repartitioning the entire topic and instead isolate or distribute the load.

Pro tip: Mention that you would first confirm the hot key by sampling messages or using a tool like Kafka's kafka-console-consumer with a key filter, and consider a short-term mitigation like increasing partitions only for the hot key's topic if possible, but prefer application-level fixes.

1. Detect the hot key

Monitor per-partition metrics (e.g., bytes in/out, messages in, consumer lag) to identify the affected partition. Use key sampling or logging to pinpoint the specific hot key.

2. Assess impact and constraints

Determine the impact on downstream consumers and whether repartitioning is truly off-limits. Evaluate if the hot key is transient or persistent.

3. Apply short-term mitigation

If possible, temporarily increase consumer parallelism for that partition (if using a consumer group with multiple consumers per partition is not possible, consider a dedicated consumer). Or throttle producers for that key.

4. Implement long-term fix

Use key salting (append a random suffix to the key) to spread the hot key across multiple partitions, or perform local aggregation before producing to Kafka. Alternatively, route the hot key to a dedicated topic with more partitions.

5. Monitor and validate

After implementing the fix, monitor metrics to ensure the hot partition load is reduced and consumer lag is resolved. Validate that the solution doesn't introduce new bottlenecks.

Key Points to Mention

  • Per-partition metrics and consumer lag monitoring
  • Key salting or adding a random suffix to distribute load
  • Local aggregation or pre-aggregation before producing to Kafka
  • Dedicated topic or partition for the hot key
  • Consumer parallelism and scaling consumers
  • Avoiding full topic repartitioning due to cost and complexity

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

Q8

The business now wants accurate unique user counts like DAU and MAU across very high cardinality at low cost and low latency. How does that change your aggregation approach, and what accuracy trade-off are you accepting?

Product Analytics & MetricsTechnical Trade-offsData Modeling
Author's notes

HyperLogLog came up immediately and they seemed to expect it.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by acknowledging the shift from exact counts to approximate distinct counting using probabilistic data structures like HyperLogLog (HLL) to handle high cardinality at scale. Explain how you would implement HLL sketches with configurable precision, and discuss the trade-off between accuracy and resource usage, emphasizing that a small error rate (e.g., 1-2%) is acceptable for business metrics like DAU/MAU. Highlight the need for pre-aggregation and efficient merging of sketches for time-based rollups.

Pro tip: Mention that you would validate the accuracy of HLL against exact counts on a sample of data to build trust with stakeholders, and consider using a hybrid approach where exact counts are used for smaller cardinalities and HLL for larger ones.

1. Clarify Requirements and Constraints

Ask about the expected cardinality, acceptable error margin, latency requirements, and cost constraints to tailor the solution. Confirm that approximate counts are acceptable for DAU/MAU.

2. Choose Approximate Algorithm

Select HyperLogLog (or HLL++) as the probabilistic data structure for distinct counting, explaining its memory efficiency and mergeability. Mention that it provides standard error around 0.81% for 2^11 registers, and can be tuned.

3. Design Data Pipeline for Pre-aggregation

Describe how to compute HLL sketches at ingestion time (e.g., per user per day) and store them in a columnar store or OLAP database. Explain how to merge sketches for different time windows (e.g., DAU to MAU) without recomputing from raw data.

4. Address Accuracy Trade-off

Explicitly state the trade-off: accepting a small relative error (e.g., 1-2%) in exchange for massive reductions in memory and compute, enabling low latency and low cost at high cardinality. Mention that error is probabilistic and can be reduced with more registers at higher memory cost.

5. Validate and Monitor

Propose validating HLL accuracy against exact counts on a sample, and setting up monitoring to detect drift. Suggest fallback to exact counting for critical use cases if needed.

Key Points to Mention

  • HyperLogLog (HLL) and its variants (HLL++, Theta sketches) for approximate distinct counting
  • Trade-off between accuracy (error rate) and memory/compute cost
  • Pre-aggregation and mergeability of sketches for efficient time-based rollups
  • Handling high cardinality: memory usage grows sublinearly with HLL
  • Low latency and low cost achieved through sketch-based aggregation
  • Validation and monitoring of approximate counts against exact counts

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