Этапы проектирования

Далее будут шаги, которые нужно выполнять друг за другом

Собрать продуктовые/технические требования проекта

Что стоит сделать:

  • Провести грумминг проекта с заказчиком (менеджером, team lead или другими представителями вне команды).
  • Определить один или несколько milestone — поэтапное донесение пользы пользователю.
  • Обсудить сроки и последовательность раскатки.
  • Понять, какая будет нагрузка.

К этому этапу можно возвращаться на любом другом этапе проектирования.

То, что оптимально и удобно технически, не всегда удобно для пользователя.

То, что кажется разработчику хорошим пользовательским сценарием, не всегда совпадает с реальными ожиданиями, поэтому любое решение, влияющее на пользовательский сценарий, нужно валидировать у заказчика.

Исследовать существующие решения и возможность их переиспользовать
  • Узнать, существуют ли решения, применимые в текущем проекте.
  • Убедиться, что существующее решение действительно подходит под конкретные требования.
Нарисовать “архитектуру в лоб” в соответствии с C4-нотацией

Нарисовать первое пришедшее на ум решение (соответствует принципу фиксации результатов).

Коротко о нотации C4: это метод визуализации архитектуры ПО, разработанный Саймоном Брауном. Он помогает представить систему на четырёх уровнях абстракции:

  • C1 (Context): показывает, как система взаимодействует с внешними пользователями и другими системами.
  • C2 (Containers): описывает высокоуровневую структуру системы (приложения, микросервисы, Messages Queues, базы данных и их взаимодействие).
  • C3 (Components): детализирует внутреннюю структуру каждого контейнера, выделяя ключевые компоненты и их связи (APIs, workers, cron tasks и т. п.).
  • C4 (Code): даёт детальный обзор реализации отдельных компонентов на уровне классов или функций.

RFC рекомендуется описывать на уровне C2–C3 нотации.

Улучшить/оптимизировать архитектуру
  • Проанализировать возможные «костыли» в решении
  • Проверить, является ли решение системным и масштабируемым
  • Убедиться, что технологии и сервисы выбраны правильно
  • Посмотреть, можно ли убрать некоторые компоненты или действия
  • Оценить, выдержит ли предлагаемая архитектура требуемую нагрузку
Описать архитектуру в RFC

А это будем подробно разбирать в следующей лекции.