A modular monolith can take you surprisingly far.
You can have clear business boundaries, independent modules, explicit contracts, good tests, background workers, queues, caching, horizontal scaling and strong deployment automation without splitting the application into separate services.
So at what point should one of those modules actually become a microservice?
