When you are developing a program by change request and you know a customer profile, always possible to correctly identify the requirements for an architecture. You should specify the requirements for performance, reliability, fault tolerance, modifiability, security, and observability. Set priorities among them and based on the requirements and their priorities are create a software product. In theory it seems simple.
However, in real life there are a lot of nuances associated with both the human factor and the complexity of the prioritization between requirements. What to do if you have two solutions, one of which suggested a respected experienced developer, and the other a novice? Does the team thought that an experienced developer is not right? How to choose if a solution must be quick or with good modularity (usually improving one characteristic has worsen the other)?
We have tried to find answers to these questions using the techniques of formal comparison of architectural solutions. The report will be considered by the chosen methodology and results of practical experience of its application.