| Creator App | Owns client protocol, request identity, retry, and resume behavior. In this design it participates in: Upload media directly, checksum it, scan it, and generate renditions. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Media Upload Edge. | 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 “Media upload completes but post never commits” 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 Creator App boundary before extracting or scaling it. |
| Media Upload Edge | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Validate ownership of ready media and commit immutable post identity plus version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Creator App from also owning the contract and failure behavior of Post API. | 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 “Privacy changes while timelines contain the post” to Creator 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 Media Upload Edge boundary before extracting or scaling it. |
| Post API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Publish post-created to timeline, search, notification, and moderation consumers. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Media Upload Edge from also owning the contract and failure behavior of Auth / Privacy. | 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 “Moderation removes a viral cached asset” to Media Upload Edge. | 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 Post API boundary before extracting or scaling it. |
| Auth / Privacy | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve text/metadata from post storage and immutable renditions through CDN. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Post API from also owning the contract and failure behavior of Media Scanner. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Fanout consumer replays post-created” to Post API. | 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 Auth / Privacy boundary before extracting or scaling it. |
| Media Scanner | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Edits create a new version; deletes create a tombstone that invalidates projections. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Auth / Privacy from also owning the contract and failure behavior of Transcode Workers. | Embed policy in every caller. Rules then drift by deployment version and emergency changes require fleet-wide redeployment. Here that simpler choice would couple “Edit and delete race on the same version” to Auth / Privacy. | 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 Media Scanner boundary before extracting or scaling it. |
| Transcode Workers | Executes idempotent asynchronous work under lease and retry policy. In this design it participates in: Upload media directly, checksum it, scan it, and generate renditions. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Media Scanner from also owning the contract and failure behavior of Object Storage. | Perform the work before acknowledging the caller. This gives simpler consistency but unbounded tail latency and fragile retries. Here that simpler choice would couple “Media upload completes but post never commits” to Media Scanner. | Costs leases, checkpoints, retries, DLQs, and lag operations. Separate once execution time or burstiness no longer fits the request deadline. Measure the latency, saturation, lag, or mismatch at the Transcode Workers boundary before extracting or scaling it. |
| Object Storage | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Validate ownership of ready media and commit immutable post identity plus version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Transcode Workers from also owning the contract and failure behavior of Post Metadata DB. | 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 “Privacy changes while timelines contain the post” to Transcode Workers. | 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 Object Storage boundary before extracting or scaling it. |
| Post Metadata DB | Owns authoritative versioned state or immutable evidence. In this design it participates in: Publish post-created to timeline, search, notification, and moderation consumers. | Defines the source of truth and commit boundary. It prevents Object Storage from also owning the contract and failure behavior of Social Graph. | 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 “Moderation removes a viral cached asset” to Object Storage. | 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 Post Metadata DB boundary before extracting or scaling it. |
| Social Graph | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve text/metadata from post storage and immutable renditions through CDN. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Post Metadata DB from also owning the contract and failure behavior of Timeline Event Bus. | 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 “Fanout consumer replays post-created” to Post Metadata DB. | 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 Social Graph boundary before extracting or scaling it. |
| Timeline Event Bus | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Edits create a new version; deletes create a tombstone that invalidates projections. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Social Graph from also owning the contract and failure behavior of Fanout 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 “Edit and delete race on the same version” to Social 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 Timeline Event Bus boundary before extracting or scaling it. |
| Fanout Service | Executes idempotent asynchronous work under lease and retry policy. In this design it participates in: Upload media directly, checksum it, scan it, and generate renditions. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Timeline Event Bus from also owning the contract and failure behavior of Search Indexer. | Perform the work before acknowledging the caller. This gives simpler consistency but unbounded tail latency and fragile retries. Here that simpler choice would couple “Media upload completes but post never commits” to Timeline Event Bus. | Costs leases, checkpoints, retries, DLQs, and lag operations. Separate once execution time or burstiness no longer fits the request deadline. Measure the latency, saturation, lag, or mismatch at the Fanout Service boundary before extracting or scaling it. |
| Search Indexer | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Validate ownership of ready media and commit immutable post identity plus version. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Fanout Service from also owning the contract and failure behavior of Moderation 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 “Privacy changes while timelines contain the post” to Fanout Service. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1B users · 500M posts/day · media dominates storage) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Search Indexer boundary before extracting or scaling it. |
| Moderation Service | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish post-created to timeline, search, notification, and moderation consumers. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Search Indexer from also owning the contract and failure behavior of CDN. | 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 “Moderation removes a viral cached asset” to Search Indexer. | 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 Moderation Service boundary before extracting or scaling it. |
| CDN | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Serve text/metadata from post storage and immutable renditions through CDN. | Removes repeated work from the latency-critical path. It prevents Moderation Service from also owning the contract and failure behavior of operators and repair tooling. | 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 “Fanout consumer replays post-created” to Moderation Service. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1B users · 500M posts/day · media dominates storage) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the CDN boundary before extracting or scaling it. |