| Driver / Attendant | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Classify vehicle and query the floor/type availability index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Entry Gate. | 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 “Two entry gates choose same spot” 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 Driver / Attendant boundary before extracting or scaling it. |
| Entry Gate | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Spot strategy selects candidate; conditional transition AVAILABLE→HELD prevents double assignment. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Driver / Attendant from also owning the contract and failure behavior of Ticket Kiosk. | 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 “Sensor says occupied before ticket commit” to Driver / Attendant. | 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 Entry Gate boundary before extracting or scaling it. |
| Ticket Kiosk | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Commit ticket and spot occupancy, then open gate and update display projection. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Entry Gate from also owning the contract and failure behavior of Vehicle Classifier. | 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 “Payment succeeds but exit gate fails” to Entry Gate. | 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 Ticket Kiosk boundary before extracting or scaling it. |
| Vehicle Classifier | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: At exit price from entry time/rules, settle idempotently, and mark ticket paid. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Ticket Kiosk from also owning the contract and failure behavior of Parking 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 “Lost ticket has no entry evidence” to Ticket Kiosk. | 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 Vehicle Classifier boundary before extracting or scaling it. |
| Parking Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Open exit, release spot, and reconcile sensor disagreements into an operator queue. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Vehicle Classifier from also owning the contract and failure behavior of Spot Strategy. | 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 “Accessible/EV policy changes while held” to Vehicle Classifier. | 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 Parking Service boundary before extracting or scaling it. |
| Spot Strategy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Classify vehicle and query the floor/type availability index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Parking Service from also owning the contract and failure behavior of Floor Availability 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 “Two entry gates choose same spot” to Parking 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 Spot Strategy boundary before extracting or scaling it. |
| Floor Availability Index | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Spot strategy selects candidate; conditional transition AVAILABLE→HELD prevents double assignment. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Spot Strategy from also owning the contract and failure behavior of Spot Aggregate. | 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 “Sensor says occupied before ticket commit” to Spot Strategy. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (10K spots · multiple gates · real-time availability) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Floor Availability Index boundary before extracting or scaling it. |
| Spot Aggregate | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Commit ticket and spot occupancy, then open gate and update display projection. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Floor Availability Index from also owning the contract and failure behavior of Ticket 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 “Payment succeeds but exit gate fails” to Floor Availability Index. | 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 Spot Aggregate boundary before extracting or scaling it. |
| Ticket Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: At exit price from entry time/rules, settle idempotently, and mark ticket paid. | Defines the source of truth and commit boundary. It prevents Spot Aggregate from also owning the contract and failure behavior of Sensor Gateway. | 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 “Lost ticket has no entry evidence” to Spot Aggregate. | 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 Ticket Store boundary before extracting or scaling it. |
| Sensor Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Open exit, release spot, and reconcile sensor disagreements into an operator queue. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Ticket Store from also owning the contract and failure behavior of Exit Gate. | 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 “Accessible/EV policy changes while held” to Ticket Store. | 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 Sensor Gateway boundary before extracting or scaling it. |
| Exit Gate | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Classify vehicle and query the floor/type availability index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Sensor Gateway from also owning the contract and failure behavior of Pricing Strategy. | 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 “Two entry gates choose same spot” to Sensor 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 Exit Gate boundary before extracting or scaling it. |
| Pricing Strategy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Spot strategy selects candidate; conditional transition AVAILABLE→HELD prevents double assignment. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Exit Gate from also owning the contract and failure behavior of Payment Adapter. | 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 “Sensor says occupied before ticket commit” to Exit Gate. | 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 Pricing Strategy boundary before extracting or scaling it. |
| Payment Adapter | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Commit ticket and spot occupancy, then open gate and update display projection. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Pricing Strategy from also owning the contract and failure behavior of Display Boards. | 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 “Payment succeeds but exit gate fails” to Pricing Strategy. | 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 Payment Adapter boundary before extracting or scaling it. |
| Display Boards | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: At exit price from entry time/rules, settle idempotently, and mark ticket paid. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Payment Adapter from also owning the contract and failure behavior of Reconciliation. | 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 “Lost ticket has no entry evidence” to Payment Adapter. | 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 Display Boards boundary before extracting or scaling it. |
| Reconciliation | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Open exit, release spot, and reconcile sensor disagreements into an operator queue. | Proves correctness and supports controlled recovery. It prevents Display Boards 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 “Accessible/EV policy changes while held” to Display Boards. | 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 Reconciliation boundary before extracting or scaling it. |