«Три уровня моделирования: почему архитектура ломается даже при правильных приоритетах»
В прошлых постах мы разобрали, что приоритеты не спасают, если нет модели. Теперь — ключевой вопрос: как именно моделировать, чтобы не пропустить ни одного уровня?
Представьте, что вы строите дом. Вы не начнёте с крыши. Сначала — фундамент, потом стены, потом крыша. С программными системами — то же самое. Три уровня моделирования — это три этажа, и прыгать между ними нельзя.
«Представьте три уровня моделирования:
- BPMN — для того, чтобы понять заказчика (бизнес-процесс).
- UML — для того, чтобы спроектировать систему (объекты и взаимодействия).
- ERD — для того, чтобы правильно хранить данные (база данных).
Если вы пропускаете первый уровень — вы не поймёте заказчика. Если пропускаете второй — у вас будет кривая архитектура. Если пропускаете третий — у вас упадёт производительность и потеряются данные. Моделирование — это лестница. Нельзя прыгать с первого этажа на третий.»
Полная карта: какой инструмент — на какой уровень
Уровень 1. БИЗНЕС-ПРОЦЕССЫ (понимаем заказчика)
Здесь мы отвечаем на вопрос: «Как именно работает бизнес, какие шаги, кто за что отвечает?»
Главная мысль: всё это — уровень заказчика. Здесь вы проверяете бизнес-логику до того, как перешли к коду.
Уровень 2. АРХИТЕКТУРА ПРИЛОЖЕНИЯ (проектируем систему)
Здесь мы отвечаем на вопрос: «Из каких объектов состоит система, как они общаются и как меняются состояния?»
Главная мысль: здесь вы проверяете, как система устроена внутри, прежде чем писать классы и методы.
На данном этапе преобладает язык UML (Unified Modeling Language), а также смежные инструменты, такие как DFD и STD, которые помогают детализировать потоки данных и состояния объектов.
UML (Unified Modeling Language) — это стандартный язык визуального моделирования для разработки ПО. Он не язык программирования, а «чертёж» системы, помогающий проектировать архитектуру, описывать логику и документировать код до его написания.
UML — это язык для архитекторов и разработчиков. Он отвечает на вопросы:
- Из каких классов состоит система?
- Как эти классы связаны между собой?
- Как объекты общаются друг с другом во времени?
- В каких состояниях может находиться объект?
Уровень 3. ДАННЫЕ И ЛОГИКА (детали реализации)
Здесь мы отвечаем на вопрос: «Как именно хранить данные и как принимать решения?»
Главная мысль: здесь вы проверяете, не сломается ли логика и база данных на этапе реализации.
На этом уровне мы спускаемся к деталям, которые увидят разработчики и администраторы баз данных. Здесь два ключевых направления:
1. Проектирование базы данных (ERD)
Диаграммы «сущность-связь» показывают, какие таблицы будут в базе данных, какие у них поля и как они связаны между собой. На этом этапе вы находите ошибки, которые на первых двух уровнях были не видны: потерянные внешние ключи, неправильные связи (один-ко-многим вместо многие-ко-многим), дублирование данных. Ошибка здесь — и система тормозит или теряет данные.
2. Формализация сложной логики (Таблицы и деревья решений)
Если в процессе есть сложные условия («если сумма больше N и клиент новый, то...», «если товар заканчивается, а поставка через 3 дня, то...»), их нельзя просто нарисовать стрелочками. Таблицы и деревья решений позволяют проверить все комбинации условий и убедиться, что ни один сценарий не пропущен. Ошибка здесь — и в продакшене система принимает неверное решение.
Эти два инструмента — последний барьер перед тем, как требования уходят в разработку. Если ошибка не найдена здесь, она обязательно проявится в коде или в работе системы. Но тогда исправлять её будет в разы дороже.
Сводная таблица
Куда деть DFD? (важный нюанс)
DFD использовался и для существительных (внешние сущности, хранилища), и для глаголов (процессы).
DFD — это мостик:
- Сверху (бизнес): он показывает, кто и откуда даёт данные.
- Снизу (архитектура): он показывает, как эти данные преобразуются внутри системы.
Поэтому DFD часто используют первым инструментом, чтобы «связать» бизнес-требования с системой. А потом уже рисуют UML (классы, последовательности) и ERD.
Итог одной фразой
«Инструментов много, но каждый отвечает на свой вопрос: BPMN/swimlane/Use Case — что делает бизнес, DFD/STD — как устроена система, ERD/таблицы решений — как это хранить и вычислять. Пропустите один уровень — получите дыру в архитектуре.»
«А теперь — про деньги»
Выше мы говорили о моделировании как о способе «не пропустить ошибку». Но для бизнеса это ещё и способ сэкономить.
- Пропущенный BPMN → вы автоматизируете не тот процесс → тратите бюджет на ИИ, который решает не ту задачу. Потери: бюджет на разработку + упущенное время.
- Пропущенный UML → архитектура ломается при первой же доработке → переписываете код по 3 раза. Потери: время разработчиков в человеко-часах.
- Пропущенный ERD → база данных тормозит или теряет данные → падает производительность, клиенты уходят. Потери: репутация и выручка.
Три уровня — три риска. Если вы не моделируете, вы не управляете этими рисками. Вы просто надеетесь, что «пронесёт».
Именно поэтому я в своей работе всегда начинаю с аудита и моделирования. Это не «лишняя бюрократия». Это дешёвый способ найти ошибки до того, как они стали дорогими.
Сквозной пример: как все три уровня работают на одном бизнес-кейсе
«Пример из практики: обработка отзывов на WB/Ozon»
Представьте, что мы хотим внедрить AI-агента для автоматической обработки отзывов. Как это выглядит через три уровня?
Уровень 1. BPMN (что делает бизнес)
Мы рисуем процесс: отзыв поступает → его нужно классифицировать (позитив/негатив) → если негатив — передать менеджеру для ответа → если позитив — передать продуктологу для аналитики → ответ отправлен клиенту → процесс закрыт.
Ошибка, которую мы находим на этом уровне: в текущем процессе никто не собирает статистику по жалобам. Мы автоматизируем обработку, но не получаем аналитику. А значит, не видим, что клиенты жалуются на упаковку — и продукт не улучшается.
Уровень 2. UML (как устроена система)
Мы проектируем классы: Отзыв, Клиент, Продукт, Ответ. Рисуем диаграмму состояний отзыва: «Поступил → Классифицирован → Требует ответа → Ответ отправлен → Закрыт». Рисуем диаграмму последовательности: как AI-агент обращается к API маркетплейса, как передаёт данные в CRM.
Ошибка, которую мы находим на этом уровне: диаграмма состояний показывает, что отзыв не может перейти из «Требует ответа» в «Закрыт», если не заполнено поле «Категория жалобы». А в ТЗ это поле не было предусмотрено. Добавляем — иначе система зависнет.
Уровень 3. ERD (как хранить данные)
Мы проектируем таблицы: отзывы, клиенты, продукты, ответы, категории жалоб. Прописываем связи: один клиент — много отзывов. Один отзыв — одна категория жалобы.
Ошибка, которую мы находим на этом уровне: в таблице отзывов нет поля «Дата ответа», а значит, мы не сможем измерить скорость реакции. Добавляем — и потом считаем KPI «время от отзыва до ответа».
Итог: мы нашли и исправили три ошибки на этапе моделирования. Каждая из них стоила бы нам:
- На этапе кода — дни переписывания.
- На этапе тестирования — срыв релиза.
- На этапе продакшена — недовольных клиентов и потерю репутации.
А на этапе моделирования это стоило перерисовать несколько стрелочек и добавить пару полей в таблицу.