By the time a system is in production, the trade-offs are already in
concrete — the cost of a wrong decomposition is measured in years, not
weeks. So I spend my time at the front: ADRs and C4 diagrams as
conversation tools, not write-once deliverables. If a decision
can't be explained in one paragraph and one diagram, it isn't a decision yet.
Three opinions I hold strongly:
Decompose only along bounded contexts
Six microservices that share state are worse than one monolith. The
Commercial Licence decomposition worked because we found the natural
seams — Approval, User, Commercial, Location, Invoice, Salama —
before splitting code.
Reliability is event-driven, not REST
The Debts Hub started life as a REST callback flow. After it failed
in production, we switched to RabbitMQ. The lesson scaled across the
platform: every gating integration in the Balady ecosystem now
consumes events, not synchronous callbacks.
Compliance is architecture, not bolt-on
PDPL data masking, consent validation, and commercial-terms
enforcement belong at the gateway, not in each consumer. The Event
Distribution Hub counter-proposal was built on that principle.
The job is finding the right constraints early. Execution follows.