The traditional model of application development, where all the features and functionalities were bundled in a large package called a monolithic application, is becoming less popular for multiple reasons. Monolith applications take on too many responsibilities in the form of function and logic. It is this characteristic which leaves them with high coupling and low cohesion. The reuse factor in monoliths tends to be low since one part of the functionality cannot be separated from the rest of the function and logic.
As we start breaking down the monolith functionality or even designing a new application, the focus needs to be on defining the service boundaries. Defining the right set of service boundaries and their related interactions is what leads to high cohesion and low coupling models.
The question becomes, what is the basis on which the application should...