Любой хороший team lead рано или поздно начинает испытывать проблемы с командой. Иногда это проявляется после того как приходит новый член команды и у team lead'a появляется антогогнист. Или ваша команда сталкивается с проектом на который каждый имеет своё видение...
В любом случае - через какое-то время вы понимаете, что ваша команда или отдел напоминает неуправляемую стаю котов.
И вам придётся жить с этим осознанием. Все программисты разные. Они по-разному мыслят, чувствуют, работают, мечатют и отдыхают. А главное - они совершенно по-разному относятся к своей работе, смотрят на неё и считают уместным и правильным совершенно специфическое поведение.
И с этим надо научиться выживать реализовывать проекты, иначе вы станете заложником собственной работы, а команда будет прибывать в кранче по 18 часов в дейнь, 7 дней в неделю.
В серии статей "Породы программистов" я не только перескажу типологию разработчиков программного обеспечения из книги Рейнвотера "Как пасти котов", но и дополню её своими, специфичными для стран СНГ "породами", а так же дам рекомендации по развитию себя и команды и попытаюсь сделать самое главное - попытаюсь дать рекомендации выпаса котов из стран СНГ.
Примечание автора: по изложенным в серии статей принципам я стараюсь жить уже год. Уже год я формирую и выкристализовываю для себя и других управленцев методики, подходы и принципы, которые бы стали универсальными инструментами для управления IT-командами.
С момента чтения двух прекрасных книг ("Как пасти котов", "Программист-фанатик") я стараюсь рассматривать всю команду как "прайд котов" и делю людей на те или иные "породы", но при этом стараюсь не забывать - каждый из них личность, индивидуальность не сравнимая ни с чем.
Кому-то подход навешивания шаблонов покажется немного ценичными,но мне как бы плевать на ваше мнениезато он позволяет лучше понимать доступный ресурс и прогнозировать, какие проекты может сделать ваша команда (и за какое время!).
Общее о породах
Для начала объясним почему кошки. Именно это животное живёт вместе с человеком долгов время и не является прирученным до конца. Вы можете сколько угодно делать хорошо кошке, но при этом не завюете её доверие и уважение. Хотя она будет требовать регулярного питания, уборки и заботы. Ведь это ваша обязанность.
Ничего не напоминает? Да, ситуация с team lead'ом и программистами очень схожая, если на сказать идентичная. Именно поэтому, не так давно, в книге "Как пасти котов" была предложена классификация, операющаяся именно на эту метафору.
Ниже мы рассмаотрим немного изменённую типологую Рейнвотера, в терминах более понятных российскому читателю (в первую очередь для того, чтобы не смешивать в сознании читателя скажем, программиста-архитектора и породу "Архитектор", которые хоть и являются чем-то похожи, но породы не относятся к роду занятий!).
Инженер-проектировщик
В оригинале эту породу называют "Архитектор". Любой инженер-проектировщик - кот-любимец, которого многие считают непрвезойдённым специалистом.
Для представителя данной породы важнее все общая структура кода. Его образ мышления идёт от анализа и абстрактных построений, без них он даже не подумает приступать к решеню реально задачи.
Сильная сторона данной породы заключается в том, что они генерируют удачные идеи. Неоторые их представители могут вести проект в одиночку, от замысла до конечной реализации. Но стоит помнить, инженеры-проектировщики теряют интерес после того, как общая структура намечена. В этом случае в группе с ним должен находиться представитель более "приземлённой" породы, чтобы наш "герой" мог отдать «ремесленную» работу разработчикам низшего уровня.
Минусом присутствия данной породы в команде - они часть выдают путаный, малопонятный код со странными конструкциями, который в то же время соответствует всем академическим представлениям об архитектуре ПО и с большим трудом поддается поддержке другими разработчиками.
Ценность в странах СНГ у данной породы очень высокая, она является самым ценным при формировании костяка команды, ведь именно такие люди будут закладывать архиектурный фундамент ваших приложений. В то же время - если вы дадите им сликом много воли - они превратят в Ад поддержку.
Почему я говорю о том, что инженер-проектировщик столь ценный для вашей группы? Всё очень просто, большая часть пород разработчиков в СНГ понятия не имеют о том, как выстроить архитектуру (и что это вообще такое) и работают больше интиитивно. Особенно это сильно выражено в gamedev секторы России (по этому сектору разработки банально нет нормального образования).
Стоит отметить, что в России представители остальных под считают инженеров-проектировщиков вершиной эволюции, считаю что все они поголовно являются архитекторами программного обеспечения (о чем представтели данной породы любят пускать слухи ради собственной выгоды).
В СНГ за время работы на IT-рынке я смогу найти два подвида породы:
- Проектировщик-фанатик, считает себя гением и рок-звездой, рассказывает, что технологий способна решить задачи бизнеса, просто последний пока этого не понимает.
Является самым тяжелым в работе. Имеет ценность только для стартапов, где будет брать на себя часть работы которой мало кто хочет заниматься. Фактически ходячая реклама вашего технологического решения (или антиреклама, если не умерять фанатизм данного субъекта).
Производит сильное впечатление на junior-специалистов и бесит всех, кроме них, т.к. любой разработчик видит, чтоэтот фанатик несёт какую-то дичьсубъект если и разберается, то очень поверхностно в объектной области спора. - Проектировщий-прагматик, много читает и развивается, понимает что такое расширяемость и гибкость разработки. Может применять полученные знания на практике. Чаще всего является самоучкой в странах СНГ, ибо соответствующие курсы читаются в бывшем соцлагере из рук вон плохо.
Правда есть недостаток - гибкая архитектура для него является его самоцелью. Если пустить стремление в нужное русло - будет полезен для проекта. В противном случае будет тратить огромное время для того, чтобы дать те возможности, которые не нужны бизнесу на данный момент.
Внимание! Порода опасна. Очень опасна. Инженер-пректировщик может уйти в сложные и не поддерживаемые решения гораздо легче, чем другие породы!
Причины тут две:
а) ведь он считает, что знает лучше бизнеса как ему нужно, чтобы это работало;
б) сложная и красивая архитектура - цель, которую любой представтель данной породы ставит перед собой каждый проект. И ему мало интересно, что его цели расходятся с вашими.
Инженер-проектировщик должен находится под неусыпным контролем визионера, который будет ставить чётко сформулированные задачи в виде кейсов. Желательно, чтобы кейс бросал технический вызов или помогал подчёркивать красоту ранее принятого решения, тогда эффективность породы становится максимальной.
В остальных случаях появление архитектора любого вида в прайде котов приводит к печальным последствиям.
Рационализатор (стахановец)
Рейнвотер назвал эту породу "Конструктивист", я склонен переименовывать её в рационализатора или стахановца, и вот почему - идеи конструктивизма у нас, СНГ ассоциируются не с искусством или творчеством. Они скорее ближе к оптимизации рабочего процесса, группам рационализаторов и стахановцев из времён СССР.
Отсюда же исходят и отличиая в понимании породы у нас и на Западе.
Любой представитель данной породы получает искреннее удовольствие от самого процесса программирования, стремится к хорошему результату, что является его самой сильной стороной. Именно эта порода считает, что "работа ради работы" - это то, ради чего стоит жить.
Недостатком породы является равнодушие к стратегическому планированию. Полное. По своей природе они тактики, а не стратеги. И получить пользу от них можно тольза за счёт избавления от долгосрочных планов.
Сам по себе рационализатор является слабым теоретиком, код пишет по наитию, не слишком задумываясь над общей логикой. Любимая фраза: "Работает ведь!" И самое страшное - и правда, работает. Причём результат появляется достаточно быстро.
На коротких дистанциях недостатки не слишком вредят, поэтому на небольших отрезках можете положится на стахановца. Всё равно результат будет быстрее, чем вы даже расчитывали.
Но когда проект разрастается (переходит от прототипа к реальному продукту или становится production used прототипом), недостаток внутренней логики обычно начинает сказываться и в ход идёт паттер "Kostyls & Velosipeds", ведь рационализатор нацелен не результат, а не методы его достижения.
Любому представтелю данной породы откровенно наплевать кто и как это будет поддерживать, зато он сдаст "пятилетку за три года".
Чаще всего после того, как другой и любой другой junior-программист (да-да, все они на практике вырастают до upper junior/middle developer'ов, что и является их "потолком") не может понять "узкоспециализированного" решения, долго злится и рассказывает о высоких материях.
Временами рационализатор ссылается на низкий уровень команды, если они не понимают странной логики велосипедов и предлагает наполнить команду senior'ами и уволить всех, кроме него (хотя, чаще всего junior'ы других пород способны на более понятный и качественный код).
Отлично работает в связке с инженером-проектировщиком. Документирует неохотно («все и так понятно»), но при должной настойчивости руководителя – может и сделать документацию (но так, что лучше бы не делал), но перед этим будет долго пытаться "объяснить на словах, ведь и так всё понятно".
Ценность как специалиста крайне низкая. В какой-то момент времени рационализатор приносит больше вреда, чем пользы. Поэтому должен быть убран из команды, как только команда получает знания для поддержки его кода.
Рационализатор/Стахановец на самом деле - это представитель программистов рынка труда СНГ, т.к. computer science в этих странах развита слабо, то большая часть представителей профессии работают интуитивно. Такой подход не всегда оптимален, а принятые решения являются ошибочными. А так как представители данной породы ошибки признавать не умеют, на критику реагируют негативно - работать с ними становится крайней тядело.
Рационализаторы постоянно пытаются "срезать углы" и найти "проблему в команде". Это необходимо помнить и решать вызванные ими конфликты быстро, пока весь прайд не разбежался.
Коты данной породы являются главными поставщиками костылей и велосипедов в проектах, еще раз отметим это. Данный тезис надо запомнить!
За рационализаторами необходимо очень внимательно смотреть, иначе они сделают поддержку кромешным адом (и они сделают, как бы вы за ними не следили)!
Творческая личность
Представтель творческого образа мысли (вероятнее параллельно с разработкой пишет стихи/прозу, рисутет или создаёт музыку), который познал радость написания кода.
Его стихия – поиск неожиданных, изящных решений для реализации задачи.
С логикой и организацией, как правило, проблем не возникает. Основной недостаток – излишняя любовь к искусству и экспериментированию, которая побуждает растягивать простые задачи и срывать сроки.
Имеет некоторое сходство и с инженером-проектировщиком, и с рационализатором, но обычно выделяется ярким индивидуальным стилем программирования, что является и плюсом и минусом одновременно.
Творческие личности способны решить сложную задачу достаточно дёшево, но при этом поддерживать это решение сможет только человек, который смог проникнуться идеей и образом мышления создателя.
Порода имеет среднюю ценность, в России встречается достаточно часто ввиду большого количество разработчиков, которые пришли на рынок с других профессий (я лично знаю переходы из экологии, геологии, литературы, языковедения, изобразительного искусства и даже хареографии!).
Надо помнить, что творческая личность - очень проблемная порода! С одной стороны они могут не типовую задачу решить легко и наиболее эффективным способом. С другой - они делают проблему из рутинной задачи всегда, т.к. использовать одно и то же решение для них скучно и тут два варианта поведения:
- творческая личность будет решать задачу сложно и долго, чтобы "на будущее автоматизировать такие вещи" или вообще попытается уйти на новый стек/язык,
- будет откладывать её до тех пор, пока не останется вообще ничего или вы не начнёте гонять его ссаными тапками.
По личному опыту - их надо привлекать только к по-настоящему уникальному функционалу и сложными задачам, за которые другие не берутся.
Прикладной инженер
Рассматривает разработку ПО как виртуальный аналог сборки «железа», конвейерное производство, со всеми вытекающими последствиями.
Очень любит "прикручивать" одно к другому, собирать разрозненные модули в сложную структуру так, чтобы все работало, находить в построенной системе место для решений от третьих сторон.
Навыки, безусловно, полезные, но есть дать прикладному инженеру увлечься, сложность может превратиться для него в самоцель. Ведь сложно равно интересно для любого представителя данной породы.
Чрезмерное усложнение и недостаточная гибкость решений – два уязвимых места этой породы. В остальном же они являются идеальными рабочими лошадками, которые способны "затащить" продукт любой сложности, сдать вовремя планы или пофиксить сложный баг, который мешал долгое время жить пользователям.
Ценность породы для России - высокая. Ведь они могут реализовать продукт, а не просто пить смузи или распространяться об анафорических лямбдах.
Стоит помнить, что инженер воспринимает всё исходя из того, что любую задачу можно решить за счёт наук. Любая необходимость к творческому подходу ставить его в тупик, а постоянное усложние решения, сводит простую задачу к абсурду и стрельбе из гаубицы по собственным ногам.
Академик
Антипод творческих личностей. Их полная противоположность. Академик рассматривает программирование как точную науку, он старается во всем следовать фундаментальным принципам и избегать «отсебятины».
Очень педантичен, стремится довести код до совершенства и добиться корректной работы в любых условиях, часто в ущерб практическим соображениям.
Как и инженер прикладной инженер, склонен излишне все усложнять (добавляет к сложности инженера ещё и научный подход), поэтому для решения простых или типовых задач попросту непригоден.
Зато когда дело доходит до по-настоящему сложных вещей, требующих скрупулезности и багажа знаний, ему цены нет.
Ценность для России данной породы чрезвычайно высокая. В связке с прикладными инженерами способны собрать что угодно и любой сложности, до кучи автоматизировав львиную долю рутины.
Правда, поддержкой заниматься сможет только команда-разработчик или команда примерно того же уровня академических знаний.
В СНГ порода является очень редкой, поэтому - на самом деле ценный специалист и рок-звезда среди менее образованных собратьев.
Способен решать сложные задачи, пишет сложный код, который может поддерживать только такой же "высоколобый". Но его код не обладает костылями, за счет чего поддержка - реальная задача, которую можно выполнить (в отличии от рационалиста).
Помните, что нужно всегда следить за академиками, чтобы они не превращали любую сложность в исследовательскую экспедицию.
Лихач
Ставит скорость превыше всего, включая и качество кода. Ведь важен каждый байт, каждая миллисекунда процессорного времени!
Пренебрегает мелочами вроде комментирования (это тормозит процесс разработки), корректного оформления (аналогично), следования принятым регламентам (их вообще придумали профаны в стеке!).
На первый взгляд, выдает неплохой, вполне рабочий результат, но глубокое тестирование выявляет массу проблем. Сам никогда не тестирует (либо проверяет очень поверхностно), ведь за 30 минут он успеет решить ещё пару проблем или решить небольшую задачу.
Часто добрасывает "на удачу", чем вызывает массу лучей добра от остальных членов прайда и команды тестирования. С регулярностью идиота ломает рабочий продукт забыв удалить ранее написанный им же костыль или закомментированный код.
Отличительный признак породы - никогда не удаляет код, а комментирует его (а вдруг пригодится!).
Как ни печально, эта порода культивирована самими руководителями: лихачи чаще всего получаются из молодых программистов, которым внушают ложные приоритеты и которые боятся не соответствовать ожиданиям. Их "умение срезать углы" и выпускать плохие продукты ценится руководителями, которым плевать на поддержку продукта или его качество.
Ценность породы крайне низкая. Даже как "исправлятор багов" является почти бесполезным, т.к. на каждую поправленную ошибку будет генерировать кучу других. Отдавать же свою работу не любит, так как считает себя умнее всех остальных из-за того, что закрывает объем работ примерно как пол команды (правда сам же себе и создаёт такую нагрузку). Решает объемы не за счёт качества кода, а лишь за счёт кранча.
Порода, пригодная для создания прототипов или выпаса малыми итерациями. Ни в коем случае не берите их на длительный проект! Создадите проблемы себе и команде!
Лихачи ценны ориентированностью на быстрый результат. И в то же время благодаря им основные поставщики костылей и велосипедов имеют большое плато для масштабных действий, но чаще всего заняты решением проблем, которые создали сами.
Сомнительны в ценности, но временами без них не вытащить проект в сжатые сроки невозможно. Настоятельно рекомендую, после сдачи проекта, над которым работали лихачи - выбросить весь их под и отдать на реализацию другой породе, способной к качественной реализации.
Чародей
В современной терминологии чародея обычно называют рок-звездой (в классификации Рейнвотера - волшебник).
Такой программист берется за сложнейшие задачи и справляется, благодаря тому, что находит революционные пути решения проблем, делает все в срок и качественно.
Даже с сопровождением его кода особых трудностей обычно не возникает. В общем, все вроде бы замечательно, но техническому лидеру нужно держать ухо востро в двух отношениях.
Во-первых, нельзя допускать излишней зависимости от чародея – вся команда, включая руководителя, рискует превратиться в подтанцовку для одного сотрудника. Если вы допустили такое развитие событий, то можно попытаться обыграть чародея на его поле (чаще всего они очень самолюбивы). Выдайте ему сложную задачу, решение которой уже знаете, а потом направляйте в ходе реализации. Таким образом вы получите уважение от сотрудника породы чародея. Другой вариант заручиться поддержкой представителя данного вида - показать ему перспективы в области управления (в котором он сейчас не силён) и стать его ментором.
Помните, чародеи никогда не приручаются позицией силы.
Чем больше вы будете применять усилий на противодействие им - тем большее встретите сопротивление. А в условиях того, что подобный экземпляр был ведущим разработчиком (иначе проблема бы не встала), то он способен обеспечить вам реальную головную боль на долгое время. Причём запомните, любой руководитель уровня выше вину за все проблемы, созданные волшебником сложит на вас - ведь это вы дали одному сотруднику такую власть над собой и будет абсолютно прав.
Хотите, чтобы ваша команда была укомплектована рок-звездой? Тогда думайте сразу, как будете бороться с ней.
Во-вторых, нужно быть готовым к тому, что в один прекрасный день чародей вас все-таки разочарует – стабильно творить чудеса не может никто. К такой возможности нужно относиться спокойно и иметь запасной план.
Так как чародеи очень самолюбивы, то используйте его неспособность решить задачу в свою пользу. Не ругайте его, не унижайте. Попробуйте найти причину, почему задача не была решена и помогите ему решить её. Постарайтесь сделать так, чтобы чародей делал это в команде с другими разработчиками - так вы привьёте ему понимание важности "командной игры".
Ценность данной породы чрезвычайно высокая. Один такой разработчик способен в одиночку реализовать сложнейший проект. Но помните, без должного ухода представитель этой породы будет делать то, что хочет он, а не то, что ждёте от него вы. Правда задачи при этом чаще всего всё равно будут сделано вовремя и в срок.
Такого разработчика хочет получить любой team lead или руководитель разработки, но на рынке труда России я таких не встречал за более, чем 10 лет своей практики.
Можете не согласиться со мной, но я считаю, что разработчики данной породы в РФ не просто внесены в красную книгу, а являются вымирающим видом. Ведь это спецы, которые обладают реальными знаниями и способны реализовать что угодно, без преувеличения. Поэтому они либо очень быстро переходят в управленцы, либо это обман и перед вами обычный подражатель (именно под эту породы все косят на собеседовании).
Помните - основной признак породы состоит в том, что разработчик понимает не только как технически реализовать что-то, но и прекрасно ориентируется в целях и задачах бизнеса, который поставил эту задачу.
Чародей думает бизнесово, он не является чистым технарём. Именно поэтому он столь эффективен.
Минималист
Пишет на удивление функциональный код очень скромных объемов. Однострочники на perl, которые дают функциональность ОС, пристрастие к функциональному программированию и любовь к "птичьему языку" - это всё про представителя данной породы.
Когда смотришь в код минималиста - всё стройно выглядит, четко выстроено и недвусмысленно сообщает о своем назначении.
Но стоит помнить, что эта порода очень капризна в выборе задач и проектов. Минималист будет больше других бороться за право устанавливать область приложения своих способностей, ведь он прекрасно осознаёт их цену.
Слабое место любого минималиста - это сопровождение. Он изо всех сил сопротивляется необходимости вносить правки в свой код (не говоря уж о чужом). Ему просто неинтересно возиться с частностями, когда основное уже сделано.
В России данный вид занесён в красную книгу, так как большая часть специалистов банально не знают на должном уровне инструменты с которыми сами же и работают.
Для нашей страны, как вы уже поняли, одна из редчайших пород котов.
Особенно сложно найти минималистов среди web-программистов в России, где функциональное программирование мало прижилось, а балом правят инструменты для дешёвой разработки (Python, Golang, PHP). Именно их распространение в пост-советском пространстве (а началось всё с Delphi-программистов) и привело к почти полному вымиранию вида.
Если вам посчастливилось найти такого специалиста - надо брать, сразу, не задумывась. Лучше даже двоих, чтобы можно было спокойно отпускать такого человека в отпуск. Частные же случаи просто отдавайте на откуп представителям других пород.
Продолжение следует
В этой статье мы рассмотрели часть пород котов из экосистемы ИТ-специалистов. В будущих частях мы продолжим это неблагодарное дело, а так же рассмотрим методы воспитания и способы обеспечить хороший уход прайду.
Всем доброго времени суток!