The architecture of a software system is the result of architectural decisions on various topics, such as frameworks, patterns, programming languages, or ways to decompose the software system. Such decisions and their rationales are a significant part of the architectural knowledge about a software system. Architectural knowledge about a software system tends to vaporize. For example, architects might forget the rationales of decisions, change jobs, or postpone indefinitely documenting decisions to avoid disrupting their design flow. Architectural knowledge vaporization has major practical consequences, such as drifting away from the initially intended architecture, and expensive evolution, due to the substantial needed effort to understand...