| Search Box | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Normalize Unicode, case, whitespace, and locale before routing the prefix. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Edge Cache. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Popular one-character prefix becomes hot” to the external caller. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Search Box boundary before extracting or scaling it. |
| Edge Cache | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Read bounded candidates from an in-memory FST plus a small recent-trend overlay. | Removes repeated work from the latency-critical path. It prevents Search Box from also owning the contract and failure behavior of Suggestion API. | Read authoritative storage for every request. Simpler initially, but latency and source-of-truth load scale together and a hot key becomes a database incident. Here that simpler choice would couple “Unsafe term must disappear immediately” to Search Box. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (500K QPS · p99 < 50 ms · billions of queries) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Edge Cache boundary before extracting or scaling it. |
| Suggestion API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Merge shard results, remove unsafe/deleted terms, and optionally blend personal context. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Edge Cache from also owning the contract and failure behavior of Normalizer / Locale. | Put protocol, authentication, quotas, and business transitions in one process. Acceptable at low scale, but it couples external traffic risk to domain releases. Here that simpler choice would couple “Snapshot versions differ across replicas” to Edge Cache. | Costs another hop, policy distribution, and a high-blast-radius fleet. Introduce it when many clients or services need one protocol and protection boundary. Measure the latency, saturation, lag, or mismatch at the Suggestion API boundary before extracting or scaling it. |
| Normalizer / Locale | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rank by frequency, recency, edit distance, locale, and business/safety constraints. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Suggestion API from also owning the contract and failure behavior of Prefix Router. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Trend poisoning manipulates ranking” to Suggestion API. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Normalizer / Locale boundary before extracting or scaling it. |
| Prefix Router | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish immutable bulk snapshots atomically and expire the streaming overlay. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Normalizer / Locale from also owning the contract and failure behavior of FST Shards. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Personalization leaks prior queries” to Normalizer / Locale. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Prefix Router boundary before extracting or scaling it. |
| FST Shards | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Normalize Unicode, case, whitespace, and locale before routing the prefix. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Prefix Router from also owning the contract and failure behavior of Recent Overlay. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Popular one-character prefix becomes hot” to Prefix Router. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the FST Shards boundary before extracting or scaling it. |
| Recent Overlay | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Read bounded candidates from an in-memory FST plus a small recent-trend overlay. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents FST Shards from also owning the contract and failure behavior of Candidate Merger. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Unsafe term must disappear immediately” to FST Shards. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Recent Overlay boundary before extracting or scaling it. |
| Candidate Merger | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Merge shard results, remove unsafe/deleted terms, and optionally blend personal context. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Recent Overlay from also owning the contract and failure behavior of Safety Filter. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Snapshot versions differ across replicas” to Recent Overlay. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Candidate Merger boundary before extracting or scaling it. |
| Safety Filter | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rank by frequency, recency, edit distance, locale, and business/safety constraints. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Candidate Merger from also owning the contract and failure behavior of Personalization. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Trend poisoning manipulates ranking” to Candidate Merger. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Safety Filter boundary before extracting or scaling it. |
| Personalization | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish immutable bulk snapshots atomically and expire the streaming overlay. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Safety Filter from also owning the contract and failure behavior of Top-K Ranker. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Personalization leaks prior queries” to Safety Filter. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Personalization boundary before extracting or scaling it. |
| Top-K Ranker | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Normalize Unicode, case, whitespace, and locale before routing the prefix. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Personalization from also owning the contract and failure behavior of Snapshot Builder. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Popular one-character prefix becomes hot” to Personalization. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Top-K Ranker boundary before extracting or scaling it. |
| Snapshot Builder | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Read bounded candidates from an in-memory FST plus a small recent-trend overlay. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Top-K Ranker from also owning the contract and failure behavior of Query Event Stream. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Unsafe term must disappear immediately” to Top-K Ranker. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Snapshot Builder boundary before extracting or scaling it. |
| Query Event Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Merge shard results, remove unsafe/deleted terms, and optionally blend personal context. | Decouples bursts and failure from user acknowledgment. It prevents Snapshot Builder from also owning the contract and failure behavior of Removal Control Plane. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Snapshot versions differ across replicas” to Snapshot Builder. | Costs eventual consistency, schema evolution, replay tooling, idempotent consumers, and lag operations. Earn it when bursts or downstream failure must not block acknowledgment. Measure the latency, saturation, lag, or mismatch at the Query Event Stream boundary before extracting or scaling it. |
| Removal Control Plane | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rank by frequency, recency, edit distance, locale, and business/safety constraints. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Query Event Stream from also owning the contract and failure behavior of operators and repair tooling. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Trend poisoning manipulates ranking” to Query Event Stream. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Removal Control Plane boundary before extracting or scaling it. |