Чувствовали себя потерянным в лабиринте чужого кода?

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

«Почему здесь используется именно эта технология?»
«Зачем был выбран такой подход к архитектуре?»
«{ свой вариант “а чо так?” на непонятное решение }»

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

Я чувствую себя потерянным
Я чувствую себя потерянным

Потерянные знания: невидимые ловушки в разработке

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

  • Потерять контекст решений, сделанных в прошлом.

  • Повторять ошибки, уже допущенные ранее, и тратить время.

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

Но как разорвать этот порочный круг?

Структура ADR (Heiko Rupp, CC BY-SA 4.0)
Структура ADR (Heiko Rupp, CC BY-SA 4.0)

Встречайте ADR: хранитель архитектурных решений

Architectural Decision Records (ADR) — это методика, которая помогает командам фиксировать и сохранять важные архитектурные решения. ADR превращает разрозненные знания в структурированный ресурс, доступный каждому члену команды.

Не понял, так что такое ADR?

ADR — это простые документы, в которых записываются:

  • Проблема или вопрос, требующий решения.

  • Контекст, в котором принимается решение.

  • Решение, которое было выбрано.

  • Обоснование: почему было принято именно это решение (+ сравнение с альтернативами).

  • Последствия: положительные, отрицательные и возможные риски.

Шаблон и пример такого документа вы найдете в конце статьи.

Итак, ADR — это своего рода дневник архитектурных решений проекта.

"Дорого́й дневник, мне не подобрать слов, чтобы описать боль и унижение, которое я испытал сегодня.."
"Дорого́й дневник, мне не подобрать слов, чтобы описать боль и унижение, которое я испытал сегодня.."

Почему ADR важен?

  • Сохраняет коллективную память: независимо от смены команды, знания остаются в проекте.

  • Ускоряет адаптацию новых сотрудников: новички быстрее вникают в суть проекта.

  • Избегает повторных обсуждений: не нужно снова и снова обсуждать одни и те же вопросы.

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

Важно отметить, что веде́ние ADR чаще всего находится в зоне ответственности техлидов или высококвалифицированных разработчиков. Именно они принимают стратегические решения, влияющие на архитектуру проекта. Обычные разработчики могут участвовать в обсуждениях и предлагать идеи, но документирование и окончательное принятие решений обычно остаётся за более опытными членами команды.

Реальный опыт: как ADR меняет работу команды

А вот здесь грустно — нет больших и общепринятых примеров. И полезных отзывов от компаний в сети нет, чтобы были какие-то метрики или показатели. Есть один пример использования от gov.uk — не ахти какой, но хоть что-то.

Список ADR от gov.uk
Список ADR от gov.uk

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

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

Он начал с простых записей в Notion, фиксируя решения после обсуждений. Когда кто-то задавал вопрос, он направлял их к соответствующему ADR. Постепенно команда увидела преимущества:

  • Экономия времени: меньше повторных обсуждений.

  • Прозрачность: все решения доступны и понятны.

  • Повышение качества: решения принимаются осознанно, с учётом прошлого опыта.

Конечно, были и трудности. Некоторые коллеги скептически относились к дополнительной документации. Но благодаря усилиям Алексея и видимым результатам, сопротивление сошло на нет.

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

Ещё советую глянуть на инженерный блог от zalando — онлайн ретейлера модной одежды. Попадаются похожие на ADR блоги, очень познавательно и подробно расписано.

Когда сто́ит внедрять ADR?

Идеальные условия для ADR

  • Долгосрочные проекты: когда проект рассчитан на длительное развитие.

  • Сложные архитектуры: много технологий и паттернов.

  • Большие или распределённые команды: когда коммуникация может быть затруднена.

  • Высокая текучесть кадров: когда сотрудники часто меняются.

Когда ADR может быть избыточен

  • Маленькие или краткосрочные проекты: для простых задач ADR может быть не нужен.

  • Команды с крутой коммуникацией: когда все в курсе и решения принимаются совместно.

  • Срочные проекты: когда сроки поджимают, и не время вести документацию.

Осознанное применение

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

Документация без боли
Документация без боли

Преодоление препятствий: как внедрить ADR без боли

Сопротивление команды

