Skip to content
DBRaven
Concerns

Rule-based disposition: any dimension at its most severe tier caps this at “concerns” or worse. Never an averaged score.

  • Operational Readiness: E-Commerce Order Platform requires high operational expertise at 'experienced backend team' level. Current readiness estimate is 34%, critical gaps must be resolved before adoption. Consider starting with a simpler scenario and evolving toward this one.
Full ReviewModerate Readinessdraft

Architecture Review: E-Commerce Order Platform

An e-commerce order lifecycle platform handling cart, checkout, payment, fulfillment, and returns across a mixed read/write workload where product discovery is read-heavy, checkout is write-transactional, and fulfillment is event-driven. The saga pattern orchestrates multi-step checkout: reserve inventory → charge payment → confirm order → notify fulfillment. PostgreSQL owns order records and inventory with row-level locking; Redis holds session state and cart contents with sub-millisecond access; RabbitMQ delivers fulfillment notifications with dead-letter handling; Elasticsearch serves product search and order history with faceted navigation. CQRS separates the write command path from the read model: the order read model is denormalized for fast order history queries without joining across domain tables.

Evidence Confidence

Moderate

strong

Executive Summary

E-Commerce Order Platform carries moderate operational readiness (81% evidence confidence). 0 architectural strengths identified, 6 operational risks to manage. Primary concern: Cascading Failure. Requires Advanced operational maturity.

Readiness Rationale

Overall moderate readiness across 8 dimensions. Limited: scaling, team maturity. Strong: migration, observability, failure recovery.

Key Concerns

  • !Cascading Failure
  • !Lock Contention

Key Strengths

  • +Architecture is well-defined for the marketplace platform problem profile

8

Assessments

4

Tradeoffs

6

Sections

12

Recommendations

Readiness Assessments

8

Governance Posture

4

Structural boundary and anti-pattern compliance: whether this architecture's topology violates documented governance policies. Distinct from operational readiness (below), which asks whether the team and infrastructure are prepared to run it.

Concerning

4 governance policy matches and 1 anti-pattern match put E-Commerce Order Platform's governance posture at concerning risk. Resilience is limited; burden is extreme.

4

violations

1

anti-patterns

Governance Violations

Anti-Pattern Matches

Resilience

limited

Blast radius: contained

45%

resilience score

Coupling Risks

  • ·Saga compensation cascade from payment provider timeout: when the payment provid

Resilience Gaps

  • 5 high-exposure risk nodes increase blast radius

Operational Burden

extreme

operational burden

100%

burden index

Complexity Drivers

  • 7 architecture patterns increase configuration surface
  • Saga compensation cascade from payment provider timeout: when the payment provid
  • Flash sale inventory row hot lock contention: a flash sale with 10,000 concurren

Observability Burden

  • elasticsearch: requires dedicated monitoring instrumentation
  • kafka: requires dedicated monitoring instrumentation
  • postgresql: requires dedicated monitoring instrumentation
  • rabbitmq: requires dedicated monitoring instrumentation

Recovery Complexity

  • 1 risk propagation path(s) complicate failure recovery

Maturity

Required

Advanced

Estimated

Advanced

Gap

No Gap

The architecture's required maturity (advanced) aligns with or is below the estimated team capability.

Operational Readiness

7

Adoption readiness: whether the team, infrastructure, and observability are prepared to run this architecture safely. Distinct from governance posture (above), which asks whether the topology itself violates architectural boundaries.

Not Readymarketplace platform

E-Commerce Order Platform requires high operational expertise at 'experienced backend team' level. Current readiness estimate is 34%, critical gaps must be resolved before adoption. Consider starting with a simpler scenario and evolving toward this one.

Readiness Score

34%

Blocking Prerequisites

4

Complexity

High

Confidence

Strong

Assessment derived from scenario knowledge, advisor output, topology analysis, and 7 prerequisite checks.

Prerequisite Checklist (4 blocking, 3 non-blocking)

blocking

team

Team at 'experienced backend team' maturity level

This scenario is rated 'experienced backend team' complexity. Engineers with 2+ years of production backend experience, including database tuning and monitoring.

Gap signal: Team frequently reaches for external help during incidents or struggles to debug multi-system issues independently.

blocking

process

Failure mode awareness and runbooks

The team must understand the 6 documented failure modes for this scenario: lock_contention, cascading_failure, thundering_herd, queue_backlog_accumulation. Each should have a documented detection procedure and runbook.

