| Search Client | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Normalize language, spelling, intent, and policy before retrieval. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Global Query Edge. | 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 query overloads one cache key” 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 Client boundary before extracting or scaling it. |
| Global Query Edge | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Route terms to index shards and retrieve a bounded union of candidates. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Search Client from also owning the contract and failure behavior of Query Understanding. | 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 “Index segment versions differ” to Search Client. | 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 Global Query Edge boundary before extracting or scaling it. |
| Query Understanding | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Fetch document and learned features only for the candidate set. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Global Query Edge from also owning the contract and failure behavior of Spell / Intent. | 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 “Spam document manipulates ranking” to Global Query Edge. | 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 Query Understanding boundary before extracting or scaling it. |
| Spell / Intent | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rank, dedupe hosts, apply safety, and generate snippets. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Query Understanding from also owning the contract and failure behavior of Index 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 “Removal must beat stale cache” to Query Understanding. | 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 Spell / Intent boundary before extracting or scaling it. |
| Index Router | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Log exposures/clicks and publish immutable index segments plus freshness overlays. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Spell / Intent from also owning the contract and failure behavior of Inverted Index Shards. | 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 “Ranker exceeds latency budget” to Spell / Intent. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (100B documents · 200K queries/s · p99 < 500 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Index Router boundary before extracting or scaling it. |
| Inverted Index Shards | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Normalize language, spelling, intent, and policy before retrieval. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Index Router from also owning the contract and failure behavior of Freshness Overlay. | 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 “Popular query overloads one cache key” to Index Router. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (100B documents · 200K queries/s · p99 < 500 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Inverted Index Shards boundary before extracting or scaling it. |
| Freshness Overlay | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Route terms to index shards and retrieve a bounded union of candidates. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Inverted Index Shards from also owning the contract and failure behavior of Document Store. | 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 “Index segment versions differ” to Inverted Index 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 Freshness Overlay boundary before extracting or scaling it. |
| Document Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Fetch document and learned features only for the candidate set. | Defines the source of truth and commit boundary. It prevents Freshness Overlay from also owning the contract and failure behavior of Feature Service. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “Spam document manipulates ranking” to Freshness Overlay. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Document Store boundary before extracting or scaling it. |
| Feature Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rank, dedupe hosts, apply safety, and generate snippets. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Document Store from also owning the contract and failure behavior of Ranker Fleet. | 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 “Removal must beat stale cache” to Document Store. | 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 Feature Service boundary before extracting or scaling it. |
| Ranker Fleet | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Log exposures/clicks and publish immutable index segments plus freshness overlays. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Feature Service from also owning the contract and failure behavior of Snippet Service. | 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 “Ranker exceeds latency budget” to Feature Service. | 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 Ranker Fleet boundary before extracting or scaling it. |
| Snippet Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Normalize language, spelling, intent, and policy before retrieval. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Ranker Fleet from also owning the contract and failure behavior of Safety / Spam. | 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 query overloads one cache key” to Ranker Fleet. | 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 Snippet Service boundary before extracting or scaling it. |
| Safety / Spam | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Route terms to index shards and retrieve a bounded union of candidates. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Snippet Service from also owning the contract and failure behavior of Query Cache. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Index segment versions differ” to Snippet Service. | 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 / Spam boundary before extracting or scaling it. |
| Query Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Fetch document and learned features only for the candidate set. | Removes repeated work from the latency-critical path. It prevents Safety / Spam from also owning the contract and failure behavior of Click Stream. | 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 “Spam document manipulates ranking” to Safety / Spam. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (100B documents · 200K queries/s · p99 < 500 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Query Cache boundary before extracting or scaling it. |
| Click Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Rank, dedupe hosts, apply safety, and generate snippets. | Decouples bursts and failure from user acknowledgment. It prevents Query Cache from also owning the contract and failure behavior of Index Builder. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Removal must beat stale cache” to Query Cache. | 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 Click Stream boundary before extracting or scaling it. |
| Index Builder | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Log exposures/clicks and publish immutable index segments plus freshness overlays. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Click Stream from also owning the contract and failure behavior of operators and repair tooling. | 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 “Ranker exceeds latency budget” to Click Stream. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (100B documents · 200K queries/s · p99 < 500 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Index Builder boundary before extracting or scaling it. |