| User Request | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Build request context and fetch online features with strict per-source deadlines. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Recommendation API. | 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 “Feature store returns stale vector” 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 User Request boundary before extracting or scaling it. |
| Recommendation API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Retrieve bounded candidates in parallel from collaborative, vector, and trending sources. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents User Request from also owning the contract and failure behavior of Context Builder. | 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 “Candidate source exceeds deadline” to User Request. | 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 Recommendation API boundary before extracting or scaling it. |
| Context Builder | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Union/dedupe, apply availability/safety policy, then score with a pinned model. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Recommendation API from also owning the contract and failure behavior of Online Feature 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 “Model artifact and feature schema mismatch” to Recommendation 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 Context Builder boundary before extracting or scaling it. |
| Online Feature Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Rerank for diversity, freshness, exploration, and business constraints. | Defines the source of truth and commit boundary. It prevents Context Builder from also owning the contract and failure behavior of Candidate Router. | 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 “Feedback loop narrows diversity” to Context Builder. | 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 Online Feature Store boundary before extracting or scaling it. |
| Candidate Router | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Return results and log candidates/scores/exposures so training and evaluation are reproducible. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Online Feature Store from also owning the contract and failure behavior of Collaborative Index. | 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 “Exposure logs drop during traffic spike” to Online Feature 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 Candidate Router boundary before extracting or scaling it. |
| Collaborative Index | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Build request context and fetch online features with strict per-source deadlines. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Candidate Router from also owning the contract and failure behavior of Content / Vector Index. | 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 “Feature store returns stale vector” to Candidate Router. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1B events/day · 10K candidates/request · p99 < 200 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Collaborative Index boundary before extracting or scaling it. |
| Content / Vector Index | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Retrieve bounded candidates in parallel from collaborative, vector, and trending sources. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Collaborative Index from also owning the contract and failure behavior of Trending Store. | 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 “Candidate source exceeds deadline” to Collaborative Index. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1B events/day · 10K candidates/request · p99 < 200 ms) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Content / Vector Index boundary before extracting or scaling it. |
| Trending Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Union/dedupe, apply availability/safety policy, then score with a pinned model. | Defines the source of truth and commit boundary. It prevents Content / Vector Index from also owning the contract and failure behavior of Candidate Union. | 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 “Model artifact and feature schema mismatch” to Content / Vector Index. | 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 Trending Store boundary before extracting or scaling it. |
| Candidate Union | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rerank for diversity, freshness, exploration, and business constraints. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Trending Store from also owning the contract and failure behavior of Policy / Safety. | 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 “Feedback loop narrows diversity” to Trending 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 Candidate Union boundary before extracting or scaling it. |
| Policy / Safety | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Return results and log candidates/scores/exposures so training and evaluation are reproducible. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Candidate Union from also owning the contract and failure behavior of Online Ranker. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Exposure logs drop during traffic spike” to Candidate Union. | 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 Policy / Safety boundary before extracting or scaling it. |
| Online Ranker | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Build request context and fetch online features with strict per-source deadlines. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Policy / Safety from also owning the contract and failure behavior of Diversity Reranker. | 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 “Feature store returns stale vector” to Policy / Safety. | 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 Online Ranker boundary before extracting or scaling it. |
| Diversity Reranker | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Retrieve bounded candidates in parallel from collaborative, vector, and trending sources. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Online Ranker from also owning the contract and failure behavior of Model Registry. | 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 “Candidate source exceeds deadline” to Online 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 Diversity Reranker boundary before extracting or scaling it. |
| Model Registry | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Union/dedupe, apply availability/safety policy, then score with a pinned model. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Diversity Reranker from also owning the contract and failure behavior of Exposure Log. | 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 “Model artifact and feature schema mismatch” to Diversity Reranker. | 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 Model Registry boundary before extracting or scaling it. |
| Exposure Log | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Rerank for diversity, freshness, exploration, and business constraints. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Model Registry from also owning the contract and failure behavior of Offline Lake / Training. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Feedback loop narrows diversity” to Model Registry. | 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 Exposure Log boundary before extracting or scaling it. |
| Offline Lake / Training | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Return results and log candidates/scores/exposures so training and evaluation are reproducible. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Exposure Log 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 “Exposure logs drop during traffic spike” to Exposure Log. | 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 Offline Lake / Training boundary before extracting or scaling it. |