Обновите документацию после выпуска версии
Обновление документации после релиза: README, CHANGELOG, API-документация, пользовательские гайды. Используйте после выпуска новой версии для актуализации документации.
Как агент работает
Одна новость про фичу превращается в два-четыре текста, потому что читателей у релиза четверо и каждому нужен свой. Действующий пользователь спрашивает, что изменилось и надо ли что-то делать, и читает 3-8 строк в баннере или письме. Новый пользователь спрашивает, как это работает, и противопоставление нового старому ему бесполезно. Интегратору нужны точные сигнатуры. Поддержке нужен раздел, написанный задом наперёд — от жалобы, а не от изменения, и со строкой «когда эскалировать», без которой эскалируют либо всё, либо ничего.
Changelog и release notes — разные жанры, и путаница даёт один текст, слишком технический для пользователя и расплывчатый для интегратора. Changelog исчерпывающий, хронологический, живёт в CHANGELOG.md и отвечает на вопрос, в какой версии это появилось, что и нужно при разборе инцидентов. Release notes выборочные, отсортированы по важности для читателя, живут на сайте и в письме и отвечают, стоит ли обновляться. Строка пишется по формуле «кто теперь что может и почему это лучше прежнего», а не как отчёт о том, что поменяли внутри.
Ломающее изменение описывается пятью обязательными блоками, и без любого из них описание бесполезно: что именно сломается с конкретным именем эндпоинта или поля, как понять, что вас это касается, — проверяемым признаком вроде запроса к логам, что сделать пошагово с примером «до и после», до какого срока конкретной датой и что будет, если не сделать. Парный блок с реальным кодом обязателен: формулировка «замените getOrders на orders.list с учётом новой пагинации» читателю не помогает и порождает обращения в поддержку.
У эндпоинта документируются метод, путь с версией, авторизация с нужными правами, границы параметров, целиком копируемые примеры запроса и ответа, отдельно пустой результат, пагинация, лимиты и идемпотентность повторов. Раздел ошибок пишется наравне с успехом, и ключевая в нём колонка — что делать интегратору: 401 token_expired лечится обновлением по refresh-токену, 403 scope_missing повтором не лечится вообще, 429 rate_limited требует выждать указанное в заголовке. Отдельно отмечается, приходит ли ошибка в теле с HTTP 200 — так отвечают кабинеты ряда российских маркетплейсов.
Навык не относится к скриншотам как к бесплатному элементу: картинка устаревает молча, а читатель верит ей больше, чем тексту, поэтому она оправдана только там, где шаг не описать словами, где элемент ищут глазами в чужом интерфейсе Ozon, Битрикс24 или 1С, либо где надо показать результат. Персональные данные, названия контрагентов, суммы, ИНН и номера договоров в кадр не попадают. Обязательные документы — политика обработки ПДн, оферта, реквизиты — правятся реже, но пропуск здесь дороже: спор идёт о редакции, действовавшей на дату оплаты.
1. Четыре читателя
Прежде чем написать строку, определи, для кого пишешь: каждому из задетых релизом читателей нужен отдельный текст в отдельном месте.
| Читатель | Его вопрос | Где читает | Что убивает текст |
|---|---|---|---|
| Действующий пользователь | «Что изменилось и надо ли что-то делать?» | Баннер, письмо, Telegram-канал; 3–8 строк | Внутренние правки, слово «рефакторинг» |
| Новый пользователь | «Как это работает?» | Онбординг, гайд; полный сценарий | Противопоставление нового старому — старого он не знает |
| Интегратор по API | «Что менять в коде и когда?» | Справочник, changelog; точные сигнатуры | Проза без примеров запроса и ответа |
| Поддержка | «Как отвечать на входящие?» | Внутренняя база, макросы | Пользовательский текст, скопированный внутрь |
Новость про одну фичу превращается в 2–4 текста. Типичная ошибка — написать release notes и считать работу законченной; через два дня приходит «а куда делась кнопка», и у поддержки про релиз нет ничего.
Что нужно поддержке, чего нет больше нигде
Раздел для поддержки пишется задом наперёд — от жалобы, а не от изменения:
Без строки «эскалировать» поддержка либо эскалирует всё, либо не эскалирует ничего.
2. Release notes против changelog
Цена путаницы — один текст, для пользователя слишком технический, а для интегратора расплывчатый.
| Changelog | Release notes | |
|---|---|---|
| Читатель | Разработчик, интегратор | Пользователь, покупатель, поддержка |
| Единица записи | Изменение в коде | Изменение в том, что человек может сделать |
| Полнота | Исчерпывающая | Выборочная: только заметное снаружи |
| Порядок и тон | Хронологический, телеграфный | По важности для читателя, с «зачем» |
| Живёт | CHANGELOG.md в репозитории | На сайте, в письме, в продукте |
Нужны оба: changelog отвечает «в какой версии это появилось» и нужен в спорах и при разборе инцидентов, release notes отвечают «стоит ли обновляться» и читаются один раз.
3. Что человек теперь может, а не что мы поменяли
Самый частый дефект — описание с точки зрения разработчика: читателю важно не что изменилось внутри, а что изменилось в его возможностях.
Формула строки: [кто] теперь [что может] — [почему это лучше прежнего]. Строку без глагола действия читателя, как и строку, переносимую дословно в release notes чужого продукта, писать незачем.
4. Ломающие изменения — отдельный жанр
Ломающее — то, после чего рабочая конфигурация клиента перестаёт работать: удалён эндпоинт или поле, изменён тип или формат, ужесточена валидация, изменено поведение по умолчанию, сокращён лимит, отозван токен.
Пять обязательных блоков
Нет хоть одного — описание бесполезно.
- Что именно сломается. Конкретное имя: эндпоинт, поле, параметр, экран.
- Как понять, что вас касается. Проверяемый признак: запрос к логам, строка в конфиге, наличие интеграции. Читатель не должен гадать.
- Что сделать. Пошагово, с примером «до/после».
- До какого срока. Дата, а не «в ближайшее время».
- Что будет, если не сделать. Перестанет работать, начнёт отдавать ошибку, молча переключится на новое поведение.
Миграция без «до/после» бесполезна
«Замените getOrders на orders.list с учётом новой пагинации» не помогает: читатель не знает, что такое «новая пагинация», и не понимает, куда девать параметры. Работает только парный блок с реальным кодом.
Было:
Стало:
Пояснения выноси в текст вокруг блока, а не в комментарии внутри. Здесь важны три вещи: limit выше 500 молча обрежется; ответ всегда постраничный; отсутствие next_cursor — единственный признак конца данных, пустой items таким признаком не является. Последнее — самый частый источник ошибок при переходе на курсорную пагинацию: интегратор пишет while resp["items"] и теряет хвост данных на пустой промежуточной странице.
5. Документирование API
Минимальный состав описания эндпоинта
Каждый пропущенный пункт превращается во входящий вопрос в поддержку.
- Метод, путь с версией, назначение одной фразой на языке задачи, а не реализации.
- Авторизация: тип токена и нужные права.
- Параметры: имя, тип, обязательность, значение по умолчанию, границы (максимум, формат даты, длина строки).
- Примеры запроса и успешного ответа целиком, копируемые, с реальными значениями — а не описание полей.
- Пустой результат отдельно: пустой список и отсутствие объекта — разные ответы.
- Пагинация: как взять следующую страницу и как понять, что данные кончились.
- Лимиты: сколько запросов в единицу времени, что приходит при превышении, есть ли заголовок ожидания.
- Идемпотентность изменяющих методов: что будет при повторе.
Ошибки документируются наравне с успехом
Раздела ошибок почти никогда нет — и именно из-за него пишут в поддержку.
| HTTP | Код | Когда возникает | Что делать интегратору |
|---|---|---|---|
| 400 | invalid_date_range | date_to раньше date_from либо окно больше 31 дня | Разбить период по 31 дню |
| 401 | token_expired | Срок жизни токена истёк | Обновить по refresh-токену, повторить один раз |
| 403 | scope_missing | У токена нет права на метод | Перевыпустить токен; повтор не поможет |
| 409 | already_processed | Повтор с тем же ключом идемпотентности | Не ошибка: считать выполненным |
| 429 | rate_limited | Превышен лимит | Ждать столько, сколько в заголовке; не ретраить сразу |
| 5xx | — | Сбой на нашей стороне | Повтор с растущей паузой |
Ключевая колонка — четвёртая: она делит ошибки на три класса, и интегратору нужен класс, а не текст — лечится повтором, лечится изменением запроса, лечится действиями человека. Без класса интегратор ретраит бессмысленное, и 403 превращается в бесконечный цикл.
Отдельно опиши, приходит ли ошибка в теле с HTTP 200: часть российских API, включая кабинеты маркетплейсов, отвечает 200 с полем ошибки внутри, и это первое, что читателю нужно знать.
6. Скриншоты и стоимость владения
Скриншот — самый дорогой элемент документации: он устаревает молча. Устаревший текст противоречит сам себе, и это замечают; картинка просто показывает интерфейс, которого нет, и читатель верит ей больше, чем тексту.
Когда скриншот оправдан
Хотя бы одно из трёх: шаг не описать словами однозначно («кнопка в правом верхнем углу» — а их там три); читатель ищет элемент глазами в чужом интерфейсе (кабинет Ozon, настройки Битрикс24, 1С), вёрстку которого не контролируем ни мы, ни он; надо показать результат, по которому человек поймёт, что получилось.
Не оправдан для полей формы, называемых по подписи; очевидных последовательностей; экрана, который планируют переделывать в ближайшем квартале.
Как снизить стоимость
Снимай область, а не весь экран. Не помещай в кадр персональные данные, названия контрагентов, суммы, ИНН и номера договоров: именно на скриншотах их светят чаще всего. Веди список «скриншот — экран продукта», иначе зависимые картинки при правке экрана не найти.
7. Обязательные документы
Обновляются потому, что релиз изменил фактическое положение дел. Правят их реже, но пропуск здесь дороже всех остальных.
Оферта и реквизиты
Оферту пересматривай при изменении состава тарифа, лимитов на оплаченную услугу, условий возврата, порядка расторжения, SLA. Фиксируй дату вступления редакции в силу и сохраняй прежние редакции доступными: спор идёт о той, что действовала на дату оплаты. Реквизиты (наименование юрлица, ИНН, ОГРН, адрес, связь) меняются редко, но при смене — сразу везде: сайт, оферта, платёжные страницы, письма, чеки.
8. Как собрать состав изменений и не соврать
История коммитов — сырьё, а не готовый список. Собирай через git_ops: диапазон между тегами прошлого и текущего релиза с датами, авторами и изменёнными файлами (репозитория нет — git_clone).
Четыре корзины
Каждый коммит попадает ровно в одну:
- Видно пользователю → release notes.
- Видно интегратору (сигнатуры, схемы, эндпоинты) → changelog и справочник API.
- Видно только нам (рефакторинг, тесты, CI, зависимости без смены поведения) → changelog, дальше не идёт.
- Не выпущено — код за флагом, выключенным в проде.
Изменения, которых нет в списке коммитов
Ищи то, что читатель заметит, а дифф прячет в одну строку: изменённое значение по умолчанию, ужесточённая валидация, снятый лимит, переписанный текст письма. Такие правки почти не попадают в описание, а вопросов порождают больше, чем крупные фичи. Не понял из истории, что делает изменение, — спроси автора: пробел порождает вопрос, догадка — неверное действие.
9. Чек-лист обновляемых документов
Проходи все пункты; напротив неприменимых ставь «не затронуто» — молчаливый пропуск неотличим от забытого.
Внешние тексты
- Release notes на сайте, в продукте, в письме
- Уведомление в канале для действующих пользователей (Telegram, рассылка)
- Раздел «Что нового» внутри продукта
Репозиторий
-
CHANGELOG.md— все изменения, включая внутренние -
README— версия, требования, установка, быстрый старт - Примеры кода в репозитории — ломаются молча
- Конфигурация: новые переменные с описанием и значением по умолчанию
API
- Справочник: новые, изменённые, удалённые эндпоинты
- Схема (OpenAPI и т.п.) сгенерирована заново, а не поправлена руками
- Таблица ошибок дополнена новыми кодами; раздел лимитов, если менялись
- Гид по миграции с примерами «до/после»
Пользовательские материалы
- Пошаговые инструкции по затронутым сценариям
- Скриншоты затронутых экранов, прошедшие проверку раздела 6
- Онбординг — новый пользователь release notes не читает
- FAQ: предсказуемые вопросы
Поддержка
- Заметка «симптом → причина → ответ → когда эскалировать»
- Макросы и шаблоны ответов
- Список того, что временно сломано или ограничено
Обязательные документы
-
Политика обработки ПДн — при новых данных, целях, получателях, сроках
-
Оферта — при изменении тарифов, лимитов, возвратов, SLA
-
Реквизиты и контакты — при смене
-
Дата редакции и сохранённая предыдущая версия
-
Архитектурная документация, если менялись контракты между сервисами
10. Проверка актуальности как повторяемая процедура
Документация гниёт незаметно. Раз в квартал прогоняй ревизию в одном порядке — тогда это работа на часы, а не на неделю.
- Даты. Каждый документ несёт дату последней проверки; всё, что не трогали больше полугода, — в очередь на просмотр.
- Ссылки. Битые внутренние и внешние, ведущие на переехавшие кабинеты и справки. Проверяются автоматически через
sandbox_bash. - Примеры кода. Прогон примеров — единственная проверка, ловящая расхождение документации с кодом объективно, а не на глаз.
- Названия элементов интерфейса. Пройди инструкцию руками, сверь подписи кнопок с написанным.
- Числа. Лимиты, сроки, размеры, цены: каждое число — обещание. Не подтверждённые сегодня помечай датой актуальности.
- Расхождение с поддержкой. Топ входящих вопросов за квартал — оглавление того, что документация не объясняет: повторяющийся вопрос это дыра либо в тексте, либо в продукте.
Признак брошенной документации — ни одного упоминания версии или даты: свежесть не проверить, и читатель считает устаревшим весь текст.
11. Документация удалённой функциональности
Помечай страницу статусом «архив», убирай из навигации, но оставляй доступной по прямой ссылке и в поиске — человек ищет именно старое название. Пережить удаление обязаны три вещи: как называлась, чем заменена, что стало с данными. Последнее забывают чаще всего, и оно порождает самые тяжёлые обращения.
Похожие навыки
Попробуйте этот навык
Зарегистрируйтесь и используйте навык «Документация релиза» бесплатно.