Как вести себя с трудным застройщиком

Я хотел бы попросить у вас совета по моей проблеме с одним членом команды в agile-команде.

Задний план

Я скрам-мастер и руководитель группы проекта для одного из клиентов моей компании (крупной корпорации). Моя команда состоит из разработчиков из компании, в которой я работаю, и разработчиков клиента.

Проблема

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

Он имеет опыт работы с другим стеком технологий (.NET, тогда как мы используем Java с достаточно современными фреймворками в проекте) и каждый раз пытается изобретать велосипед. Любая попытка показать ему, как что-то нужно сделать более простым способом, заканчивается долгим эмоциональным обсуждением (он ведет себя так, как будто на него напали).

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

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

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

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

Не могли бы вы посоветовать, как бы вы поступили в такой ситуации?

(Я знаю, что всегда могу бросить свою работу, но это было бы бегством от проблемы :))

Ответы (7)

Управляйте им, скорее раньше, чем позже. Краткосрочная боль от его потери заставит остальную часть команды узнать то, что знал незаменимый человек, и вдохновит меньше незаменимых людей в будущем. См. https://blogs.msdn.microsoft.com/eric_brechner/2018/02/01/good-engineers/

Минусы без комментариев. Красивый.
Я не минусовал, но если бы мне пришлось догадываться, может быть, потому, что «управлять им» может быть сложно / невозможно, поскольку он не сотрудник компании ОП. Как сказал Дэвид: «Вы не вытащите его из песочницы, поэтому вам нужно придумать, как с ним играть».
Это возможное объяснение, но я бы хотел, чтобы ТАК все равно требовалось объяснение. Я пропустил часть о том, что проблема в том, что я работаю с клиентом. Если только он не является спонсором контракта, я бы изменил свое предложение связаться с лицом, финансирующим контракт. Может случиться так, что Ворчун переживет контракт и навсегда застрянет в коде, и это то, что делает Ворчуна сварливым. Такова жизнь контрактного разработчика программного обеспечения. Вы и советуете, и предлагаете, но не подвергаете опасности расчет по чеку, чтобы вы могли делать арендную плату.
Спасибо за комментарий! Я думал о том, чтобы «убрать разработчика», но боюсь, что руководство заказчика может посмотреть на эту ситуацию по-другому — например, «этот парень работает на меня несколько лет, а сейчас какой-то подрядчик присоединился к команде и говорит, что мой разработчик недееспособный». Проблема еще и в том, что руководство заказчика не может судить о технических решениях, так как не обладает необходимыми знаниями. Поэтому я боюсь, что лучший (и более сложный) вариант - попытаться работать с этим человеком и ограничить ущерб для проекта.
Это правильный ответ. Все должны полностью отказаться от того, что компания должна приносить результаты, а если кто-то в команде их не дает, он должен столкнуться с реальностью. И если он не хочет учиться легким путем, трудный путь — единственный путь.

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

Обзоры кода

он провел рефакторинг какой-то части приложения, не посоветовавшись с командой

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

Обсуждение архитектуры

Он также выдвигает множество идей (в том числе архитектурных) и пытается их протолкнуть.

Лично я не вижу здесь проблемы. Одна из вещей, которую я узнал от профессора еще в университете, и которая действительно запала мне в душу, — это идея о том, что «ни одна тема не должна быть табу». В идеальной обстановке любая тема должна быть вынесена на обсуждение. Довольно скоро в результате обсуждения и исследования выяснится, что достаточно плохие идеи таковы.

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

Вместо того, чтобы рассматривать такие обсуждения как угрозу, рассматривайте их как возможность учиться и учить.

Если только у вас нет жестких сроков, и один разработчик продолжает пытаться провести часовые обсуждения с участием всей команды. Однако даже в этом случае вы не должны просто говорить: «Нет, вы ошибаетесь», а скорее: «У нас нет времени обсуждать прямо сейчас. А пока мы сделаем X и сможем вернуться к нему на следующей неделе. "

Профессиональный отряд

Любая попытка показать ему, как что-то нужно сделать более простым образом, заканчивается долгим эмоциональным обсуждением (он ведет себя так, как будто на него напали).

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

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

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

В вашем ОП у вас есть некоторые предубеждения, на которые, я думаю, вам нужно обратить внимание. Я понятия не имею, как эти предубеждения влияют на ваши наблюдения, но я знаю, что они есть, просто потому, что наши предубеждения всегда влияют на ситуацию, и вы были очень любезны, чтобы их разоблачить: возраст, культура.

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

Это управление заинтересованными сторонами 101. Как он участвует? Каковы его задачи? Какая информация вам от него нужна? Какая информация ему нужна от вас? Какие риски проекта вызваны им и какие действия мне нужно для их снижения? И так далее. Вы не собираетесь вытаскивать его из песочницы, поэтому вам нужно придумать, как с ним играть. Здесь нет простых ответов, но первое, что я бы сделал, это пригласил его в качестве партнера. Вовлеките его в обсуждение и рассейте вероятное отчуждение, которое он чувствует и на которое реагирует. Это манипуляция, но вы можете добиться от нее благоприятных результатов, а не пытаться с ней бороться.

Раньше приходилось иметь дело с разработчиками такого типа, и работать с ними всегда кошмар по причинам, с которыми вы столкнулись. Что работало для меня в прошлом:

1) Ведите журнал RAID, в котором регистрируются все риски, связанные с проектом. Это будет служить контрольным следом. 2) Каждый раз, когда возникает риск или проблема из-за символа x, сообщите об этом старшему руководству, показав им журнал RAID и то, как это повлияло на статус RAG проекта.

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

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

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

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

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

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

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

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

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

Возложение ответственности за цели команды на одного (старшего) разработчика очень сильно противоречит Scrum. Как заставить это работать внутри Scrum?