1. Сепаратные тропы альфа-разрабов
Никто, кто не был в крупных фирмах не поверит, однако проблема общения в них часто контузит разработку не вследствие слабости, а вследствие силы команды. Такие фирмы могут позволить себе нанять топовых программистов: с большим опытом и, при этом, способных на творческие решения, с горящим в сердце чистым пламенем воинов исходного кода. Такие альфа-разрабы готовы ломать бетонные стены и броню, любая проблема для них - вдохновляющий вызов.
Кроме шуток, кажется, такая команда это рай для разработки. Дай любую задачу - сделают топовое, уникальное решение и спросят что ещё доработать.
Вас, однако, пусть не вводит в заблуждение этот мнимый оазис разработки. Рай легко оборачивается адом. Альфа-разрабы часто зациклены на себе. Им сложно общаться, потому что у каждого есть окрепшая система убеждений.
Не просто так к этому разделу прилагается картинка из известного мема. Загадка: как по-вашему продолжится путь волков если представить что они - альфа-разрабы на топовом проекте без правильного руководства?
Остановит ли что-то настоящего альфа-волчару? И что будет, если каждый будет с мощными лапищами? Думаю, вы догадываетесь…
Войну не предотвратит и тропа протоптанная первым шерстяным лидером. Каждый будет ломиться сквозь снег в своём направлении.
2. Battle royale driven development
Не удивительно что вышедшие из-под контроля альфа-разрабы устраивают побоище в коде. Митинги они часто воспринимают как бессмысленное убийство времени. У каждого в голове - свой проект. У каждого чешутся руки попробовать сделать "так как надо". То есть, для каждого по-своему.
“Прекращайте” - скажите им - слушать не будут. Сущности в коде без единства в подходах плодятся не просто сверх надобности - прут через все дыры забыв про приличия. Дублирующиеся решения, архитектурные красоты, изыски замешанные на моднейших технологиях. Часть поделок приживается, часть остаётся уделом их создателей. Новые программисты, конечно, тоже альфа-разрабы (фирма-то топовая) - быстро устают разбираться где что принято использовать. Понимают по каким правилам здесь играют, расчехляют креатив-пушки и фигачат каждый своё-что-придётся.
Говорить с альфа разрабами также непросто. Это люди технической веры. Угукнут менеджеру, мол, “понял, принял” - и тихонько продолжат свою священную битву за красоту в коде.
О, и, конечно, самое обидное… Решение каждого в этой бойне - качественное и крепкое. Они ведь действительно хороши, чертяки. Люди с опытом и волей к действию. Если бы не бесконечная битва за Правду (которая у каждого своя) - проект стал бы лучшим в мире. Можно ли что-то с этим сделать?
Политике разнузданного креатива может положить конец лишь одно - разделяемый всей командой авторитет.
3. Вождь-техлид
Всеми альфа-разрабами может командовать технический вождь - разработчик, задающий маршрут которым будет следовать другие разработчики.
Силами своей экспертизы и авторитета технический лид может навести порядок в подходах к разработке. При этом хорошо если он практически не будет участвовать в разработке фичей. Его задача - задавать другим единую тропу развития кодовой базы.
Избегайте сомнений в этом вопросе - команда разработчиков не волшебная коробка в которую насыпаешь крутых разрабов, закидываешь задачи и на выходе получаешь быстрый в расширении, качественный код. Контроль альфа-разрабам нужен не меньше, чем начинающим программистам. В отличие от сомневающихся в своих силах джунов, альфа-разрабы могут много и делают много. Если в их действиях нет единства, вреда от этого может быть больше, чем от скудных изменений робких парнишек ступающих первые шаги в разработке.
Мобилизации сверхусилий перед релизами также можно избежать благодаря контролю подобного человека. Техлид поможет проложить с холодной головой тропу критических фиксов, и также спокойно отследит демонтаж костылей после того, как предрелизная горячка схлынет.
Идеальный техлид должен обладать следующими качествами:
Неоспоримый технический авторитет. Самое важное - качество. Нужно чтобы все альфа-разрабы до одного были согласны: это - лучший технический эксперт в команде.
Да, к счастью, в айти не закон джунглей, здесь Акелле допустимо промахиваться. Но регулярных ошибок альфа-разрабы всё же не простят и организация посыпется. Начнутся игры в подполье с подколками техлида, непроговоренными презрением и обидами на техлида за неграмотные решения.Готовность брать на себя ответственность. Не выбирайте вождя, который не готов брать на себя ответственность и вести за собой команду.
Готовность быть ментором. Хороший техлид 80% времени занимается преподаванием. Он может практически не писать прикладной код на проекте. Техлид как ДНК в клетке, определяет принципы разработки кода. Если техлид не готов терпеливо учить людей - это плохой техлид.
Одно из ключевых мест использования менторского мастерства техлида это качественное ревью кода. Нет ничего лучше обучения на примерах. И нет примера лучше чем практические ситуации в живом коде.Умение говорить. Техлид должен уметь говорить так, чтобы все внимали его словам. Нельзя чтобы его постоянно перебивали, нельзя чтобы он замолкал под давлением обсуждений других альфа-разрабов. Он должен быть ведущим на встречах технической команды.
Именно техлиду проговаривать финальные решения по результатам встреч: твёрдо и веско, и при этом с уважением к команде.Умение слышать. Как было сказано в прошлой статье, нельзя научиться говорить убедительно не научившись слышать. Техлид должен выслушать разные мнения и донести до высказывающих эти мнения людей своё понимание: плюсы и минусы их решений.
Вежливость. Техлид должен уметь благодарить и отмечать достижения. Вожак который лишь приказывает и раздаёт тумаки любим не будет.
4. Как выбрать техлида
Диктатура - не лучший способ управления разработкой. Техлид должен давать простор для действия команды, направляя её советами - но не навязывая решения лишь своим авторитетом. Выберете слишком жёсткого в продавливании решений техлида - получите вместо порядка на проекте новой уровень битвы всех против всех: с антилидовым подпольем, подколками и затаёнными обидами.
Рухнет, с другой стороны, и та организация, в которой техлид займёт позицию ментора без воли и полномочий влиять на команду. Последнее слово в решении крупных технических вопросов должно быть именно за техлидом.
Свобода творчества, направляемая здравым смыслом техлида, как самого опытного разраба на проекте - лучшая политика.
Победит баланс между творчеством и порядком.
Советы по выбору техлида:
У вас не так много попыток. Техлид - крайне важный для команды человек. Поменять его будет тяжело. Если поменяете - у технической команды будет недоверие к следующему лиду и к вам как к менеджеру проекта.
Выбирайте техлида так, словно от этого зависит жизнь проекта. Подобная постановка вопроса близка к истине.Техлида проще выращивать из старожилов проекта. Экспертиза бывалых чуваков известна команде. Им не нужно доказывать свой авторитет.
Будьте чутки к команде, не допустите ошибку в выборе.Если брать со стороны - вовлекайте команду в выбор. Предложите разрабам составить опросник для кандидата. Каких знаний они ждут от техлида? Пусть сами зададут планку знаний, которую считают достойной.
Отберите вместе с авторитетным альфа-разрабом 20-30 вопросов и устройте кандидату марафон. Если посыпется на вопросах команды - значит потеряет в глазах команды авторитет.Вы очень вряд ли найдёте человека идеально совмещающего все необходимые компетенции на высоком уровне. Вам, как менеджерам, нужно будет оказывать поддержку техлиду по тем скиллам, которые у него не закрыты. Как правило, основные трудности возникают в коммуникативных навыках.
Не жадничайте с компенсационным пакетом для техлида. Высокая техническая экспертиза, умение брать на себя ответственность, способность совмещать уникальный набор умений - человек объединяющий столько разновекторных качеств должен получать достойные деньги.
5. Заключение
Техлиды, на первый взгляд, могут казаться бесполезными людьми. Такое ощущение возникает потому что они не настолько вовлечены в прикладную разработку как остальные программисты. Однако команда сильных и творческих индивидуальностей не будет работать как единое целое без техлида. Для эффективной разработки на любом проекте необходима магистральная тропа развития и тот, кто её задаёт. Нужен один человек, который сумеет донести свою мысль каждому альфа-волчаре и объединить заслуженным авторитетом все мощные лапищи.
Комментарии (17)
shoorickus
00.00.0000 00:00+6Я бы ещё добавил, что хороший "вождь-техлид" должен уметь быть посредником между командой "волчар" и бизнесом. С одной стороны отстаивать интересы разработчиков перед бизнесом (время на техдолг, исследование новых подходов, качество, которое сэкономит время на длинной дистанции). С другой – правильно расставлять приоритеты в разработке. Бизнесу не нужен красивый, качественный код сам по себе. Ему нужно регулярное, планируемое решение проблем пользователей, которые ему приносят прибыль.
semenyakinVS Автор
00.00.0000 00:00В идеальном мире - пожалуй, соглашусь. Однако, это уже со всего человечества единицы соискателей на такую позицию будет - способных совместить поддержку технического единства разрабов-альфачей и находить при этом время чтобы держать контакт с бизнесом.
Моё мнение - чтобы техлид работал эффективно, он, всё-таки, должен быть в основном сосредоточен на построении технической работы команды, на формировании и поддержке магистрального направления разработки.
В статье поэтому упоминаются именно топовые фирмы - у них вероятнее могут найтись ресурсы на введение подобной, с позиции краткосрочного планирования, "непродуктивной" должности.
event1
00.00.0000 00:00+3Кроме шуток, кажется, такая команда это рай для разработки. Дай любую задачу - сделают топовое, уникальное решение и спросят что ещё доработать.
Топовое и особенно уникальное решение — признак неопытного разработчика. Так делают крепкие джуны только с университетской скамьи. Опытный волчара сделает неуникальное тупое решение которое а) работает, б) легко сопровождать и в) не жалко выкинуть. И не заняло слишком много времени.
semenyakinVS Автор
00.00.0000 00:00+1Про то что решение должно быть простым - полностью согласен. С позиции опыта так же считаю что архитектурные замки ради архитектурных замков - чистое зло.
Однако, выскажу возражение по одному моменту. Почему уникальность и топовость решения должны идти в конфликте с его работоспособностью и лёгкостью сопровождения? По опыту часто как раз максимально простое решение может оказаться топовым и уникальным - потому что программисты без опыта накрутили бы трёхэтажных абстракций. У опытного человека рука набита на "гениальную простоту".
В дополнение также можно заметить - если говорить о так богатых в средствах выражения мысли языках как С++, часто красивые решения завязаны на знание языковых фич. Чуть менее известные языковые конструкции помогают сделать API (и его реализацию) более компактной и, при этом, дескриптивной - за счёт использования каких-то языковых конструкций. Углубленное знание языка приходит с опытом.
chernish2
00.00.0000 00:00Не могу на себя примерить ни альфу, ни волчару, ни стремление к уникальным топовым решениям. Слышать в команде только себя из-за того, что у меня есть устойчивая система своих убеждений считаю деструктивным моветоном. Очевидно, ярлык сильного разработчика не для меня, не смотря на более 10 лет опыта.
involute
00.00.0000 00:00А нормально, если лид совмещает функции разраба? Например, у меня была такая ситуация, когда лид совмещал бекэнд. Получается, у него не было не то что 80%, а даже 30% на обучение и менторство
semenyakinVS Автор
00.00.0000 00:00На мой идеалистический взгляд (описанный в статье) - если техлиду приходится тащить ещё и разработку, есть вероятность что он не будет успевать заниматься непосредственно "техлидовой" работой. Потому что в сильной команде на организацию, поддержание технического порядка и единства будет уходить много сил и времени.
Например, в том идеальном варианте который описан в статье, техлид должен проводить сопровождение изменений - от проектирования до финального код-ревью. Уметь анализировать результат не на уровне "может назови переменную по-другому", а на уровне логики и дизайна - и по результату дать точные советы где чего доработать. Это само по себе будет отнимать прилично времени.
tkutru
00.00.0000 00:00+1Адекватным тру разрабам поводыри не нужны. Статья скорее про то, как по фен-шую организовать галеру с грейдами.
semenyakinVS Автор
00.00.0000 00:00-1Адекватным тру разрабам поводыри не нужны
Возможно... Но мой некоторый опыт говорит об обратном - горящим своим делом, топовым девам которые живут программированием сложнее договориться чем равнодушным ремесленникам. Потому что каждый сильнее индивидуальность в разработке проявляет.
tkutru
00.00.0000 00:00Так вы мне и не противоречите. Куратор, переговорщик, "синхронизатор процессов" может быть полезен, выполняя скорее роль "смазки" для механизмов, но он совсем не поводырь и точно не "вождь разрабчьей стаи".
iiopy4uk_mck
00.00.0000 00:00Если брать со стороны - вовлекайте команду в выбор
Вот это не советую, тем более отбирать вопросы самым скилловым из этой команды. У него с большой вероятностью мотивация показать, что техлидом должно быть ему по скиллам.
Вовлеките соседние команды например.
semenyakinVS Автор
00.00.0000 00:00У него с большой вероятностью мотивация показать, что техлидом должно быть ему по скиллам
Мой опыт говорит как раз что крутые разрабы далеко не всегда рвутся к лидству. Потому что хотят писать код, а не менеджерить.
Возможно, наблюдал скорее исключительные случаи.
overpanda1
00.00.0000 00:00плохая статья, смешали в одну кучу все обязанности: и техлида, и тимлида, и наставника. То, о чем Вы пишите в самом начале (разные подходы к написанию кода) обычно решается написанием регламента разработок, которого заставляют всех придерживаться.
Пару раз встречал на проектах техлидов, но их обязанности в основном заключались, чтобы выбрать корректный стек, на котором все работают.
Вникать в каждую проблему, одновременно всех убеждать и при этом как-то, чтобы 80 % времени оставалось на обучение - с трудом укладывается в 40-часовую рабочую неделю) Ну и это скорее относится к обязанностям тимлида
Jorell
Это специально?
xztau
Так это ж мем:)
huder
Лид тащит команду волчар из стаи "накрутивших опыт"
Tamerlan_Hajiyev
Вожак разраволчьей стаи?