I’ve used both systems and regretted both systems. It really is a pick your poison.
On one hand if you pick microservices, you get an inherent encapsulation to your functionality and you get to maintain compile times.
The danger is you lose language interlinking. You can’t import object type definitions across microservices easily without either creating a type server or trying to maintain a type package that is imported into every microservice and then updated across every microservice.
Plus you have overhead for every microservice.
With a monolith there’s no overhead and because everything is the same codebase you can import export definitions and modules and your unit testing covers the whole thing cleanly without making assumptions on what’s being fed into the API.
That said the monolith eventually got to a state where it took 3 minutes to compile and so our development cycles ( change something, build, see what effect it had) became nightmarish And most of the time you’d never be able to get into a flow state because you’d either sit there meditating for 3 minutes or you’d pick up your phone or task switch and lose your concentration.