Gap signal: The team has no documented runbooks for the scenario's failure modes or cannot name them without reference material.

blocking

monitoring

Production-grade observability stack

The scenario requires real-time metrics, structured logging, and distributed tracing on all critical components. Alerting must be configured before going live.

Gap signal: No dashboards exist for the critical path metrics in the scenario.

infrastructure

Minimum team maturity: Experienced Backend Team

This scenario has high operational complexity. It is recommended for Experienced Backend Team teams or higher.

Gap signal: The requirement 'Minimum team maturity: Experienced Backend Team' is not yet in place.

infrastructure

Runbooks and alerting for high-severity risks

5 high-severity risks identified. Each requires a documented runbook, alerting threshold, and on-call response procedure before running in production.

Gap signal: The requirement 'Runbooks and alerting for high-severity risks' is not yet in place.

infrastructure

Event stream operations expertise

This architecture includes event stream infrastructure (Kafka, Kinesis, or similar). Operations requires consumer group management, partition assignment, dead-letter handling, and lag monitoring.

Gap signal: The requirement 'Event stream operations expertise' is not yet in place.

blocking

infrastructure

Mitigation for 2 high-risk topology node(s)

Nodes with high or critical risk exposure: Financial Transaction, PostgreSQL. Each requires documented mitigation before production deployment.

Gap signal: No mitigation strategy is documented for the high-risk nodes in the topology.

Infrastructure Requirements

Elasticsearch

high burden

Distributed full-text search and analytics engine built on Apache Lucene, designed for near-real-time indexing, complex search queries, and log analyt

Managed: Elastic Cloud (Elastic.co), Amazon OpenSearch Service, Elastic Cloud on Kubernetes (ECK)

Apache Kafka

high burden

Distributed event streaming platform designed for high-throughput, fault-tolerant, ordered, and durable log-based messaging between producers and cons

Managed: Amazon MSK (Managed Streaming for Kafka), Confluent Cloud, Azure Event Hubs (Kafka-compatible), Redpanda Cloud

PostgreSQL

medium burden

ACID-compliant relational database with strong consistency, JSONB support, full-text search, and mature replication.

Managed: Amazon RDS for PostgreSQL, Amazon Aurora PostgreSQL, Google Cloud SQL for PostgreSQL, Azure Database for PostgreSQL, Supabase, Neon

RabbitMQ

medium burden

AMQP-based message broker with flexible routing (exchanges, queues, bindings), acknowledgment-based delivery, and per-message TTL and dead-letter queu

Managed: CloudAMQP, Amazon MQ for RabbitMQ, Azure Service Bus (AMQP-compatible)

Redis

low burden

In-memory key-value store with optional persistence, supporting strings, hashes, lists, sets, sorted sets, and pub/sub.

Managed: Amazon ElastiCache for Redis, Google Cloud Memorystore, Azure Cache for Redis, Redis Cloud, Upstash

Observability Requirements

Monitor generic risk probe signals

Seed 'Deadlock Risk Probe' identifies 2 metrics relevant to deadlock.

Seed 'Deadlock Risk Probe' identifies 2 metrics relevant to deadlock.

Track Lock Contention exposure

Lock Contention has high exposure and affects 0 components. Affects 0 nodes

Lock Contention has high exposure and affects 0 components. Affects 0 nodes

Track Cascading Failure exposure

Cascading Failure has high exposure and affects 0 components. Affects 0 nodes

Cascading Failure has high exposure and affects 0 components. Affects 0 nodes

Track Thundering Herd exposure

Thundering Herd has high exposure and affects 0 components. Affects 0 nodes

Thundering Herd has high exposure and affects 0 components. Affects 0 nodes

Track Queue Backlog Accumulation exposure

Queue Backlog Accumulation has high exposure and affects 0 components. Affects 0 nodes

Queue Backlog Accumulation has high exposure and affects 0 components. Affects 0 nodes

PostgreSQL pg_locks showing high RowExclusiveLock contention on inventory_items for specific sku_ids; checkout p99 > 2s

This signal indicates the architecture is approaching 'Tier 1: Flash Sale Inventory Contention'. Likely bottleneck: Concurrent saga checkout attempts competing for the same inventory row via row-level locking.

Tier 1: Flash Sale Inventory Contention

Checkout p99 tracking payment provider p99 almost linearly; connection pool utilization on the payment service rising du

