Перейти к основному содержимому

Архитектура и проектирование на старте проекта

Архитектору Аналитику

Архитектурная взлётная полоса

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

Big Design Up Front (BDUF) — подход, когда всю систему проектируют до первой строки кода. На старте коммерческого продукта он обычно избыточен: требования меняются, а месяцы проектирования без обратной связи от пользователей съедают бюджет.

Architecture runway (архитектурная взлётная полоса) — минимальный согласованный каркас, достаточный для первых итераций разработки. Метафора с самолётом: полоса не описывает весь маршрут полёта, но даёт безопасный старт и посадку.

Что входит в runway на старте
  • контекст системы — кто снаружи и зачем обращается к нам;
  • ключевые компоненты и интеграции — что внутри и с чем связано;
  • нефункциональные требования (NFR) — скорость, безопасность, объём данных;
  • осознанные риски — что может сломаться, если не принять решение сейчас.

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

С другой стороны, 200-страничное техническое задание до первого коммита тоже не требуется. Runway — золотая середина между хаосом и параличом анализа.

Углубление — Проектирование и архитектура.


Модель C4 на старте

C4 model — способ описывать архитектуру на четырёх уровнях детализации. На старте проекта обычно хватает первых двух.

УровеньНазваниеЧто показываетКогда рисовать
1System ContextСистема и внешние акторыДень 1–3 проекта
2ContainerПриложения, БД, очереди внутри системыПервая неделя
3ComponentМодули внутри одного контейнераПеред крупной фичей
4CodeКлассы и интерфейсыРедко на старте; в коде и ADR

Контейнер в C4 — не Docker-контейнер, а отдельное развёртываемое приложение: веб-сервер, мобильное приложение, база данных, фоновый worker.

Уровень 1 — контекст системы

Показывает систему как один блок и людей/системы вокруг неё.

На этом уровне отвечают на вопросы:

  • кто пользователи и внешние системы;
  • какие данные входят и выходят;
  • есть ли регуляторные ограничения (персональные данные, отраслевые стандарты).

Уровень 2 — контейнеры

Раскрывает, из чего состоит система внутри.

На старте достаточно:

  • одной диаграммы контекста;
  • одной диаграммы контейнеров;
  • короткого текста к каждой стрелке (протокол, формат данных).

Инструменты: draw.io, Mermaid в wiki, PlantUML, Structurizr. Важнее актуальность, чем красота.


Нефункциональные требования (NFR)

NFR (non-functional requirements) — требования к качеству системы, а не к конкретной функции. Пользователь не говорит "мне нужна доступность 99,9%", но без NFR команда не знает, как проектировать.

Подробнее — NFR в проектировании.

Примеры NFR на старте

КатегорияПлохая формулировкаХорошая формулировкаВлияние на архитектуру
Производительность"Система должна быть быстрой""95% запросов списка заявок — до 300 мс при 500 одновременных пользователях"Кэш, индексы БД, пагинация
Доступность"Сервис не должен падать""99,5% uptime в рабочие часы; RTO 4 часа"Резервирование, health-check, runbook
Безопасность"Защитить данные""Аутентификация через корпоративный SSO; данные в покое — AES-256"OAuth2/OIDC, шифрование, аудит
Масштабируемость"Должно расти""До 50 000 заявок в год без смены СУБД"Партиционирование, архив
Сопровождаемость"Код должен быть чистым""Новый разработчик поднимает среду за 2 часа по README"CI, документация, стандарты
Соответствие"Соблюдать закон""Хранение ПДн по 152-ФЗ; журнал доступа 3 года"Локализация данных, логирование
Как собрать NFR на старте
  1. Опросите спонсора и эксплуатацию — что критично для бизнеса.
  2. Посмотрите договор и SLA — там часто уже есть цифры.
  3. Зафиксируйте 5–10 NFR в wiki и ссылку в ADR-000.
  4. Пересматривайте после каждого релиза — NFR живут вместе с продуктом.

Типичные риски без NFR

  • Одна БД на всё — потом нельзя масштабировать чтение отдельно от записи.
  • Синхронные вызовы между сервисами — цепочка из пяти сервисов падает целиком при сбое одного.
  • Отсутствие идемпотентности — повторный запрос создаёт дубликат платежа или заявки.
  • Логи без структуры — при инциденте невозможно найти причину за разумное время.

Каждый риск, который осознанно принимают, стоит записать в ADR с объяснением, почему отложили решение.


Первые ADR

ADR (Architectural Decision Record) — короткая запись об архитектурном решении: что выбрали, почему и какие последствия. С первого дня ведите Architectural Decision Records.

Типичные ADR на старте

Типичное решениеПочему на старте
ADR-001Монолит или микросервисыЗадаёт границы репозитория и деплоя
ADR-002Язык и основной фреймворкВлияет на найм и скорость
ADR-003СУБД и стратегия миграцийСложно поменять позже
ADR-004Аутентификация (OAuth2, SSO)Граница безопасности
ADR-005Стиль API (REST, события)Контракт с фронтом и интеграциями
ADR-006Формат логов и трассировкиНужен до prod
ADR-007Стратегия веток и релизовСвязь с CI/CD

