четверг, 29 сентября 2016 г.

Hero Pattern

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

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

Динамичность рынка труда требует роста на всех уровнях. Гребцы поматерее выдвигаются в рулевые, что автоматом выстилает дорогу в синьеры всем желающим. Просто нахождение тела на проекте автоматом дает ему шансы на продвижение независимо от талантов и умений. Наличие головы на плечах позволит довольно уверенно двигаться наверх внутри конторы. А в случае проблем на текущем месте, всегда найдется другой епам, которому позарез нужно стартовать очередной проект, и который не пожидится на +500 в месяц за тебя красивого.

В американских конторах, как и в посудинах других развитых стран, ситуация несколько сложнее. Гребцов много, рынок стабилен, а продвижение по службе нужно зарабатывать и обосновывать. А если вам не повезло, и вы попали в гугло-амазоно-мелкософт, то обосновывать свои достижения придется с гребцами из топа топ-кодера и стековерфлоу.

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

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

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

В большинстве нормальных команд данный паттерн проявляется редко, поскольку изоляция себя любимого легко может начать играть против героя. Разумные гребцы хотят не просто продвижения, но и собственного развития, а это сделать сложно, когда единственным существом, с которым ты общаешься является статуэтка Магистра Йоды. Другая пара рук и глаз вполне могут помочь избавиться от тоннельного синдрома и дать дополнительную пищу для размышлений. Разумные же менеджеры также стараются митигировать автобусный фактор, позволяя героям формировать небольшие группы отменных бойцов, знающих и понимающих определенную область системы.

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

З.Ы. Все названия контор используются исключительно примера ради и не несут никакой смысловой нагрузки.

