In software engineering and software architecture design, architectural decisions are design decisions that address architecturally significant requirements; they are perceived as hard to make and/or costly to change.
Architectural decisions influence and impact the non-functional characteristics of a system. Each architectural decision 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 architectural decision captures the result of a conscious, often collaborative option selection process and provides design rationale for the decision making outcome, e.g., by referencing one or more of the quality attributes addressed by the architectural decision and answering "why" questions about the design and option selection. Architectural decisions concern a software system as a whole, or one or more of the core components of such a system. Types of architectural decisions 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).
Software architecture design is a wicked problem, therefore architectural decisions 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; additional motivation for/of the importance of architectural decisions as a first-class concept in software architecture can be found online.
Rationale was mentioned in an early definition of software architecture by Perry/Woolf, but not researched much until 2004, when a workshop on architectural decisions and Architectural Knowledge Management was held in Groningen, NL. Early publications can be traced back to this workshop,. From 2006 on, the architectural knowledge management and architectural decision research communities gained momentum and a number of papers was published at major software architecture conferences such as ECSA, QoSA and WICSA.[clarification needed] A Springer book summarized the state of the art as of 2009, and a systematic mapping study from 2013  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. The most recent standard for architecture descriptions, ISO/IEC/IEEE 42010:2011 has a dedicated rationale entity, and gives detailed recommendations which architectural decisions to capture and which properties of an architectural decision to record in the decision log.
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.
A number of decision making techniques exists, both general ones and software and software architecture specific ones, for instance, dialogue mapping.Group decision making is an active research topic.
Many templates and tools for decision capturing exist, both in agile communities (e.g., M. Nygard's architecture decision records) and in software engineering and architecture design methods (e.g., see table layouts suggested by IBM UMF  and by Tyree and Akerman from CapitalOne. G. Fairbanks included decision rationale in his one-page Architecture Haikus; his notation was later evolved into Y-statements.
Architectural decisions are used in software design; hence they have to be communicated to, and accepted by, the stakeholders of the system that fund, develop, and operate it. Architecturally evident coding styles  and code reviews that focus on architectural concerns and decisions are two related practices.
Architectural decisions also have to be considered when modernizing a software system in software evolution.
Many architectural decisions recur across projects; hence, experiences with past decisions, both good and bad, can be valuable reusable assets when employing an explicit knowledge management strategy.
On large scale projects, the number of architectural decisions to be made can go up to 100 and up, including:
This is an example of a decision made, which is formatted according to the Y-statement template proposed in:
"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 (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."