Передача программного обеспечения, которая переживёт авторов
"Успешная передача не решается в последний месяц: ранбук, воспроизводимые окружения, ритм сопровождения и обновления зависимостей, которых не боятся."
Передача начинается в первый день
Передачу представляют как церемонию конца проекта: несколько встреч, стостраничный документ, написанный в спешке, архив репозиториев. Затем следующая команда обнаруживает, что документ описывает систему, которой больше нет, что CI красная четыре месяца, и никто не знает, где живёт сертификат, истекающий во вторник.
Успешная передача не событие, а свойство проекта, поддерживаемое с первого дня. Направляющий вопрос прост: если команда сменится завтра, что должно быть записано сегодня? Всё дальнейшее следует из этого вопроса.
Что передаётся на самом деле
Программа не сводится к исходному коду. Передаётся способность её эксплуатировать, и она умещается в пять инвентарей:
- ранбук: как деплоить, восстанавливать, диагностировать известные отказы, с точными командами;
- карта доступов: окружения, сторонние сервисы, DNS, сертификаты и связанные секреты, сложенные в хранилище, а не в чью-то память;
- решения: журнал коротких датированных архитектурных решений, объясняющих те «почему», которых код не скажет;
- признанный долг: честный список хрупкого, обойдённого и временного, потому что дорого обходится именно скрытый долг;
- календарь: истечения сертификатов и доменов, сроки окончания поддержки мажорных версий, продления лицензий.
Если одного из инвентарей нет, передача обнаружит это в худший момент.
Воспроизводимое окружение, фундамент
Никакая документация не заменит окружение, которое пересобирается одной командой. Инфраструктура как код, версии, зафиксированные закоммиченными lock-файлами, данные для разработки, сгенерированные или анонимизированные, и CI, которая остаётся зелёной: зелёная CI и есть настоящий контракт передачи, исполняемое доказательство того, что система такова, какой её описывают.
Самый честный тест стоит полдня: пусть проект установит человек, который его никогда не трогал, следуя только README. Каждый его вопрос, дыра в передаче, и каждая закрытая дыра немедленно приносит пользу нынешней команде.
Сопровождение, это ритм, а не реакция
Сопровождение проваливается, когда существует только как реакция: нашумевшая уязвимость, авария, вынужденный апгрейд. Оно работает, когда у него есть ритм, и ритм умещается в три уровня:
Инструменты автоматизации (Renovate, Dependabot) открывают предложения; CI решает; команда арбитрирует. Минорное обновление, ждущее полгода, становится фактически мажорным: маленькие ступени, взятые часто, всегда лучше большой ступени, взятой вынужденно.
Две правила делают ритм устойчивым. Во-первых, бюджет: повторяющееся окно, зарезервированное в календаре, не подлежащее обсуждению, потому что сопровождения «в свободное время» не существует. Во-вторых, явная версионная политика: какие компоненты следуют за последней версией, какие за LTS, и до какого срока.
Semver, конвенция, а не обещание
Семантическое версионирование выражает намерение автора, а не реальность вашей системы. Минорная версия может сломать поведение, от которого вы зависели, сами того не зная. Доверие берётся из другого: тесты, покрывающие реальные сценарии проекта, changelog, прочитанный перед апгрейдом, и обновления маленькими изолированными партиями, которые легко откатить. Поэтому и работают ежемесячные сгруппированные окна: разумная партия, протестированная вместе, откатываемая вместе.
Измерять здоровье, а не только активность
Переданная программа должна нести свои приборы: несколько индикаторов доступности и ошибок, которые будят людей, список зависимостей в конце жизненного цикла, средний возраст отставания обновлений. Индикаторов мало, но на них смотрят. Дашборд, который никто не открывает,, артефакт совещаний, а не прибор.
Финальный тест: передать ключи вхолостую
Лучшая проверка передачи происходит до того, как она понадобится: учение, в котором человек вне проекта берёт смоделированный инцидент от диагностики до задеплоенного исправления, пользуясь только задокументированным. Учение стоит день и возвращает единственную важную информацию: переживёт ли система уход своих авторов?
Чек-лист, который мы применяем
- Рабочий ранбук: деплой, восстановление, диагностика, с командами.
- Доступы и секреты в хранилище, а не в голове.
- Журнал архитектурных решений ведётся по ходу работы.
- Долг и обходные пути задокументированы без снисхождения.
- Окружение пересобирается одной командой, зелёная CI обязательна.
- Ритм: безопасность за дни, минорные ежемесячно, мажорные по плану.
- Автоматические предложения обновлений, арбитраж людьми.
- Календарь истечений: сертификаты, домены, сроки поддержки.
- Учебная передача вхолостую раз в год.
Хорошо переданная программа не идеальная программа. Это программа, о которой следующая команда через неделю может сказать: «мы понимаем, куда ступаем».