A mistake I see in many microservice systems:
Every service sends emails.
Auth sends emails. Billing sends emails. User service sends emails.
Soon you have 5 different email implementations, 5 retry strategies, 5 ways to get rate-limited.
The fix: one notification service. Every service emits events — the notification service owns delivery, retries, rate limits, and user preferences.
Notifications are deceptively complex. Once you add retries, rate limits, preferences, and multiple channels, it deserves its own service.













