В книге "Руководство по проектированию архитектуры приложений (часть 2)" написано:
Создайте модель архитектуры на основании известных на данный момент сведений и составьте список вопросов, ответы на которые должны быть даны в последующих сценариях и итерациях.
Детально опишем основные этапы итеративного процесса проектирования архитектуры:
Определение целей архитектуры. Наличие четких целей поможет сосредоточиться на архитектуре и правильном выборе проблем для решения. Точно обозначенные цели помогают определить границы каждой фазы: момент, когда завершена текущая фаза и все готово для перехода к следующей.
Основные сценарии. Используйте основные сценарии, чтобы сосредоточиться на том, что имеет первостепенное значение, и проверяйте возможные варианты архитектур на соответствие этим сценариям.
Общее представление приложения. Определите тип приложения, архитектуру развертывания, архитектурные стили и технологии, чтобы обеспечить соответствие вашего дизайна реальным условиям, в которых будет функционировать создаваемое приложение.
Потенциальные проблемы. Выявите основные проблемные области на основании параметров качества и потребности в сквозной функциональности. Это области, в которых чаще всего делаются ошибки при проектировании приложения.
Варианты решений. В каждой итерации должен быть создан «пилот» или прототип архитектуры, являющийся развитием и доработкой решения. Прежде чем переходить к следующей итерации, необходимо убедиться в соответствии этого прототипа основным сценариям, проблемам и ограничениям развертывания.
Затруднения
Чаще всего при проектировании приложения затруднения вызывают вопросы:
Аутентификация
Авторизация
Кэширование
Связывание и связность (GRASP: сильная связность это хорошо, а вот сильное зацепление это плохо)
Управление исключениями
Протоколирование, аудит и инструментирование
Валидация
Какие основные риски могут возникнуть при использовании выбранного архитектурного решения (например выбранный архитектурный подход увеличит в 10 раз нагрузку на процессор, или потребует многократного увеличения оперативной памяти, или будет плохо масштабируемым)
Какие допущения были сделаны в этой архитектуре
Плюсы и минусы по сравнению с другими архитектурными подходами
Иногда проблемы появляются в следствии того, что про часть выше перечисленных вопросов просто забыли, а иногда потому, что не учтен какой-нибудь пункт из список атрибутов качества системы.