Привет, меня зовут Владислав, я – системный аналитик в компании «Совкомбанк Технологии».

Хочу поделиться с вами материалом, который будет посвящен не написанию кода, как может показаться из названия, а документации, которая может спасти проект или убить его, если подойти к ней без дисциплины. Покажу, как применять инженерные принципы — SRP, SSOT, ООП — не к коду, а к аналитике, описанию систем и документированию решений.

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

Например, в статье «Как не превратить корпоративную базу знаний в хаос: наш опыт борьбы с Confluence» авторы описывают, как через шаблоны, лейблы и коллаборативный подход удается структурировать документацию — что напрямую перекликается с принципами SSOT и SRP, которые мы рассмотрим в этой статье.

Также актуальна статья «Один Swagger вместо сотни страниц Confluence: как в Рунити навели порядок в API-документации», где подробно описан реальный кейс перехода от разрозненной документации в Confluence к единому источнику истины — Swagger. Авторы показывают, как это позволило устранить дублирование, снизить количество ошибок и ускорить онбординг — именно те эффекты, которые мы связываем с применением инженерных принципов к документации.

Эта статья не про инструменты, а про инженерное мышление в документации — почему хаос возникает, как его избежать, и как применять принципы SSOT, SRP и ООП, даже если вы не пишете код.

Cтатья будет полезна:

  • Аналитикам, которые устали от бесконечных правок в Confluence

  • Разработчикам, которые видят в ТЗ одно, а на макетах в Figma другое

  • Руководителям, чьи команды не на «одной волне» из-за размытых требований

Расскажу, как грамотно применить инженерные принципы в документации. Это поможет:

  • Минимизировать дублирование

  • Снизить количество ошибок из-за недопонимания

  • Сделать систему изменяемой, адаптивной и прозрачной

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

Обсудим:

  1. Почему документация превращается в хаос — и как это связано с нарушением ключевых инженерных принципов

  2. Как SSOT — единый источник истины — спасает от расхождений и копипаста

  3. Как принцип единственной ответственности SRP применяется к документам, а не к классам

  4. Как ООП-подходы помогают строить масштабируемую и переиспользуемую документацию

  5. Практические шаги по внедрению порядка — от анализа до автоматизации

1. Почему документация превращается в цифрового Франкенштейна?

Проекты не становятся нечитаемыми за один день. Сначала кто-то добавляет пару экранов, кто-то описывает API в Confluence, кто-то рисует схему в Miro. Потом появляются новые команды и продукты, дедлайны сжимают сроки.

И вот уже:

  • Описание одного и того же API — в Confluence, в Youtrack, в блокноте на рабочем столе у разработчика

  • Бизнес-правила — в требованиях, в коде, в письмах

  • Логика потока данных — в трёх разных диаграммах, которые не согласованы между собой

Система становится немасштабируемой, непредсказуемой, хрупкой. Любое изменение требует недели на согласование, потому что никто не знает, где истина. Вина падает на аналитиков. И действительно, зачастую именно аналитики стоят у источников: дублируют данные, не обновляют документы, описывают одно и то же в разных местах.

Но проблема глубже, она не про отдельных людей, а про отсутствие единых правил, поддержки со стороны команды и инструментов, которые помогают соблюдать порядок.

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

Да, аналитики участвуют в создании хаоса. Но ответственность лежит на всей команде: за процессы, за инфраструктуру, за культуру работы с информацией. Это не оправдание, а призыв к системному решению.

Вывод: Хаос в документации — не случайность, а следствие отсутствия знаний архитектуры. Ответственность — за всеми, не только за аналитиками.

2. Единый источник истины — не дублируй, а централизуй

Наверняка многим знакома ситуация, когда описание API дублируется в:

  • Confluence — для бизнеса

  • Swagger — для разработчиков

  • Postman — для тестирования

Через месяц один из источников устаревает. Одни работают с Postman, другие со Swagger, третьи — с Confluence. В результате — баги, недопонимания, потеря времени.

Решением будет Single Source of Truth или SSOT — единый источник истины.

