Summary
This chapter discussed the essential activities of architecture and their practical implications in today’s world of agile and cloud—where we are expected to deliver solutions in increasingly shorter timeframes and at increasingly larger scale. We started by defining the following essential activities that highlight why architecture is important:
Quality attributes, which represent the key cross-cutting requirements that a good architecture should address.
Architectural decisions, which are the unit of work of architecture.
Technical debt, the understanding and management of which is key for a sustainable architecture.
Feedback loops, which enable us to evolve the architecture in an agile manner.
We emphasized that the objective of the essential activities of architecture is to influence the code running in the production environment. We spoke about the importance of architecture artifacts such as models, perspectives, and views. We explained that these are incredibly valuable tools that can be leveraged to describe and communicate the architecture. However, our view is that if you do not utilize the essential activities we emphasize, they are insufficient on their own.
We then focused on each of the four essential activities, providing definitions, examples, and references to existing material in the industry. We emphasized the importance of automation and testing for feedback loops.
There is no single way of implementing these activities. We recommend adopting tools and techniques that work in your own environment and development culture.
We ended the chapter with views on select key trends that we see in the software architectural practice: principles, team-owned architecture, models and notations, patterns and styles, and architecture as a flow of decisions. For each of these trends, we provided a Continuous Architecture perspective. We believe that these trends are relevant in today’s software industry and, like all, trends have benefits and pitfalls.
In the remainder of this book, we discuss a range of other aspects of software architecture and, where relevant, refer to the essential activities presented in this chapter to put their use into context.