← Adobe Interview Insights

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

SeniorPrefer not to say
May 2026

Summary

Adobe system design round for a software engineer role. One big question that covered a lot of ground, the kind where you feel like you're doing okay until they ask the fifth follow-up and you realize you were only halfway there.

Questions Asked (1)

Q1

Design a distributed system to compute word frequencies across terabytes of text without using MapReduce. Walk through ingestion, token partitioning across shards, partial and global aggregation, top-K results, fault tolerance, idempotency, delivery semantics, backpressure, node failure recovery, and how results are stored and served.

System DesignTechnical Trade-offsAlgorithms & Data Structures
Author's notes

This question is basically a full distributed systems exam in one prompt.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (scale, latency, accuracy, top-K size) and then propose a streaming architecture with partitioned ingestion, sharded token counting, and hierarchical aggregation. Walk through the data flow end-to-end, explicitly addressing fault tolerance, idempotency, and backpressure at each stage.

Pro tip: Emphasize that exact global counts require a shuffle/merge step, but approximate top-K with bounded error (e.g., Count-Min Sketch or Space-Saving) can drastically reduce network and memory costs—discuss the trade-off and when each is appropriate.

1. Clarify requirements and constraints

Ask about data size, ingestion rate, latency SLA, accuracy (exact vs approximate), top-K size, and failure tolerance. This shapes the entire design.

2. Design ingestion and partitioning

Describe how text is ingested (e.g., Kafka, distributed file system) and partitioned by token hash to ensure all occurrences of a token go to the same shard. Mention consistent hashing for scalability.

3. Local aggregation and partial counts

Each shard maintains a local hash map of token counts, periodically flushing partial counts to a downstream aggregation layer. Use combiner-like logic to reduce data movement.

4. Global aggregation and top-K

Merge partial counts from all shards, either exactly (via shuffle) or approximately (using sketches). Then compute top-K using a heap or threshold-based approach.

5. Fault tolerance, idempotency, and serving

Explain checkpointing, exactly-once semantics via idempotent writes, backpressure handling, and how results are stored (e.g., in a KV store) and served with low latency.

Key Points to Mention

  • Consistent hashing for token partitioning to minimize reshuffling on scale changes
  • Idempotency via unique message IDs or deterministic aggregation to handle retries
  • Backpressure mechanisms like bounded queues and rate limiting to prevent overload
  • Fault tolerance through replication, checkpointing, and recovery from node failures
  • Delivery semantics: at-least-once vs exactly-once and their implications
  • Approximate algorithms (Count-Min Sketch, Space-Saving) for memory-efficient top-K

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