Project members should create an ADR for every architecturally significant decision that affects the software project or product, including the following (Richards and Ford 2020):
Structure (for example, patterns such as microservices)
Non-functional requirements (security, high availability, and fault tolerance)
Dependencies (coupling of components)
Interfaces (APIs and published contracts)
Construction techniques (libraries, frameworks, tools, and processes)
Functional and non-functional requirements are the most common inputs to the ADR process.