| Trading Client | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Authenticate session, validate command sequence, and run deterministic pre-trade risk. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Session 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 “Sequencer fails after accepting order” 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 Trading Client boundary before extracting or scaling it. |
| Session Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Route symbol to one sequencer and append command to the replicated journal. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Trading Client from also owning the contract and failure behavior of Authentication. | 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 “Duplicate client order ID” to Trading 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 Session Gateway boundary before extracting or scaling it. |
| Authentication | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Matching engine applies price-time priority and emits executions plus book deltas. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Session Gateway from also owning the contract and failure behavior of Pre-Trade Risk. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Market order crosses thin book” to Session 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 Authentication boundary before extracting or scaling it. |
| Pre-Trade Risk | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish market data and drop-copy asynchronously from the canonical event sequence. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Authentication from also owning the contract and failure behavior of Symbol Router. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Market data consumer misses gap” to Authentication. | 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 Pre-Trade Risk boundary before extracting or scaling it. |
| Symbol Router | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Clearing/surveillance reconcile executions; snapshots plus journal replay recover the engine. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Pre-Trade Risk from also owning the contract and failure behavior of Input Sequencer. | 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 “Trading halt races queued orders” to Pre-Trade Risk. | 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 Symbol Router boundary before extracting or scaling it. |
| Input Sequencer | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authenticate session, validate command sequence, and run deterministic pre-trade risk. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Symbol Router from also owning the contract and failure behavior of Matching Engine. | 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 “Sequencer fails after accepting order” to Symbol 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 Input Sequencer boundary before extracting or scaling it. |
| Matching Engine | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Route symbol to one sequencer and append command to the replicated journal. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Input Sequencer from also owning the contract and failure behavior of Order Book. | 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 “Duplicate client order ID” to Input Sequencer. | 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 Matching Engine boundary before extracting or scaling it. |
| Order Book | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Matching engine applies price-time priority and emits executions plus book deltas. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Matching Engine from also owning the contract and failure behavior of Execution Journal. | 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 “Market order crosses thin book” to Matching Engine. | 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 Order Book boundary before extracting or scaling it. |
| Execution Journal | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Publish market data and drop-copy asynchronously from the canonical event sequence. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Order Book from also owning the contract and failure behavior of Market Data Publisher. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Market data consumer misses gap” to Order Book. | 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 Execution Journal boundary before extracting or scaling it. |
| Market Data Publisher | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Clearing/surveillance reconcile executions; snapshots plus journal replay recover the engine. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Execution Journal from also owning the contract and failure behavior of Drop Copy. | 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 “Trading halt races queued orders” to Execution Journal. | 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 Market Data Publisher boundary before extracting or scaling it. |
| Drop Copy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Authenticate session, validate command sequence, and run deterministic pre-trade risk. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Market Data Publisher from also owning the contract and failure behavior of Clearing Ledger. | 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 “Sequencer fails after accepting order” to Market Data Publisher. | 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 Drop Copy boundary before extracting or scaling it. |
| Clearing Ledger | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Route symbol to one sequencer and append command to the replicated journal. | Defines the source of truth and commit boundary. It prevents Drop Copy from also owning the contract and failure behavior of Surveillance. | 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 “Duplicate client order ID” to Drop Copy. | 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 Clearing Ledger boundary before extracting or scaling it. |
| Surveillance | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Matching engine applies price-time priority and emits executions plus book deltas. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Clearing Ledger from also owning the contract and failure behavior of Snapshot / Replay. | 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 “Market order crosses thin book” to Clearing Ledger. | 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 Surveillance boundary before extracting or scaling it. |
| Snapshot / Replay | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish market data and drop-copy asynchronously from the canonical event sequence. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Surveillance from also owning the contract and failure behavior of Trading Halt Control. | 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 “Market data consumer misses gap” to Surveillance. | 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 / Replay boundary before extracting or scaling it. |
| Trading Halt Control | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Clearing/surveillance reconcile executions; snapshots plus journal replay recover the engine. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Snapshot / Replay 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 “Trading halt races queued orders” to Snapshot / Replay. | 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 Trading Halt Control boundary before extracting or scaling it. |