| Tenant User | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authenticate identity and derive tenant context from trusted claims, never request payload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Identity Provider. | 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 “Missing tenant predicate leaks data” 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 Tenant User boundary before extracting or scaling it. |
| Identity Provider | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Resolve entitlements, quotas, encryption key reference, and current placement generation. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Tenant User from also owning the contract and failure behavior of Global Gateway. | 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 “Noisy tenant exhausts shared pool” to Tenant User. | 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 Identity Provider boundary before extracting or scaling it. |
| Global Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Route to pooled/partitioned/dedicated data using tenant-scoped credentials and keys. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Identity Provider from also owning the contract and failure behavior of Tenant Context. | 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 “Placement migration reads two versions” to Identity Provider. | 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 Gateway boundary before extracting or scaling it. |
| Tenant Context | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Execute with tenant ID in every primary/index key and enforce dependency budgets. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Global Gateway from also owning the contract and failure behavior of Quota / Entitlement. | 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 “Support impersonation bypasses audit” to Global Gateway. | 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 Tenant Context boundary before extracting or scaling it. |
| Quota / Entitlement | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Emit immutable usage and isolation signals; migration dual-reads/checks before pointer cutover. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Tenant Context from also owning the contract and failure behavior of Tenant 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 “Per-tenant key service unavailable” to Tenant Context. | 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 Quota / Entitlement boundary before extracting or scaling it. |
| Tenant Router | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authenticate identity and derive tenant context from trusted claims, never request payload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Quota / Entitlement from also owning the contract and failure behavior of Shared Service 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 “Missing tenant predicate leaks data” to Quota / Entitlement. | 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 Tenant Router boundary before extracting or scaling it. |
| Shared Service Fleet | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Resolve entitlements, quotas, encryption key reference, and current placement generation. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Tenant Router from also owning the contract and failure behavior of Placement Directory. | 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 “Noisy tenant exhausts shared pool” to Tenant 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 Shared Service Fleet boundary before extracting or scaling it. |
| Placement Directory | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Route to pooled/partitioned/dedicated data using tenant-scoped credentials and keys. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Shared Service Fleet from also owning the contract and failure behavior of Pooled DB 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 “Placement migration reads two versions” to Shared Service 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 Placement Directory boundary before extracting or scaling it. |
| Pooled DB Shards | Owns authoritative versioned state or immutable evidence. In this design it participates in: Execute with tenant ID in every primary/index key and enforce dependency budgets. | Defines the source of truth and commit boundary. It prevents Placement Directory from also owning the contract and failure behavior of Dedicated DB Tier. | 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 “Support impersonation bypasses audit” to Placement Directory. | 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 Pooled DB Shards boundary before extracting or scaling it. |
| Dedicated DB Tier | Owns authoritative versioned state or immutable evidence. In this design it participates in: Emit immutable usage and isolation signals; migration dual-reads/checks before pointer cutover. | Defines the source of truth and commit boundary. It prevents Pooled DB Shards from also owning the contract and failure behavior of Per-Tenant Key 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 “Per-tenant key service unavailable” to Pooled DB Shards. | 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 Dedicated DB Tier boundary before extracting or scaling it. |
| Per-Tenant Key Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authenticate identity and derive tenant context from trusted claims, never request payload. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Dedicated DB Tier from also owning the contract and failure behavior of Usage 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 “Missing tenant predicate leaks data” to Dedicated DB Tier. | 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 Per-Tenant Key Service boundary before extracting or scaling it. |
| Usage Event Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Resolve entitlements, quotas, encryption key reference, and current placement generation. | Decouples bursts and failure from user acknowledgment. It prevents Per-Tenant Key Service from also owning the contract and failure behavior of Billing / Metering. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Noisy tenant exhausts shared pool” to Per-Tenant Key Service. | 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 Usage Event Stream boundary before extracting or scaling it. |
| Billing / Metering | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Route to pooled/partitioned/dedicated data using tenant-scoped credentials and keys. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Usage Event Stream from also owning the contract and failure behavior of Support Access Broker. | 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 “Placement migration reads two versions” to Usage 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 Billing / Metering boundary before extracting or scaling it. |
| Support Access Broker | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Execute with tenant ID in every primary/index key and enforce dependency budgets. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Billing / Metering from also owning the contract and failure behavior of Isolation Monitor. | 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 “Support impersonation bypasses audit” to Billing / Metering. | 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 Support Access Broker boundary before extracting or scaling it. |
| Isolation Monitor | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Emit immutable usage and isolation signals; migration dual-reads/checks before pointer cutover. | Proves correctness and supports controlled recovery. It prevents Support Access Broker from also owning the contract and failure behavior of operators and repair tooling. | Infer correctness from request logs. Logs do not prove durable business state, detect silent drift, or safely repair ambiguous outcomes. Here that simpler choice would couple “Per-tenant key service unavailable” to Support Access Broker. | 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 Isolation Monitor boundary before extracting or scaling it. |