Менеджеру было всё равно, ему нужно было бездумно выполнить задачу, чтобы не получить нагоняй от генерального директора. В общем, я его в грубой и экспрессивной манере отослал от себя подальше. Что было в результате? После нескольких итераций обсуждений, когда люди наконец поняли, что так нельзя и что такого наша платформа не может ни на бэкенде, ни на фронте, но генеральному директору очень хочется, пришлось мне сесть и написать мегакостыль. То есть сесть и написать нетривиальный SQL-запрос (формат выдачи с неожиданной группировкой) с оптимальным планом выполнения (требование компании, за этим яростно следили, и на это были объективные причины), а потом банально подломить платформу на фронтенде (JS же, мы и не такое проворачивали), чтобы она наконец хоть что-то смогла. Ну и несколько сотен строк прикладного кода, куда без него. Костыль имел длинное имя собственное из множества слов, среди которых было всего два цензурных: «волшебный» и «единорог».
Специально зарегистрировался чтобы поаплодировать - настолько хирургически (кардиологически) точно вскрыты и описаны проблемы и боль руководителя R&D
"Программист: ну, представь, что ты писатель и поддерживаешь проект «Война и мир». У тебя ТЗ — написать главу, как Наташа Ростова гуляла под дождём по парку. Ты пишешь «шёл дождь», сохраняешь, вылетает сообщение об ошибке «Наташа Ростова умерла, продолжение невозможно». Почему умерла? Начинаешь разбираться. Выясняется, что у Пьера Безухова скользкие туфли, он упал, его пистолет ударился о землю и выстрелил в столб, а пуля от столба срикошетила в Наташу. Что делать? Зарядить пистолет холостыми? Поменять туфли? Решили убрать столб. Получаем сообщение «Поручик Ржевский умер». Выясняется, что он в следующей главе облокачивается о столб, которого уже нет..."
Как бы функциональное программирование и ООП это как раз про это?
Не совсем, тут важно понимать масштабы. На масштабе локального кода, вы правы. Действительно ООП в своё время привнесло дозу «порядка и понимания» в кодирование. Но сейчас системы такие большие и сложные, что можно запутаться во взаимодействиях микросервисов. ООП тут пока не помогает.
Комментарий недоступен
Очень хорошая статья, но позволю себе сделать несколько замечаний:
1. Довольно банальное замечание, но "Ломается у хороших программистов" - потому что они что-то делают, не ломается только у тех, у кого ничего нет и они ничего не делают))) "Хороших" отличает то, что у них ломается реже на единицу функционала (не на строчку кода) и самое главное, что у хороших молния не бьет два раза в одно место, отсюда замечание №2
2. В статье довольно часто упоминается, что это какие-то внешние факторы что-то сломали или являлись причинами сбоев. Это действительно так и с кейсами не поспоришь, но упущено главное следствие - что делать, когда такое произошло ("менеджер сказал сделай костыль, а то уволю", "соседняя команда дала сумашедший RPS", "требования поменялись в процессе разработки" и т.д.). Хорошего программиста отличает умение писать премортемы и постмортемы, проводить ретроспективы по крупным задачам/проектам, или по простому учится на ошибках) Тут есть очень тонкая грань - как только ты говоришь что виноват внешний фактор, то перестаешь подстраивать процессы и вероятность повторения стремится к 100%, если же вместо "почему так получилось" задаваться вопросом "а как можно было предотвратить", то все улучшается прямо на глазах)) Все эти не сложные практики позволяют подстраивать процессы под текущие реалии, оставаться гибкими в изменчивых внешних условиях. В конце концов, если руководство совсем невменяемое, то по статистике понять, что теряешь свой скилл и перейти в другую компанию.
3. Мне очень понравился термин "золотая шестеренка", это прямо бомба и теперь буду его использовать, но "нужно опасаться работать с «золотыми шестерёнками». Они всегда вылетают" - звучит как "я не буду с вами работать, вы слишком хороши для нашей компании"))) Лично я утверждаю, что нужно наоборот как можно больше золотых шестеренок, вместе они работают только лучше. Но золотые шестеренки должны быть не только на на позициях инженеров, а и в менеджменте, вплоть до владельца компании. Именно такие компании делают прорывные продукты и изменяют рынок. Без золотых шестеренок компания становится забюрократизированной, так как новшеств она уже не производит, некому, поэтому все идет в сторону стандартизации, структурирования, фиксирования, комитетов и других матерных слов. На самом деле работать с "золотыми шестеренками" достаточно просто, говорю это на довольно большом опыте. Необходимо просто выделить в золотой шестеренке главное в чем он/она хороши, они всегда немного "перекособечены" (отлдичный разраб, плохие софтскиллы, отличный менеджер, ничего не понимает в ИТ и так далее), при этом отличает их зачастую фанатичный свет в глазах и заставлять заниматься их тем, что им не нравится - верный шаг к тому чтобы их потерять. Поэтому просто даешь такой шестеренке фронт работ, который вызывает наибольший интерес и подстраиваешь процессы, чтобы не было негативных факторов, пусть даже полуиндивидуально именно под эту шестеренку. Это даст гигантский буст продукту и команде, ведь если золотая шестеренка среди команды разработки, то именно на него будут равняться остальные, он будет движетелем технологий. Если шестеренка в менеджменте, то его команда будет показывать лучшие результаты и так далее. Так что я бы не опасался работать с ними, а наоборот старался работать именно с ними))
1. С первым пунктом сложно согласиться. В описанных ситуациях, если ничего не делать, то сломается ещё быстрее. Стоять на месте — тоже ошибка.
1.1. Конечно, молния бьёт дважды в одно место. Если причина возникновения аварийной ситуации свойства внешней среды, то приобретение пострадавшей стороной опыта никак не меняет внешнюю среду. Особенно, в ситуации, когда эту внешнюю среду уже Chief-уровень поменять не может.
2. Тут не ситуации, когда менеджер говорит «сделай костыль, а то уволю». В ходе аварийной ситуации вы рискуете потерять экономическую базу существования разработки/поддержки вообще. Если не будет функционировать бизнес, то прекратится денежный поток. Если прекратится денежный поток, то бизнес не сможет выплачивать зарплату своим сотрудникам. ИТ-специалисты — ровно такие же сотрудники, как и все остальные.
2.1. Если мы говорим о «золотой шестерёнке», то начинаем говорить не о схеме «ИТ-специалист – менеджер», а о схеме «Руководитель – Chief-уровень». Кого там менеджер сможет уволить, если проблемы уже на уровне генерального директора и руководителей департаментов обсуждаются, сложно представить. Там иногда и акционерам-миноритариям достаётся. Менеджера тоже не увольняют, так как у генерального «Нет других людей». И дело не в невменяемости, а в том, что их действительно нет. Из-за чего компания для компенсации жёсткого кадрового кризиса с управленцами начинает переносить вес принятия решений на сторону ИТ-специалистов. Не от хорошей жизни это происходит.
3. Рассматривать золотую шестерёнку, как нечто «перекособоченное», не очень благоразумно. Именно из-за способности эффективно действовать на любом уровне организации золотая шестерёнка становится золотой шестерёнкой. То есть человек может поговорить с разработчиками, указать им на их ошибки, и не дать себя дезинформировать. Аналогично с менеджерами и руководителями среднего звена. Кроме того, золотая шестерёнка понимает бизнес и умеет играть в политические игры. Именно за счёт понимания всей системы разом и высокого потенциала достигается высокая убойная сила.
Выстроить систему на золотых шестерёнках у вас не получится. Во-первых, их мало. Во-вторых, вам им банально будет нечего предложить. В-третьих, у золотой шестерёнки и характер золотой, то есть очень тяжёлый.
Кроме того, вот вы пишите «...Это даст гигантский буст продукту и команде...». А что они с этим то делать будут, позвольте спросить? Быстро решат все задачи и уволятся со скуки? Они лучше поиграют в конкуренцию друг с другом, на открытом рынке, чем будут сидеть без дела в болоте.
Много букв. У каждой системы есть свой жизненный цикл. И вот в этом главная задача - показать владельцу, что пациент уже мёртв и оперировать его бесполезно