This signal indicates the architecture is approaching 'Tier 2: Payment Provider Latency Amplifying Checkout Latency'. Likely bottleneck: Checkout saga holding a database connection and an inventory reservation open for the duration of the payment provider call: payment latency directly amplifies connection pool pressure.

Tier 2: Payment Provider Latency Amplifying Checkout Latency

CDC consumer lag on the Elasticsearch indexing consumer > 30s during catalog bulk updates; customer complaints about pri

This signal indicates the architecture is approaching 'Tier 3: Elasticsearch Index Staleness During High Catalog Update Rate'. Likely bottleneck: Elasticsearch bulk indexing throughput insufficient to keep pace with high-volume catalog update events from Kafka.

Tier 3: Elasticsearch Index Staleness During High Catalog Update Rate

Readiness Action Plan

Criticalteam

Satisfy: Team at 'experienced backend team' maturity level

Effort: 1–4 weeks depending on current state · Unblocks: Adoption of E-Commerce Order Platform

Criticalprocess

Satisfy: Failure mode awareness and runbooks

Effort: 1–4 weeks depending on current state · Unblocks: Adoption of E-Commerce Order Platform

Criticalmonitoring

Satisfy: Production-grade observability stack

Effort: 1–4 weeks depending on current state · Unblocks: Adoption of E-Commerce Order Platform

Criticalinfrastructure

Satisfy: Mitigation for 2 high-risk topology node(s)

Effort: 1–4 weeks depending on current state · Unblocks: Adoption of E-Commerce Order Platform

Highmonitoring

Instrument all critical path components with metrics and alerting

Effort: 1–2 weeks · Unblocks: Safe production adoption and incident response

Highprocess

Validate adoption in a staging environment before production

Effort: 2–4 weeks for thorough staging validation · Unblocks: Production confidence and rollback preparedness

Mediuminfrastructure

Mitigate risk: Lock Contention

Effort: 1–3 weeks · Unblocks: Reduces 'Lock Contention' from blocking adoption

Mediuminfrastructure

Mitigate risk: Cascading Failure

Effort: 1–3 weeks · Unblocks: Reduces 'Cascading Failure' from blocking adoption

Go Signals

  • Team has hands-on experience with all 5 referenced technologies.
  • All scenario failure modes have documented runbooks and alerting coverage.
  • A staging environment that mirrors production load has been tested successfully.

No-Go Signals

  • Team cannot explain or debug any of E-Commerce Order Platform's documented failure modes.
  • No observability baseline exists for the critical components.
  • Top risk is unmitigated: 'Lock Contention', do not proceed without addressing this.

Critical Gaps

  • This scenario has high operational complexity, teams without deep production experience will struggle to operate it safely.

Team Requirements

Elasticsearch operations

Required level: proficient

Team can explain Elasticsearch's failure modes, tune configuration parameters under load, and recover from common operational issues.

Apache Kafka operations

Required level: proficient

Team can explain Apache Kafka's failure modes, tune configuration parameters under load, and recover from common operational issues.

PostgreSQL operations

Required level: proficient

Team can explain PostgreSQL's failure modes, tune configuration parameters under load, and recover from common operational issues.

RabbitMQ operations

Required level: proficient

Team can explain RabbitMQ's failure modes, tune configuration parameters under load, and recover from common operational issues.

Redis operations

Required level: proficient

Team can explain Redis's failure modes, tune configuration parameters under load, and recover from common operational issues.

Readiness assessment is derived from structured scenario and topology knowledge. It provides an evidence-grounded baseline, not a substitute for an actual team capability review or infrastructure audit. Validate each item against your specific environment.

Architectural Tradeoffs

4

Recommendations

12
High

Monitor: Lock Contention

risk_monitoring

Concurrent writers to the same rows serialize behind each other's row locks, so latency is set not by the work a transaction does but by how long it waits for the writers ahead of it. On a hot row the queue depth, and therefore the tail latency, grows with concurrency while throughput flattens. Blocked writers hold connections open, so a single contended row can drain the connection pool as a secondary failure.

Affects 0 nodes

High

Monitor: Cascading Failure

risk_monitoring

A failure or degradation in one service causes increased load, held resources, or error propagation in its callers, which in turn degrade their callers, until the failure front propagates through the entire dependency graph and brings down services with no direct dependency on the original failure point.

Affects 0 nodes

High

Implement: Monitor generic risk probe signals

observability

Seed 'Deadlock Risk Probe' identifies 2 metrics relevant to deadlock.

