Pull to refresh

Comments 29

Надо делать как надо, а как не надо делать - не надо!

Можно еще посоветовать писать код без багов, тогда и вовсе фиксить не придется.

У нас есть тесты, CI/CD, QA и команда дежурных инженеров. Но пятницу, пожалуйста, оставьте без выкатки больших фич. Большая фича - координация десятка человек, оповещие всех соседних команд, запуск рекламы и тому подобное. А люди имеют свойство ошибаться: пропускать баги, покрывать false-positive тестами, забывать про индексы, ревьюер может иметь замыленный глаз, ПМ забыть про важную штучку, которая на глаза попалась именно после релиза.

А откатывать всю эту красоту будет дежурный инженер. Вот оно ему надо?

выкатывать релиз в продакшн в пятницу, будь он даже 100500 раз затестен, не стоит ещё и потому, что у пользователей неизбежно появятся вопросы по новому функционалу, хотя есть инструкции и на обучении всё это говорили. А отвечать на этот вал вопросов будет вынужден дежурный спец поддержки. Основная команда в выходные предпочитает отдыхать.

Вторник, конец рабочего дня. Прибегает шеф и требует задеплоить новую фичу в прод именно сегодня. Совершенно непонятная срочность, так как от отсутствия этой фичи в течение ещё пары недель никто не умрёт.

Я: Только закончил реализацию, ещё не тестил. Давай завтра спокойно всё доделаю?

(Ш)еф: Сколько времени надо чтобы прогнать тесты и задеплоить?

Я: Ну, часа четыре, если исправлять ничего не придется.

Ш: Задержись, надо задеплоить сегодня.

Я: У меня планы на вечер, я уже собирался домой.

Ш: Я тебе такси до дома вызову.

Я: Если настаиваешь - давай задеплоим без тестов. Может сломаться, так что под твою ответственность.

Ш: Делай. (убегает)

Конечно же, утром пришлось всё срочно чинить, был разбор причин инцидента. Зато с деплоями с тех пор больше никто не подгонял :)

Аргументы из статьи бьются одной фразой - shit happens.

К сожалению, но вот оно происходит. Даже когда все процессы казалось бы доведены до идеала (а такого не бывает) оно происходит. Реже, да, но происходит. И люди просто выбирают между маленьким шансом огрести проблем и между 100% шансом их не огрести.

Общий посыл статьи то верный, делайте хорошо, а плохо не делайте, но подводка к нему неудачная. С другой стороны я вот тут и строчку коммент, так что может на то и был расчёт).

Ну и да. Разговор с копипастой - это традиции!

Ваши 3 шага не устраняют 100% багов. А в пятницу не деплоят вовсе не из-за чьих-то фобий, а потому что суббота выходной. Точно так же избегают предпраздничных дат и отпусков критичного персонала. Не нужно подменять риск-менеджмент на психологию.

Ну, если в выходные есть кому подхватить если что, то можно и в пятницу деплоить.

Бывают же компании, в которых нет выходных, а есть смены или индивидуальный график.

Ну допустим мы написали отличный, полностью оттестированный код, всё проверили на 10 раз и за полчаса до окончания рабочего дня отправили в деплой, но что то пошло не так и деплой пошел не по плану, что нибудь случилось и что? Половина SoC и программистов не пошла домой и сидит думает что делать, откатывать релиз в срочном порядке или можно быстро починить, а починить быстро это не факт что качественно. У всех были планы но теперь они должны что? Забить на работу и пойти заниматься своими делами? Или забить на свой отдых и работать дальше? И всё это ради чего? Поэтому и нет деплоя в пятницу, это не от того что ты не уверен в своем коде или проекте, а потому что всегда должен быть запас времени на shit happens...

  1. Выберите правильный язык программирования. Вам не нужны языки, для которых деплой является проблемой. Выберите Delphi - благодаря предкомпилированным юнитам собирайте большие проекты в десятки раз быстрее чем на C++ и перестаньте бояться возможных проблем при сборке.

Это правило написанное кровью.
команда может быть сколь угодно талантливой и ответственной, но человечески фактор на любом этапе никто не отменял - забыл, не учел, даже не подумал....
Мы не деплоим в пятницу

Всегда это твердил всем вокруг, вот какой-то добрый человек написал нормальную статью.

Если вы боитесь деплоить по пятницам и перед праздниками, то стоит ли вам деплоить вообще, без уверенности что вы (или, лучше, автоматика) вовремя обнаружите и быстро откатите любую проблему?

Не деплоим не из-за не уверенности, а из понимания что если что сломается, должно сломаться когда на рабочем месте есть нужные сотрудники и когда финансовые потери для бизнеса будут минимальные.

Так у вас система может в любой момент сломаться и без деплоев, для этого и есть онколл, не так ли?

А если факт деплоя заметно повышает вероятность сбоя, то, видимо, что-то не так с качеством и/или процессами. В таком случае инженерам будет хороший стимул исправить проблему, чтобы их онколл был спокойнее :)

Деплой по определению увеличивает неопределенность на проде. Зачем самим себе создавать проблемы? Пусть онколл останется для внезапных продакшен проблем, а не для разгребания «А что там в новой версии могло пойти не так?»

Вот этот майндсет «деплой - это проблема» и отравляет мне жизнь уже почти десять лет, не говоря уже обо всей индустрии. Не должен он быть ей, а если есть, то надо это чинить.

