Real Decision
Problem
Sending messages synchronously limits throughput and complicates retry logic.
Decision
Split notification processing into multiple stages:
Event received.
Notification persisted.
Dispatch worker sends messages.
Delivery status processed separately.
This architecture improves throughput while enabling deterministic retries and monitoring.