Книга Как хорошему разработчику не стать плохим менеджером - Константин Борисов
Шрифт:
Интервал:
Закладка:
Когда менеджер и тимлид обсуждали очередной релиз и ожидаемые сроки, тимлид не выдержал и сказал: “Мы не сделаем этот релиз в срок этой командой. Каждый из них работает в два раза медленнее, чем это следовало бы. Даже хорошие junior-ы сразу после университета были бы лучше, чем это сборище лентяев!”
Менеджер задумался на секунду и сказал: “Так давай уволим их всех и наберём новых! Согласен?” И тут задумался тимлид. Он и правда считал, что команду надо разогнать. Но ему было жалко увольнять всех этих людей. Одно дело просто абстрактно их ругать, другое дело принимать решение о судьбе конкретных разработчиков, с которыми работал бок о бок. Пусть и плохих разработчиков, но всё же.
В результате тяжёлых размышлений тимлид так и не смог решиться уволить всю команду, которая ему так не нравилась. Релиз команда завалила.
Анализ
Мысли тимлида понятны. Но давайте посмотрим, о чём думал менеджер в то же время. Его мысли были примерно следующими: “Отлично. Тимлид предлагает сменить всю команду. Это логично, так как с этими разработчиками у нас были проблемы уже давно. Всех уволить я могу, но как набрать новую команду, не ставя под удар текущие задачи? Мне нужна помощь тимлида, поэтому хорошо, что именно он поднял этот вопрос. Надеюсь, тимлид скажет, кого надо заменить в первую очередь, и скажет конкретные сроки, в которые нам нужно уложиться с набором людей. Потом мы вместе спланируем найм и обучение людей и создадим новую команду”.
А после того, как тимлид не решился вернуться к этому разговору, менеджер подумал примерно так: “Значит, тимлид не хотел ничего менять, а просто ныл на свою жизнь. Это неразумная позиция. Зачем ругать свою команду и ничего не пытаться изменить? В любом случае, без помощи тимлида я не смогу обновить команду. Да ещё и лида, похоже, менять надо, так как с этим парнем изменений не добиться. И надо заранее предупредить топ менеджмент, что этот релиз мы, скорее всего, завалим”.
Этот кейс встречается в жизни довольно часто, и в нём несколько интересных моментов. Во-первых, тимлид, когда жаловался на свою команду, почему-то не считал, что это может привести к проблемам для них. А потом внезапно оказалось, что разработчиков лиду жаль. Не стоит настолько недооценивать свои слова. Даже если рядовой член команды жалуется на другого члена команды, то он должен подозревать, что к его словам могут прислушаться. У тимлида вес слов высокий. Если он кого-то ругает, то не медаль же этому другому выдавать.
Во-вторых, увольнение – это всё-таки обязанность менеджера. Даже если менеджер спрашивает совета у тимлида, это не значит, что он перекладывает ответственность на него. Как, например, если разработчик предложит менеджеру написать больше юнит-тестов, то это совсем не значит, что юнит-тесты будет писать менеджер. Даже если он согласится, что идея хорошая. В деле увольнений решения принимает менеджер, тимлид советует. Так что тимлид взял на себя слишком много.
В-третьих, за нерешительность тимлида заплатила компания, так как релиз команда таки завалила. Эта цена дорогая и она уплачена из чужого кармана только для того, чтобы тимлид мог считать себя “добреньким”. Уклонение от какого-то решения – это тоже решение, которое имеет свои последствия.
Есть разработчики, которые категорически не хотят брать на себя ответственность за других. Они занимаются только техническими задачами и специально избегают ключевых позиций. Потому что серьёзные технические решения тоже оказывают серьёзное влияние на всю команду. Но если уж человек согласился быть тимлидом, то ему нужно брать ответственность за свои слова, свои действия и своё бездействие.
Контроль выполнения проекта – это прямая обязанность менеджера. Команда может ему помогать, но основной контроль лежит на его плечах. Разработчики не делают эту работу и часто даже не видят, как это делают их менеджеры, поэтому возникает очень много проблем, когда разработчики становятся менеджерами.
Умение работать с разрастанием объёмов работ (scope creeping) является вторым важнейшим навыком (после работы с рисками), необходимым для менеджера проектов. Большинство срывов сроков и выходов за бюджет связано именно с проблемой роста объёма работ, который прошёл незамеченным.
Особенно эта проблема важна для Fixed Price проектов, когда бюджет жёстко определён заранее и любой выход за этот бюджет идёт за счёт исполнителя. Компании не могут работать с Fixed Price проектами, потому что не умеют работать со scope creeping.
Но как же так?! Ведь каждому менеджеру много раз говорили, что нужно следить за скоупом проекта! Да, это так. И менеджеры очень чётко отслеживают, когда заказчик приносит новые требования. Если заказчик пишет письмо с просьбой добавить новый функционал (экран, сервис), то менеджер это заметит и отработает правильно (оценит, сообщит об изменении бюджета и т.д.). Но чаще дополнительные требования приходят не настолько явно.
Рассмотрим ситуацию. Заказчик ещё до старта проекта указывал, что ему нужен некий отчёт. Ещё до появления хоть сколь-нибудь детальных требований этот отчёт оценили и включили в бюджет. Потом заказчик предоставил требования. Требования не расходились с изначальными предположениями, отчёт реализовали в соответствии с ними.
Но выяснилось, что реализованный отчёт работает очень долго на тех объёмах данных, что есть у заказчика. Пользователю приходится ждать более часа. Даже когда нет специальных требований к производительности, то такие ситуации считаются багами. Разработчики проверили код, сделали оптимизацию, но отчёт всё равно выполняется больше получаса, и непонятно, что с этим делать.
Заказчик идёт навстречу команде и упрощает требования. Теперь не нужно выводить отчёт на экран, а можно просто обработать данные в фоне и выслать пользователю готовый отчёт в формате PDF. Да, отчёт будет выполняться по-прежнему долго, но приложение не будет выглядеть “зависшим” и им можно объяснить, что происходит. Генерация PDF уже реализована, добавить рассылку по почте можно быстро. Команда быстренько допиливает систему, баг закрыт, все счастливы. Ведь так?
Нет, совсем не так. Мы получили дополнительные требования и реализовали их. Объём работ вырос, бюджет не вырос. Мы проморгали scope creeping. И самое плохое тут, что заказчик не осознаёт, что добавились требования. Ведь он же наоборот, упростил задачу для команды. Как могла его помощь увеличить объём работ?
Ключевое здесь не то, что scope добавился, а то, когда он добавился. Многие, не задумываясь, скажут, что объём добавился, когда заказчик явно предложил заменить отчёт на рассылку PDF. Это не так. Заказчик в тот момент уменьшил объём работ, предложив упрощённое решение. А добавился scope тогда, когда команда начала работу над багом по производительности.