Проблема: Команда не хочет тратить время на документацию.
Решение: Не всем членам команды нужно писать ADR, только опытным разрабам, за которыми и стоит окончательные решения. А если они не хотят — показать реальные преимущества, начать с малого, использовать простой шаблон.

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

Проблема: ADR могут устаревать и вводить в заблуждение
Решение: Делать аудит и обновлять ADR, назначить ответственных для этого.

Перегрузка информацией

Проблема: Слишком много документов, сложно найти нужное.
Решение: Документировать только главные / важные / основные решения, использовать систему тегов или категорий.

Практические шаги к внедрению ADR

Если вы решили внедрить практику веде́ния ADR в вашем проекте, важно сделать это эффективно и без лишней нагрузки на команду.

Шаг 1: Определите ответственных лиц

Назначьте технического лидера, тимлида или сеньор-разработчика ответственным за веде́ние ADR. Эти люди обычно принимают главные архитектурные решения и могут наиболее эффективно их документировать.

Шаг 2: Создайте простой и гибкий шаблон

Разработайте удобный шаблон для ADR, который будет включать основные разделы:

  • Заголовок или проблема

  • Контекст

  • Решение

  • Обоснование

  • Последствия

Шаблон должен быть простым и не превращаться в бюрократическую преграду. Его можно адаптировать под потребности проекта.

Шаг 3: Интегрируйте ADR в процессы принятия решений

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

Шаг 4: Обеспечьте доступность и прозрачность

Храните ADR в доступном для команды месте: репозитории проекта, внутренней wiki или системе управления документами. Это позволит всем участникам при необходимости ознакомиться с принятыми решениями.

Шаг 5: Поддерживайте актуальность документов

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

Заключение: ключ к коллективному разуму

В мире разработки, где изменения происходят постоянно, ADR становится надёжным якорем, удерживающим важные знания внутри команды. Это не просто документы, это инструмент, который помогает:

  • Сохранять ценную информацию.

  • Ускорять развитие проекта.

  • Избегать повторения ошибок.

  • Повышать качество архитектурных решений.

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


Благодарю за интерес! Если вы хотите поделиться своим опытом веде́ния документации, пожалуйста, оставляйте комментарии.

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


  1. Grikhan
    28.10.2024 07:48

    "Внедрять" ADR без нагрузки на команду:

    -назначить ответственных за внедрение ADR;

    -назначить ответственного за ведение ADR;

    - назначить ответственных за актуальность архитектурных решений ;

    - "сделать" ведение ADR частью процесса - это же и есть цель!

    Отличный рецепт. Именно так обычно "внедряют" "аджайл" (да и любые другие модные слова). Нужен еще комитет по контролю соответствия проектных решений записям ADR.

    Спасибо, пойду издам приказ о создании рабочей группы по внедрению и назначу совещание.


    1. maxxborer Автор
      28.10.2024 07:48

      Приветствую.

      Верно, нагрузка возрастет, но не значительно. Из моего опыта: за внедрение, ведение и актуализацию обычно отвечают 1—3 человек (в зависимости от размера команды). Если у вас такая небольшая команда, думаю ведение документации может быть не особо необходимым, но да — всё зависит от специфики проекта.

      Если прочитать статью, можно заметить такие моменты:

      Сопротивление команды ... Не всем членам команды нужно писать ADR, только опытным разрабам, за которыми и стоит окончательные решения... показать реальные преимущества, начать с малого, использовать простой шаблон

      ---

      Осознанное применение ... Важно применять ADR осознанно, избегая превращения его в бюрократическую обязанность для всех членов команды.

      ---

      Перегрузка информацией ... Документировать только главные / важные / основные решения

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


  1. scome
    28.10.2024 07:48

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

    Не покрывает всю кодовую базу, но там, где процесс работает, вопросов в духе «почему так» практически не возникает.


  1. olku
    28.10.2024 07:48

    Как применяющий ADR совместно с практикой Architecture as Code, не вполне понимаю трудности, описанные в статье. Если компания не доросла до необходимости иметь отдельную роль архитектора, ADR не нужен. Это кейс Алексея.

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

    Насчёт нехватки материалов, можете глянуть iSAQB, там все открыто разве что кроме ответов на экзамены. У них есть Слак на немецко английском, но могу и тут ответить, если что...