How does this help me build maintainable software?
Incoming and outgoing ports act as gatekeepers between the layers of our application. They define how the layers communicate with each other, and how we map models across layers.
With narrow ports in place for each use case, we can choose different mapping strategies for different use cases, and even evolve them over time without affecting other use cases, thus selecting the best strategy for a certain situation at a certain time.
Selecting a different mapping strategy for each use case is harder and requires more communication than simply using the same mapping strategy for all situations, but it will reward the team with a code base that does just what it needs to do and is easier to maintain, as long as the mapping guidelines are known.
Now that we know which components make up our application and how they communicate, we can explore how to assemble a working application out of the different components.