Pets vs. Cattle
Друзья-девопсы рассказали мне про их концепцию, которая называется «Pets vs. Cattle». Что в кривом, но более-менее литературном переводе — «Питомцы vs. Скот».
Перескажу и вам. Короче.
Питомец — это ваша собачка или кошечка. Он по факту член семьи. У него есть имя, он уникальный, его все любят, а когда он заболел — вы всей семьёй везете его к ветеринару и выхаживаете как можете. По питомцам скучают и волнуются, когда они долго остаются одни. Любите питомцев!
Скот — это ваши коровки и овечки. Я понимаю, меня вряд ли читают ковбои, но айтишники тоже часто мечтают о своей ферме, так что просто представьте себя лет через тридцать.
Коровы дают вам молоко, мясо, и вообще, если они у вас есть — скорее всего вы живете в деревне и они критически важны для вашего пропитания и выживания.
Однако, если одна из коровок серьезно заболела — вы отправляете её на убой, чтобы спасти остальное стадо от заражения. И тут же заменяете новой.
Вы не даёте коровам и овцам имена, разве что в шутку, но общее здоровье фермы для вас всё так же важно — вы заботитесь о них и тратите кучу времени, чтобы коровки были счастливыми, набирали вес и давали молоко, а вы не умерли с голоду следующей зимой.
То есть как бы и питомцы важны, и скот важен, но по-разному.
Возвращаясь к девопсам. До появления облаков, когда «девопсов» еще называли «админами» и шутили про них шутки на башорге, каждый сервер был уникален. Вы точно знали, что ваш сайт крутится на конкретной машине с 1Gb RAM и 2GHz CPU в таком-то датацентре.
Когда сайт падал — вы шли на эту машину и чинили его. У машины для этого даже был выделенный IP адрес и собственное имя. Это и был ваш питомец.
С появлением облаков, докеров и кубернетесов, ситуация изменилась.
Все поняли, что управлять даже десятком серверов намного удобнее, когда они все одинаковые и идут куда-то хором по вашей команде.
Если сервер сломался или требует обновления, вы просто убиваете его и создаёте рядом точно такой же, но новый. Одной командой. Современные системы оркестрации уже делают это автоматически. Когда сервер упал несколько раз — тогда да, это повод задуматься и посмотреть логи. Но всю систему это не сломает.
Потому что современные сервера — это скот.
Думаю и ежу понятно, почему именно последнее стало пропагандироваться Гуглом, а потом и всеми остальными компаниями, как рекомендованный подход к управлению своей инфраструктурой. Если всё еще непонятно, почитайте плюсы-минусы тут или тут.
Теперь, наконец, к сути поста.
Разработчикам ТОЖЕ наконец-то надо сменить эту парадигму
Сейчас подавляющее большинство разработчиков относится к своему коду и проекту как к любимому няшному домашнему питомцу.
Они устраивают ему бесконечные рефакторинги, чтобы шерстка была помягче, яростно спорят какую версию корма купить в этом месяце, и всегда знают где почесать за ушком, если он начинает капризничать и крешиться с OutOfMemory.
А дальше они сталкиваются с реальностью.
В которой код — это лишь инструмент решения определённой задачи определенного бизнеса, который их нанял. И эта задача через месяц изменится. А значит и 99% написанного разработчиками кода будет просто выброшено на свалку.
И с точки зрения бизнеса с этим нет проблем: он нанял вас на помесячную ставку, исправно её платил (надеюсь), вы писали свой код (тоже надеюсь), а потом та старая хуйня больше не актуальна и надо срочно делать вот эту новую хуйню. Как же хорошо, что у нас уже есть разработчики и они напишут! Не так ли?
А вот со стороны разработчика всё выглядит по-другому: он старался, выглаживал, вынашивал своего питомца, а его потом взяли и выбросили злые дядьки-начальники. У программиста начинается очевидное 👇
ВЫ-ГО-РА-НИ-Е.
Да, одна из основных причин выгораний — это отсутствие смысла в жизни, либо в переводе на инженерный «мне чото говорят, я чото делаю, но вообще не понимаю нахуя это всё».
Так вот, если все-таки принять тот факт, что 99% написанного вами кода будет выброшено, то почему бы не начать относиться к этому как к норме, а не как к чему-то из ряда вон выходящему.
Лично мне помогает в этом как раз аналогия с «Питомцами против Скота» или «Pets vs Cattle».
Скот не «хуже» питомцев. Скот нужен, чтобы вам и всей деревне было что кушоть.
Не потому что вы «раб системы» и «начальник говорит что делать». А потому что вы выбрали путь фермера, пусть пока и не осознав этого. Хотя фермеры исторически очень консервативны и тоже верили в «начальника», который из Библии, который всем типа заведует — погодой, урожаем, дождем, и говорит им что делать, кек
Вы заботитесь, чтобы ваши коровки были счастливыми, они вкусно кушали, подстилка была мягкой и водичка чистой. Вы постоянно следите за сводками эпидемий и вирусов, чтобы быть начеку перед новым сезоном. Но при этом вы понимаете цель его существования — прокормить вас и вашу деревню следующей зимой.
Вы можете дать самым красивым коровкам имена, но вы абсолютно четко отдаёте себе отчет в том, что когда придет время — «Алёнушка» превратится в сочный стейк.
Но вы не будете её хоронить и горевать, как о домашнем питомце. Ваши кошечки и собачки всё так же живут в тепле вместе с вами и сытые мяском. Но чьим?
Так вот каждый модуль вашей системы — это коровка, каждый микросервис — овечка, а каждый юнит-тест — ваша курочка.
И ваша профессиональная цель как программиста точно такая же, как у профессионального фермера — научиться наиболее эффективно управлять вашей фермой, а не холить-лелеять каждого утёнка и копить их на будущее, чтобы побольше да побольше.
Всем насрать как зовут ваших коров, если ваша деревня голодает
Когда начинаешь относиться к программированию именно как к фермерству, многое становится проще.
Отныне каждая написанная и успешно запущенная строчка кода — это ваша личная победа. Новая родившаяся коровка. Как для фермера и как для профессионала. А если следующей холодной зимой придётся пустить её на мясо — ну и отлично, еще десяток таких же потом разведём. Жизнь длинная, а зим еще будет много.
Даже если это была самая суровая зима в вашей истории и всех коровок пришлось сожрать, это не значит, что вы не удались как фермер и время впадать в депрессию. Всё ровно да наоборот. Ваша деревня выжила, вы хорошо кушали, это ваш успех. Все любят вас за это.
На остальное тоже можно посмотреть через эту призму:
Есть базовые вещи — умение построить сарай, знание отличия сена от соломы или, там, скилл управления трактором. Они не менялись десятилетиями и это база. Как алгоритмы и структуры данных.
Есть, наоборот, чрезмерно хайповые вещи. Всякие там супер-пупер-присадки, от которых коровки растут в 10 раз быстрее, но через пару лет выясняется, что мясо от них вызывает рак, и все начинают их хейтить. Это как новые фреймворки на джаваскрипте :)
Хотя иногда попадаются весьма забавные изобретения, типа автоматических чесалок спинок для коров. Так что становиться луддитом и отрицать прогресс тоже не стоит.
Ну и есть тот самый «баланс». Проверенные временем инструменты, которыми вы с каждым сезоном всё увереннее и увереннее пользуетесь, которые и ложатся в основу вашего стиля и профессионализма. Потом поедете с ними на конференцию фермеров, будете джунов всяких учить как вместо тяпок культиватор использовать.
Чем более универсален ваш подход — тем лучший вы фермер. Если с вами завтра что-то случится, то другой фермер просто возьмет ваших коровок и продолжит их разволить. Ему не надо будет полгода запоминать их имена и заучивать вашу УнИкАлЬнУю планировку амбара.
Даже при найме на новую работу, с вас будут спрашивать про тот самый «опыт», а не за количество коровок, которые вам удалось сохранить перед уходом с прошлой фермы.
Потому просто примите как факт, что 99% вашего кода (коровок) будет уничтожено и съедено, но вы, как программист (фермер), станете от этого только лучше.
Хотите не только разводить скот, но и иметь домашних животных — заводите пет-проекты. Они потому так и называются. Когда ваша жизнь идёт неплохо и вы можете позволить себе завести питомца — заводите! Это счастье! Заботьтесь о нём, ухаживайте, покупайте ему самые модные штучки, чтобы он играл.
А если вам этого не надо — качайте в себе скилл самого лучшего фермера в регионе и забейте на всё остальное.
Но никогда. Никогда больше не путайте питомцев и скот.
Вы либо фермер, либо любящий хозяин. Это две разные роли, хотя и один человек может быть вполне успешным в обеих. Когда их разделяет.
Иначе пизда и выгорание.
Держитесь.