Start here. This is the direct spoken answer to practice first.
Why this question matters
The decision is not a maturity ladder where more services automatically mean a better system. It is a trade between local simplicity and the independence gained by crossing process and data boundaries.
I would usually keep a modular monolith while the product can be owned, deployed, and scaled as one unit without blocking delivery. The code would still have explicit domain modules, controlled dependencies, and owned data so the architecture is not one undivided codebase. I would consider extracting a service when a boundary has a clear business purpose and needs independent ownership, deployment, scaling, technology, or fault isolation. Microservices add network failures, distributed data, versioned contracts, deployment coordination, and more operations, so those costs need a concrete payoff.