Microservices and micro frontends are architecture patterns that are seeing wide adoption across the industry. Despite the large adoption, there is a lot of confusion around the value of the architecture pattern. We hope that by understanding the key value proposition behind microservices and micro frontends, technologists will know when to use these patterns and evaluate whether the existing use of this architecture pattern is providing the right value.
The primary benefit of using the microservice and micro frontend architecture patterns is independent deployment. In the early days of a software project, that value may not be clear as the software team may be months away from a production environment and the value that comes in having separate deployable units.
The value of independent deployment is directly related to the organization of teams on a software project. When the development of software is split between multiple teams, it is critical that each team be able to operate in a completely independent manner. This means they need to be able to identify and refine their own requirements, develop their own code without little or no external validation, and ultimately deploy their code with little or no external coordination. This last piece is called independent deployment and allows a software development organization to stay nimble, deploy often, and not be mired in infinite coordination effort.
In the case of a multi-team software project, independently deployable units of code is critical. The number of deployable units should be relative to the number of teams deploying updates. Ideally each team should have one deployable unit, however as long as each team is not overburdened by too many deployable units, more than one microservice or micro frontend per team is reasonable. For fullstack development teams on a large software project, a specific functional area will likely have one micro frontend with one microservice.
Ultimately microservices and microfrontends should be used on software projects that consists of multiple independent development teams.
Using microservices and micro frontends in these scenarios give you the ability to divide a product up, make it into independent components and developed completely independently, deployed completely independently and recombined into one cohesive product in a production environment.
That by itself, is the main reason to use microservices and micro frontends, we would consider nothing else when you are making this decision.