Scrum и xp заметки с передовой
Скачать 3.07 Mb.
|
Как мы управляем несколькими Scrum-командами Когда у вас над одним продуктом работают сразу несколько Scrum-команд, всё намного сложнее. Это общая проблема и она характерна не только для Scrum'а. Чем больше разработчиков, тем больше проблем. Мы и с этим экспериментировали (как обычно). Максимальный размер команды, работавшей у нас над одним проектом, был порядка 40-ка человек. Как оказалось, ключевыми являются следующие вопросы: • Сколько сформировать команд? • Как распределить людей по командам? Сколько сформировать команд Если настолько сложно работать по Scrum'у с несколькими командами, то зачем вообще заморачиваться? Почему просто не собрать всех в одну команду? Самая большая Scrum-команда, которая у нас когда-либо была, состояла из 11-ти человек. И это работало, правда, не очень хорошо. Ежедневный Scrum всегда длился больше 15-ти минут. Членам команды было сложно держать в голове информацию о том, чем каждый из них занимается, из-за этого могли возникать недоразумения. ScrumMaster'у тоже было сложно направить работу в нужное русло, и было сложно найти время, чтобы разобраться со всеми возникшими трудностями. Как вариант, можно выделить две команды. Но будет ли это лучше? Не факт. Если команда опытная, ей комфортно работать по Scrum'у, и вы знаете, как правильно разделить работу на два отдельных направления, что позволит избежать одновременной работы над одними и теми же исходниками, тогда я скажу, что это хорошая идея: разделить на отдельные команды. В противном же случае, не смотря на все минусы работы в большой команде, я бы подумал о том, как оставить одну большую команду. Мой опыт показывает, что намного лучше иметь несколько больших команд, чем много маленьких, которые постоянно будут мешать друг другу. Создавайте маленькие команды только тогда, когда они не нуждаются во взаимодействии друг с другом. Виртуальные команды Как же понять, насколько правильно были оценены преимущества и недостатки при выборе между "большой командой" или "несколькими командами"? Будьте предельно внимательны, и вы заметите формирование "виртуальных команд". Пример 1: Вы остановились на одной большой команде. Но как только начнёте наблюдать за тем, кто с кем общается на протяжении спринта, то заметите, что команда фактически разбивается на две подкоманды. Scrum и XP: заметки с передовой 73 Scrum- команда Виртуальная команда Виртуальная команда Пример 2: Вы решили сделать три небольшие команды. Но как только начнёте прислушиваться, кто и с кем говорит в ходе спринта, то заметите, что первая и вторая команды общаются между собой, тогда как третья работает сама по себе. Виртуальная команда Scrum команда №1 Scrum команда №3 Scrum команда №2 Что бы это значило? Что ваша стратегия разделения была неправильной? И да (если виртуальные команды постоянные) и нет, (если виртуальные команды временные). Взгляните ещё раз на первый пример. Если состав обеих виртуальных подкоманд меняется (т.е. люди переходят из одной виртуальной подкоманды в другую), тогда возможно вы приняли правильное решение, создав одну большую Scrum-команду. Если же две виртуальные подкоманды в ходе спринта остаются неизменными, то, возможно, для следующего спринта их следует разбить на две настоящие независимые Scrum-команды. Теперь вернёмся ко второму примеру. Если первая и вторая команды общаются друг с другом (но не с третьей) на протяжении всего спринта, тогда возможно для следующего спринта следует объединить первую и вторую команду в одну Scrum-команду. Если первая и вторая команда очень плотно общаются в первой половине спринта, а во второй половине спринта уже первая и третья команды ведут оживлённые беседы друг с другом, тогда думаю, вам стоило бы рассмотреть возможность объединения всех трёх команд в одну, или всё-таки оставить эти команды как есть. Поднимите этот вопрос на ретроспективе и дайте возможность командам самим решить его. Разбиение на команды – это действительно одна из самых сложных задач в Scrum'е. Не пытайтесь копать очень глубоко или заниматься очень сложной оптимизацией. Экспериментируйте, наблюдайте за виртуальными командами, и не забывайте уделять обсуждению этого вопроса достаточно времени на ретроспективах. Рано или поздно вы найдёте для себя правильное решение. Однако запомните, что вам следует сделать всё, чтобы команды чувствовали себя комфортно и не мешали друг другу слишком часто. Оптимальный размер команды Практически во всех книгах, которые я читал, утверждается, что "оптимальный размер" команды составляет примерно 5-9 человек. Исходя из того, что я видел, остаётся только согласиться с этим мнением. Хотя, как по мне, всё-таки лучше иметь команду от 3-ёх до 8-ми человек. Поднапрягитесь, но создайте команды такого размера. Допустим, у вас есть одна Scrum-команда из 10-ти человек. Подумайте, может быть стоить выкинуть двух наиболее слабых участников команды. Ой-йо-йой, я что – правда, сказал это? Scrum и XP: заметки с передовой 74 Предположим, вы разрабатываете два разных продукта, у вас по три человека в каждой команде, однако обе команды работают очень медленно. Может быть, их следует объединить в одну команду из 6-ти человек. И пусть эта команда одновременно создаёт оба продукта. В этом случае одному из двух product owner'ов придётся уйти (или начать играть роль консультанта, ну или ещё что-то наподобие этого). Продукт А + Б Product owner Консультант Scrum команда Продукт А Scrum команда Product owner Продукт Б Scrum команда Product owner Допустим, у вас одна Scrum-команда из 12 человек, которую нереально разбить на две независимые команды только потому, что исходный код страшно запущен. Вам придётся приложить максимум усилий, чтобы отрефакторить (вместо того чтобы клепать новый функционал) исходный код до такой степени, чтобы над ним могли работать независимые команды. Поверьте мне, что, скорее всего, ваши "инвестиции" окупятся с лихвой. Синхронизировать спринты или нет? Предположим, есть три Scrum команды, которые работают над одним проектом. Должны ли их спринты быть синхронизированными, т.е. начинаться и заканчиваться одновременно? Или же они должны пресекаться друг с другом? Сначала мы решили, что нужны пересекающиеся спринты (по времени). Время Спринт В1 Команда В Спринт В2 Спринт В3 Спринт Б1 Команда Б Спринт Б2 Спринт Б3 Спринт А1 Команад А Спринт А2 Спринт А3 Это звучало круто. В любой момент времени у нас был бы спринт, который вот-вот закончится, и спринт, который вот-вот начнётся. Нагрузка на product owner'а была бы распределена равномерно по времени. Постоянные релизы продукта. Демонстрации каждую неделю. Аллилуйя. Да-да, утопия... но тогда это действительно звучало убедительно! Мы только-только начали так работать, но тут мне подвернулась возможность пообщаться с Кеном Швабером (Ken Schwaber) (в рамках моей Scrum-сертификации). Он указал на то, что это неправильно, и что было бы гораздо лучше синхронизировать спринты. Я точно не помню его доводов, но в ходе нашей дискуссии он меня убедил в этом. Scrum и XP: заметки с передовой 75 Время Спринт В1 Команда В Спринт В2 Спринт В3 Спринт Б1 Команда Б Спринт Б2 Спринт Б3 Спринт А1 Команад А Спринт А2 Спринт А3 С тех пор мы использовали это решение и ни разу об этом не пожалели. Я никогда не узнаю, провалилась бы стратегия пересекающихся спринтов или нет, но думаю, что да. Преимущества синхронизированных спринтов в следующем: • Появляется естественная возможность перетасовывать команды между спринтами! При пересекающихся спринтах нет возможности реорганизовывать команды так, чтобы не побеспокоить ни одной команды в разгаре спринта. • Все команды могут работать на одну цель в течение спринта и проводить планирование спринта вместе, что приводит к лучшему сотрудничеству между командами. • Меньше административной мороки, например меньшее количество встреч для планирования спринта, демонстраций и релизов. Почему мы ввели роль "тимлида" Предположим, что у нас над одним продуктом работают три команды. P Scrum команда №1 S Scrum команда №2 S Scrum команда №3 S Красным помечен product owner. Чёрным – Scrum Master'а. А остальные это пехота... ну то есть... почтенные члены команды. Кто при таком распределении ролей должен решать, какие люди будут отнесены к какой команде. Может, product owner? Или может все три ScrumMaster'а вместе? Или вообще каждый человек сам решает, в какой команде работать? Но если так, то что делать в случае, когда все захотят в одну и ту же команду (потому что там красивая ScrumMaster'ша)? А что если потом окажется, что над этим кодом больше двух команд работать не смогут, и нам придётся трансформировать три команды по 6 человек в две по 9? Это значит, что будет всего 2 ScrumMaster'а. Так кого же из трёх текущих ScrumMaster'ов надо лишить титула? Во многих компаниях эти вопросы надо решать очень деликатно. Есть соблазн отдать распределение людей по командам и их последующее перераспределение на откуп product owner'у. Но ведь это не совсем то, чем должен заниматься product owner, правда же? Product owner это специалист по предметной области, который указывает команде направление движения. В общем случае его не должно волновать всё остальное. Особенно, учитывая его роль "цыплёнка" (это если вы слышали про метафору "свиней и цыплят", а если не слышали, то погуглите). Мы решили проблему вводом роли "тимлид". Человека в этой роли можно описать как "Scrum-of-Scrums master", "босс" или "главный ScrumMaster". Ему не нужно возглавлять какую-либо команду, но он отвечает за Scrum и XP: заметки с передовой 76 вопросы, не входящие в компетенцию команд, такие как, например, "кого назначить ScrumMaster'ом", "как распределить людей по командам" и т.д. Придумать действительно подходящие название для этой роли у нас так толком и не получилось. А "тимлид" оказалось наименее неподходящим, из тех, что мы перепробовали. Такой подход сработал в нашем случае, и я его рекомендую (не зависимо от того, как вы решите назвать эту роль у себя). Как мы распределяем людей по командам На случай, когда у вас несколько команд работают над одним и тем же продуктом, существует две стратегии распределения людей по командам. • Позволить специально назначенному человеку провести распределение, например «тимлиду», про которого я писал выше, product owner'у или любому другому менеджеру (если у него достаточно информации, чтобы с этим справиться). • Позволить командам каким-то способом самоорганизоваться. Мы попробовали все три стратегии. Три?!? Ну да – стратегию №1, стратегию №2 и их комбинацию. И оказалось, что комбинация двух стратегий работает лучше всего. Перед планированием спринта тимлид приглашает product owner’а и всех ScrumMaster’ов на совещание по поводу формирования команд. Мы обсуждаем прошлый спринт и решаем, есть ли необходимость в переформатировании команд. Возможно, нам нужно объединить две команды или перевести несколько человек из одной команды в другую. Мы решаем, что именно нам нужно, записываем это на листик и несём на планирование спринта как предварительное распределение по командам. Первым делом на планировании спринта мы проходимся по наиболее приоритетным историям из product backlog’а. А потом тимлид говорит что-то вроде: “Всем привет. Вот как мы предлагаем сформировать команды на следующий спринт”. Предварительное распределение по командам Команда №1 - Том - Джерри - Дональд - Микки Команда №2 - Гуффи - Даффи - Хампфи - Дампфи Команда №3 - Минни - Скрудж - Винни - Ру “Как видно, мы собираемся уменьшить количество команд с четырёх до трёх. Составы команд указаны. Пожалуйста, сгруппируйтесь согласно спискам и выберите себе подходящую стену для планирования”. (тимлид ждёт пока народ побродит по комнате, и через некоторое время появляются три группы людей, каждая соберётся возле своей части стены). “Текущее распределение – только прикидка! Просто чтобы было с чего начать. По мере планирования спринта любой из вас волен переходить в любую другую команду, можно разделять команды, можно, наоборот, объединять их... В общем, делайте всё, что подскажет здравый смысл, учитывая приоритеты, которые озвучивает product owner.” Описанный выше подход оказался для нас наиболее эффективным. Немного директивного управления, которое оптимизируется разумной долей самоуправления. Scrum и XP: заметки с передовой 77 Нужны ли узкоспециализированные команды? Предположим, ваша система состоит из трёх основных компонентов: Клиент Сервер БД Допустим, что над вашим продуктом работают 15 человек, и вам не очень хочется собирать их в одну Scrum-команду. Как же разделить людей на команды? Подход №1: команды, специализирующиеся на компонентах Можно создать команды, специализирующиеся на конкретных компонентах. Тогда мы получим "команду для клиентской части", "команду для серверной части" и "команду для базы данных". Клиент Сервер БД Scrum команда №1 (” клиентская часть”) Scrum команда №2 (” серверная часть”) Scrum команда №3 (” БД”) Именно с этого подхода мы когда-то начинали. Работает не очень хорошо, по крайней в том случае, когда большинство историй затрагивают сразу несколько компонентов. К примеру, возьмём, историю, которая называется "доска объявлений, где пользователи могут оставлять друг другу сообщения". Для создания такой доски объявлений нам придётся обновить пользовательский интерфейс в клиентской части, добавить бизнес-логику на стороне сервера, и добавить парочку таблиц в базу данных. Клиент Сервер БД Scrum команда №1 (” клиентская часть”) Scrum команда №2 (” серверная часть”) Scrum команда №3 (” БД”) История Scrum и XP: заметки с передовой 78 Это значит, что всем трём командам придётся довольно плотно сотрудничать, чтобы закончить эту историю. Не очень удобно. Подход №2: универсальные команды А можно создать универсальные команды, то есть команды, которые не заточены на работу всего лишь с одним специфическим компонентом. Клиент Сервер БД Scrum команда №1 Scrum команда №2 История История История Если большая часть всех историй предполагает работу над несколькими компонентами, тогда такое разделение на команды работает намного лучше. Каждая команда сможет реализовать историю целиком: клиентскую часть, серверную и базу данных. Благодаря чему команды смогут работать намного более независимо друг от друга, что на самом деле ОЧЕНЬ ХОРОШО. Когда мы начали внедрять Scrum, первым делом мы сделали из всех наших специализированных команд (подход №1) универсальные команды (подход №2). Это уменьшило количество ситуаций "мы не можем закончить задачу, так как ждём, пока эти ребята закончат серверную часть". Однако иногда нам всё-таки приходится собирать временные команды, специализирующиеся на разработке отдельных компонентов. Стоит ли изменять состав команды между спринтами? Обычно каждый спринт обладает своими собственными особенностями в зависимости от того, какого рода задачи мы пытаемся решить. Как следствие, оптимальный состав команды для каждого спринта может отличаться. Фактически, почти каждый спринт нам приходилось говорить себе что-то вроде: "этот спринт не совсем обычный спринт, потому что (ля-ля-ля)...". Через некоторое время мы прекратили использовать понятие "обычный" спринт. Обычных спринтов просто нет. Так же как нет "обычных" семей или "обычных" людей. Для одного спринта может показаться хорошей идеей, создать команду, которая занимается клиентской частью приложения и включает в себя всех, кто хорошо знает код клиента. Для другого спринта хорошей идеей может быть создание двух универсальных команд и разделение специалистов по клиентской части между ними. Одним из ключевых аспектов Scrum'а является "сработанность команды", т.е. если члены команды работают вместе в течение многих спринтов, они обычно становятся очень сплоченными. Они научатся входить в групповой поток, и достигнут невероятного уровня продуктивности. Но чтобы достичь этого требуется несколько спринтов. Если вы будете часто изменять состав команды, то вы никогда не достигнете настоящей командной сработанности. Scrum и XP: заметки с передовой 79 Поэтому, если вы решили изменить состав команды, учитывайте все последствия. Будут ли это долговременные или кратковременные изменения? Если кратковременные, стоит их пропустить. На долговременные изменения можно пойти. Есть одно исключение: большая команда, которая только-только начала работать по Scrum'у. В этом случае возможны некоторые эксперименты с разделением команды на подкоманды, пока не будет найден вариант, который полностью устраивал бы всех. Удостоверьтесь, что все понимают, что отрицательный результат – тоже результат, что первые несколько итераций могут быть комом – и это нормально, при условии, что вы работаете над улучшениями. Участники команды с частичной занятостью Могу только подтвердить то, что говорят книги, посвящённые Scrum'у: наличие в Scrum-команде участников с частичной занятостью – не очень хорошая идея. Предположим, вы рассматриваете возможность взять Джо в свою команду как участника с частичной занятостью. Сначала хорошо всё обдумайте. Действительно ли Джо необходим вашей команде? Уверены, что не можете заполучить его на полный день? Какие у него ещё обязанности? Можно ли передать обязанности Джо кому-то другому и перевести его на роль консультанта? Можно ли заполучить Джо на полный день, начиная со следующего спринта, а пока передать его обязанности кому-то другому [участнику вашей команды – прим. переводчика]? Но иногда просто нет выбора. Вам позарез нужен Джо потому, что он единственный администратор баз данных (DBA) во всём здании. Другим командам он нужен так же сильно, как и вам, поэтому он никак не может работать с полной занятостью в вашей команде. Кроме того, компания не может себе позволить нанять ещё одного DBA. Ну и ладно. Это аргументированный случай, чтобы взять его на неполную занятость (что, кстати, было у нас). Но прежде, чем сделать это, всегда проводите подобный анализ. В обычной ситуации я бы предпочёл команду, состоящую из трёх участников с полной занятостью, чем из восьми, но с частичной. Если у вас есть человек, являющийся участником нескольких команд, как, например вышеупомянутый DBA, всё равно неплохо бы его закрепить за одной командой. Определите, какая команда нуждается в нём больше всего, и назначьте её в качестве "домашней команды". Когда его никто не будет дёргать, он будет присутствовать на ежедневных Scrum'ах, планированиях спринтов, ретроспективах и т.д. этой команды. Как мы проводим Scrum-of-Scrums Scrum-of-scrums – это регулярные встречи, цель которых – обсуждение различных вопросов между Scrum- мастерами. Как-то мы работали над четырьмя продуктами. Над тремя из них работало по одной Scrum-команде, а над четвёртым – 25 человек, которые были разделены на несколько Scrum-команд. Это выглядело следующим образом: Продукт Д S S S S Продукт А S Продукт Б S Продукт В S Scrum и XP: заметки с передовой 80 У нас было два уровня Scrum-of-Scrums: "уровня продукта", который проводился с участием команд продукта Д, и "уровня компании" для участников всех команд. Scrum-of-Scrums уровня продукта Эта встреча была очень важной. Мы проводили её не реже одного раза в неделю. Мы обсуждали проблемы интеграции, балансировки команд, подготовку к следующему планированию спринта и т.д. Мы выделяли на это 30 минут, но часто нам их не хватало. В качестве альтернативы можно было бы проводить ежедневный Scrum-of-Scrums, однако, мы так и не собрались опробовать его. Наша повестка дня имела следующий вид: 1. Каждый по очереди рассказывал, что его команда сделала на прошлой неделе, что планирует закончить на этой недели, и с какими трудностями они столкнулись. 2. Любые другие проблемы, относящиеся к компетенции нескольких команд одновременно, которые нужно обсудить. Например, вопросы интеграции. На самом деле повестка дня Scrum-of-Scrums не так уж и важна – важнее, чтобы эта встреча проводилась регулярно. Scrum-of-Scrums уровня компании Мы назвали эту встречу "Пульсом". Мы пробовали проводить её в разных форматах с разными участниками. В конце концов, мы отказались от всех остальных идей в пользу еженедельного собрания продолжительностью 15 минут, в котором участвует весь коллектив (вообще-то все те, кто участвуют в процессе разработки). Чегооо? 15 минут? Весь коллектив? Все участники всех продуктовых команд? И это работает? Да – работает, если вы (или ответственный за проведение этого собрания) очень строги относительно того, чтобы собрание было сжатым. Формат собрания: 1. Новости и уточнения со стороны руководителя разработки. Например, информация о предстоящих мероприятиях, событиях. 2. "Карусель". Один человек из каждой продуктовой группы [группы команд, вовлечённых в разработку одного продукта – прим. переводчика] отчитывается в том, что было сделано за прошлую неделю, что планируется сделать на этой неделе и о проблемах. Некоторые другие люди так же отчитываются (например, начальник отдела по работе с клиентами, начальник отдела контроля качества). 3. Все, кто хочет, могут свободно высказаться и задать любые вопросы. Это собрание для подачи сжатой информации, а не для дискуссий или рефлексии. Если этим и ограничиться, то 15-ти минут вполне хватает. Иногда оно занимает больше времени, но очень редко больше 30ти минут. Если завязывается интересная дискуссия, я её приостанавливаю и предлагаю всем заинтересованным остаться и продолжить её после собрания. Почему мы проводим "Пульс" всем коллективом? Потому, что мы заметили, что Scrum-of-Scrums уровня компании посвящен преимущественно отчётности. На нём очень редко возникали дискуссии. Кроме того, информация, озвучиваемая на Scrum-of-Scrum’е, очень интересна и многим из тех, кто на него не попадает. Обычно командам интересно, чем занимаются другие команды. И мы посчитали, если всё равно нужно тратить время на информирование друг друга, то почему бы не присутствовать всем. Чередование ежедневных Scrum'ов Если у вас есть много Scrum команд, работающих над одним продуктом, и у всех ежедневный Scrum происходит в одно и то же время, может возникнуть проблема. Product Owner'ы (и не в меру надоедливые |