What are the main responsibilities of software architects? It is a choice and a trade-off. It is no exaggeration to call Software art. It can be said that software is a combination of Science, Engineering, and art. The art of software is embodied in trade-offs. In this issue 《ProgramClerk magazine saw an article "fish and bear's paw-the nightmare of perfectionist architects". The discussion about the weigh-off elements is exactly what I think. The main sections are as follows, for more details, read the full text in this article.
(1) time or space time vs. Space
It is a common trick to sacrifice memory or sacrifice time to save memory.
(2) elegancy or efficiency elegant vs. Efficiency
For example, polymorphism is elegant, but at the cost of efficiency, while the ugly function pointer is the opposite.
(3) fashion or familiarity unfamiliar new technologies vs skilled old technologies
Is it using the latest new technology that can improve development efficiency but we are not familiar with, or will we continue to use the old technology that we are very skilled but inefficient at development?
(4) revolution or Evolution Revolution vs. Inheritance
For legacy systems, have we overturned and re-built them, or have we improved and reconstructed them based on them?
(5) under-design or over-design mild design vs. Over-design
To what extent and how long does the design take?
The constraints of architecture design always focus on the 11 elements of software quality: correctness, reliability, effectiveness, integrity, availability, maintainability, flexibility, testability, portability, reusability, and interoperability.