Короткий ответ
#Репозиторий
Самая простая часть — и та, которую чаще всего делают так, что тихо теряется что-то важное.
-
Передавайте организацию, а не репозиторий
Репозиторий, перенесённый из организации подрядчика в вашу, сохраняет историю. Репозиторий, скопированный в новую, обычно не сохраняет задачи, пул-реквесты, комментарии ревью и релизы.
Именно в этих артефактах новая команда находит, почему решение было принято. Они стоят дороже большей части документации, которую пишут взамен.
-
Требуйте полную историю
Не zip и не схлопнутый первый коммит. Если первый коммит в полученной истории — «initial import», спросите, куда делись предшествующие годы.
-
Проверьте, нет ли других репозиториев
Мобильное приложение, внутренняя библиотека, инфраструктура как код, отдельная админка, конвейер данных. Спросите прямо, а не считайте, что показанный вам — это всё.
-
Дайте права владельца двум своим людям
Не одному. Организация с единственным владельцем — та же точка отказа, от которой вы избавляетесь, только в другой одежде.
-
Просмотрите историю на секреты
Доступы, закоммиченные и потом удалённые, остаются в истории. Прежде чем расширять доступ, проверьте — и поменяйте всё найденное: с момента попадания это читал каждый, у кого есть клон.
#Среды и секреты
Два отдельных списка, и второй объясняет, зачем нужен первый.
Среды. Собирайте список из консоли облака, а не из разговора. Забытые — и есть весь смысл упражнения, а старый стенд с копией продакшен-данных — это одновременно проблема безопасности и неожиданная строка расходов.
Секреты. Описывайте их по имени и назначению, а не по значению: для чего нужна каждая переменная, что ломается без неё и где лежит настоящее значение. Значения передаются отдельно, по каналу, который не хранит ни одна из команд, и после передачи меняются все до единого.
PAYMENT_PROVIDER_KEY
Что Аутентифицирует нас у платёжного провайдера
Владелец Аккаунт компании у провайдера (finance@)
Смена Панель провайдера → API keys → roll
Ломает Все платежи картой, немедленно
Значение Не в этом документе. Смотри хранилище компании.
Пять строк, ни одного секрета. Именно это делает переменную передаваемой: новая команда может её поменять и знает, что при этом сломается.
#Неделя показа
Самая ценная часть любой передачи кодовой базы — и та, которую чаще всего заменяют презентацией.
Отведите неделю, в которую принимающая команда сама делает четыре вещи, а уходящая доступна, но не ведёт за руку:
- Поднять систему локально по одной только письменной инструкции. Каждый шаг, о котором пришлось спросить, — это правка в инструкцию.
- Выкатить пустяковое настоящее изменение в продакшен, по настоящему процессу.
- Откатить его, по настоящей процедуре отката.
- Развернуть бэкап во временную среду и убедиться, что данные пригодны.
Каждый из этих шагов превращает веру в факт, и каждый надёжно что-нибудь находит. Самые частые находки: недокументированный шаг настройки, шаг выкатки, который работает только с машины одного человека, процедура отката, не покрывающая изменения в базе, и бэкап, который разворачивается, но в котором чего-то не хватает.
Почему важно «сама»
Наблюдение за чужой выкаткой не передаёт ничего. Передаваемое знание здесь процедурное — оно живёт в том, что ты это делал, включая один раз, когда ошибся и рядом был человек, объяснивший почему.
#Что находится вне репозитория
Спросите об этом явно. Именно эта категория выдаёт сюрпризы на третий месяц.
- Задачи по расписанию на сервере. Crontab, в который никто не заглядывал с момента написания.
- Облачные ресурсы, созданные руками. Функция, правило на бакете, очередь, триггер по расписанию — созданные в консоли и не упомянутые в коде нигде.
- Скрипты на чьей-то машине. Месячный отчёт, правка данных, помощник для выкатки.
- Настройки в панели провайдера. Адреса вебхуков, шаблоны писем, платёжные правила, фича-флаги.
- Ручные процессы. Человек, который каждый понедельник что-то выгружает и отправляет партнёру письмом.
Ничего из этого не появится в анализе кода — поэтому анализ и сообщает о них как об открытых вопросах, а не делает вид, что их нет. Спросить уходящую команду прямо, этими же словами, быстрее любого другого способа.
#Смена доступов, в правильном порядке
Делайте это в такой последовательности и ни в какой другой:
- Установите владение каждым аккаунтом — на чью личность он оформлен?
- Перенесите всё, что оформлено на человека или подрядчика. Часть этого занимает дни.
- Создайте и проверьте собственные админские пути входа, с восстановлением на ящики компании.
- И только потом меняйте каждый доступ, который уходящая команда могла видеть, и убирайте их личный доступ.
Отказ, который это предотвращает
Отзыв доступа человека к аккаунту, оформленному на его имя, не передаёт этот аккаунт вам. Он убирает единственный путь внутрь. Обычные кандидаты — регистрации доменов, облачные организации, аккаунты в магазинах приложений и входы к платёжному провайдеру, и каждый из них восстанавливается только через обращение в поддержку, которого вам лучше бы не понадобилось.
#Что идёт не так
Принять zip-архив с исходниками.
Вместо этого Переносите организацию с историей, задачами и пул-реквестами. Zip — это код без единого приложенного к нему рассуждения.
Описывать переменные окружения через значения.
Вместо этого Описывайте их по имени, назначению, владельцу и способу смены. Значения идут отдельным каналом и всё равно меняются после передачи.
Заменить неделю показа презентацией.
Вместо этого Презентация передаёт ощущение, что тебе рассказали. Способность сделать передаёт только само делание.
Считать, что репозиторий и есть система.
Вместо этого Спросите явно, что работает вне его, и сами загляните в консоль облака и в crontab.
Один владелец у новой организации.
Вместо этого Минимум два, и ни один из них не подрядчик.
#Чего это не покрывает
Чего это не делает
- Интеллектуальную собственность и лицензирование. Если какой-то компонент вам лицензирован подрядчиком, а не принадлежит, это вопрос договора, и он не переезжает вместе с репозиторием.
- Обязанности по защите данных, когда обработку принимает новая сторона. Спросите того, кто в этом разбирается.
- Введение новой команды в предметную область — что продукт делает и для кого.
- Хорош ли код. Передача устанавливает, что систему можно эксплуатировать.