Review Fitness Functions
A fitness function review is a meeting with key business and technical stakeholders with the goal of updating fitness functions to meet design goals. Events, such as significant market or customer growth, a new area of functionality or business capability, or an overhaul of an existing part of the system can warrant a fitness function review.
A fitness function review generally includes the following:
- ? Reviewing existing fitness functions
- ? Checking the relevancy of the current fitness functions
- ? Determining change in the scale or magnitude of each fitness function
- ? Deciding if there are better approaches for measuring or testing the system’s fitness functions
- ? Discovering new fitness functions that the system might need to support
Review your fitness functions at least once a year.
PENULTIMATEWIDGETS AND THE ENTERPRISE ARCHITECTURE SPREADSHEET
When the architects for PenultimateWidgets decided to build a new project platform they first created a spreadsheet of all the desirable characteristics: scalability, security, resiliency, and a host of other “-ilities.” But then they faced an age-old question: If they built the new architecture to support those features, how can they ensure that it maintains that support? As developers add new features, how would they keep unexpected degradation of these important characteristics from occurring?
The solution was to create fitness functions for each of the concerns in the spreadsheet, reformulating some of them to meet objective evaluation criteria. Rather than occasional, ad hoc verification of their important criteria, they wired the fitness functions into their deployment pipeline (discussed more fully in Chapter 3).
While software architects are interested in exploring evolutionary architectures, we aren’t attempting to model biological evolution. Theoretically, we could build an architecture that randomly changed one of its bits (mutation) and redeployed itself. After a few million years, we would likely have a very interesting architecture. However, we don’t have millions of years to wait.
We want our architecture to evolve in a guided way, so we place constraints on different aspects of the architecture to reign in undesirable evolutionary directions. A good example is dog breeding: By selecting the characteristics we want, we can create a vast number of different shaped canines in a relatively short amount of time.
We cover more aspects of operationalizing fitness functions in the next chapter. In Chapter 6, we combine fitness functions with all the other architecture dimensions.