https://ailev.livejournal.com/1685201.html - хороший текст о том, как нынче продвинутые люди понимают архитектуру систем (программных систем в частности). А еще там же есть список книжек (в виде скриншотов обложек) по архитектуре и принятию архитектурных решений.

Что меня больше всего зацепило:

  1. Архитектор - это ни разу не разработчик, его область интересов совершенно другая. Если прикладные разработчики думают о том, как обеспечить функциональность системы, и принимают решения о том, какие именно модули/фреймворки/платформы для этого использовать, то архитектор думает о том, как обеспечить кучу -остей, всякие там стабильности, расширяемости, надежности, вот это вот все. А в первую очередь - об изменяемости, то есть о том, как бы так разделить систему на компоненты, чтобы облегчить реализацию любых инженерных решений.
  2. Инженерия требований по факту “умерла”. Требования - это что-то настолько быстро изменяющееся, что инженерить это оказывается слишком дорого. Более постоянными оказываются предметы интереса разных ролей к системе. Иногда конкретные предпочтения этих ролей оказываются четкими, измеримыми и фиксированными, но это не общее правило. Поэтому архитектор работает с предметами интереса, выдвигает гипотезы о том, какая архитектура удовлетворит все эти интересы, а затем проверяет гипотезы с помощью метрик.
  3. Основная форма записи архитектуры - это не диаграммы, а история принятия решений, обоснованных перед реализацией и обложенных метриками после. При этом каждое решение - это выбор конкретного пути на конкретной “архитектурной развилке”. Каждый такой выбор - попытка найти оптимум в уровне связности/связанности модулей (конструктивных частей) системы.