Шаблон ADR

# ADR-003: PostgreSQL как основная СУБД

## Статус
Принято (accepted)

## Контекст
Нужна реляционная БД для транзакционных заявок.
Команда знает SQL. Объём — до 50 000 записей в год.
Требуется JSON-поля для гибких атрибутов.

## Решение
Используем PostgreSQL 16.
Миграции — Flyway/Liquibase в репозитории.
Резервное копирование — ежедневный snapshot + WAL.

## Альтернативы
- MySQL — отклонено: слабее поддержка JSON и расширений.
- MongoDB — отклонено: нужны жёсткие транзакции и отчёты.

## Последствия
+ Зрелая экосистема, знакомая команде.
+ Хорошая поддержка в облаках.
- Потребуется DBA-консультация при росте нагрузки.
- Горизонтальное масштабирование записи — отдельная задача.

## Связанные артефакты
- Диаграмма контейнеров (C4 level 2)
- NFR: доступность 99,5%

Статусы ADR

СтатусЗначение
proposedПредложено, обсуждается
acceptedПринято, действует
deprecatedУстарело, не применять к новому коду
supersededЗаменено другим ADR (указать номер)
Правила ADR на старте
  • Один ADR — одно решение, не свалка тем.
  • Не удаляйте старые ADR — помечайте deprecated или superseded.
  • Храните в Git рядом с кодом, не только в wiki.
  • Обсуждение в PR к ADR — так же, как к коду.

Аналитик и архитектор — разграничение

На старте часто путают роли бизнес-аналитика (BA) и системного аналитика / архитектора (SA). Обе роли нужны, но отвечают за разные слои.

ВопросBA (бизнес-аналитик)SA / архитектор
Что видит пользователь?ДаКонсультирует
Какие бизнес-правила?ДаПроверяет реализуемость
Какие системы вокруг?Описывает интеграции с точки зрения данныхПроектирует контракты и протоколы
Сколько RPS выдержать?Собирает ожиданияФормулирует NFR и решения
Какая модель данных?Глоссарий доменаER-диаграмма, миграции

Разграничение ответственности:

  • аналитик фиксирует поведение и правила — что система делает для пользователя;
  • архитектор — границы систем и NFR — из чего состоит, какие ограничения;
  • разработчик — реализацию в рамках ADR — код, тесты, деплой (о разделе проекта).

Артефакты в связке

АртефактВладелецСвязь
User stories / use casesBA / POBacklog
BPMN процессовBABPMN
Технический дизайн фичиSA / техлид128
OpenAPI / схемыDev + SASwagger
Модель данныхSA / DBAdesign/117
ADRАрхитектор / техлидADR

Типичные конфликты и как их снимать

КонфликтСимптомРешение
BA пишет техническое ТЗ80 страниц до первого спринтаРазделить: BA — поведение, SA — техдизайн по фичам
Архитектор пишет user storiesРазработчики не понимают ценностьStories — зона PO/BA; архитектор ревьюит NFR
Нет SAАрхитектор тонет в деталях APIНазначить SA или ротировать техлида на фичи
OpenAPI устарелФронт и бэк расходятсяOpenAPI в Git, ревью в PR, CI-валидация

Документирование на старте

Минимальный набор, который окупается в первый месяц:

  1. README и CONTRIBUTING в репозитории — как собрать, как оформить PR.
  2. Диаграмма контекста (C4 level 1) — даже draw.io в wiki.
  3. Глоссарий домена — 20–30 терминов, согласованных с заказчиком.
  4. Политика веток и релизов — main защищён, feature branches, теги.
  5. Definition of Done и Definition of Ready — когда задача готова к работе и к приёмке.

Что хранить где

КонтентGit (docs-as-code)Wiki
ADRДаСсылка
OpenAPIДа
README модулейДа
ОнбордингЧастичноДа
Протоколы встречДа
Runbook инцидентовДаДубль для дежурных

Подробнее — docs-as-code.


Госконтракт и формальное ТЗ

В коммерческой разработке часто хватает lean-backlog и ADR. В госзаказе и крупных корпоративных тендерах дополнительно требуется техническое задание (ТЗ) по нормативам — часто со ссылкой на ГОСТ.

Два контура документов

Рабочий контур — backlog, ADR, wiki, то, чем пользуется команда каждый день.

Формальный контур — ТЗ по ГОСТ, акты, протоколы приёмки — то, что проверяет заказчик и аудит.

Оба должны не противоречить друг другу. Изменение в backlog без отражения в ТЗ (или приложения к договору) — риск на приёмке.

Типичная структура госконтрактного ТЗ

Раздел ГОСТЧто пишет командаСвязь с agile
Общие сведенияPM, юристCharter проекта
Назначение и целиBA + спонсорVision, OKR
Характеристики объектаSA + архитекторC4, NFR
Требования к функциямBAEpics, stories
Требования к надёжностиАрхитекторNFR, SLA
Состав и содержание работPMWBS, roadmap
Порядок контроля и приёмкиPM + QADoD, тест-план

