Conway's Law comes into play a little here. Microservices provide organization level flexibility at the cost of operational and development complexity. For small teams and especially at the start of a project, organizational flexibility is usually not needed. Paying the extra ops and dev cost is unnecessary and even dangerous.
In the above, when I say microservices incur ops and dev cost here's what I'm talking about
* Debugging tools need to function across machine boundaries
* Deployments potentially need to be scheduled in multiple stages based on the service dependency graph
* Developer and test environments become more complex.
* The number of failure modes increases due to the network.
All this means we need more code, tools and processes. This investment is worth it and even required for large organizations. They usually have the infrastructure in place and the financial resources to invest. When I was at Google building a microservices based system was so much easier with Borg, Dapper, etc. This kind of tooling is only now emerging in a useable form in the open source world.
In the above, when I say microservices incur ops and dev cost here's what I'm talking about
* Debugging tools need to function across machine boundaries
* Deployments potentially need to be scheduled in multiple stages based on the service dependency graph
* Developer and test environments become more complex.
* The number of failure modes increases due to the network.
All this means we need more code, tools and processes. This investment is worth it and even required for large organizations. They usually have the infrastructure in place and the financial resources to invest. When I was at Google building a microservices based system was so much easier with Borg, Dapper, etc. This kind of tooling is only now emerging in a useable form in the open source world.
EDIT: formatting, grammar