MAATRIX / Блог / Почему документацию по серверу никто не читает и как это исправить

Почему документацию по серверу никто не читает и как это исправить

MAATRIX

Где-то в репозитории или в корпоративной вики лежит файл вроде docs/infrastructure.md — кто-то потратил на него вечер год-полтора назад, когда настраивал сервер с нуля. В момент, когда этот сервер падает в три часа ночи, файл никто не открывает: либо про него забыли, либо не верят, что там написана правда, либо два экрана текста — непозволительная роскошь в ситуации, где решение нужно принять за минуту. Формально документация есть. Практически компания снова работает по памяти одного человека и по переписке в рабочем чате, где кто-то уже отвечал на этот вопрос. Разберём, почему так происходит системно, а не по вине конкретного нерадивого сотрудника, и что сделать, чтобы документацию действительно открывали, а не просто писали для галочки.

Симптом: документация есть, но её не открывают

Признать проблему мешает то, что формально всё в порядке — документ существует, в нём даже что-то написано, и на вопрос «ведётся ли у вас документация» можно честно ответить «да». Реальная проверка проще: спросите у трёх разных членов команды, где лежит документация по конкретному серверу. Если кто-то не знает, кто-то помнит приблизительно, а кто-то говорит «проще спросить у Игоря» — документация де-факто не работает, независимо от того, сколько в ней страниц.

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

Причина первая: она написана как книга, а нужна как справочник

Большинство инфраструктурной документации пишется в режиме «опишу всё, что знаю, чтобы ничего не забыть» — и получается связный, подробный, но линейный текст: сначала про архитектуру в целом, потом про каждый сервис по очереди, потом про сеть, потом про бэкапы где-то в середине. Написать такой текст один раз несложно — это акт фиксации знаний. Проблема в том, что читают его не так, как пишут. Никто не читает документацию по серверу от начала до конца ради удовольствия; в неё заглядывают с одним конкретным вопросом («где бэкап», «какой порт у базы», «кто отвечает за домен») в момент, когда времени в обрез — чаще всего именно потому, что что-то уже сломалось.

Полотно текста для такого запроса — враг. Даже если ответ там есть, его нужно найти через Ctrl+F по не всегда предсказуемому слову или пролистать три экрана, а под давлением инцидента это ощущается как «документации по факту нет». Разница между «документация написана» и «документацией можно воспользоваться за тридцать секунд» — это разница между текстом и справочником: справочник организован не по логике повествования, а по логике вопросов, которые к нему реально задают.

Практическое следствие — не пытаться сделать один документ одновременно и подробным описанием системы, и быстрым справочником для аварии. Это разные жанры, и смешивание убивает оба. Короткую справочную карточку под аварийные вопросы стоит выносить отдельно — как её собрать, разобрано в статье про паспорт сервера на одну страницу: назначение, ответственный, где бэкапы, куда смотреть при падении — и ни строки лишнего. А развёрнутая документация, где нужна глубина — переменные окружения, схема сети, история решений — живёт отдельно, и в нормальном режиме её читают не под давлением, а спокойно (что туда стоит включать — в статье «Документация сервера: что нужно вести»).

Сканируемость внутри самого текста тоже решает многое:

  • заголовки ##/### под конкретные вопросы («Где бэкапы», «Как перезапустить сервис», «Кто платит за домен»), а не под абстрактные темы вроде «Общая информация»;
  • короткие абзацы и списки вместо сплошного текста — глаз должен цепляться за структуру, а не пробегать строки в поисках нужного места;
  • команды и пути — в блоках кода, а не в прозе, чтобы их можно было скопировать не читая вокруг;
  • один документ — один явный ответ на вопрос «зачем он», без попытки объять всё сразу.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Причина вторая: она устарела и перестала быть источником правды

Даже идеально структурированный документ бесполезен, если ему нельзя верить. Здесь работает не арифметика («документ в основном верен — значит, в основном полезен»), а психология доверия: как только человек хотя бы раз наткнулся на устаревшую строчку — порт поменяли, а в документе старый; сервис переехал на другую машину, а ссылка ведёт в никуда — он перестаёт доверять документу целиком, включая те части, что остались верными. Дальше он либо перепроверяет каждый факт вручную (что дороже, чем спросить коллегу), либо документацию вовсе перестают открывать. «Документация врёт, проще спросить у того, кто настраивал» — это не лень, а рациональная реакция на прошлый опыт.

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

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

Причина третья: она лежит не там, где о ней вспоминают

Третья причина чисто механическая, но встречается едва ли не чаще первых двух. Документация может быть написана хорошо и поддерживаться в актуальном состоянии — и всё равно оставаться бесполезной, если она физически лежит в месте, которое не приходит в голову в момент необходимости. Личный Google Docs у человека, который уже год как уволился. Notion-пространство, доступ к которому есть у половины команды, а у второй половины протух ещё весной. Confluence-страница на десятом уровне вложенности, до которой можно дойти только зная точный путь клика за кликом.

