Architecture Gallery

Every diagram is interactive.

Click nodes to inspect them. Connections highlight on hover. Each architecture reflects the constraints that shaped it.

Dynamic Pricing Engine

Instead of replacing the pricing model, I introduced an event-sourced pricing layer alongside it. The monolith continued to emit pricing requests; a new engine answered them. The engine's decisions were idempotent and fully auditable. The old system gradually received less traffic until it was inert.

Service
Data Store
Client
Booking APIPricing RouterLegacy PricingPricing EngineSignal StoreAudit LogInvoice Ledger

Click any node to inspect

Key architectural decisions

Event sourcingoverDirect database mutation

Auditability was a hard requirement. When a pricing decision is wrong, we need to replay exactly what the engine saw.

Feature flag migrationoverBig-bang cutover

The cost of a mistake was too high. Gradual rollout let us catch race conditions under 2% traffic before they affected 100%.

Competitor rates as signal, not ruleoverRule-based competitor matching

Rules encode yesterday's market. A signal lets the engine's decision function evolve without redeployment.