Metrics to instrument: error_rate, p95_latency_ms

Moderate

Synchronous checkout with direct database payment insert and synchronous payment API call → Saga-orchestrated checkout with outbox-based fulfillment events

migration_planning

Trigger: Payment provider timeout causing full checkout rollback and user-facing error; fulfillment system outage causing checkout to fail synchronously rather than queue the fulfillment work; inability to replay failed fulfillment notifications after downstream system recovery. Migrate from 'Synchronous checkout with direct database payment insert and synchronous payment API call' to 'Saga-orchestrated checkout with outbox-based fulfillment events'. Implement the outbox pattern and fulfill-via-event flow first, before the full saga orchestrator. Validate that fulfillment events are reliably delivered across payment provider failures before implementing compensation logic.

Saga compensation paths for every checkout failure scenario must be designed before deployment: partial saga implementation is more dangerous than no saga; Idempotency keys for the payment provider must be persisted before the payment call, not after: a crash between these two events causes a payment charge with no local record

Moderate

PostgreSQL full-text search for product discovery → Elasticsearch for product search with CDC-based catalog indexing

migration_planning

Trigger: Product search p99 > 1s; faceted navigation (category + price range + brand + availability) requiring full-table scans in PostgreSQL; ranking by popularity or relevance score not achievable in PostgreSQL without full-table aggregation. Migrate from 'PostgreSQL full-text search for product discovery' to 'Elasticsearch for product search with CDC-based catalog indexing'. Run Elasticsearch in shadow mode for 2 weeks before serving traffic. Compare search result sets between PostgreSQL full-text and Elasticsearch for a representative query sample. Validate CDC latency meets the acceptable price staleness window.

Elasticsearch index must be seeded from PostgreSQL before CDC takes over: the initial bulk import must complete without catalog updates being lost during the window; Search result prices are eventually consistent with PostgreSQL: checkout must re-validate price at order creation, not trust the search result price

Moderate

Prepare runbook for: Burst Traffic Cold Cache Stampede

simulation_preparedness

Simulation demonstrates critical degradation of redis, postgresql

Without a runbook, recovery from this failure mode will be ad-hoc

Moderate

Prepare runbook for: Connection Pool Exhaustion with Horizontal User Scale

simulation_preparedness

Simulation demonstrates critical degradation of postgresql

Without a runbook, recovery from this failure mode will be ad-hoc

Moderate

Plan evolution: OLTP Analytics Queries → OLTP + OLAP Separation

evolution_planning

Evolution from Unified OLTP + Analytics on PostgreSQL → Separated OLTP (PostgreSQL) + OLAP (ClickHouse/Snowflake)

Migration complexity: medium. Rollback: always.

Moderate

Plan evolution: Single Cache Layer → Distributed Cache

evolution_planning

Evolution from Single Redis Node / Sentinel Cluster → Distributed Redis Cluster (Consistent Hash Ring)

Migration complexity: medium. Rollback: complex.

Moderate

Cache-outage database fallback load

caching

'E-Commerce Order Platform' includes a cache in its topology. If the cache becomes unavailable, the primary database receives the cache's full request load until the cache recovers.

Capacity-plan the primary database for this fallback load, not only for the steady-state cached load.

Moderate

Cache invalidation ownership

caching

Cache invalidation for E-Commerce Order Platform is event-driven: rabbitmq refreshes or invalidates redis. This couples cache freshness to consumer lag on that event stream, not to the primary write path directly.

If the event-stream consumer falls behind, the cache serves stale data until it catches up -- monitor consumer lag as a cache-freshness signal, not only a backlog signal.

Low

Monitor threshold: Tier 1: Flash Sale Inventory Contention

scaling_monitoring

Signal: PostgreSQL pg_locks showing high RowExclusiveLock contention on inventory_items for specific sku_ids; checkout p99 > 2s for contended SKUs; deadlock errors appearing in application logs during sale events; effective checkout throughput for hot SKUs well below per-request checkout latency would predict

Bottleneck: Concurrent saga checkout attempts competing for the same inventory row via row-level locking. Evolution: Introduce a per-SKU checkout serialization queue at the application layer : all concurrent checkout requests for the same SKU are queued and processed serially, converting lock contention into queue latency. Alternatively, use PostgreSQL advisory locks with non-blocking trylock: requests that cannot acquire the lock immediately return a "sold out" response rather than queuing. For very high flash sale volumes, pre-allocate inventory slots (reserve N slots per sale event, each slot is a row with one reservation) to spread lock contention across N rows instead of one.