К этому принципу в данном контексте подходит Swagger, которого можно придерживаться как единственного источника для API документации.

  • Никаких описаний в Confluence

  • Никаких копий в Postman

  • Все генерируют документацию из спецификации

В результате команда видит одно и то же, все изменения API хранятся в одном месте.

Приведу пример из своей практики. На проекте, где я работал ранее, аналитики ушли от ручного описания API в Confluence. Всё — через OpenAPI спецификации на YAML. Через время количество вопросов, багов и недопониманий стало ощутимо меньше. Направления Backend, Frontend, QA, анализ стали пользоваться одним источником истины для API – Swagger.  Перед тем, как пойти к аналитику и спросить о том, где можно найти описание запроса, люди просто стали искать ответы на свои вопросы там.

Легко заметить, насколько страдает команда, когда в проекте нет единого источника истины для API — особенно это бьёт по тем, кто работает по методологии API First, где любое отклонение от контракта срывает весь процесс разработки.

Вывод: если информация дублируется — она неизбежно расходится. Истина – в едином источнике.

3. Принцип единственной ответственности

Принцип единой ответственности (SRP) — один из столпов SOLID.

В коде: один класс — одна ответственность. В документации: один документ — одна цель.

Антипаттерн:

«Общее описание микросервиса» содержит 120 страниц. В нём API, бизнес-логика, схемы данных, требования и инструкции.

Что происходит?

  • Меняется API — обновляют весь документ

  • Добавляется новое поле — правят страницу 47, но забывают про схему на 89

  • Новый аналитик тратит много времени, чтобы найти нужное

Решением в этой ситуации будет применение SRP к документации.

Разделим:

  • API-документация — только контракты, структуры, примеры

  • Бизнес-требования — только сценарии, правила, триггеры

  • Модели данных — только ER-диаграммы и описания полей

  • Руководства — только инструкции по использованию

Каждый документ изменяется по одной причине:

  • API — при изменении интерфейса

  • Требования — при изменении бизнес-логики

  • Модели — при изменении структуры БД

Результат:

  • Каждый документ фокусируется на конкретной области и перестаёт быть местом, где всё перемешано

  • Разные роли работают с тем, что им действительно нужно, например, разработчику Backend не нужно искать интересующую его информацию о контрактах API среди бизнес-требований и описания UI

  • Правки вносятся независимо: изменения в API не затрагивают описание логики, а обновление требований не влияет на структуру данных

  • Ревью проходят быстрее и точнее — ревьювер видит только релевантную информацию и не тратит время на анализ чужой зоны ответственности

  • Снижается риск ошибок: никто не пропускает изменения, потому что контекст всегда чёткий и изолированный

Вывод: Документ, который пытается охватить всё, часто теряет фокус и становится неэффективным. Разделение ответственности позволяет каждому документу отвечать за конкретную область и выполнять свою функцию.

*Важно отметить, что я не отрицаю ценность комплексных документов вроде SRS или ГОСТ-описаний. Но в операционной документации, особенно при активной разработке, избыточная концентрация информации в одном месте создаёт риски.

4. ООП-подход к документации — наследуй и абстрагируй

ООП или объектно-ориентированное программирование — не только про код, но и про способ мышления. Давайте применим два принципа из ООП к анализу.

Принцип наследования помогает переиспользовать шаблоны. Например, каждый раз, когда разрабатывается новый экран с фильтрами — аналитик с нуля описывает поля, поведение, валидацию, UI-правила.

В результате — 5 экранов и разных подходов, не двойная, а повторяющаяся n-раз работа. Решением будет создание базового шаблона для экрана «Фильтры».

В нем нужно описать:

  • Общие поля – дату, статус, поиск

  • Правила валидации

  • Поведение – сброс, применение

  • UI-компоненты

Если в вашей задаче с новым экраном встречается экран с фильтрами, наследуйте базовый шаблон и дополняйте:

Экран отчётов — наследует фильтры (ссылка в документации на наследуемый элемент) + поле «период»

В результате — единообразие, быстрое создание требований и уменьшение количества ошибок.

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

Например, вместо «система отправляет POST на /api/v1/orders» — пишем «вызов сервиса создания заказа».

