I would say the complexity is largely in deployment. Otherwise, I find microservices much simpler to reason about.
As an example, keeping a bunch of small, isolated microservices behind queues means that I can reason about them very locally. I know what data they own, I know their interfaces, and I don't really need to think 'outside' fo them - they just send other asynchronous messages out. I don't need to think about dependencies very much - if a downstream or upstream server fails it is irrelevant to the microservices, so long as the queueing system is up.
It's a bit more annoying to get infrastructure and whatnot set up, but not a ton.
> expensive
Maybe? Shouldn't finger grained scaling be cheaper in some cases?
> require much higher expertise
I don't really agree. Again, by keeping things small and by maintaining the ability to reason about components locally, I think that it's easier to work with microservices than monoliths.
> Due to the monolithic software architecture, it was difficult to add new features without affecting the entire system and it was quite complex to release new changes, since we had to rebuild and redeploy the entire product, even though we changed only a few lines of code. That resulted in high risk deployments which happened less frequently - new features got released slowly.
From the article. For a startup the ability to add features quickly is pretty important - especially early on.
I'm not advocating microservices first for every situation, but I've built systems microservice-first and it's been fine.