![]() ![]() Evaluating stakeholder motivation and holistically prioritizing the qualities that are important to the organization is the first step in defining architectural fitness functions. Shifting the mindset to value ‘mean time to recovery’ (MTTR) over ‘mean time between failure’ (MTBF) and embracing constant change is a challenge. We attempt to achieve stability by establishing control over change and creating gatekeepers, while innovation and agility are enabled by reducing barriers to change in order to minimize the chance of failure. Stability and agility are often diametrically opposed because of the way they are pursued. For example, goals for agility and flexibility may conflict with goals for stability and resiliency. These attributes often align with the architectural “-ilities.” After team members jot down their top five or six attributes, group the results into common themes such as resilience, operability, or stability.Įxamining these themes often uncovers potential conflicts or architectural tradeoffs. Think of architecture as a product having user journeys, and start by gathering input from stakeholders in business, compliance, operations, security, infrastructure, and application development to understand the architectural attributes they consider most important to the success of the business. ![]() ![]() Leveraging a fitness function to ensure that new code has structured, sensible logging during the development process ensures the operability and debuggability required for a production application. For example, logging is sometimes added as an afterthought and may not contain consistent or useful debugging information. Regardless of the application architecture (monolith, microservices, or other), fitness function-driven development can introduce continuous feedback for architectural conformance and inform the development process as it happens, rather than after the fact. During test-driven development we write tests to verify that features conform to desired business outcomes with fitness function-driven development we can also write tests that measure a system’s alignment to architectural goals. Fitness functions describe how close an architecture is to achieving an architectural aim. How do we enable evolution? Architectural goals and constraints may all change independently of functional expectations. “An evolutionary architecture supports guided, incremental change as the first principle across multiple dimensions.” What are fitness functions? The idea that architecture can support change was described by Neal Ford, Rebecca Parsons, and Pat Kua in 2017 as evolutionary architecture. For example, compliance standards today will likely be different a year from now ongoing changes in those standards should be reflected in gates to production deployment. What about other, non-functional requirements such as scalability, reliability, observability, and other architectural “-ilities”? How do we ensure operability and resiliency of features when they go to production? How can we encourage teams to build in these architectural standards, just as test-driven development builds in code quality and test coverage?Īrchitecture standards evolve constantly. TDD is an established practice for feature development that can improve code quality and test coverage. Test-driven development, or TDD, involves writing tests first then developing the minimal code needed to pass the tests. ![]()
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. ArchivesCategories |