3 takeaways from Building Evolutionary Architecture at Øredev 2018 by Patrick Kua

The concept around evolutionary architecture is to support incremental and guided change as a principle along multiple dimensions. Change is inevitable and a software cycle can be described as a generation. But how long does it take to add a new generation into production? And does the current architecture support newly required features?

Architecture as a cycle

In hindsight, the architecture process has been linear. Implicating that the Architectural step has been to establish important decisions and the development step, simply, has been to implement the already established solution. This is more often than not proved wrong and the architectural decisions are often focused on unimportant things.

Instead, looking at the architectural process as a recurring cycle; with refining and reflecting over previously established patterns, allows you to revisit previous decisions and adapting to new requirements, focusing on things that are important.

Fitness functions

Fitness functions are functions of a particular type which is used to summarise how close a given design solution is to achieve a set aim. This function should give a single figure of merit, such as providing a Yes or No answer to the question "Does the system fit for this?". In this context, there are three different types of Fitness functions defined; atomic, holistic, continuous.

As an example of an objective for an atomic fitness function can be to determine whether a system contains circular dependencies or not (eg. "The system should not contain any circular dependencies"). The function itself should check if there were any circular dependencies, and yield true or false depending on the result.

An objective for a holistic fitness function could be "Performance for the system is critical", and the function should do regular performance tests to determine whether this is true or false

The continuous fitness functions would provide answers for continuous evaluation. An example objective would be; "Can we survive a massive outage of one of our core services?". A great, real-world example of continuous fitness functions is Chaos Kong, Chaos Gorilla, and Chaos Monkey in the Simian Army by Netflix, which contains tools to intermittently invoke chaos in production services to increase resiliency and auto-recovery of the Netflix ecosystem.

In general:

"If it hurts, do it more often"

Think like a town planner

Being an "evolutionary architect" is somewhat equal to the mindset of a town planner. A town planner can not make decisions for all the inhabitants of a town, but rather only provide a path and guidelines on how to build their homes.

The role defined to be more about helping people towards a better decision making by fostering wanted behaviors and create a mindset with an established and expected type of outcome, rather than overrule and single-handedly make decisions.