Пятничные релизы (и вообще стрёмные события)
Не всё там так просто, как кажется.
Точнее, кажется просто — но совсем не там (ц), а поглубже
Почему релизы и прочие ответственные телодвижения в канун выходных плохо — это достаточно очевидно. Если что-то пойдет не так, то разгребать фейерверки будут в свои выходные совсем другие люди, которые на это не подписывались. Проблем больше, ненужной беготни больше, всем неудобно, just don’t.
В одной системе видел штуку: для того, чтобы запустить ряд действий в календарную пятницу, нужно было внутри технического средства в текстовом поле напечатать руками текст «я не мудак».
Базовая проблема — ладно, понятна.
Интересны для текста, в этой связи, два момента:
- почему так происходит, что надо людям отдельно напоминать «так не надо»?
- почему вам вообще в собственном бизнесе, продукте и инфре вдруг «стрёмно» что-то делать в любой день?
Правильно заданные вопросы — половина ответа.
Ответ на первый вопрос лежит, кроме естественного желания «зафигачить и пойти домой», в известной доле безответственности. К ней вопросов нет, она у всех внутри где-то по базе присутствует, тут я без претензий.
Ответственность, если мы говорим о ней, на кнопке «я сделяль» не заканчивается. А иногда, только начинается. Или должна.
Логика «зафигачил штуку = работа закончена» глубоко порочна. Для всего, что сложнее письки и ложки.
И вот с этим надо в системах, в процессах, в людях вдумчиво и систематически бороться.
Большие штуки практически никогда не заканчиваются на: подписанном документе, выкаченном релизе, включении рубильника, отправке чего-то куда-то, и так далее. Недостаточно просто что-то сделать, надо убедиться, что оно сделано. Этот несложный момент хочется забыть, но забывать его не надо. Без него задача не сделана, и не может считаться сделанной.
И тогда вопрос сводится к более тривиальному: в пятницу перед выходными ты успеешь убедиться, что всё хорошо? Если ответ «нет», это риски. Ты задачу не сделал, а рисков наплодил: пожалуйста, надо или сделать целиком, или не рисковать. Как общий подход. За ненужные риски бьют лопатой (в понедельник или ночью субботы). Не обижайся.
Еще подобные практики «фиганул и забыл» четко говорят о том, что кто-то не умеет, не хочет или затруднительно работает в команде. Оп-па, а это уже важный маркер, с ним надо разбираться комплексно.
Проблема же не в том, что Вася фиганул и забыл; проблема в том, что в рисковом случае еще 10 человек подорвутся разгребать то, что пошло наискось. И вот тут надо позадавать вопросы, и найти ответы:
- если 10 человек потенциально огребутся, может финальное решение стоит принимать им, а не Васе?
- а почему 10 и авральная команда, может быть что-то не так с прозрачностью и технической проверяемостью решений?
- есть ли способ тупо предотвратить, «не дать сделать» проблемное действие?
- что у нас с безопасными откатами и снимками состояний, политикой действий и вообще всяким безопасным undo? Один катает вперед, второй увидел проблему катает обратно, safe & sound
- а Вася вообще знает, что кроме него в этой цепочке дальше другие люди и другие действия?
- вот эти люди, первый и 10 последующих, у них коммуникация как выстроена?
- любой «крайний релизный день» включал запас на тест и пуск-наладку? Если нет, вопрос к менеджеру (и это тоже командная работа)
- что у нас по регламентам с передачей ответственности? Вот те 10 человек точно не подписывались на лишнюю ответственность явочным порядком, почему так произошло?
- как мы можем снизить риски вообще любой нестабильности? Не в пятницу, не Васей, а по сути? (об этом далее)
Понимаете, заткнуть симптом «текстовым полем я не мудак», как в примере, это дешево и просто (и даже работает). До тех пор, пока туда не начнут копипастить строку с формулировкой «ну, у нас же жопа горела» (на постмортеме).
Если вы проектируете процессы и механизмы, что посложнее, важно пойти поразбираться не с симптомами, а с причинами. Часть причин лежит в людях. Часть — в архитектуре.
Если про людей, важно вкрутить внутрь сотрудников и внутрь процессов два понимания (с их контрольными проверками):
Применяется к любым вопросам, где возникает искушение сказать «я сделяль» и «с нашей стороны пули ушли» — то есть, повести себя эгоистично, недальновидно и без самоконтроля.
Помогают также явно прописанные «кросс-чеки»; помимо самой сути перекрестной проверки чего-то там, они явно добавляют в ситуацию еще нескольких людей, и несколько пар глаз. В надежде, что хотя бы один окажется не долбоебом проявит должную осмотрительность.
Теперь про архитектуру и механизм, с ответом на второй вопрос. Налицо ситуация, когда нам что-то стрёмно (страшно) делать, потому что это рисково и непредсказуемо. Факт. И то, что «стрёмно» — тоже факт, страх уберегает от безрассудства. А почему непредсказуемо?
Я даже перефразирую вопрос, чтобы было понятнее и больнее:
- почему внутри вашей системы, продукта, механизма, процессов (в любой день, про любую задачу) вообще может возникать ситуация «нам стрёмно это делать», касательно чего угодно;
- пора, в этой связи, что-то пойти фундаментально исправить и поменять?
Про «стрёмно» я уже писал, но все-таки. Это же ваша система (выстроенная вами), ваша инфра, ваши задачи. По идее, если всё это ваше, то должно быть в ваших же силах сделать так, чтобы работать было предсказуемо, безопасно и комфортно. Если это почему-то не так — значит, вся система уже не очень-то ваша, а принадлежит слепой удаче, техническому долгу и корейскому рандому. Дёрнем рубильник, а там как кривая вывезет. Ага?
Сводится к практическому вопросу «кто в доме хозяин, я или тараканы». Простите за избыток метафор (Кирилл, привет).
Тоже, если хочется порешать не ситуативно, есть ряд комплексных вопросов. Которые следует задать и на них себе ответить про применимость:
- почему у нас критические действия прибиты к датам; или наоборот, даты прибиты к критическим действиям? Может, разделить?
- есть ли у нас управление состояниями? Если в 1 тык можно сделать действие «туда», почему нельзя в один тык сделать действие «обратно»? если нельзя, мб сделать так, чтобы было можно, как механику и как процесс — см опять undo
- чтобы не понадобилась авральная команда 10 рыл выше, может обойтись двумя, которые заранее знают, что произойдет (и один из них = автор геморроя) с типовым планом действий?
- почему нештатная ситуация обязана быть авралом? может, где-то недостает прозрачности и observability, средств, актуальных документов, практик…
- если эксплуатация и внедрение обязаны выпадать на выходные, может пора признать что мы 24×7 и ввести плавающие смены?
- безрисковые схемы? стендовые выкатки, green-blue, пред-подготовка решений, техническая часть отдельно от дат релизов? иногда лучше переплатить, но спать спокойно
- нормальное планирование и, например, заранее требуемое обоснование для ситуаций «горящая жопа к дате», нет?
- корректное оповещение связанных командных бойцов (ранее по цепочке, далее по цепочке) о происходящем? не «сами договорятся», а принудительно?
- разрешительный чеклист и право на аппрув не у Васи-автора, а у того кто отвечает за качество? (см «право сказать да»)
В практическом смысле на отмазки «ой, ну это всё красиво, только никогда не получается» могу сказать, что времени и календаря у всех одинаково. Тебя, Васи, Гейтса, Маска. Вопрос только в том, как в нем планы написаны, и к каким датам прибиты, на каком этапе — и это тоже руками делалось.
Хочешь не бегать в жопу ужаленный — сделай всё заранее, будет время переделать. Не запрещаю, не осуждаю. Порадуюсь продуманности.
Нежно люблю продуманную цитату из супергеройского фильма:
— Когда я нажму на эту кнопку, мир, каким мы его знаем, перестанет существовать. А чтобы вы, пидорасы, мне не помешали — я сделал это полчаса назад.
Возвращаясь к вопросу про «стрёмность» и непредсказуемость: стрёмности не будет, если и непредсказуемости нет. С ней — вы можете поработать, про-работать, снизить, проложить проблемные места полиэтиленом и избавиться от малопонятного рискованного бардака внутри собственных же механизмов.
Точно станет спокойнее и легче жить, гарантирую.
И не только на релизах, и не только в пятницу.