Since the microservice style is fairly recent, there is no single definition for microservices. According to Martin Fowler, there are several essential characteristics of microservices, which we will describe next:
- Each service should be an independently replaceable and upgradeable component. This is connected to easier deployment and loose coupling between the services, as opposed to components being libraries in a monolithic application. In the latter case, when you replace one library, you often have to redeploy the whole application.
- Each service should be developed by a cross-functional team, focused on a specific business capability. Ever heard of Conway's law?
"Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure."
– Melvyn Conway, 1967
If you don't have cross-functional teams, you end up with software silos. The lack...