Splitting into microservices buys deploy independence; many teams buy a distributed monolith — same release train, plus network hops.
In a modular monolith, a module is a bounded context. Clear internal interfaces; forbidden cross-module dependencies guarded by ArchUnit or NetArchTest. Single deploy, simpler observability. Extract a module to a service when needed — not slice the whole system upfront.
Reverse migration, service back to module, is rare and painful; I keep service count deliberately low at the start. Monolith isn't embarrassing — badly bounded monolith is.
