Клиент уже ткнул в поломку: форма не уходит, сумма кривая, нужная страница пустая. В чат приходит короткая договорённость. Человек с SSH поправит ночью, потому что тестовой среды нет, и поправит так, чтобы «никого не дёргать». Сбой у всех на виду, правку хотят сделать невидимой, а выполнится она только там, где сейчас оформляют заказы. Мелкая строка в файле таким образом становится экспериментом на живых деньгах.
Выложить изменение сегодня вечером всё ещё можно. Нельзя выкладывать то, чего никто не видел, на единственную копию, которая принимает заказы. Тестовая среда, её же называют предпродом или отдельным окружением, не обязана быть копией прода один в один. Это любое место, где тот же сценарий падает без клиента в кадре. Нет такого места — скажите это вслух и соберите хотя бы черновик. Правку не прячут.
1. В одной строке чата три разных решения
«На проде сломалось, поправим ночью, тестовой среды нет». Баг — это экран и неверный результат. Отсутствие предпрода — свойство проекта, оно было и вчера. Решение править без свидетеля — третье, и вот от него можно отказаться, даже если со сроком вы согласны.
К серверу тянет, потому что отдельное окружение звучит как новый проект, а клиент пишет сейчас. Правят по SSH или строкой, которой нет в репозитории. Утром бага нет или стало хуже, а файл, который изменился, показать некому. Ход мысли остаётся в голове у того, кто был на сервере. Завтра этот человек в отпуске, и следующий открывает прод как чёрный ящик.
Прежде чем кто-то начнёт набирать, разложите это на бумаге. Не для отчёта. Чтобы утром было что перечитать.
2. Боевой сайт плохо подходит, чтобы «просто глянуть»
Там сегодняшние заказы, оплаты и учётки. Подпись на кнопке часто сидит в том же запросе, который пишет строку, шлёт письмо или ходит в платёжку. Что из этого задели, расскажет уже клиент. Предыдущие десять минут заказов не откатить так, как откатывают базу на ноутбуке.
Отдельно непонятно, помогла ли правка и что ещё поехало. Автору страница кажется нормальной. Ночная задача может звать ту же функцию. На системах, которые достались по наследству, это обычный след: прошлая команда правила прод, копию никто не держал, следующий получает и баг, и страх что-либо трогать. Чинить такое начинали с вопроса, как приложение уже работает. Не с ещё одной правки, которую видел один человек, и не с решения всё выкинуть.
Бэкап, который ни разу не разворачивали, — файл на диске. Фраза «копии есть», сказанная уже в момент, когда правка пошла плохо, ничего не открывает. Восстановление нужно было увидеть в обычный день, на копии. Первый раз во время сбоя — так короткая правка съедает вечер.
И ещё четыре вопроса, до того как вы согласитесь и с причиной, и с местом починки.
3. Что должно существовать до самого редактирования
Полный двойник прода не нужен. Нужен сценарий, который вы собираетесь менять, в месте, где ошибку не увидит ни один клиент. Небольшая тестовая среда со свежей копией нужных таблиц подходит. Подходит и развёрнутый бэкап на машине, которая клиентов не обслуживает. Не подходит «буду аккуратен на боевом сервере».
Порядок нарочно скучный. Код из репозитория, не из архива на чужом ноутбуке. База не боевая. Экран с багом открыт, и баг на копии виден ещё до правки. Потом меняете код и смотрите, делает ли экран то, чего ждал клиент. Если на копии бага нет, вы его ещё не поняли, на прод лезть рано. Если копия вообще не поднимается, это уже находка, и правка подождёт.
Унаследованный Laravel часто встаёт здесь на быту: нет файла настроек, ключ оплаты только на сервере, имя базы вписано в код. Это список блокеров, не приглашение открыть боевые файлы. Когда принимают весь проект, длиннее проход в чек-листе приёмки. Он нужен, если репозиторий или хостинг не ваши. Сегодняшнее решение уже: не прячьте правку, пока этот проход не сделан.
Если «поправь сегодня» пишет агентство, тот же список — то, что они должны принести, а не внутренняя деталь разработчика. Как отдать чужой Laravel, чтобы сюрприз не всплыл на созвоне с клиентом: передача со стороны агентства.
4. Вечерняя выкладка после того, как копия уже ведёт себя нормально
Когда на копии сценарий сходится, боевой сайт становится выкладкой, а не местом для проб. Это всё ещё может быть тот же вечер. Разница в том, что экран вы видели, правку видели, и есть фраза, на что смотреть после. У ночной правки без свидетеля этого нет: есть человек и надежда, что пронесёт.
Смотрите на шаг, где рождается заявка или проходят деньги, не только на страницу, которую трогали. Если без настоящей карты заказ не оформить, запишите ближайшую проверку, которая деньги клиента не двигает, и сначала пройдите её на копии. На проде — один раз, и чтобы на тот же результат смотрел ещё кто-то. След оставляют сразу, пока помните, какой файл трогали.
Новый дизайн — другой разговор. Если от «страница врёт» уже уехали к «надо переделать сайт», переделку отложите. Редизайн системы, которую можно менять только на проде, — тот же риск, файлов больше. Сначала время и место, где правку можно увидеть. Об этом отдельно: что смотреть до редизайна.
5. Короткий список с именами вместо «будем аккуратны»
У каждой строки есть человек. «Будем аккуратны» в список не входит. Сразу: что клиент видит не так, где это увидеть не на проде, и восстановление из копии — уже видели или ещё нет. Дальше: правка, которую посмотрели на копии, потом выкладка с записанной проверкой. Потом: тестовая среда как обычная часть проекта, чтобы следующий баг не начинался с нуля.
На унаследованных боевых системах держался другой порядок. Сначала увидеть, что реально крутится, потом сделать рискованный шаг заметным, и только затем менять. Новые функции ждали. Ночная правка без свидетеля ставит это наоборот и называет спешку скоростью.
Когда звать человека, который поднимет копию
Экран, что на нём не так, и вопрос «где это можно сломать без клиентов» вы запишете сами. Зовите, когда приложение никто не поднимает вне боевого сервера, когда репозиторий или хостинг всё ещё чужие, или когда баг сидит на оплате, ночном списании или базе нескольких клиентов, а в чате единственное предложение — правка прямо на машине, которая обслуживает людей.
За такую работу я берусь: сценарий сначала запускается там, где ошибка никому не видна, потом его меняют. На той системе, которая у вас уже есть. Услуги — восстановление, скорость и backend с живыми клиентами. Проекты — те же ситуации, цифра рядом со своей операцией. Если нужен второй взгляд до сегодняшней правки, напишите в LinkedIn. Баг одним предложением и есть ли хоть какая-то копия, кроме прода. Пароли не присылайте.