Using Cloud Fitness Functions to Drive Evolutionary Architecture
AWS Architecture BlogUsing Cloud Fitness Functions to Drive Evolutionary Architectureby Hauke Juhls and Luis Morales | on22 JUL 2021| inAmazon Athena,Architecture,AWS CloudTrail,AWS Config,AWS Systems Manager|Permalink|Share“It is not the strongest of the species that survives, nor the most intelligent. It is the one that is most adaptable to change.” – often attributed to Charles DarwinOne common strategy for businesses that operate in dynamic market conditions (and thus need to continuously correct their course) is to aim for smaller, independent development teams. Microservices and two-pizza teams at Amazon are prominent examples of this strategy. But having smaller units is not the only success factor: to reduce organizational bottlenecks and make high-quality decisions quickly, these two-pizza teams need to be autonomous in most of their decision making.Architects can no longer rely on static upfront design to meet the change rate required to be successful in such an environment.This blog shows enterprise architects a mechanism to align decentralized architectural decision making with overall architecture goals.Gathering data from your fitness functions“Evolutionary architecture” was coined by Neal Ford and his colleagues from AWS Partner ThoughtWorks in their work onBuilding Evolutionary Architectures. It is defined as “supporting guided, incremental change as a first principle across multiple dimensions.”Fitness functions help you obtain the necessary data to allow for the planned evolution of your architecture. They set measurable values to assess how close your solution is to achieving your set goals.Fitness functions can and should be adapted as the architecture evolves to guide a desired change process. This provides architects with a tool to guide their teams while maintaining team autonomy.Example of a regression fitness function in actionYou’ve identified shorter time-to-market as a key non-functional requirement. You want to lower the risk of regressions and rollbacks after deployments. So, you and your team write automated test cases. To ensure that they have a good set of test cases in place, they measure test coverage. This test coverage measures the percentage of code that is tested automatically. This steers the team toward writing tests to mitigate the risk of regressions so they have fewer rollbacks and shorter time to market.Fitness functions like this work best when they’re as automated as possible. But how do you acquire the necessary data points to use this mechanism outside of software architecture? We’ll show you how in the following sections.AWS Cloud services with built-in fitness functionsAWS Cloud services are highly standardized, fully automated via API operations, and are built with observability in mind. This allows you to generate measurements for fitness functions automatically for areas such as availability, responsiveness, and security.To start building your evolutionary architecture with fitness functions, use something that can be easily measured. AWS has services that can be used as inputs to fitness functions, including:Amazon CloudWatchaggregates logs and metrics to check for availability, responsiveness, and reliability fitness functions.AWS Security Hubprovides a comprehensive view of your security alerts and security posture across your AWS accounts. Security Architects could, for example, define the fitness function of critical and high findings to be zero. Teams then would be guided into reducing the number of these findings, resulting in better security.AWS Cost Explorerensures your costs stay in line with value generated.AWS Well-Architected Toolevaluates teams’ architectures in a consistent and repeatable way. The number of items acts as your fitness function, which can be queried using theAPI. To improve your architecture based on the results, review theEstablishing Feedback Loops Based on the AWS Well-Architected Framework Reviewblog post.Amazon SageMakerModel Monitorcontinuously monitors the quality of SageMaker machine learning models in production. Detecting deviations early allows you to take corrective actions like retraining models, auditing upstream systems, or fixing quality issues.Using the observability that the cloud providesFitness functions can be derived by evaluating the AWS account activity such as configuration changes.AWS CloudTrailis useful for this. It records account activity and service events from most AWS services, which can then be analyzed withAmazon Athena.Figure 1. Fitness functions provide feedback to engineers via metricsExample of a cloud fitness function in actionIn this example, we implement a fitness function that monitors the operability of your system.You have had certain outages due to manual tasks in operations, and you have anecdotal evidence that engineers are spending time on manual work during application rollouts. To improve operations, you want to reduce manual interactions via the shell in favor of automation. First, you prevent direct secure shell (SSH) access by blocking SSH traffic via the managedAWS Configrulerestricted-ssh. Second, you make use ofAWS Systems Manager Session Manager, which provides a secure and auditable way to accessAmazon Elastic Compute Cloud (Amazon EC2)instances.By counting the logged API events in CloudTrail you can measure the number of shell sessions. This is shown in this sample Athena query to count the number of shell sessions:SELECT count(*),
       DATE(from_iso8601_timestamp(eventTime)),
       userIdentity.type,
       eventSource,
       eventName
FROM "cloudtrail_logs_partition_projection"
WHERE readonly = 'false'
  AND eventsource = 'ssm.amazonaws.com'
  AND eventname in ('StartSession',
                    'ResumeSession',
                    'TerminateSession')
GROUP BY DATE(from_iso8601_timestamp(eventTime)),
         userIdentity.type,
         eventSource,
         eventName
ORDER BY DATE(from_iso8601_timestamp(eventTime)) DESCThe number of shell sessions now act as fitness function to improveoperational excellencethrough operations as code. Coincidently, the fitness function you defined also rewards teams moving to serverless compute services such asAWS FargateorAWS Lambda.Fitness through exercisingSimilar to people, your architecture’s fitness can be improved by exercising. It does not take much equipment, but you need to take the first step. To get started, we encourage you to think of the desired outcomes for your architecture that you can measure (and thus guide) through fitness functions. The following lessons learned will help you focus your goals:Requirements and business goals may differ per domain. Thus, your fitness functions might differ. Work closely with your teams when defining fitness functions.Start by taking something that can be easily measured and communicated as a goal.Focus on a positive trendline rather than absolute values.Make sure you and your teams are using the same metrics and the same way to measure them. We have seen examples where central governance departments had access to data the individual teams did not, leading to frustration on all sides.Ensure that your architecture goals fit well into the current context and time horizon.Continuously re-visit the fitness functions to ensure that they evolve with the changing business goals.ConclusionFitness functions help architects focus on building. Once established, teams can use the data points from fitness functions to make decisions and work towards a common and measurable goal. The architects in turn can use the data points they get from fitness functions to confirm their hypothesis of the current state of the architecture. Get started building your fitness functions today by:Gathering the most important system quality attributes.Beginning with approximately three meaningful fitness functions relying on the API operations available.Building a dashboard that shows progress over time, share it with your teams, and rely on this data in your daily work.Hauke JuhlsHauke Juhls works as a Senior Solutions Architect, supporting his customers in building solutions on AWS. During his time as a lead architect at Porsche, he developed a passion for product organizations and building platforms. He is especially interested in building architectures in decentralized development teams and the role of cloud technologies in such a setup.Luis MoralesLuis Morales works as Solutions Architect at AWS. He is passionate about software engineering, test-driven development, distributed systems, and all things code and security.
“It is not the strongest of the species that survives, nor the most intelligent. It is the one that is most adaptable to change.” – often attributed to Charles Darwin One common strategy for businesses that operate in dynamic market conditions (and thus need to continuously correct their course) is to aim for smaller, independent […]
Hauke Juhls
Amazon Athena Architecture AWS CloudTrail AWS Config AWS Systems Manager