While deploying applications in multiple Docker containers never felt like over-optimization for me, I can understand why those who never tried would mistake it for being so.
But I’ve also been turning a blind eye on how microservices would yield benefit for me in reality, and this nailed it for me.
One case study was particularly interesting. The team had made the wrong choice, using microservices on a system that wasn’t complex enough to cover the Microservice Premium. The project got in trouble and needed to be rescued, so lots more people were thrown onto the project. At this point the microservice architecture became helpful, because the system was able to absorb the rapid influx of developers and the team was able to leverage the larger team numbers much more easily than is typical with a monolith. As a result the project accelerated to a productivity greater than would have been expected with a monolith, enabling the team to catch up. The result was still a net negative, in that the software cost more staff-hours than it would have done if they had gone with a monolith, but the microservices architecture did support ramp up.
The upsides are pretty convincing:
- Strong module boundaries
- Independent deployment
- Technology diversity
But the downsides can’t be ignored either:
- Difficulty in distribution (arguable to me)
- Maintaining consistency
- Operational complexity