Evolutionary Architectures Principles & Common Characteristics

architecture_patterns
Software Architecture Tips

Evolutionary Architectures Principles & Common Characteristics

Software architecture has often been described as “the parts that are hard to change later.” But our experience demonstrates that when architects build evolvability into the architecture, change becomes easier. And today I would like to talk about evolutionary architectures, introduced by Neal Ford, Patrick Kua, and Rebecca Parsons in their book “Building Evolutionary Architectures: Support Constant Change”

 

An evolutionary architecture supports incremental, guided change as a first principle across multiple dimensions as well as adaptability, using proper abstractions, database migrations, test suites, continuous integration and refactoring to harvest re-use as it occurs within a system. 

 

Evolutionary architectures exhibit several common characteristics:

  • Modularity and Coupling

The ability to separate components along well defined boundaries has benefit to make a non-breaking change. 

 

  • Organized Around Business Capabilities

Increasingly, modern successful architectures feature modularity at the domain architecture level. 

 

  • Experimentation

Operationally inexpensive trivial change to applications allows common Continuous Delivery practices like A/B testing, Canary Releases, and others. Often, microservice architectures are designed around routing between services to define applications, allowing several versions of a particular service to exist within the ecosystem. This in turn allows experimentation and gradual replacement of existing functionality. 

 

Evolutionary Architectures Principles

One way of thinking about evolutionary architectures is through principles. The principles describe various characteristics of either architectures themselves or methods for designing architectures. 

 

1- Fitness Functions

Much like in evolutionary computation techniques like genetic algorithms, an architectural fitness function specifies what our target architecture looks like. The up-front thinking about what the fitness function should be for a particular system provides the guidance for decision making and the timing of decisions. Architectural decisions are scored relative to the fitness function so that we can see that the architecture is evolving in the right direction.Some systems require heavy security, others high-availability or certain levels of uptime. The up-front thinking about fitness functions guides decision-making and timing, and helps you to preserve key requirements as the system evolves.

 

2- Bring the Pain Forward

Many of the practices in continuous delivery and evolutionary architecture exemplify the bring the pain forward principle, as inspired by the eXtreme Programming community. When something on a project has the potential to cause pain, force yourself to do it more often and earlier, which in turn encourages you to automate the pain away and identify issues early. Common continuous delivery practices like deployment pipelines, automated machine provisioning, and database migrations make evolutionary architecture easier by removing common pain points for change.

 

3- Last Responsible Moment

In an evolutionary architecture, we wait for the last responsible moment to make decisions. The benefit of delaying a decision is the additional information available to make the decision. The cost is any potential re-work that has to occur once a decision has been made, which can be mitigated through appropriate abstractions—but the cost is still real. 

 

4- Incremental change

The guiding principle of an evolutionary architecture is to support guided, incremental, non-breaking change along multiple dimensions. 

 

5- Continuous delivery

This allows you to support the broader practice of the evolutionary architecture, as it introduces two new architectural attributes: testability and deployability. In a testable architecture, you can discover most defects with automated testing. In a deployable architecture, you can deploy a particular service without significant orchestration or downtime.

To conclude, the main idea is that architectural elements are changeable later. When you build in evolutionary change in your architecture, changes will become cheaper and easier. And the heart of doing evolutionary architecture is to make small changes, and put in feedback loops that allow everyone to learn from how the system is developing. 

 

If you would like to learn more about evolutionary architectures, contact us for a personalized training

Leave your thought here

Your email address will not be published. Required fields are marked *

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • SKU
  • Rating
  • Price
  • Stock
  • Availability
  • Add to cart
  • Description
  • Content
  • Weight
  • Dimensions
  • Additional information
Click outside to hide the comparison bar
Compare