Scaling Pressure Signals

8

PostgreSQL pg_locks showing high RowExclusiveLock contention on inventory_items for specific sku_ids; checkout p99 > 2s for contended SKUs; deadlock errors appearing in application logs during sale events; effective checkout throughput for hot SKUs well below per-request checkout latency would predict

Threshold

Tier 1: Flash Sale Inventory Contention

Likely Bottleneck

Concurrent saga checkout attempts competing for the same inventory row via row-level locking

Recommended Evolution

Introduce a per-SKU checkout serialization queue at the application layer : all concurrent checkout requests for the same SKU are queued and processed serially, converting lock contention into queue latency. Alternatively, use PostgreSQL advisory locks with non-blocking trylock: requests that cannot acquire the lock immediately return a "sold out" response rather than queuing. For very high flash sale volumes, pre-allocate inventory slots (reserve N slots per sale event, each slot is a row with one reservation) to spread lock contention across N rows instead of one.

Checkout p99 tracking payment provider p99 almost linearly; connection pool utilization on the payment service rising during payment provider slowdowns; circuit breaker trip events appearing in payment service metrics; saga timeout events correlated with payment provider latency spikes

Threshold

Tier 2: Payment Provider Latency Amplifying Checkout Latency

Likely Bottleneck

Checkout saga holding a database connection and an inventory reservation open for the duration of the payment provider call: payment latency directly amplifies connection pool pressure

Recommended Evolution

Decouple the payment step from the synchronous checkout saga: reserve inventory and create the order record synchronously, then process payment asynchronously. The customer receives an "order confirmed, payment processing" state immediately; the payment step runs as a separate saga step triggered by an event. This reduces the synchronous checkout latency to the inventory reservation time, not the payment provider round-trip time.

CDC consumer lag on the Elasticsearch indexing consumer > 30s during catalog bulk updates; customer complaints about price changes not visible in search; search result prices diverging from checkout prices by more than the acceptable window; Kibana showing indexing throughput below the catalog update rate

Threshold

Tier 3: Elasticsearch Index Staleness During High Catalog Update Rate

Likely Bottleneck

Elasticsearch bulk indexing throughput insufficient to keep pace with high-volume catalog update events from Kafka

Recommended Evolution

Tune Elasticsearch bulk indexing batch size and flush interval to increase indexing throughput; add indexing consumer replicas with partition-based assignment to parallelize indexing across catalog segment partitions. Introduce a "price_as_of" timestamp in search results displayed to customers : this converts an invisible consistency gap into an explicit, auditable staleness signal that satisfies most checkout price dispute scenarios.

Evidence:elasticsearch-reindexing-pressurekafka-consumer-lag-cascade

PostgreSQL primary CPU > 75% sustained under combined checkout + catalog write + order history read workloads; domain team schema migrations blocking each other; connection pool exhausted by combined connection demand from checkout, catalog, and order history services sharing the same pool

Threshold

Tier 4: Domain Decomposition Pressure from Shared PostgreSQL

Likely Bottleneck

Shared PostgreSQL primary serving multiple distinct domain workloads: catalog writes, order transactions, and return processing all competing for the same resource pool

Recommended Evolution

Decompose into catalog database (product data, inventory), orders database (orders, payments, returns), and user database (sessions, preferences) using database-per-service pattern. Each domain gets its own connection pool and its own schema migration lifecycle. Cross-domain data access moves to events or API calls: direct cross-database JOINs are eliminated.

Evidence:elasticsearch-reindexing-pressurekafka-consumer-lag-cascade

PostgreSQL pg_locks showing high RowExclusiveLock contention on inventory_items for specific sku_ids; checkout p99 > 2s for contended SKUs; deadlock errors appearing in application logs during sale events; effective checkout throughput for hot SKUs well below per-request checkout latency would predict

Threshold

Escalation trigger: Concurrent saga checkout attempts competing for the same inventory row via row-level locking

Likely Bottleneck

Tier 1: Flash Sale Inventory Contention

Recommended Evolution

Monitor: error_rate, p95_latency_ms

Checkout p99 tracking payment provider p99 almost linearly; connection pool utilization on the payment service rising during payment provider slowdowns; circuit breaker trip events appearing in payment service metrics; saga timeout events correlated with payment provider latency spikes

Threshold

Escalation trigger: Checkout saga holding a database connection and an inventory reservation open for the duration of the payment provider call: payment latency directly amplifies connection pool pressure

