This question evaluates distributed systems and large-scale backend architecture skills, including task decomposition, scheduling, dynamic load balancing, fault tolerance, and state management for parallel search workloads in the System Design domain, and focuses on the practical application of architectural design and distributed coordination rather than purely algorithmic implementation. It is commonly asked to assess an engineer's ability to design APIs, orchestrators, worker fleets, and storage strategies that scale and remain correct under failures, demonstrating reasoning about task granularity, work stealing, and job completion detection for expensive combinatorial search problems.
You are asked to design a backend service that can solve crossword puzzles at scale.
A single puzzle instance consists of:
TIRE
: "A wheel on a car"
RATS
: "Small rodents"
BATH
: "A tub to clean in"
BE
: "To, or not to"
The system should fill the crossword board with valid words from the dictionary that satisfy all crossing constraints. The final output for a puzzle is a list of filled clues, for example:
1 Down: A wheel on a car
2 Across: Small rodents
3 Across: To, or not to
3 Down: A tub to clean in
You can assume there exists some backtracking / constraint-satisfaction algorithm that, given a board and dictionary, can search the solution space and determine one or more valid fillings. However, for large boards this search becomes extremely expensive, and a single machine/core doing a naive brute-force search will not finish in acceptable time.
Design a distributed service that can solve very large crossword puzzles by splitting the search work across many worker machines. In particular, address:
Clearly explain your design assumptions, trade-offs, and any heuristics you would use to make this practical in production. Focus on the distributed job scheduling and task management aspects rather than the detailed crossword-solving algorithm itself.
Login required