Granted, there are a few cpu-heavy processes that do benefit to being split out, like image/video re/encoding, but if you're just doing "normal" stuff, it's faster, easier to maintain and cheaper to just have a function call instead of a "service" call.
Our team write everything in the main server except tasks that choke up the main server. For example, we have a need to process many CSV files from users. We put this processing on Lambda and it can scale to hundreds of Lambdas at a time. Scaling our main server would be very uneconomical.
Latency is not a problem because these services usually live in the same datacenter and the latency is very little compared to the processing time.
https://blog.appsignal.com/2020/04/08/the-citadel-architectu...
What you describe sounds more like Service Oriented Architecture (SOA). SOA is one way – some might say the best way – to keep the aforementioned boundaries strict, so it does often go hand in hand with microservices. But technically you could achieve microservices using shared libraries or even logically separated areas in the same codebase. Of course, the more opportunity you give someone to break the boundaries, the more likely they will which is why especially the last one is bound to fall down in practice.
Shared libraries are somewhat better about this, assuming that it's reasonably cheap to restart instances of the monolith, but some kinds of rollout strategies work better if you can divert which release to use at the request level rather than the instance level. Also, in a lot of languages, the tooling surrounding shared libraries just isn't as good.
For example, I have a main server that serves all client requests. I separate and deploy functions that require heavy processing away from the main server so they can be scaled efficiently. But to the client, it only needs to know that the main server exists.