| Rider App | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Map-match driver updates and upsert only newer observations into the geo index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Driver App. | 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 matchers offer the same driver” 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 Rider App boundary before extracting or scaling it. |
| Driver App | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Search the pickup cell, expand rings, filter eligibility, and rank by ETA. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Rider App from also owning the contract and failure behavior of Realtime 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 “Stale GPS makes nearest driver wrong” to Rider App. | 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 App boundary before extracting or scaling it. |
| Realtime Gateway | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Create short candidate offers; reserve one driver using a conditional lease. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Driver App from also owning the contract and failure behavior of Location Ingest. | 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 “Accepted driver disconnects before pickup” to Driver App. | 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 Realtime Gateway boundary before extracting or scaling it. |
| Location Ingest | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Advance trip state with expected version and append each transition to the event trail. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Realtime Gateway from also owning the contract and failure behavior of Map Matcher. | 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 “Surge quote expires during request” to Realtime 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 Location Ingest boundary before extracting or scaling it. |
| Map Matcher | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Use location/trip events for pricing, safety, receipts, and post-trip settlement. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Location Ingest from also owning the contract and failure behavior of Geo Cell 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 “Trip transition arrives out of order” to Location Ingest. | 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 Map Matcher boundary before extracting or scaling it. |
| Geo Cell Index | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Map-match driver updates and upsert only newer observations into the geo index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Map Matcher from also owning the contract and failure behavior of Supply Service. | 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 “Two matchers offer the same driver” to Map Matcher. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (5M active drivers · updates every 3–5 s · match < 2 s) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Geo Cell Index boundary before extracting or scaling it. |
| Supply Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Search the pickup cell, expand rings, filter eligibility, and rank by ETA. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Geo Cell Index 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 “Stale GPS makes nearest driver wrong” to Geo Cell 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 Supply Service boundary before extracting or scaling it. |
| Matching Engine | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Create short candidate offers; reserve one driver using a conditional lease. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Supply Service from also owning the contract and failure behavior of Driver Lease 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 “Accepted driver disconnects before pickup” to Supply 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 Matching Engine boundary before extracting or scaling it. |
| Driver Lease Store | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Advance trip state with expected version and append each transition to the event trail. | Defines the source of truth and commit boundary. It prevents Matching Engine from also owning the contract and failure behavior of Trip State 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 “Surge quote expires during request” to Matching Engine. | 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 Driver Lease Store boundary before extracting or scaling it. |
| Trip State Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Use location/trip events for pricing, safety, receipts, and post-trip settlement. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Driver Lease Store from also owning the contract and failure behavior of Pricing 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 “Trip transition arrives out of order” to Driver Lease 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 Trip State Service boundary before extracting or scaling it. |
| Pricing Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Map-match driver updates and upsert only newer observations into the geo index. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Trip State Service from also owning the contract and failure behavior of ETA / Route 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 “Two matchers offer the same driver” to Trip State 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 Pricing Service boundary before extracting or scaling it. |
| ETA / Route Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Search the pickup cell, expand rings, filter eligibility, and rank by ETA. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Pricing Service from also owning the contract and failure behavior of Payment Events. | 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 “Stale GPS makes nearest driver wrong” to Pricing 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 ETA / Route Service boundary before extracting or scaling it. |
| Payment Events | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Create short candidate offers; reserve one driver using a conditional lease. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents ETA / Route Service from also owning the contract and failure behavior of Safety / Audit. | 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 “Accepted driver disconnects before pickup” to ETA / Route 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 Payment Events boundary before extracting or scaling it. |
| Safety / Audit | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Advance trip state with expected version and append each transition to the event trail. | Proves correctness and supports controlled recovery. It prevents Payment Events 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 “Surge quote expires during request” to Payment Events. | 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 Safety / Audit boundary before extracting or scaling it. |