Power can be taken, but not given. The process of the taking is empowerment in itself.

Gloria Steinem

Name

Empower

Statement

A service is self-contained; it encapsulates the logic and data of a business capability, together with its interfaces - graphical (GUI) and programmatic (API) - in an autonomous, scalable deployment unit.

Rationale

  • Reduce the overall complexity of the information system and thus improve its understanding.
  • Reduce dependencies on external services.
  • Simplify the management of business logic and data.

Implications

  • Define a permanent team responsible for the service.
  • Give responsibility for the business capability logic and data to the service team.
  • Give the service team the decision-making capacity for the evolution of the service.
  • Contractualise exchanges between services.

Examples

Bad

The logic of the Player Management capability is managed in the Player Management service. However, the business data about players is stored in a monolith database containing dozens of services. These other services also access this database and modify the player data without going through the Player Management business logic, causing data integrity problems (see figure below).

Furthermore, the service cannot be deployed separately from the monolith. As a result, the production releases of the monolith and the Player Management service must be coordinated between different teams. This greatly reduces the speed of release of new features for the Player Management service.

Good

The Player Management service encapsulates the logic and data relating to players. In addition, the service contracts its interfaces - graphical and programmatic - to the various users. It is autonomous and, in fact, can be deployed at a frequency defined by the team responsible for the service. It can also adapt to the load if necessary, as it is designed to autoscale.