Как не утонуть в формализме

  • Ведите матрицу трассировки: пункт ТЗ → epic/story → тест-кейс → релиз.
  • Формальные документы обновляйте пакетами при согласованных изменениях (управление изменениями).
  • Технические детали в ТЗ — на уровне возможностей, не классов Java.
  • Приложения к ТЗ — ADR, диаграммы, OpenAPI; основной текст остаётся стабильным.

FAQ по оформлению — 7.08 FAQ.


Пример runway за первую неделю

Проект: внутренний портал заявок на закупку для компании из 500 сотрудников.

ДеньАртефактРезультат
1C4 context + список стейкхолдеровВсе видят границы системы
2C4 containers + ADR-001 (монолит)Решение о структуре репо
3NFR-таблица (10 пунктов)Критерии для техдизайна
4ADR-002 (стек), ADR-003 (PostgreSQL)Можно создать каркас приложения
5Глоссарий (25 терминов) + OpenAPI черновикBA и dev говорят на одном языке

К концу недели команда из четырёх человек может начать первые задачи без споров о стеке и границах.


Частые ошибки на старте

ОшибкаПоследствиеЧто делать
Нет диаграммы контекстаИнтеграции всплывают в середине спринтаC4 level 1 в первые 3 дня
NFR в голове архитектораProd падает под нагрузкойТаблица NFR в wiki, ревью с PO
ADR пишут задним числомНикто не знает, почему выбран MongoDBADR до merge критичного кода
BA пишет SQL в ТЗПривязка к реализации, сложные измененияМодель данных — зона SA
Только wiki, нет ADR в GitДокументация расходится с кодомdocs-as-code
Госконтрактное ТЗ без связи с backlogНе сдают этапМатрица трассировки с дня 1

Согласование эскиза с командой

Архитектурный runway не пишется в одиночку. Минимальный цикл согласования на первой неделе:

ШагУчастникиВремяВыход
Черновик C4 L1Архитектор2–4 чДиаграмма в wiki
Ревью интеграцийBA + представитель заказчика60 минСписок внешних систем
Воркшоп C4 L2Архитектор + техлиды90 минКонтейнеры и протоколы
NFR-ревьюPO + эксплуатация45 минТаблица NFR v1
ADR partyВся команда разработки60 мин3–5 ADR в статусе accepted

Фиксируйте протокол: кто согласен, какие пункты отложены, дата следующего пересмотра. Без протокола через месяц никто не вспомнит, почему выбрали RabbitMQ, а не Kafka.

Вопросы для воркшопа C4 L2

  • Где граница нашей системы при сбое внешнего SSO?
  • Какой контейнер владеет данными заявки — один источник правды?
  • Синхронный или асинхронный вызов к CRM — и что при таймауте?
  • Где хранятся секреты и кто ротирует ключи?
  • Какой контейнер первым выкатываем на prod — можно ли откатить без миграции БД?

Матрица трассировки для госконтракта

Связывает формальное ТЗ с рабочим backlog. Ведите в Excel, wiki или трекере.

ID ТЗФормулировка в ТЗEpic / StoryТест-кейсРелизСтатус
FR-3.2.1Регистрация заявки пользователемPROJ-12TC-0451.0В работе
NFR-2.1Время отклика до 2 сPROJ-88TC-PERF-011.1Запланировано
FR-5.1Экспорт в PDFPROJ-40TC-1022.0Backlog

Правила:

  • каждый обязательный пункт ТЗ имеет хотя бы одну story;
  • story без пункта ТЗ — либо вне scope, либо нужно допсоглашение;
  • при закрытии этапа акт приёмки ссылается на ID ТЗ и релиз.

FAQ

Нужно ли рисовать все 4 уровня C4?

На старте — уровни 1 и 2. Уровень 3 — перед крупной фичей или при споре о границах модулей. Уровень 4 — в коде и code review, не в отдельной диаграмме.

Сколько ADR достаточно в первый месяц?

Обычно 5–10. Больше — признак, что решения не консолидируют. Меньше — возможно, решения принимают устно и теряют.

Кто утверждает ADR?

Техлид или архитектор — автор. Команда — ревью в PR. Спонсор — только если ADR влияет на бюджет или сроки (например, смена облака).

Чем runway отличается от MVP?

Runway — технический каркас для разработки. MVP — минимальный продукт для пользователя. Runway нужен, чтобы построить MVP быстрее и без переделок.

Как совместить ГОСТ-ТЗ и Scrum?

ТЗ описывает результат этапа и критерии приёмки. Спринты — способ доставки внутри этапа. Backlog — рабочий инструмент; ТЗ — юридический якорь.

Аналитик может быть архитектором?

В маленькой команде — да, но роли лучше разделять хотя бы на уровне артефактов: stories пишет как BA, ADR — как архитектор.


Что дальше

План, декомпозиция и первые задачи — как разложить runway на backlog и первый спринт.