Моя предыдущая статья вызвала довольно бурное обсуждение на тему, кто такой тимлид и чем он занимается, поэтому в этой статье я хотел рассказать о том, чем занимаюсь я.
Вообще задачи тимлида могут сильно отличаться в разных компаниях. В моем опыте обычно было так: чем меньше в команде представлено ролей, тем больше задач будет у тимлида. Я как-то работал с тимлидом, которому приходилось даже тестировать, потому что в команде не было тестировщика.
Я составил список своих задач и разбил их на категории. Кстати говоря, добрую половину этих задач я повесил на себя сам.
У меня получилось четыре категории:
Команда
Планирование
Продукт
Разработка
Сначала я начал описывать свои задачи очень подробно, с историями из своего опыта и т.д., но статья стала получаться просто огромной, поэтому я ограничился списком задач и небольшими комментариями. Возможно, наиболее интересные задачи я опишу в отдельных статьях.
1. Команда
В этой категории такие задачи:
Отладка процесса работы над задачами.
Отладка процесса проведения код-ревью.
Проведение командных встреч.
Проведение встреч один на один.
Оценка и присвоение грейда разработчикам. Составление плана развития. Премирование на основе достижений поставленных целей.
Составление психологического профиля разработчиков.
Просмотр резюме и отбор кандидатов на собеседование.
Проведение собеседований.
Менторство.
1.1 Отладка процесса работы над задачами
Вот пример вопросов, которые мне приходилось решать, чтобы получить адекватный и детерминированный рабочий процесс по задачам:
Какие типы задач есть в бэклоге, какой воркфлоу у этих задач?
Как, когда и какие задачи поступают в разработку?
Что делать, когда на регрессе начинают сыпаться баги и доработки?
Что делать с незапланированными задачами?
Безусловно я, как тимлид, не могу настроить весь флоу задачи, потому что разработка - это лишь часть этого флоу, но наладить процесс внутри команды в моих силах. Отлаженный процесс позволяет мне заниматься, в основном, планированием, и практически не заниматься микроменеджментом.
1.2 Отладка процесса проведения код-ревью
Здесь я говорю именно про процесс код-ревью, само мое участие в код-ревью относится к другой категории.
Примеры вопросов:
Как и кому поступают задачи на ревью?
Что нужно для прохождения код-ревью?
Как проходит код-ревью?
Код-ревью - это процесс взаимодействия внутри команды, который оказывает большое влияние на взаимоотношения разработчиков, поэтому к нему нужно относиться серьезно. В одной моей команде ревью кода зачастую проходило очень эмоционально, разработчики спорили, что называется, о вкусах, и отношения в команде развивались по деструктивному пути. Эту проблему практически полностью удалось решить построением процесса.
1.3 Проведение командных встреч
Сюда относятся дейли, ретро, разборы багов и т.д. У меня есть своя командная встреча, что-то вроде митапа (я ее называю “сэшн”, от англ. session), куда каждый разработчик может принести свой список технических вопросов и проблем, чтобы обсудить всей командой и попробовать найти решение. Сэшн - это не ретро. На ретро мы обсуждаем процессы, а здесь - актуальные технические вопросы по проекту. В проведении командных встреч кроется огромный пласт работы для тимлида, потому что нужно не просто проводить встречи ради встреч, а работать с полученной информацией на этих встречах, чтобы решать поднятые проблемы и развиваться.
1.4 Проведение встреч один на один
Я считаю, что практика личных встреч с разработчиком просто необходима. Такие встречи помогают мне держать руку на пульсе и оперативно реагировать на сигналы, которые поступают от команды.
Личные встречи - это отличное место для:
Обсуждений самых разных проблем, которые беспокоят разработчика. В личной беседе разработчик может рассказать очень многое. Самое главное, не забивать на проблемы разработчика, а пытаться их решать или менять точку зрения на проблему.
Предоставления обратной связи и обсуждения косяков разработчика. Хвалить подчиненных нужно в присутствии коллег, а критиковать только лично.
Обсуждения финансовых и карьерных вопросов.
Увольнение сотрудника может принести большие финансовые потери компании. Безусловно, люди уходят, но хорошо, когда это происходит, скажем так, по естественным причинам, а не по причине накопившихся проблем и недовольства. Личные встречи очень сильно помогают мне мониторить команду. Я их провожу с периодичностью раз в две недели.
1.5 Оценка и присвоение грейда разработчикам. Составление плана развития. Премирование на основе достижений поставленных целей.
Вообще, мне не очень нравится этот пункт, и он входит в круг моих обязанностей, только если этого требует руководство. Сейчас мне приходится составлять KPI для разработчиков, прости Господи, и я пытаюсь адекватно применять этот инструмент к разработчикам. Мне довелось поработать с китайскими коллегами, у которых в качестве показателей эффективности были вещи типа количества написанных строк кода за день. В результате задачи, которые можно было сделать за 10 строк, они делали за 100. Безумие, в общем. Я составляю список KPI и обязательно согласую его с разработчиками. Часть показателей согласуются с планом развития разработчика, а часть - это своего рода вызовы, которые принимает разработчик. В принципе, реальная польза от этого есть. Например, мы смогли повысить ответственность разработчиков за свою работу. Если раньше разработчик мог забить, мол, QA проверят, а я поправлю, что влекло за собой несколько итераций тестирования и потерю времени, то теперь фича может пройти тестирование с первого раза.
Что здесь требовалось от меня:
Составить шкалу грейдов (джун/мидл/сеньор/лид/принципл). Эта шкала требуется и для роста нынешних разработчиков, и для найма новых.
Формировать планы развития разработчиков. Это нужно делать индивидуально с каждым разработчиком. Уже на основе этого плана ставить ежемесячные цели.
Отслеживать прогресс, давать фидбек. Я это делаю в конфлюенс. Обычно на каждый целевой показатель влияет выполненная задача и написанный код, поэтому я указываю ссылки на соответствующие задачи в трекере и MR в репо и оставляю свои комментарии.
1.6 Составление психологического профиля разработчика
К этому я пришел недавно и тут пока мало, чем смогу поделиться. Суть в том, что через наблюдение за своими разработчиками можно увидеть их сильные и слабые стороны и использовать их для максимально эффективного решения поставленных задач. Например, у меня есть в команде архитектор, который может создавать крутые архитектуры, api и т.д., но которому тяжело мириться с легаси и посредственностью, и, будь его воля, он вместо бизнес фичей занимался бы рефакторингом. Есть разработчик, который может быстро крупными мазками сделать большую фичу, в которой будет некритичная масса мелких багов. Есть разработчик-перфекционист, который делает долго, но очень качественно. Понимая, кто работает с тобой в команде, можно распределять задачи таким образом, чтобы получать лучший результат по соотношению цена/качество.
1.7 Просмотр резюме и отбор кандидатов на собеседование
Здесь мне нужно хорошо изучить резюме, чтобы составить мнение о кандидате, посмотреть код, если кандидат приложил ссылки на свои публичные репозитории, иногда приходится звонить кандидатам на 15 мин. и предварительно общаться.
1.8 Проведение собеседований
Основные задачи здесь:
Составление списка вопросов и задач для собеседования. Причем вопросов и задач много, и они разного формата, что позволяет проводить собеседование также в разном формате.
Определение, как будет производиться маппинг результатов прохождения собеседования в решение о выставлении оффера на определенный грейд. Я составлял специальную табличку, куда я заносил баллы кандидата, которые пересчитывались в грейд по специальным формулам.
Я провел довольно много собеседований, и меня собеседовали немало. И мне не нравится, когда у собеседования нет четкой структуры, когда интервьюер смотрит на тебя и думает: “Чтобы такое у тебя спросить?..”. Поэтому я разработал для себя некую систему для проведения собеседований.
1.9 Менторство
Я бы разделил менторство на две категории: индивидуальное и командное. Обычно я сам выступаю ментором для новых сотрудников. Командное менторство не всегда нужно, необходимость в нем зависит от навыков и опыта команды. Главный инструмент здесь - это командное код-ревью. В течение 1-2 недель собираются ошибки, которые встречаются по ходу ревью, эти ошибки обезличиваются, а потом разбираются вместе с командой. Самое главное здесь - это обезличивание ошибок, чтобы никто не знал, чьи это ошибки, потому что в противном случае это будет не командный разбор, а бичевание провинившегося.
2. Планирование
В этой категории такие задачи:
Согласование состава задач, которые будут взяты в разработку в ближайшее время.
Составление плана технического развития продукта.
Отладка и ведение процесса оценки и декомпозиции задач.
Планирование спринта, распределение задач и синхронизация с другими командами по текущим задачам.
Внесение изменений в уже начавшийся спринт (появление более срочных и важных задач, возникновение блокеров разработки).
Участие в обсуждениях будущих фичей.
2.1 Согласование состава задач, которые будут взяты в разработку в ближайшее время
Все начинается со встречи, на которой бизнес рассказывает техническим руководителям, какой функционал (на следующие 2-3 релиза) требуется реализовать и к какому сроку. Обычно таких встреч с бизнесом по каждой задаче бывает несколько. В итоге я или соглашаюсь с предложенным бизнесом планом, или предлагаю свое видение ситуации. В результате утверждается план, по которому команда будет работать.
2.2 Составление плана технического развития продукта
Здесь я составляю список крупных задач (эпики), которые целиком технические. Но иногда в этом плане появляются такие задачи, которые, на самом деле, должны больше волновать бизнес, но не волнуют. Составить такой план - это довольно трудоемкая работа. Для этого мне приходится в процессе работы собирать разного рода информацию, на основе которой и составляется этот план. О какой информации идет речь: проблемы проекта, о которых говорят разработчики на нашем сэшене, но которые оперативно решить нельзя, результаты анализа багов, которые появляются в результате разработки, отзывы пользователей, которые собирают лайки в сторе, но игнорируются бизнесом.
А потом еще этот план нужно согласовать и распланировать, чтобы вместе с бизнес-фичами выполнялись еще и технические задачи.
2.3 Отладка и ведение процесса оценки и декомпозиции
Здесь я пробовал разные подходы и комбинации. Процесс оценки задачи на разработку очень сильно зависит от команды. Где-то мне приходилось оценивать самостоятельно, а где-то я это полностью делегировал на разработчиков. Еще я пробовал разные подходы к оценке: коллективные, индивидуальные, оценки в часах, стори поинты и т.д.
2.4 Планирование спринта, распределение задач и синхронизация с другими командами по текущим задачам
Я планирую спринты для своей команды. Здесь нужно учитывать текущую загруженность команды, приоритеты, порядок работы над задачами из нового спринта, а также пул задач, которые нужно будет взять в следующем спринте. И здесь как раз очень важно синхронизироваться с другими командами, чтобы понимать, когда они будут готовы отдать свою часть работы и т.д. Часто бывает необходимость выпустить довольно большой список фичей к определенной дате. Например, выпустить десять фичей через 3 месяца. Ресурсов обычно не хватает, поэтому приходится тесно работать с другими командами и разрабатывать фичи “по кусочкам”, собирая пазл к нужной дате.
2.5 Внесение изменений в уже начавшийся спринт (появление более срочных и важных задач, возникновение блокеров разработки)
Зачастую срочные задачи приходят с непонятным описанием, в срочности которых я сильно сомневаюсь. И перед тем как перепланировать спринт, я выясняю все нюансы и убеждаюсь в том, что задача действительно срочная, и ее нужно брать с первым приоритетом. Только потом я вношу изменения в спринт и передаю в разработку.
2.6 Участие в обсуждениях будущих фичей
Я регулярно принимаю участие в так называемых грумингах. Основная цель моего участия - это сформировать понимание о фиче, которую хочет бизнес, и объеме работ реализации, а также выступать техническим экспертом, чтобы на начальном этапе увидеть возможные ограничения в реализации. Таких обсуждений довольно много, поэтому я не приглашаю на них разработчиков, за исключением редких случаев, когда нужна их экспертиза.
3. Продукт
Здесь такие задачи:
Мониторинг “здоровья” продукта.
Разработка своих технических метрик и контроль работы внутренних систем на их основе.
Участие в устранении аварий
3.1 Мониторинг “здоровья” продукта
Я составляю свои дашборды, где собирается необходимая мне статистика возникновения крэшей, ошибок и других аномалий в продукте. Также я создаю специальные триггеры, которые оповещают меня, если поведение продукта начинает отличаться от нормального.
3.2 Разработка своих технических метрик
Продуктовые метрики для анализа поведения и предпочтений пользователя составляет бизнес, а чтобы отслеживать и анализировать поведение внутренних систем в продакшене, мне приходится самостоятельно составлять свои технические события, на основе которых я разрабатываю нужные мне метрики. Это очень помогает отлаживать продукт, принимать некоторые технические решения, а также выявлять аномалии в поведении системы, но не приводящие к ошибкам.
3.3 Участие в устранении аварий
Иногда случаются масштабные отказы некоторых систем. Т.к. я тимлид фронта, то на мою долю редко выпадают аварийные ситуации по вине моей платформы, но все же меня иногда просят помочь с отладкой аварий на бэке. Кстати, многие технические метрики я добавил как раз после таких аварий.
4. Разработка
Здесь у меня такие задачи:
Ведение технического бэклога.
Принятие технических решений.
Ведение репозитория кодовой базы проекта.
Согласование технических требований к разрабатываемым фичам.
Написание кода.
Участие в код-ревью.
Написание технических гайдов.
4.1 Ведение технического бэклога
У меня есть свой бэклог, который состоит из задач двух типов: технический долг и техническое развитие. Я держу этот бэклог приоритезированным и актуальным.
4.2 Принятие технических решений
Я принимаю технические решения и несу за них ответственность. Далеко не все предложения исходят от меня. Многие классные идеи приходят от самих разработчиков, и я это поощряю, но последнее слово остается за мной, потому что, повторюсь, я несу ответственность.
4.3 Ведение репозитория кодовой базы проекта
Я поддерживаю репозиторий проекта в консистентном состоянии (дев, релизы, мастер, теги и т.д.). Здесь мне иногда приходится отлаживать процесс работы команды с репозиторием.
4.4 Согласование технических требований к разрабатываемым фичам
Все фичи перед тем, как пойти в разработку, проходят мое согласование. Для этого мне приходится погружаться в технические требования. Нередко бывает так, что я прошу внести изменения в требования. Согласование может быть довольно длительным процессом.
4.5 Написание кода
В своей предыдущей статье я писал, что не беру на себя задачи, у которых есть жесткий дедлайн. На работе я пишу мало кода, но много читаю. В основном, я разрабатываю core функционал, от которого ничего не зависит и который можно ввести в эксплуатацию в любое время. Также я могу помогать с исправлением багов. А еще я иногда разрабатываю какие-то вспомогательные вещи, например, сейчас я разрабатываю плагин для IDE. У меня есть свои пэт проекты, которые удовлетворяют мою потребность в кодировании и помогают не отставать от технологий.
4.6 Участие в код-ревью
Я уделяю довольно много времени код-ревью. На ревью я делаю акцент на архитектуру решения, соблюдение некоторых общепринятых принципов и практик, и, самое главное, на читабельность и сопровождаемость написанного кода.
4.7 Написание технических гайдов
Пишу сам или вместе с разработчиками технические гайды по проекту. Например: архитектура проекта, описание компонентов и их взаимосвязи, шаблоны для разработки новых фичей, описание используемых на проекте практик, описание процессов работы с гитом, описание процесса код-ревью и т.д.
На этом, думаю, что все. Пишите в комментариях, какие задачи есть у вас, будет интересно почитать и найти что-то новое для себя. Спасибо.
@ar2code - мой телеграмм канал, где я выкладываю свои материалы, опубликованные на разных площадках.
Комментарии (12)
ermadmi78
28.05.2023 07:07+1ИМХО - роль тимлида часто путают с ролью менеджера проекта.
sci_nov
28.05.2023 07:07а последний ниже тимлида?
ermadmi78
28.05.2023 07:07+3Ох, это очень коварный вопрос. И, вопрос провокационный! Я, пожалуй, на него отвечу. Но, боюсь, большинству читателей мой ответ сильно не понравится. Поэтому сразу оговорюсь - всё нижеизложенное является моим личным мнением и на истину в последней инстанции я не претендую. Просьба к@кашками сильно не кидаться :)
Для начала, давайте разберемся, кто за что отвечает.
В моём понимании ПМ отвечает за коммуникационный и организационный успех проекта. В первую очередь ПМ должен наладить эффективную коммуникацию с бизнесом, добиться (с помощью аналитика) корректной формализации поставленной задачи и договориться с бизнесом о прозрачных критериях оценки предстоящей работы. Во вторую очередь менеджер должен запустить процесс разработки, делегировав полномочия соответствующим техническим специалистам. В третью, производить контроль процесса разработки в соответствии с критериями из первого пункта. В четвертых, наладить обратную связь с бизнесом, чтобы своевременно корректировать цели проекта и критерии успеха.
Тимлид, в моем понимании, это как раз тот самый технический специалист, которому ПМ делегировал полномочия по принятию технических решений. Задача тимлида - обеспечить технический успех проекта. Чем должен обладать тимлид, чтобы добиться технического успеха? В первую очередь соответствующими техническим компетенциями. Нужны как знания так и опыт разработки, чтобы принимать взвешенные технические решения. С одной стороны заложить достаточную гибкость и устойчивость в фундамент проекта, с другой не скатиться в оверинженеринг. С одной стороны держать руку на пульсе индустрии разработки, чтобы подобрать актуальный и надежный технический стек, с другой, не поддаваться хайпу, и не тащить в проект все новомодные фреймворки и технологии. Тут нужны глубокие технические знания и психологическая зрелость, чтобы балансировать на лезвии ножа. С одной стороны у тебя унылое легаси а с другой ад из фреймворков. А посередине - остриё ножа, которое в кровь режет ступни тимлида.
Во вторую очередь, нужно четко понимать, что тимлид в одиночку физически не может решить все задачи, которые перед ним ставит бизнес. Поэтому тимлид должен сформировать команду инженеров единомышленников для решения поставленной задачи. Тут нужны развитые лидерские качества, чтобы завоевать симпатии и уважение инженеров, с которыми ему предстоит добиться успеха. (Поэтому ИМХО - тимлмид, который не кодит - это не тимлид. Во первых он не приобретает новые технические навыки и опыт, во вторых быстро теряет технологический контекст проекта. Ну и в третьих, сложно завоевать симпатии и уважение инженеров, если ты отсиживаешься в теплом блиндаже, пока они барахтаются в окопах).Поэтому ответ на ваш вопрос такой - в некотором идеальном сферическом проекте некоторый идеальный сферический ПМ должен стоять НАД некоторым идеальным сферическим тимлидом.
Но, жизнь штука сложная, и ничего идеального и абсолютно сферического в ней не бывает. Что может пойти не так?
Ну, во первых, хороший менеджер в наших широтах это редкий зверь, достойный занесения в красную книгу. Среднестатистический российский менеджер не умеет делегировать и коммуницировать. Он умеет только командовать. Главная задача, в его понимании, быть тут самым главным начальником. А решения (опять таки в его понимании) может принимать ТОЛЬКО начальник а не всякая инженерная шушера. Поэтому он, вместо делегирования полномочий принятия решений техническому специалисту, лезет во все решения сам, даже когда ничего в технической части не понимает. На всякие писульки от аналитика он тоже не особо обращает внимания, ведь это он тут начальник, и нечего тут всяким там непонятным аналитикам ему что то указывать. Коммуникационные цепочки он тоже не желает выстраивать, потому что это отнимает слишком много времени и сил, которые ему требуются на принятие вообще всех решений на проекте. Поэтому коммуникационные вопросы он старательно перекладывает на плечи инженера - чтобы не возиться со всякой мелочевкой вместо принятия важных решений. Вследствие такой политики разработка неизбежно начинает хромать. Решение у этой проблемы может быть только одно - найти и выпороть виноватых! Как следствие - токсичная атмосфера в команде, нежелание людей брать на себя ответственность и деградация командной работы - каждый сам за себя!
Во вторых хорошие тимлиды в наше время тоже начали вымирать. В индустрию хлынули толпы вайтишников за баблом. Копаться во всей этой технической баламути им не очень хочется, да и как то там все непонятно. Поэтому лучше стать начальником, чтобы командовать. А как им стать? В ПМ'ы сходу пролезть сложно, так как они сами те еще начальники. Поэтому самый простой путь - растолкать локтями этих ботанов-инженером и стать типа тимлидом. Чтобы не копаться во всей этой технической хрени, а просто проводить дейлики и двигать задачки в борде. Огребать от ПМ'а такому лиду тоже не очень хочется, поэтому в случае любых проблем он быстро находит рядового виноватого, чтобы ПМ его выпорол.
Ну а бизнесу что остается? Только смотреть на всю эту вакханалию круглыми глазами и тушить пожар баблом. В результате проекты кое как вызревают, но в них приходится вливать неадекватно много времени и денег, получая на выходе весьма сомнительное качество.
Поэтому в суровой реальности лучше поставить ПМ'а и тимлида на одном уровне. Если это хороший ПМ и хороший тимлид - то они быстро сами между собой договорятся о зонах ответственности, и запустят разработку. Если у вас хороший ПМ и хреновые тимлид, то хороший ПМ, за счет развитых софт скиллов, быстро найдет хорошего инженера в команде, и сделает из него "теневого" лида, и потихоньку выжмет официального тимлида на какую нибудь левую менеджерскую должность. Если у вас хреновый ПМ и хороший тимлид, то хороший тимлид сумеет изолировать ПМ'а от процесса разработки, взяв, по сути, обязанности ПМ'а на себя. Ну а если у вас одновременно хреновый ПМ и хреновый тимлид - то наверное стоит задуматься, что вы делаете не так :)
sci_nov
28.05.2023 07:07Спасибо за подробный ответ. Тогда тимлид = техлид. А, вообще, я сторонник советного управления, когда нет лидера, точнее их, например, 4 - север, юг, запад, восток :)
iggr63
28.05.2023 07:07Хорошая статья. Довольно детально прописано чем тамлид занимается, или должен заниматься. Немного перебарщиваете с принятием решений, но в пределах нормы. Да как ниже отмечено тимлид действительно близок к техлиду иначе лидерство не захватить. Однако как раз из-за отмеченных выше персональных особенностей техлид, или технический директор, не обязательно самый продвинутый по теме, но зато имеет доминантную составляющую в характере. Да, для дилетанской, то-есть основанной на собственном опыте, оценки персональных характеристик можно использовать популярную модель DISC.
bopAvooba
28.05.2023 07:07Спасибо за интересную статью!
Вроде бы большая часть упомянутых вещей на поверхности, однако, (во всяком случае у меня, начинающего в этом качетсве сотрудника) формируется стойкое ощущение, что если не читать вот такие материалы, то ясность и понимание приходит только с годами и только через боль.
alinkagalichina
Я только начинаю свой путь в качестве тимлида (который по факту ещё и техлид) , было очень полезно почитать про ваш опыт. Спасибо.
Интересна статистика, сколько в среднем вы тратите в неделю на каждый из 4х пунктов и считаете ли вы такое распределение оптимальным.
ar2code Автор
Я время делю на внутренние дела (командные) и внешние (общение с бизнесом и т.д.), а оба типа этих дел есть в каждом пункте, поэтому сложно сказать, сколько времени уделяется на каждый пункт. По календарю у меня получается такая схема: 16 часов на команду и 24 часа в неделю на "внешние" вопросы (согласования с бизнесом и т.д.). Но не всегда все 24 часа в неделю заняты внешним общением, тогда я просто беру и делаю внутренние задачи. Я бы не советовал выделять конкретное время под каждый пункт, по крайней мере, у меня это не работает. Просто выделяйте слоты, и, когда есть свободное время, выполняйте накопившиеся дела.