5 Architectural requirements for fast flow

 

This chapter covers

  • The five quality attributes that are essential for fast flow
  • The importance of these quality attributes
  • How an architecture can satisfy the quality attributes
  • The role of an application’s component architecture in determining how effectively these quality attributes are met

In chapter 1, I briefly explained that achieving fast flow - the continuous delivery of a stream of small changes and rapid feedback one each one - requires an architecture that is loosely coupled at design time and supported by a rapid deployment pipeline. In this chapter, I further explore these architectural requirements through the lens of quality attributes, a concept introduced in chapter 3.

A quality attribute is a measurable, desirable property of an application defined through specific scenarios. I will describe how an architecture must satisfy five key quality attributes:

  • Modifiability - ease of making changes to the application
  • Evolvability - ease of evolving the application’s technology stack
  • Testability - ease and speed of verifying that a change is releasable
  • Deployability - ease and speed of deploying a change into production
  • Observability - ease of understanding the application’s runtime behavior and the behavior of its users

5.1 Introduction to architectural requirements for fast flow

5.1.1 Step #1: Making a change

5.1.2 Step #2: deploy changes

5.1.3 Step #3: analyze feedback from production and end-users

5.2 Modifiability: ease and speed of change

5.2.1 Quality attribute scenarios for modifiability

5.2.2 Modifiability requires loose design-time coupling and high cohesion

5.3 Evolvability: ease and speed of changing the technology stack

5.3.1 About technology stacks

5.3.2 Technology evolves

5.3.3 Evolvability quality attribute scenarios

5.3.4 Architecting for high evolvability

5.4 Testability: ease and speed of verifying releasability

5.4.1 Quality attribute scenarios

5.4.2 Architecting for high testability

5.4.3 Testable using automated tests

5.7 Summary