ADR

ADR — Architecture Decision Record.

Часто сталкиваюсь с недооценкой использования ADR в разных командах разработки.

Если ADR навязан “сверху”, каждая такая запись превращается в длинный рассказ, который невозможно прочитать и понять, чем мотивировано то или иное решение. Такие ADR пишутся “чтобы были”, для одобрения коллег и руководства. Ошибочно предполагается, что “труд”, вложенный в длинный (и часто непоследовательный) рассказ приносит команде пользу.

Такие ADR пишутся один раз, никем и никогда не читаются, и хранятся “потому что являются важным документом”.

Основная задача ADR — передать коллегам, в том числе и будущим, контекст принятого решения.

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

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

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

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

В процессе работы выяснилось, что:

  • Правила валидации расходятся на front- и backend’е приложения;
  • Имена кластеров влияют на формирование имён хостов, входящих в кластер;
  • Использование имени кластера в имени хоста накладывает ряд ограничений на на пользовательский ввод.

Что в данном случае уместно зафиксировать в ADR?

  • Факт ограничений, накладываемых на имя кластера;
  • Причины, по которым в данный момент времени вводятся ограничения;
  • Правила валидации — единый источник истины для front- и backend-разработчиков;
  • Последствия принятого решения, например, возможные ограничения при импорте данных из внешних систем.

Инженерная культура моих коллег находится на самом высоком уровне. Мы всегда чётко фиксируем и исполняем принятые нами решения. Составленные ADR не занимают больше одного экрана 13" ноутбука, всегда описывают проблему и контекст принятого решения, отвечают на вопрос “почему” и предупреждают появление возможных негативных последствий. Устаревшие ADR пересматриваются и заменяются новыми, соответствующими современным требованиям.