Draw boundaries around change
Separate areas that change for different reasons: product UI, domain rules, integrations, and reporting. When those concerns share one module, every change becomes expensive.
Prefer clarity over cleverness
A simple service with clear ownership beats a distributed design the team cannot operate. Add complexity only when a measured bottleneck or team boundary demands it.
