“The only constant in life is change” — Heraclitus

Companies constantly strive to evolve and reinvent themselves. Because of that the change is should be treated as first-class citizen of the design process.

Some changes can affect design decisions and we need to evolve our design accordingly.

The need to evolve design decisions may occur when some of these aspects changes:

  • Subdomain (DDD). They can morph into one or another.
  • Organization. When it changes, the communication between teams can be different, and it leads to the need of different design chocies.
  • Domain knowledge. As more domain knowledge is discovered, it has to be reflected in the design of the domain.
  • Growth. Software can grow. And it’s a good thing, but if unregulated, the codebase can grow into a Big ball of mud. The guiding principle to deal with growth-driven complexity is to eliminate Accidental complexity.