Likely Bottleneck

Tier 2: Payment Provider Latency Amplifying Checkout Latency

Recommended Evolution

Monitor: error_rate, p95_latency_ms

CDC consumer lag on the Elasticsearch indexing consumer > 30s during catalog bulk updates; customer complaints about price changes not visible in search; search result prices diverging from checkout prices by more than the acceptable window; Kibana showing indexing throughput below the catalog update rate

Threshold

Escalation trigger: Elasticsearch bulk indexing throughput insufficient to keep pace with high-volume catalog update events from Kafka

Likely Bottleneck

Tier 3: Elasticsearch Index Staleness During High Catalog Update Rate

Recommended Evolution

Monitor: error_rate, p95_latency_ms

PostgreSQL primary CPU > 75% sustained under combined checkout + catalog write + order history read workloads; domain team schema migrations blocking each other; connection pool exhausted by combined connection demand from checkout, catalog, and order history services sharing the same pool

Threshold

Escalation trigger: Shared PostgreSQL primary serving multiple distinct domain workloads: catalog writes, order transactions, and return processing all competing for the same resource pool

Likely Bottleneck

Tier 4: Domain Decomposition Pressure from Shared PostgreSQL

Recommended Evolution

Monitor: error_rate, p95_latency_ms

Migration Readiness

12

Migration Stages

3
Stage

Synchronous checkout with direct database payment insert and synchronous payment API call → Saga-orchestrated checkout with outbox-based fulfillment events

info

Migration trigger: Payment provider timeout causing full checkout rollback and user-facing error; fulfillment system outage causing checkout to fail synchronously rather than queue the fulfillment work; inability to replay failed fulfillment notifications after downstream system recovery

Stage

PostgreSQL full-text search for product discovery → Elasticsearch for product search with CDC-based catalog indexing

info

Migration trigger: Product search p99 > 1s; faceted navigation (category + price range + brand + availability) requiring full-table scans in PostgreSQL; ranking by popularity or relevance score not achievable in PostgreSQL without full-table aggregation

Stage

Monolithic order processing with inline notification delivery → RabbitMQ-based notification fanout with dead-letter handling

info

Migration trigger: Email/push notification provider timeouts causing checkout latency to increase proportionally; notification delivery failures causing order confirmation to appear failed even when the order was created successfully; inability to replay failed notification deliveries after provider recovery

!

Risks

9
Risk

Saga compensation paths for every checkout failure scenario

warning

Saga compensation paths for every checkout failure scenario must be designed before deployment: partial saga implementation is more dangerous than no saga

Risk

Idempotency keys for the payment provider must be persisted

warning

Idempotency keys for the payment provider must be persisted before the payment call, not after: a crash between these two events causes a payment charge with no local record

Risk

Elasticsearch index must be seeded from PostgreSQL before CD

warning

Elasticsearch index must be seeded from PostgreSQL before CDC takes over: the initial bulk import must complete without catalog updates being lost during the window

Risk

Search result prices are eventually consistent with PostgreS

warning

Search result prices are eventually consistent with PostgreSQL: checkout must re-validate price at order creation, not trust the search result price

Risk

RabbitMQ queue depth must be monitored from day one: an unmo

warning

RabbitMQ queue depth must be monitored from day one: an unmonitored queue during a warehouse system outage accumulates a backlog that causes a second incident on recovery

Risk

Dead-letter queue requires explicit operational runbook: mes

warning

Dead-letter queue requires explicit operational runbook: messages in the DLQ are not delivered until manually requeued or replayed

Risk

Projection lag creates a read-after-write window where users

critical

Projection lag creates a read-after-write window where users see stale data after their own writes. Mitigation: Route immediate post-write reads to the write store (session-scoped write token); accept eventual consistency only for non-user-initiated reads

direct-db-to-cqrs
Risk

Projection rebuild after schema change can take hours or day

critical

Projection rebuild after schema change can take hours or days on large datasets. Mitigation: Design blue/green projection deployment: build new projection in parallel before switching traffic; test rebuild time in staging

direct-db-to-cqrs
Risk

Cross-service workflows that previously used database transa

critical

Cross-service workflows that previously used database transactions now require Saga orchestration. Mitigation: Design idempotent event handlers; implement compensating transactions for every multi-step workflow; test failure injection in staging

modular-monolith-to-event-driven

Review Sections

6

Referenced Intelligence