Computer systems designers have for decades been arguing that a key principle of good systems design is to have modular, componentised software rather than large monolithic codes. This makes systems easier to develop and test in smaller, independent units, which in turn improves reliability and maintainability. This holds true for systems as simple as individual apps on your phone all the way up to complex cloud- or mainframe-based distributed systems.
There have been various embodiments of this design principle over the years including Object Oriented Architecture, Component-based Architecture, Service Oriented Architecture and most recently Microservice Architecture. Each of these approaches has built on the success (and in some cases failure) of its predecessor, but the core principle of modularisation and encapsulation is enduring because it works.
Microservices architecture seems to have become de rigueur for a “modern” systems design. But what are the advantages, and disadvantages of microservices in practice, and where are they headed over the next few years?