Чувствовали себя потерянным в лабиринте чужого кода?
Представьте: вы пришли в новую команду разработчиков, полны энтузиазма сделать что-то крутое. Но вот беда: проект запущен давно, репозиторий ломится от кода, а архитектура сложна и запутанна. Вы погружаетесь в работу, но на каждом шагу сталкиваетесь с вопросами:
«Почему здесь используется именно эта технология?»
«Зачем был выбран такой подход к архитектуре?»
«{ свой вариант “а чо так?” на непонятное решение }»
Вы обращаетесь к коллегам, но ответы расплывчаты. Кто-то не помнит деталей, кто-то уже покинул проект, унеся с собой ценные знания. И вот чувство энтузиазма уже сменяется фрустрацией.
Потерянные знания: невидимые ловушки в разработке
Потеря архитектурных знаний — распространённая проблема в мире разработки. Представьте, вы ежедневно принимаете решения: выбор технологий, изменение архитектурных паттернов, установка стандартов кода и многое другое. Без единого источника истины команды рискуют:
Потерять контекст решений, сделанных в прошлом.
Повторять ошибки, уже допущенные ранее, и тратить время.
Снижать эффективность, тратя время на разгадку причин тех или иных выборов.
Но как разорвать этот порочный круг?
Встречайте ADR: хранитель архитектурных решений
Architectural Decision Records (ADR) — это методика, которая помогает командам фиксировать и сохранять важные архитектурные решения. ADR превращает разрозненные знания в структурированный ресурс, доступный каждому члену команды.
Не понял, так что такое ADR?
ADR — это простые документы, в которых записываются:
Проблема или вопрос, требующий решения.
Контекст, в котором принимается решение.
Решение, которое было выбрано.
Обоснование: почему было принято именно это решение (+ сравнение с альтернативами).
Последствия: положительные, отрицательные и возможные риски.
Шаблон и пример такого документа вы найдете в конце статьи.
Итак, ADR — это своего рода дневник архитектурных решений проекта.
Почему ADR важен?
Сохраняет коллективную память: независимо от смены команды, знания остаются в проекте.
Ускоряет адаптацию новых сотрудников: новички быстрее вникают в суть проекта.
Избегает повторных обсуждений: не нужно снова и снова обсуждать одни и те же вопросы.
Поддерживает прозрачность и единообразие: все понимают, почему и как были приняты решения.
Важно отметить, что веде́ние ADR чаще всего находится в зоне ответственности техлидов или высококвалифицированных разработчиков. Именно они принимают стратегические решения, влияющие на архитектуру проекта. Обычные разработчики могут участвовать в обсуждениях и предлагать идеи, но документирование и окончательное принятие решений обычно остаётся за более опытными членами команды.
Реальный опыт: как 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 может существенно улучшить процессы разработки и поддержать долгосрочный успех вашего проекта.
Шаблон с пояснениями вынес для удобства в Notion.
Загляните также в ADR GitHub organization — это сборник полезной информации об ADR от GitHub.
Инженерный блог Zalando — пример статей, похожих на ADR.
Благодарю за интерес! Если вы хотите поделиться своим опытом веде́ния документации, пожалуйста, оставляйте комментарии.
Комментарии (4)
scome
28.10.2024 07:48У себя ввели этап дизайна фичи - отдельная сабтаска, в рамках которой разработчик описывает, каким образом фича будет реализована. Проходит дизайн-ревью, и уже после создаются сабтаски по согласованной реализации. В итоге, если есть вопрос по коду - можно посмотреть, в рамках какой фичи был добавлен код и там же посмотреть, почему именно такой.
Не покрывает всю кодовую базу, но там, где процесс работает, вопросов в духе «почему так» практически не возникает.
olku
28.10.2024 07:48Как применяющий ADR совместно с практикой Architecture as Code, не вполне понимаю трудности, описанные в статье. Если компания не доросла до необходимости иметь отдельную роль архитектора, ADR не нужен. Это кейс Алексея.
ADR это не ещё одна документация решения, а слой принципов по построению всех решений компании в среднесрочной перспективе. Не только про техстек, но и про минимальную квалификацию, которая этому техстеку нужна, паттерны проектирования, инструменты, степень контроля, его виды, пределы рисков на который бизнес готов идти, стандарты и требования регулятора на рынках присутствия. ADR еще это инструмент выявления технического долга, уголовный кодекс для тех лидов, который снимает холивары и дискуссии об идеальной архитектуре с повестки дня.
Насчёт нехватки материалов, можете глянуть iSAQB, там все открыто разве что кроме ответов на экзамены. У них есть Слак на немецко английском, но могу и тут ответить, если что...
Grikhan
"Внедрять" ADR без нагрузки на команду:
-назначить ответственных за внедрение ADR;
-назначить ответственного за ведение ADR;
- назначить ответственных за актуальность архитектурных решений ;
- "сделать" ведение ADR частью процесса - это же и есть цель!
Отличный рецепт. Именно так обычно "внедряют" "аджайл" (да и любые другие модные слова). Нужен еще комитет по контролю соответствия проектных решений записям ADR.
Спасибо, пойду издам приказ о создании рабочей группы по внедрению и назначу совещание.
maxxborer Автор
Приветствую.
Верно, нагрузка возрастет, но не значительно. Из моего опыта: за внедрение, ведение и актуализацию обычно отвечают 1—3 человек (в зависимости от размера команды). Если у вас такая небольшая команда, думаю ведение документации может быть не особо необходимым, но да — всё зависит от специфики проекта.
Если прочитать статью, можно заметить такие моменты:
Я понимаю ваши опасения по поводу возможной бюрократии при внедрении ADR и усложнения работы команде и прошу в статье учитывать это. Цель этого процесса — облегчить в результате работу команды, а не усложнить её.