Avoid Babel Tower: Building Evolutionary Architectures
By: Tulio Cruz
Tags: Software Architecture, Continuous Delivery, Evolutionary Architecture, Continuous Integration, Fitness Function

Evolutionary Architecture

Evolutionary Architecture is a software architecture that prevents “all these aspects” from degrading over time.

This architecture must include 2 principal characteristics, incremental and guided.

Incremental Change

The way to build software incrementally and how they deploy it.

Some examples of incremental architecture, architecture approach, and technique respectively, all related to incremental change:

Microservices;

Continuous Deployment;

Feature toggle.

Guided Change

After choosing the characteristics to be protected (modularity, security, response time), the architect must guide changes to protect these characteristics.

To be able to do that, the architect uses as they called Fitness Function, responsible to summarize how close a given design solution is to achieving the set aims.

Fitness Function

Concept borrowed from evolutionary computing, used in genetic algorithm design to define success.

Should be identified early, the Fitness Function has a mission to protect the various architectural characteristics mandatory for a system.

Fitness Function Categories

The Fitness Function exists across a variety of categories related to their scope, frequency, dynamics, and others factors, including combinations of categories where useful.

Atomic versus Holistic

These are context-related. The Atomic is correspondent with only a context, on the other hand, the holistic is related with two or more contexts at the same time.

Triggered versus Continual

These categories are related to the execution cadence of a fitness function. The triggered ones can be executed by the developer, for example: before/after a push, in a step of the pipeline. The continuous don’t need a schedule, they are verified constantly. For example, MDD (Monitoring Driven Development) technique to monitoring some tech and business aspects in the production environment.

Static versus Dynamic

These categories are about the result of the fitness function: the statics are related with the fixed results, on the other hand, the dynamics rely on shifting definitions based on extra context.

Automated versus Manual

The automated category doesn’t need a manual step to execute, for example, Continuous Delivery, Continuous Integration. The manual needs a manual step to be executed, for example, a specific QA process

Temporal

The temporal fitness function has a particular time component, for example, a reminder to check to see if important security updates have been performed

Intentional over Emergent

The intentional fitness function, as the name says, is defined at the beginning of the project, addressed to the initial needs of the project. Differently, the emergent appears according to changes during/after the project.

Domain-specific

This type of fitness function has a specific concern, such as special security or regulatory requirements… Or also scalability.

Review Fitness Function

The authors reinforce the importance of the review fitness function-related and its periodicity can be annual, biannual depending on the needs of the system/software.

Changes are inevitable

Standing on the shoulders of giants during the reading of the book, building evolutionary architectures, I could understand better about evolution in software architecture, their best way to keep with the architecture in the right.

Changes are inevitable in our world and the context of a product and/or system it would be no different, that’s why it is so important to have the architecture prepared so that it can keep up with all these changes and continue supporting everything necessary.