Какой agile-процесс способствует тому, чтобы команда назначала задачи отдельным разработчикам, а не отдельные люди назначали задачи себе?

Разработчик/архитектор/разработчик 20 лет опыта. Я провел эксперимент в своем предыдущем проекте, где я создал процесс, похожий на скрам, но мы решили, что разработчики не будут выбирать свои задачи напрямую, а вместо этого команда будет назначать им задачи. Как выбирается задание? Мы открываем проектный чертеж, в котором мы повторяем, где мы находимся и куда мы хотели бы пойти. А затем задать вопрос «какой следующий логический шаг?». Некоторые преимущества этого заключаются в том, что:

  1. Избегание специализации.

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

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

Мой вопрос:

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

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

Считается нормальным, когда разработчик выбирает следующую по приоритету задачу в списке, которая никому не назначена. Команды применяют это в разной степени, но я не думаю, что для этого нужна специальная версия Agile.
Избегание специализации не должно быть самоцелью, но помогает гарантировать, что команда в целом способна выполнять задачи, за которые она берет на себя ответственность. Специализация вообще неизбежна, разработчики — это не безликие и взаимозаменяемые дроны, а постановка задач без оглядки на возможности звучит для меня как антипаттерн. Тем не менее, поощрение участников расширять свой опыт в областях, с которыми они не знакомы, работая в паре с экспертом, является хорошим подходом.
@DJClayworth У меня такое ощущение, что почти в каждой гибкой команде, в которой я работал, есть негибкая часть команды, которая движется в противоположном направлении. Как ты с этим справляешься ?
@DJClayworth, и, судя по опыту, это случается редко - разработчик выбирает следующую ранжированную задачу.
Ваша проблема в том, что вы хотите, чтобы разработчики выбирали следующую логическую задачу, а не следующую задачу, которую они хотят, чтобы избежать чрезмерной специализации? Это немного отличается от «есть ли именованный гибкий процесс, который обеспечивает это?» Есть ли какая-то польза от проекта, кроме того, что он позволяет избежать чрезмерной специализации и поощряет обучение?
@DJClayworth да, я не уверен, как переформулировать вопрос. Но этот вопрос также актуален. Потому что мне нужны аргументы, чтобы отстаивать свое видение. Большинство разработчиков привыкли относительно свободно выбирать задачи, которые им нравятся, что очень часто идет вразрез с текущей целью.
@DJClayworth Также некоторые более громкие разработчики могут лучше позиционировать себя на ключевых позициях, например, между производством и разработчиками или между функциональными экспертами и разработчиками.
@DJClayworth Я пропустил ваш вопрос о пользе. Помимо того, что вы сказали, преимущество заключается в том, что вы не упускаете возможность сосредоточиться на своей ближайшей цели.

Ответы (4)

Ты спрашиваешь:

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

Что вам нужно сделать, так это объяснить команде (те, кто занимается сбором), к чему вы стремитесь. Это может затем побудить их разделить задачу, как вы ожидаете.

Как только они осознают пользу вашего улучшения , большинство из них согласится с ним.

Затем вы спрашиваете:

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

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

Как только вы (по-новому) определите «эффективность», она должна соответствовать вашей реализации Agile.

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

Имейте в виду, что случайное «нарушение правил» — это не конец света ; иногда лучше игнорировать мелкие нарушения, чем делать из этого большое дело и отвлекать всех.

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

Напоминание людям о том, насколько великолепна ваша система, с доказательствами помогает им понять ее и побуждает следовать ей.

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

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

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

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

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

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

Я не навязываю людям задачи. Я просто пытаюсь создать среду, в которой вместо того, чтобы вы сами выбирали задачу, группа выбирает задачу за вас.
Кстати, меняю название вопроса. Этот вопрос лучше соответствует тому, что я ищу.

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

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

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

То, как вы сформулировали вопрос, заставляет меня думать, что вы считаете специализацию проблемой. Если в команде есть все роли для выполнения своей работы, то это не проблема . Команды создают программное обеспечение в Agile, а не отдельные лица.

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

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

В качестве другого примера предположим, что в вашей команде есть дизайнер и бэкэнд-разработчик Java. Вы бы возложили задачу на бэкенд-разработчика только потому, что хотите избежать специализации? Или хуже? Дали бы вы дизайнеру фоновую задачу? Это не имеет никакого смысла.

Есть действительно одна проблема: при работе над приоритетными задачами. Допустим, дизайнер занят, а бэкенд-разработчик только что закончил какую-то работу и может выбрать следующую задачу из списка приоритетов. Следующей задачей по приоритетности является задача проектирования. UPS! Теперь разработчик должен осмотреться, чтобы увидеть, какие еще есть внутренние работы. Вторая задача — это внутренняя работа, поэтому они берут на себя эту задачу. Но это был второй приоритет, а не первый. Это проблема, верно? Но вы не решите эту проблему, запихивая задачу проектирования в горло бэкенд-разработчику.

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

Проблема в большой команде, где люди берутся за задачи, которые им нравятся, заключается в том, что у вас разные уровни программистов. Некоторые программисты действительно эффективны. Если такой программист позиционирует себя между, скажем, производством и разработкой, вы окажетесь в ситуации, когда многие другие разработчики будут иметь 0% знаний об инфраструктуре, потому что каждая задача инфраструктуры будет автоматически выполняться этим разработчиком. То же самое касается функциональных аспектов работы. Если у вас есть человек, очень заинтересованный в этом, вы неизбежно получите из него функционального эксперта.
Кстати, меняю название вопроса. Этот вопрос лучше соответствует тому, что я ищу.
То, о чем вы говорите, называется автобусным фактором , и да, вы можете улучшить его, поделившись ноу-хау. Но зачем нужен процесс, чтобы отбить у разработчиков желание брать только определенные задачи? Это вопрос самоорганизации команды. Обсудите проблему с командой и позвольте им найти способ ее исправить. Как вы думаете, почему единственный способ исправить ситуацию — отказать им в назначении собственных задач?

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