| Application SDK | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Validate rule syntax, prerequisites, and permissions before storing immutable version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of In-Process Evaluator. | 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 “Prerequisite cycle enters config” 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 Application SDK boundary before extracting or scaling it. |
| In-Process Evaluator | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Build and sign a complete environment snapshot, then append its version to distribution log. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Application SDK from also owning the contract and failure behavior of Local Snapshot 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 “SDK misses deltas during disconnect” to Application SDK. | 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 In-Process Evaluator boundary before extracting or scaling it. |
| Local Snapshot Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Relays stream ordered deltas; SDK atomically swaps snapshots and retains last-known-good. | Removes repeated work from the latency-critical path. It prevents In-Process Evaluator from also owning the contract and failure behavior of Streaming Relay. | 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 “Percentage assignment changes after rule edit” to In-Process Evaluator. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (Billions evals/s · < 1 ms local · updates in seconds) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Local Snapshot Cache boundary before extracting or scaling it. |
| Streaming Relay | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Evaluator hashes stable subject attributes for deterministic percentage assignment. | Decouples bursts and failure from user acknowledgment. It prevents Local Snapshot Cache from also owning the contract and failure behavior of Edge Relay Tier. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Bad rollout harms one cohort” to Local Snapshot 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 Streaming Relay boundary before extracting or scaling it. |
| Edge Relay Tier | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Rollout controller advances cohorts only while health gates pass; kill path promotes safe default. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Streaming Relay from also owning the contract and failure behavior of Config Distribution Log. | 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 “Control plane unavailable during emergency” to Streaming Relay. | 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 Edge Relay Tier boundary before extracting or scaling it. |
| Config Distribution Log | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Validate rule syntax, prerequisites, and permissions before storing immutable version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Edge Relay Tier from also owning the contract and failure behavior of Flag 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 “Prerequisite cycle enters config” to Edge Relay Tier. | 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 Config Distribution Log boundary before extracting or scaling it. |
| Flag Control Plane | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Build and sign a complete environment snapshot, then append its version to distribution log. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Config Distribution Log from also owning the contract and failure behavior of Validation / Policy. | 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 “SDK misses deltas during disconnect” to Config Distribution 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 Flag Control Plane boundary before extracting or scaling it. |
| Validation / Policy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Relays stream ordered deltas; SDK atomically swaps snapshots and retains last-known-good. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Flag Control Plane from also owning the contract and failure behavior of Versioned Config DB. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Percentage assignment changes after rule edit” to Flag Control Plane. | 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 Validation / Policy boundary before extracting or scaling it. |
| Versioned Config DB | Owns authoritative versioned state or immutable evidence. In this design it participates in: Evaluator hashes stable subject attributes for deterministic percentage assignment. | Defines the source of truth and commit boundary. It prevents Validation / Policy from also owning the contract and failure behavior of Rollout Controller. | 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 “Bad rollout harms one cohort” to Validation / Policy. | 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 Versioned Config DB boundary before extracting or scaling it. |
| Rollout Controller | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Rollout controller advances cohorts only while health gates pass; kill path promotes safe default. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Versioned Config DB from also owning the contract and failure behavior of Experiment Assigner. | 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 “Control plane unavailable during emergency” to Versioned Config DB. | 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 Rollout Controller boundary before extracting or scaling it. |
| Experiment Assigner | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Validate rule syntax, prerequisites, and permissions before storing immutable version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Rollout Controller from also owning the contract and failure behavior of Exposure 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 “Prerequisite cycle enters config” to Rollout Controller. | 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 Experiment Assigner boundary before extracting or scaling it. |
| Exposure Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Build and sign a complete environment snapshot, then append its version to distribution log. | Decouples bursts and failure from user acknowledgment. It prevents Experiment Assigner from also owning the contract and failure behavior of Audit Log. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “SDK misses deltas during disconnect” to Experiment Assigner. | 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 Stream boundary before extracting or scaling it. |
| Audit Log | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Relays stream ordered deltas; SDK atomically swaps snapshots and retains last-known-good. | Proves correctness and supports controlled recovery. It prevents Exposure Stream from also owning the contract and failure behavior of Emergency Kill Path. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Percentage assignment changes after rule edit” to Exposure Stream. | 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 Audit Log boundary before extracting or scaling it. |
| Emergency Kill Path | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Evaluator hashes stable subject attributes for deterministic percentage assignment. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Audit 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 “Bad rollout harms one cohort” to Audit 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 Emergency Kill Path boundary before extracting or scaling it. |