Defining Boundaries in Small Chunks

Manage clear boundaries between systems to allow independent verification and deployment.

This fourth module is focused on managing your system’s boundaries. Our architecture will use the same principles as good managers do:

  1. Focus on your own perspective. Let others have their own perspectives, but don’t worry about what those are.
  2. Identify one important problem that you are going to solve.
  3. Delegate everything else to an outside collaborator.
  4. When delegating, clearly define the purpose you want them to accomplish for you.
  5. When defining a purpose, only include the nuances that matter to you. Ignore any complexity that matters to them but not to you.

Although this sounds selfish, it actually grants the greatest freedom and sense of purpose to your collaborators! You are clearly defining what you want them to accomplish for you, and then giving them maximum freedom in how they accomplish that goal.

For a software system, that freedom grants the ability for each system to change independently over time.

Successful completion on this module means that the developer can

  • Create a new boundary to interact with a new external system.
  • Use capabilities from the outside world, but simplified as you desire.
  • Hide real-world complexity.
  • Respond to a change from the real world.
  • Test your system separately from the real world, yet still know instantly when the integration will fail.

Content


1 — Delegate a new Project

State the purpose of one system interaction to simplify integration.

2 — Add Requirements to the Project

Add capabilities so that the project does something when I ask.

3a — Keep out of the Weeds | Zero Disruption

Handle a real world complexity without disrupting development.

3b — Keep out of the Weeds | Zero Downtime

Alter your Port without blocking parallel development.

4 — Minimize Impact from External Changes

Use a model to track ripple effects across a Hexagonal Architecture.