Деплой сам по себе это не проблема. Проблема это разбираться что пошло не так и точно ли это неожиданное поведение в пятницу вечером или на выходных.

Последний тест для любого кода это продакшен. Всегда что-то может пойти не так. Люди не идеальны и делают неидеальные вещи. Для защиты от такого поведения используют специальные методики. Как вам постепенная выкатка новой версии в течении двух недель?

Куда эта спешка? Не успели в четверг? Ну и ладно. Поедет в прод в понедельник. От этого никто не умрет. И даже денег потеряно особо не будет. Зато команда нормально отдохнет и будет более счастлива.

Хотфиксов это конечно не касается. Они едут в прод по готовности и по степени важности. Горящий прод до понедельника не оставляем. Я именно про типовой новый релиз.

Дело не в спешке, а в рутинизации. Чем более у вас рутинизирован и безопасен процесс деплоя, тем меньше вероятность того, что когда нужен будет срочный хотфикс, вы все не разломаете до состояния "хуже чем было".

Есть много вещей, которые можно воспроизвести только на проде. Дело же не только в написанном коде. Код запускается в инфраструктуре под нагрузкой. Вот эти инфраструктуру и нагрузку вы сможете гарантированно протестировать, только если поднимете рядом второй прод и будете дублировать туда запросы. Но так почти никто не делает. Поэтому при деплое на прод у вас всегда есть фактор неизвестности. Правило "не деплоить в пятницу" - это попытка управления этим фактором.

Для тестирования под нагрузкой есть нагрузочное тестирование.

Для тестирования взаимодействия с инфраструктурой и соседними сервисами есть стейджинг, который, в идеале, и должен быть вторым продакшеном по архитектуре и вообще всему, кроме размера.

Деплоить каждый раз как в неизвестность - мне, например, здоровья уже не хватит :)

стейджинг, который, в идеале, и должен быть вторым продакшеном по архитектуре и вообще всему, кроме размера.

В прошлом году была интересная статья от "додо пицца", как они прилегли в пятницу вечером на 4 часа: тыц. Там сложились факторы деплой+нагрузка+рекламные пуши. Ну еще пара косяков в конфигах. В теории, такое можно было бы отловить на стейджинге, если бы:

  • стейджинг был бы размером, как прод;

  • на него бы лилась нагрузка, как на прод;

  • на него бы лились пуши, как на прод;

Деплоить каждый раз как в неизвестность - мне, например, здоровья уже не хватит :)

По большому счету, чем больше изменений, тем больше неизвестность :) Есть же такие вещи, как ошибки, стреляющие через несколько часов. Бывает лавинообразный выход из строя при достижении некоторого порога производительности. А еще бывают плавающие баги, когда проблема возникает не только на проде, но и раз в N времени.

Поэтому на прод и деплоят мягенько, аккуратненько, поглядывая на графики. Подстилают соломки в виде blue/green и канареечных деплоев. А заодно страхуют себя от проблем, воздерживаясь от деплоев по пятницам.

Как говорится: Спасибо, но НЕТ.

В пятницу, даже обновы и патчи не ставлю

Забыли еще, как минимум, несколько шагов:

  • Внедрение метрик для выявления проблем при/после деплоя

  • Автоматизация отката релизов (наличие автоматизации деплоя также подразумевается)

  • Автоматический откат релизов

Я так понимаю, 100% отписавшихся в комментах не поддерживают продвигаемую концепцию "понты сильной команды"? Да потому что практика реально показывает, ибо ну его нафиг на выходных и праздниках устранять последствия принятых имиджевых решений эффективных менеджеров.

Деплоить в пятницу я начну только по принятии иудаизма(с)

Ни в чём нельзя быть уверенным на все 100%. Предположим, что при каждом обновлении есть шанс в N%, что появятся ошибки. Это нормально. Теперь следует посмотреть на пользовательскую активность по дням недели. Как правило, к выходным количество активных клиентов возрастает, а к понедельнику снижается. Это связанно не только с выходными разработчиков, но и, по случайному стечению обстоятельств, с выходными большой массы населения. Если простой в будни обернётся достаточно серьёзными потерями (как финансовыми, так и репутационными), то такой же инцидент в выходные становится просто катастрофой.

Дело не в том, что разработчики должны отдохнуть, хотя и это тоже. Дело в том, что риск того, что все сотрудники будут вне кондиции к моменту аврала очень неиллюзорный ибо пятница традиционно ассоциируется с алкоголем (но не у всех).

Умножаем гипотетические потери в час на шанс найти ответственного специалиста, готового оперативно и на трезвую голову починить всё. Выходит, лучше в пятницу с определённого времени (например, со второй половины дня) воздержаться от обновлений. Даже для тех, у кого смена.

Огонь статья!

Особенно хорошо в пятницу вечером катить обновление, задевающее смежников. Предупредив их конечно утром - мы же не звери - а что у них посыпется что-то мелкое, что не успевают проверить взмыленные ручные тестировщики - ну извините, зато мы успели в эту неделю, йуху!

Всегда есть вероятность косяка, её можно только уменьшить, но не исключить. И встаёт собственно вопрос, а зачем рисковать выходными, если есть, пускай и минимальная, но вероятность. Не деплоить в пятницу - это не неуверенность в продукте, а просто реальный взгляд на вещи.

Внедрите стабильный набор автоматизированных тестов

Sign up to leave a comment.