Architectural decision
In software engineering and software architecture design, architectural decisions (ADs) are design decisions that address architecturally significant requirements; they are perceived as hard to make[1] and/or costly to change.[2]
Characteristics
Architectural Decisions (ADs) influence and impact the non-functional characteristics of a system. Each AD describes a concrete, architecturally significant design issue (a.k.a. design problem, decision required) for which several potential solutions (a.k.a. options, alternatives) exist. An AD captures the result of a conscious, often collaborative option selection process and provides design rationale for the selection of the decision making outcome, e.g., by referencing one or more of the quality attributes addressed by the AD. Architectural decisions concern a software system as a whole, or one or more of the core components of such a system. Types of ADs are the selection of architectural tactics and patterns, of integration technologies, and of middleware, as well as related implementation strategies and assets (both commercial products and open source projects).[3]
Software architecture design is a wicked problem,[4] therefore ADs are difficult to get right and often, no single optimal solution for any given set of architecture design problems exists. Architectural decision making is a core responsibility of software architects;[5] additional motivation for/of the importance of ADs as a first-class concept in software architecture can be found online.[6]
History
Rationale was mentioned in an early definition of software architecture by Perry/Woolf,[7] but not researched much until 2004, when a workshop on architectural decisions and Architectural Knowledge Management (AKM) was held in Groningen, NL. Early publications can be traced back to this workhop,.[8][9] From 2006 on, the AKM/AD research community gained momentum and a number of papers was published at major software architecture conferences such as ECSA, QoSA and WICSA. A Springer book summarized the state of the art as of 2009,[10] and a systematic mapping study from 2013 [11] compiles and analyzes more and more recent research results.
In practice, the importance of making the right decisions has always been recognized, for instance in software development processes such as OpenUP; many templates and practices for decision documentation exist. Seven of these templates are compared in.[12] The most recent standard for architecure descriptions, ISO/IEC/IEEE 42010:2011 has a dedicated rationale entity, and gives detailed recommendations which ADs to capture and which properties of an AD to record in the decision log.[13]
Decision management steps
Decision identification
Before a decision can be made, the need for a decision must be articulated: how urgent and how important is the AD? Does it have to be made now or can it wait until more is known about requirements and system under construction? Both personal and collective experience, as well as recognized design methods and practices, can assist with decision identification; it has been proposed that Agile software development team should maintain a decision backlog complementing the product backlog of the project.[14]
Decision making
A number of decision making technqiues exists, both general ones and software and software architecture specific ones, for instance, dialogue mapping.[15] Group decision making is an active research topic.
Decision documentation
Many templates and tools for decisison capturing exist, both in agile communities (e.g., M. Nygard's ADRs[16]) and in traditional software engineering and architecture design processes (e.g., see table layouts suggested by IBM UMF [17] and by Tyree and Akerman from CapitalOne.[18]
Decision enactment (enforcement)
ADs are used in software design; hence they have to be communicated to, and accepted by, the stakeholders of the system that fund, deveop, and operate it. Architecturally evident coding styles [19] and code reviews that focus on architectural concerns and decisions are two related practices.
ADs also have to be (re-)considered when modernizing a software sytem in software evolution.
Decision sharing (optional step)
Many ADs recur across projects; hence, experiences with past decisions, both good and bad, can be valuable reusable assets when employing an explicit knowledge management strategy.[20]
Examples
On large scale projects, the numer of architetural decisions to be made can go up to 100 and up, including:
- Selection of architectural layering scheme and individual layer responsibilities (when adopting the Layers pattern from [21])
- Choice of implementation technology per layer, component, and connector (e.g., programming language, interface contract format, XML vs. JSON when designing integration interfaces and message exchanges)
- Choice of presentation layer frameworks on client side (e.g., JavaScript frameworks) and on the server side (e.g., Java and PHP frameworks)
Refer to the design concept catalogs in Attrribute-Driven Design (ADD) 3.0 [22] and domain-speciifc decision guidance models [23] for more examples.
This is an example of a decision made, which is formatted according to the lean template proposed in:[24]
“In the context of the Web shop service, facing the need to keep user session data consistent and current across shop instances, we decided for the Database Session State Pattern from Patterns of Enterprise Application Architecture[25] (and against Client Session State or Server Session State) to achieve cloud elasticity, accepting that a session database needs to be designed, implemented, and replicated.”
See also
- Architectural pattern (computer science)
- Architecturally significant requirements
- Attribute-driven design
- Design rationale
- Knowledge management
- Software architecture
References
- ↑ Fowler, M. (2003). "Design – Who needs an architect?". IEEE Software. 20 (5): 11–44. doi:10.1109/MS.2003.1231144
- ↑ Booch, G., abstracting-the-unknown, SATURN 2016 keynote
- ↑ Page 64 in http://delivery.qmags.com/d/?pub=ISW&upid=15761SP&fl=others%2fISW%2fISW_20110101_Jan_2011.pdf
- ↑ Conklin, Jeffrey (2006). Dialogue mapping : building shared understanding of wicked problems. Chichester, England: Wiley Publishing. ISBN 0470017686.
- ↑ Kruchten, P., What do software architects really do?, The Journal of Systems and Software 81 (2008) 2413–2416
- ↑ Hohpe, G., Is This Architecture? Look for Decisions!
- ↑ Perry, D. E.; Wolf, A. L. (1992). "Foundations for the study of software architecture" (PDF). ACM SIGSOFT Software Engineering Notes. 17 (4): 40. doi:10.1145/141874.141884
- ↑ Jansen, A.; Bosch, J. (2005). "Software Architecture as a Set of Architectural Design Decisions". 5th Working IEEE/IFIP Conference on Software Architecture (WICSA'05)
- ↑ Kruchten, Philippe, Patricia Lago, and Hans Van Vliet. "Building up and reasoning about architectural knowledge." Quality of Software Architectures. Springer Berlin Heidelberg, 2006. 43-58.
- ↑ Babar, M.A.; Dingsøyr, T.; Lago, P.; Vliet, H. van (2009). Software Architecture Knowledge Management:Theory and Practice (eds.), First Edition. Springer.
- ↑ Li, Z., Liang, P., Avgeriou, P., Application of Knowledge-based Approaches in Software Architecture: A Systematic Mapping Study, Information and Software Technology, Volume 55, Issue 5, May 2013, Pages 777-794, Elsevier.
- ↑ Zimmermann, O., Wegmann, L., Koziolek, H., Goldschmidt, T., Architectural Decision Guidance across Projects, Proc. of. IEEE/IFIP WICSA 2015
- ↑ ISO/IEC/IEEE 42010:Templates for using the Standard.
- ↑ Hofmeister, C., Kruchten, P., Nord, R., Obbink, H.; Ran, A., America, P. (2007), A general model of software architecture design derived from five industrial approaches.
- ↑ Conklin, Jeffrey (2006). Dialogue mapping: building shared understanding of wicked problems. Chichester, England: Wiley Publishing. ISBN 0470017686.
- ↑ M. Nygard, Documenting Architecture Decisions
- ↑ Zimmermann, O., An Architectural Decision Modeling Framework for SOA and Cloud Design, SEI SATURN 2010 presentation.
- ↑ Tyree, J., Akerman, A., Architecture decisions: demystifying architecture
- ↑ Fairbanks, G., An architecturally-evident coding style: making your design visible in your code, Proc. of OOPSLA 2010
- ↑ Babar, M.A.; Dingsøyr, T.; Lago, P.; Vliet, H. van (2009). Software Architecture Knowledge Management:Theory and Practice (eds.), First Edition. Springer.
- ↑ Buschmann, Frank; Meunier, Regine; Rohnert, Hans; Sommerlad, Peter (1996). Pattern-Oriented Software Architecture, Volume 1: A System of Patterns. John Wiley & Sons. ISBN 0-471-95869-7.
- ↑ H. Cervantes, R. Kazman, Designing Software Architectures: A Practical Approach, Addison-Wesley, 2016.
- ↑ Page 21 in Zimmermann, O., Guidance Models and Decision-Making Tooling for SOA, Cloud, and Outsourcing Solution Design, http://resources.sei.cmu.edu/asset_files/Presentation/2011_017_001_24654.pdf
- ↑ http://www.infoq.com/articles/sustainable-architectural-design-decisions
- ↑ M. Fowler, Patterns of Enterprise Application Architecture