If modules already have sharp boundaries and dependencies point inward (web to application to domain, infrastructure to domain), a module is close to a deployable unit: extracting it mostly means giving it its own runtime, replacing in-process calls across the seam with remote ones, and splitting the data it owns. The hard part isn't the code structure but the shared database and synchronous coupling, so the real benefit of the monolith-first approach is letting you discover the right boundaries cheaply before paying the distributed-systems tax. A muddy monolith with circular module deps, by contrast, makes extraction a rewrite.
- Sharing a common module that grows into a dumping ground.
- Letting modules share database tables.