Дело не в том, что инструмент плохой сам по себе — Notion, Confluence, отдельная вики прекрасно работают, если про них помнят. Дело в дистанции между местом, где человек реально находится в момент вопроса, и местом, где лежит ответ. Если инженер уже подключился по SSH к серверу, а документация лежит в веб-интерфейсе стороннего сервиса за отдельным логином, возможно ещё и с истёкшей сессией — вероятность, что он туда пойдёт вместо того, чтобы спросить в чате, падает резко. Работает и обратное: если ответственный за сервер знает про документ только «где-то в Notion есть страница», но не может назвать её с ходу, это тоже считается как «документации нет» с точки зрения того, кто спросит в критический момент.

Практический ориентир — документация должна лежать там, где команда и так работает:

Где документацияНасколько естественно на неё наткнутьсяТипичная проблема
README.md / docs/ в самом репозитории проектаВысоко — открывается вместе с кодомНужна дисциплина обновлять вместе с PR
Закреплённое сообщение в рабочем чате командыВысоко для актуального контекстаПлохо масштабируется на много разделов
Отдельная вики / Notion-пространство компанииСредне — нужно вспомнить, что туда идтиЗабывается, если не привязана к рабочему процессу
Личный документ у одного человекаНизко — доступ и знание о существовании ограниченыПропадает вместе с человеком
Ничего, только память админаНольПолностью зависит от доступности одного человека

Хранение прямо в репозитории рядом с кодом и инфраструктурными конфигами — компромисс, который на практике работает лучше всего: документ открывается тем же движением, каким открывается сам проект, версионируется вместе с кодом, и его правка попадает в тот же Pull Request, что и изменение, которое она описывает. Отдельная вики компании остаётся уместной для материалов более общего уровня — регламентов, договорённостей по процессу, — но конкретика по конкретному серверу выигрывает от того, чтобы жить максимально близко к нему самому. А на случай, если единственный ответственный человек внезапно недоступен, стоит заранее собрать минимальный набор того, что нужно найти за пять минут без него — этому посвящена статья про «красную папку» на случай недоступности администратора.

Причина четвёртая: в команде не сложилась привычка туда заглядывать

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

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

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

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

Привычка формируется медленно, через десятки повторений «а вот тут есть ответ», а не через один инструктаж. Но если этот цикл не запустить осознанно, документация так и останется артефактом, который существует параллельно с реальной работой команды, а не встроен в неё.

Принципы документации, которую реально используют

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

Краткость и сканируемость вместо полноты. Документ должен быть организован под вопросы, которые к нему реально задают, а не под логику повествования «сначала расскажу про всё по порядку». Для аварийных сценариев — отдельная короткая карточка на один экран (паспорт сервера), для углублённого понимания системы — отдельный развёрнутый документ, который читают не под давлением. Смешивать оба жанра в одном файле — гарантированный способ, что в панике его не откроют, а в спокойном режиме не станут читать целиком.

Обновление как часть обычной работы, а не отдельная задача. Пока правка документации остаётся отдельным пунктом в бэклоге с низким приоритетом, она будет теряться на фоне более срочных задач бесконечно. Работает только встраивание в существующий процесс: обновление документа — обязательный пункт в чек-листе Pull Request, если конфиг лежит рядом с кодом; отдельная строка в шаблоне отчёта после инцидента («что изменилось и куда это записано»); минимальный ежемесячный ритуал сверки на час-полтора, а не большой ежегодный аудит. Показательный маркер — если на ревью PR в шаблоне есть пункт вида:

Чек-лист перед мержем

  • [ ] Тесты пройдены
  • [ ] Обновлена документация (если менялась конфигурация, порты, зависимости)
  • [ ] Обновлён паспорт сервера (если менялось назначение или ответственный)

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

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

Если выбирать между исчерпывающей, но местами устаревшей документацией и короткой, но правда актуальной — выбирайте второе без колебаний. Неполный, но верный документ говорит честно: «вот что я знаю, а чего здесь нет — спросите отдельно». Исчерпывающий, но местами лживый документ опаснее пустого места: он создаёт ложную уверенность и подведёт именно в момент, когда цена ошибки максимальна. Актуальность — не одно из требований к документации наравне с другими, а условие, без которого остальные требования не имеют смысла.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

С чего начать, если документации по серверам вообще нет?

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

Кто должен отвечать за актуальность документации в маленькой команде?

Тот, кто вносит изменение в систему, должен же и обновить документ — не отдельный «ответственный за документацию», который физически не в курсе всех правок. Отдельную роль имеет смысл вводить, только когда команда вырастает настолько, что за изменениями одного человека уже не уследить.

Можно ли автоматически генерировать документацию из кода и конфигов, чтобы не устаревала?

Частично — схему сети, список открытых портов, версии пакетов можно выгружать скриптом, и это снимает часть проблемы устаревания. Но такой кусок фиксирует «что», а не «почему» — контекст решений и договорённости всё равно нужно писать руками.

Что делать, если документация уже большая, устаревшая, и переписывать её с нуля страшно долго?

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

Как понять, что документация наконец стала рабочей, а не формальной?

Простой тест: в следующем инциденте посмотрите, куда человек полез в первую очередь — если это документ, а не чат и не звонок коллеге, значит принцип сработал.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →