| Spreadsheet UI | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Parse edited formula, update dependency edges, and reject/report cycles. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Workbook Controller. | 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 “Edit introduces dependency cycle” 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 Spreadsheet UI boundary before extracting or scaling it. |
| Workbook Controller | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Mark transitive dependent frontier dirty and topologically schedule only affected cells. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Spreadsheet UI from also owning the contract and failure behavior of Cell 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 “Volatile function invalidates whole workbook” to Spreadsheet UI. | 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 Workbook Controller boundary before extracting or scaling it. |
| Cell Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Evaluate pure functions with memoized input versions; sandbox UDFs under budget. | Defines the source of truth and commit boundary. It prevents Workbook Controller from also owning the contract and failure behavior of Formula Parser. | 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 “UDF loops or accesses network” to Workbook Controller. | 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 Cell Store boundary before extracting or scaling it. |
| Formula Parser | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish calculated values for workbook version and notify collaborators. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Cell Store from also owning the contract and failure behavior of AST / Bytecode. | 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 “Concurrent edits change same formula” to Cell 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 Formula Parser boundary before extracting or scaling it. |
| AST / Bytecode | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Persist operation log/snapshots for undo, merge, export, and crash recovery. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Formula Parser from also owning the contract and failure behavior of Dependency Graph. | 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 “Large range dependency explodes graph” to Formula Parser. | 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 AST / Bytecode boundary before extracting or scaling it. |
| Dependency Graph | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Parse edited formula, update dependency edges, and reject/report cycles. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents AST / Bytecode from also owning the contract and failure behavior of Cycle Detector. | 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 “Edit introduces dependency cycle” to AST / Bytecode. | 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 Dependency Graph boundary before extracting or scaling it. |
| Cycle Detector | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Mark transitive dependent frontier dirty and topologically schedule only affected cells. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Dependency Graph from also owning the contract and failure behavior of Dirty Frontier. | 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 “Volatile function invalidates whole workbook” to Dependency Graph. | 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 Cycle Detector boundary before extracting or scaling it. |
| Dirty Frontier | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Evaluate pure functions with memoized input versions; sandbox UDFs under budget. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Cycle Detector from also owning the contract and failure behavior of Calculation Scheduler. | 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 “UDF loops or accesses network” to Cycle Detector. | 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 Dirty Frontier boundary before extracting or scaling it. |
| Calculation Scheduler | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish calculated values for workbook version and notify collaborators. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Dirty Frontier from also owning the contract and failure behavior of Function Registry. | 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 “Concurrent edits change same formula” to Dirty Frontier. | 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 Calculation Scheduler boundary before extracting or scaling it. |
| Function Registry | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Persist operation log/snapshots for undo, merge, export, and crash recovery. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Calculation Scheduler from also owning the contract and failure behavior of Sandboxed UDF. | 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 “Large range dependency explodes graph” to Calculation Scheduler. | 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 Function Registry boundary before extracting or scaling it. |
| Sandboxed UDF | Owns authoritative versioned state or immutable evidence. In this design it participates in: Parse edited formula, update dependency edges, and reject/report cycles. | Defines the source of truth and commit boundary. It prevents Function Registry from also owning the contract and failure behavior of Range Index. | 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 “Edit introduces dependency cycle” to Function Registry. | 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 Sandboxed UDF boundary before extracting or scaling it. |
| Range Index | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Mark transitive dependent frontier dirty and topologically schedule only affected cells. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Sandboxed UDF from also owning the contract and failure behavior of Version / Undo Log. | 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 “Volatile function invalidates whole workbook” to Sandboxed UDF. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1M cells/sheet · incremental recalc · versioned edits) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Range Index boundary before extracting or scaling it. |
| Version / Undo Log | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Evaluate pure functions with memoized input versions; sandbox UDFs under budget. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Range Index from also owning the contract and failure behavior of Collaboration Merge. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “UDF loops or accesses network” to Range Index. | 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 Version / Undo Log boundary before extracting or scaling it. |
| Collaboration Merge | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Atomically publish calculated values for workbook version and notify collaborators. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Version / Undo Log from also owning the contract and failure behavior of Persistence / Export. | 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 “Concurrent edits change same formula” to Version / Undo 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 Collaboration Merge boundary before extracting or scaling it. |
| Persistence / Export | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Persist operation log/snapshots for undo, merge, export, and crash recovery. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Collaboration Merge 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 “Large range dependency explodes graph” to Collaboration Merge. | 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 Persistence / Export boundary before extracting or scaling it. |