Chapter 11. Evolving Design Decisions
In the modern, fast-paced world we inhabit, companies cannot afford to be lethargic. To keep up with the competition, they have to continually change, evolve, and even reinvent themselves over time. We cannot ignore this fact when designing systems, especially if we intend to design software that’s well adapted to the requirements of its business domain. When changes are not managed properly, even the most sophisticated and thoughtful design will eventually become a nightmare to maintain and evolve. This chapter discusses how changes in a software project’s environment can affect design decisions and how to evolve the design accordingly. We will examine the four most common vectors of change: business domain, organizational structure, domain knowledge, and growth.
Changes in Domains
In Chapter 2, you’ve learned the three types of business subdomains and how they are different from one another:
- Activities the company is performing differently from its competitors to gain a competitive advantage
- Things the company is doing differently from its competitors, but that do not provide a competitive edge
- Things all companies do in the same way
In the previous chapters, you saw that the type of subdomain at play affects strategic and tactical design decisions:
How to design the bounded contexts’ boundaries
How to orchestrate integration between the contexts
Which design patterns to use to accommodate the complexity of ...