So what the terms "microservices" and "microservice achitecture" actually mean? You may find that there are quite a few of
slightly different definitions but arguably the most complete and understandable one is formulated by Martin Fowler in his essay
on microservice architecture:
In short, the microservice architectural style . . . is an approach to developing a single application as a suite of small services,
each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services
are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare
minimum of centralized management of these services, which may be written in different programming languages and use
different data storage technologies. - https://www.martinfowler.com/articles/microservices.html
The prefix "micro" became the constant source of confusion as it is supposed to frame the size of the service somehow. Unsurprisingly, it turned out to be quite hard to justify exactly. The good rule of thumb is to split your system in such a way that every
microservice has a single meaningful purpose to fulfill. Another somewhat controversial definition of the "micro" scale is that
the microservice should be small enough to fit into the head of one developer (or more formally, maintainer).
There are basically two routes which may direct you towards embracing microservice architecture: starting the green-field
application or evolving the architecture of the existing one (most likely, the monolith). In order to succeed while starting the
journey by taking any of these routes, there are a number of the prerequisites and principles to be aware of.
First of all, microservices are all about domain modeling and domain design done right. There are two distinguishing books,
The Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans and Implementing Domain-Driven
Design by Vaughn Vernon, which are the credible sources on the subject and highly recommended reads. If you do not know
your business domain well enough, the only advice would be to hold on with opening the microservices flood gate.
The importance of that is going to become clear in a few moments but it is particularly very difficult problem to tackle when you
start the development of the application from scratch since there are too many unknowns in the equation.