Детали должны быть в спецификации, а не в общем потоке.

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

Из моего опыта, когда в документации слишком подробно описываются технические детали, например, конкретные HTTP-методы или URL, при изменениях в системе приходится переписывать и документ.

А если придерживаться принципа абстракции, то есть писать обобщенно — «вызов сервиса создания заказа вместо «POST /api/v1/orders», документ не нужно будет меня при каждом изменении реализации.

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

Хорошие принципы работают только при поддержке простых, но устойчивых практик. В контексте SSOT, SRP и ООП-подходов инструкция следующая:

  • Выберите единое место для API — начните использовать Swagger, работая с API используйте и ссылайтесь только на него. Перестаньте дублировать API в Confluence или YouTrack.

  • Создайте шаблоны документов: отдельно для API, требований, моделей данных. Один тип — один формат.

  • Соберите библиотеку типовых решений — фильтры, ошибки, потоки. Не переписывайте каждый раз, а наследуйте и дополняйте.

  • Используйте ссылки вместо дублирования – так проще поддерживать актуальность.

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

Почему это важно для бизнеса?

Команды, которые применяют эти принципы в документации, быстрее вводят новые продукты и реже допускают ошибки из-за недопонимания.

Это не бюрократия, это инвестиция в скорость и качество.

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

1. Оцените, где сейчас хаос:

a. Где дублируется информация?

b. Что устарело, но до сих пор используется?

c. Кто вообще отвечает за ключевые документы?

2. Назначьте единые источники истины (SSOT)

a. API — только в Swagger. Нигде больше.

b. Модели данных — в единой базе, библиотеке или реестре моделей со словарём.

c. Бизнес-правила — в одном месте, с версией и статусом.

3. Разделите документы по ответственности (SRP)

a. Один документ — одна цель.

b. API, требования, логика, UI — в разные файлы/блоки.

c. Чтобы фронтенд не рылся в описании БД, а бэкенд — в UI-правилах.

4. Соберите библиотеку шаблонов

a. Создайте типовые блоки: фильтры, формы, ошибки, потоки.

b.  Новый экран? Не с нуля — наследуй и дополняй.

Закрепите эти привычки у команды:

  • На каждом ревью задавайте себе вопрос: «Где источник?», «Можно вынести в шаблон?»

  • Раз в месяц проводите быстрый аудит документации.

Заключение: порядок в документации — это процесс, а не разовое действие

Порядок в документации — процесс, требующий системного подхода. Инженерные принципы SSOT, SRP, ООП дают не только инструменты, но и философию: информация должна быть структурирована, изолирована по ответственности и переиспользуема. Только так документация становится архитектурой знаний — живой, масштабируемой и устойчивой к изменениям.

А как вы справляетесь с хаосом в документации?

  • Есть ли у вас единый источник?

  • Как вы избегаете дублирования?

  • Какие инструменты или практики помогли вам навести порядок?

Буду рад пообщаться в комментариях — делитесь опытом, вопросами, кейсами.

Комментарии (1)


  1. aggromarus
    12.12.2025 20:21

    Выглядит как "Делайте хорошо, а нехорошо не делайте". Не хватает конкретных примеров в плане подготовки самой документации.

    Не совсем понял, как при изменении API волшебным образом получится внести минимум корректировок? Добавился атрибут в API - значит скорее всего и на UI появится новый элемент, а раз он появился, значит были причины - требования, там и сам сценарий мог измениться. Я к тому, что не всегда все так просто и гладко и цепная реакция чаще всего срабатывает.

    Вопрос в самих средствах обработки документации. Пользуйтесь IDE, уж про рефакторинг связанных документов всегда напомнит и даже может сделать за вас, если include файлик переехал в другое место.

    API Swagger - для Java BE есть spring openApi либа. Пишут аннотацию и реализация AS IS всегда под рукой, без танцев с бубнами. Аналитики также могут выгружать эту спеку и дорабатывать ее, в той же IDE.

    Раз в месяц проводите быстрый аудит документации

    Я даже представить боюсь, как у вас "быстро" может быть проверена вся документация раз в месяц.