Loosely coupled systems
All developers that have worked at least once on a tightly coupled, monolithic application know the problems it induces. The communication overhead and the meetings needed to perform bigger changes. New bugs that occur after fixing a bug in another part of the application. Changes that break functionality from other developers. All these problems lead to fear of integrating and deploying and slow down developer velocity.
When designing your system and software, you should focus on the following characteristics:
- Deployability: Can each team release their application independent of other applications or teams?
- Testability: Can each team do most of their testing without requiring a test environment in which multiple independent solutions from other teams must be deployed together?
The team size here is a small two-pizza team (see Chapter 17, Empower Your Teams). If you design your systems for the deployability and testability of small teams...