Robin Pokorny Evolutionary architecture WEBEXPO PRAGUE Agile meets software design 2024-05-30

agile architecture (adjective) (noun) ‘responding to change over following a plan’ ‘stuff that’s hard to change’

Infrastructure Cloud services, tools, networking Architecture Intents, patterns, and boundaries Gregor Hohpe: enterpriseintegrationpatterns.com

Best architecture Got it right the first time Provides extensibility Used everywhere Docker Complexity Insufficient You can’t predict technological shifts I’ll-need-it-later accumulates There is no one universal architecture

Potom lituje, když už pozdě je bycha honiti. In the end, he feels really sorry but what’s done cannot be undone again. Potom běduje, když už se nedá čeho měniti. Then he starts lamenting when it’s much too late to change anything. ~ Kecal, dohazovač Prodaná nevěsta ~ Kecal, a marriage broker The Bartered Bride 1866-05-30

An evolutionary architecture supports guided, incremental change as a first principle across multiple dimensions

Fitness Function an objective function used to summarize how close a prospective design solution is to achieving the set aims

You might use some already! 1. test coverage above 80% 2. p99 response time is below 500 ms 3. below 1% of 500 responses in 5 min windows 4. bundle size is below 500 KiB 5. passes correlation IDs upstream 6. no SSPL tools or libraries A Fitness function is an objective function used to summarize how close a prospective design solution is to achieving the set aims

Perverse incentive (Cobra Effect)

4 m m m 40 0.4 mm

All models are wrong, some are useful George Box

Socio-technical Systems

Managing complexity (and chaos) in times of crisis A field guide for decision makers inspired by the Cynefin framework https://data.europa.eu/doi/10.2760/353

01 Guided Incremental Multiple dimensions 2017-0 9-18

Architecture Characteristics Worksheet performance adaptability The amount of time it takes for the system to process a business request The ease in which a system can adapt to changes in environment and functionality responsiveness concurrency The amount of time it takes to get a response to the user The ability of the system to process simultaneous requests, in most cases in the same order in which they were received; implied when scalability and elasticity are supported availability The amount of uptime of a system; usually measured in 9’s (e.g., 99.9%) fault tolerance When fatal errors occur, other parts of the system continue to function interoperability The ability of the system to interface and interact with other systems to complete a business request extensibility scalability The ease in which a system can be extended with additional features and functionality A function of system capacity and growth over time; as the number of users or requests increase in the system, responsiveness, performance, and error rates remain constant deployability elasticity The system is able to expend and respond quickly to unexpected or anticipated extreme loads (e.g., going from 20 to 250,000 users instantly) The amount of ceremony involved with releasing the software, the frequency in which releases occur, and the overall risk of deployment testability The ease of and completeness of testing data integrity abstraction The data across the system is correct and there is no data loss in the system The level at which parts of the system are isolated from other parts of the system (both internal and external system interactions) data consistency workflow The data across the system is in sync and consistent across databases and tables The ability of the system to manage complex workflows that require multiple parts (services) of the system to complete a business request Last updated March 2024 Created by Mark Richards, DeveloperToArchitect.com

Architecture Styles Worksheet System/Project: Architect/Team: Date: Selected Architecture(s): Created by Mark Richards, DeveloperToArchitect.com

02 Guided Incremental Multiple dimensions 2017-0 9-18

Image by Irma Harlann: https://neonrocket.medium.com/devops-is-a-culture-not-a-role-be1bed149b0

Reinforcement learning on Pokemon Red github.com/PWhiddy/PokemonRedExperiments

03 Guided Incremental Multiple dimensions 2017-0 9-18

Multiple dimensions Tech Data Security Ops languages frameworks libraries DB schemata optimization policies guidelines servers cloud resources

Fitness Function Cyclomatic Complexity Coupling and Cohesion Performance Limit the number of linearly independent paths Low dependencies between cohesive modules Response time, throughput, or memory usage against thresholds Chaos Monkey Directionality of imports Compliance Randomly terminate instances in production Ensures correct flow among modules, no oriented circles Adherence to legal and regulatory requirements

An evolutionary architecture supports guided, incremental change as a first principle across multiple dimensions

Move from solutions and implementations to outcomes Outcomes Fitness functions Define what characteristics are important for you Write a test to validate those outcomes Forget Use your brain power for something else

Outcomes Fitness functions robinpokorny.com me@robinpokorny.com @robinpokorny Illustrations are licensed from Freepik Forget

Fitness Functions monitors unit tests fitness functions … chaos engineering metrics Automating Architectural Governance by Neal Ford (@neal4d)