22 комментария:

  1. Сергей, а что делать, если геройство основано на недостаточной компетентности коллектива/"команды"?

    ОтветитьУдалить
    Ответы
    1. Это одно из самых страшных заболеваний, когда герою недостает компетенции, но он бросается на баррикады, штампуя бесконечные объемы низкокачественного кода.

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

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

      Тогда решить эту проблему можно лишь на уровне менеджера. Если ты и есть менеджер, то можно попробовать перебросить бойца на участок, больше похожий на RnD, где его продуктивность будет сверх полезна. Если же ты один из его коллег, то можно поговорить с бойцом, а потом экскалировать проблему.

      Удалить
    2. Эскалировать? Типа так?
      _Смотрите, Вася Пупкин гребет за всех нас, поэтому давайте его куда нибудь уберем подальше с глаз долой. Например, пусть в RnD идет._

      Удалить
    3. В нормальных командах должны быть 1 one 1 с прямым менеджером, на которых можно начинать капать на мозг по поводу того, что тебе мешает быть продуктивным. Советское воспитание может воспринимать это как ябедничество и ай-ай-ай, но по сути, это нормальный процесс - ты выражаешь свое мнение по поводу текущей ситуации с возможным решением: передвинуть человека на другую роль/задачу, отправить на курсы, плотнее менторить и т.п.

      И да, можно сказать, что у нас есть определенный фронт работ, на котором данный человек может быть очень продуктивным и попробовать отправить его в RnD:)

      Удалить
  2. Что-то новое с лексиконом, как будто гостевой пост :)
    Кажется, что "героизм" проявляется там, где нужно "сидеть и расти". Когда есть мобильность и свобода передвижения (между командами/компаниями/регионами), желание окопаться в секретных знаниях и умениях может и появляется, но не несёт никакого практического смысла.

    ОтветитьУдалить
    Ответы
    1. Лексикон сайта https://ebanoe.it
      Думаю, что текст оттуда :)

      Удалить
    2. @Денис: пост отсюда, но лексика и правда навеяное этим сайтом.

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

      Удалить
    3. +1 за необычность подачи информации. Наверно у Серёги подкипело и мочи нет уже терпеть "героев", с которыми в изобилии сталкивается на работе. Вот и поменялся лексикон.

      Удалить
    4. Вопрос в том, насколько эта подача удалась?:))

      И да, настроение было именно под такую подачу...

      Удалить
    5. Лексикон "Ебаного АйТи" :-)

      Удалить
  3. Почему-то никто не обращает на другой момент появления этого паттерна - стимулирование оного со стороны руководства, когда среда в компании сама подталкивает к такому.

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

    ОтветитьУдалить
  4. Денис, это верно, но сильно зависит от роли.
    Ну и такой подход плохо скейлится, если ему следовать всегда.

    ОтветитьУдалить
  5. Да, иногда объяснять что сделать бывает дольше чем сделать самому.
    Но это изрядно зависит от квалификации коллег. Бывают хорошие джуны, которым можно дать задачу "копать" и они будут ей заниматься и в итоге даже выдадут вменяемый результат. Ну и да, если всё-всё делать самому, то в определённый момент можно начать попросту не успевать (сам был в такой ситуации).
    Так что лучше всё же хоть что-то делегировать другим членам команды, даже если сам бы сделал лучше. Попросту потому что им тоже нужно знание о деталях проекта чтобы подхватить в случае необходимости.

    ОтветитьУдалить
  6. Так в том и проблема, что нужно заставлять себя не геройствовать, а рассадить гребцов на галере так, чтобы продакшен не упал и греб не рулевой, а гребцы.

    ОтветитьУдалить
  7. Вот как раз хотел рассказать о том как не люблю Hero Pattern, как не люблю овертаймы (и считаю их вредными в длительной перспективе) и т.д. и т.п.
    Но не успел, т.к. за последние 3 рабочих дня проработал около 35 часов и вышел в оба выходных для того чтобы запустить таки всё это в продакшен во вменяемом виде.
    Facepalm...
    В свою защиту могу сказать что это довольно таки разовая акция из-за выхода в продакшен и что мотивации повышения своей значимости на галере точно нет, т.к. собрался уходить через месяц-два.
    Впрочем, у меня вообще какое-то странное поведение для человека собирающегося уходить. Обычно, люди расслабляются к этому моменту и более-менее забивают на работу. А я стараюсь подогнать все возможные хвосты и оставить проект в наилучшем состоянии.
    Например, на прошлой работе затеялся с полным переписыванием слоя работы с данными + большой миграцией данных для более оптимальной структуры. Убил на это около месяца, но таки всё сделал. Надеюсь что следующим разработчикам будет легче жить.

    ОтветитьУдалить
    Ответы
    1. LoL. Но главное, чтобы разовая акция не переросла в стабильный режим;)

      И да, перед уходом есть разные паттерны, и твой (надеюсь, можно на "ты") вызывает уважение!

      Удалить
    2. Можно конечно :)
      Вроде бы даже как-то общались на очередной сходке в Циклуме, посвященной ФП (емнип, темами были F#, Akka.Net и обсуждение подходов к null reference)

      Удалить
    3. А насчёт стабильности овертаймов всё же сомневаюсь.
      У меня уже был конфликт с локальным начальством год назад, когда проект начинался и мы регулярно овертаймили день-два в неделю. Последние месяцев 8 я уже практически без овертаймов (раз в пару месяцев на 2-3 часа не считается) работал.

      Удалить
  8. Денис, у геройствования есть один главный недостаток: к нему привыкают. Это значит, что все - команда, руководство, смежные команды, будут знать, что если они накосячат или будут сжатые сроки, то напрягать булочки придется не им, а герою. А если герой, вдруг, скажет "да ну нафиг", то он сразу же превратится в антигероя.

    ОтветитьУдалить
  9. И этот этап тоже проходился относительно недавно :(
    Правда, более-менее мягко, т.к. полыхнуло у меня как раз после того как после очередного затыкания дыр (с фиксом чужого и оооочень неприятного и не шибко легко ловимого бага. Я его по факту угадал, а не отдебажил и там отдельная история на тему "сигнатур в коде" + асинхронности), а не перед/во время.
    И случилось это из-за того что на следующий день локальный менеджмент в очередной высказал что "а у нас вот проблемы из-за этих ребят", указывая пальцем по факту на меня.

    ОтветитьУдалить
  10. День добрый. Хороший блог, мне пришелся по нраву, зачитал пока только половину. Вам как человеку толковому есть вопрос, просьба - осветить в какое направление стоит развиваться тем кто на Net и кому за 30. Кто прошел долгий путь от С++, Delphi, WinApi, и застрял теперь на C# win and web service + немного MVC. Любимая субд все также MS SQL. Так же читается хабр и другие, но в последние года поток информации такой что охватить все можно только если в этом крутиться, в смысле это применять. А как же быть если кто то ограничен в задачах но хочет изучить полезную и востребованную в будущем технологию, направление.
    Дауншифтить вроде рано, а куда капать не понятно. Интуитивно хочется поработать с биг дата и т.д. но для тестов это затратно а для реальных удел больших компаний и проектов.
    Не знаю донес свою мысль или просто сумбур.
    Спасибо

    ОтветитьУдалить