Главная страница
Навигация по странице:

  • Как мы управляем географически распределёнными командами

  • Памятка ScrumMasterа

  • Заключительное слово

  • Scrum и xp заметки с передовой


    Скачать 3.07 Mb.
    НазваниеScrum и xp заметки с передовой
    Дата14.02.2022
    Размер3.07 Mb.
    Формат файлаpdf
    Имя файлаscrum_xp-from-the-trenches-rus-final.pdf
    ТипДокументы
    #361341
    страница10 из 10
    1   2   3   4   5   6   7   8   9   10
    Команда №2
    Команда №4
    Команда №1
    Команда №3
    Команда №5
    Комната №1 Комната №2
    9:00
    9:15
    9:30
    9:45
    10:00
    Этот пример расписания относится к тому периоду, когда у нас был ежедневный scrum в разных комнатах, а не в комнате совещаний команды. Обычно встречи планируются на 15 минут, но каждая команда получала
    30 минутный временной слот на случай, если ей надо было немного задержаться.
    Это очень удобно по двум причинам:
    1. Люди, подобные мне и product owner'у, могут посетить все ежедневные scrum'ы за одно утро. Нет лучшего способа получить представление о том, как проходит спринт, и в чем основные проблемы.
    2. Команды могут посещать ежедневные Scrum'ы друг друга. Не очень часто, но иногда случается, что две группы работают в смежных областях, и участники групп заглядывают друг к другу на ежедневные Scrum'ы, чтобы быть в курсе происходящего.
    Обратная сторона медали заключается в ограничениях для команды – теряется возможность изменить время проведения ежедневного Scrum'а. Хотя, на самом деле, для нас это не составляло проблемы.
    «Пожарные» команды
    Мы столкнулись с ситуацией, когда было невозможно внедрить Scrum в большом проекте из-за того, что его команда постоянно тушила пожары, т.е. в панике устраняла дефекты преждевременно выпущенной системы. Это был порочный круг: из-за того, что всё время уходило на постоянную борьбу с пожарами, не было времени на их предотвращение (т.е. на улучшение архитектуры, внедрение автоматического тестирования, создание систем мониторинга и оповещения, и т.п.)
    Мы разрубили этот гордиев узел тем, что выделили специальную «пожарную» команду и отдельную
    Scrum-команду.
    Задачей Scrum-команды (с благословления product owner’а) была стабилизация системы и предотвращение потенциальных пожаров. А «пожарная» команда (её мы назвали «командой поддержки») выполняла две задачи:
    1. Тушить пожары.
    2. Прикрывать Scrum-команду от всяких раздражителей, вроде неожиданных запросов на изменение функционала, которые непонятно откуда берутся.
    «Пожарную» команду мы разместили поближе к дверям, а Scrum-команду – подальше в комнате. Таким образом, «пожарная» команда могла даже физически защищать Scrum-команду от раздражителей типа жаждущих общения "продажников" или разозлённых клиентов.
    В каждую команду были включены старшие разработчики, чтобы команды не слишком зависели друг от друга.
    В основном этот подход был решением проблемы внедрения Scrum’а. Как вообще можно начать практиковать Scrum, если команда не может спланировать свою работу больше, чем на один день вперёд?
    Нашим ответом на это, как сказано выше, было разделение команд.

    Scrum и XP: заметки с передовой
    82
    Сработало это достаточно хорошо. Так как Scrum-команде дали возможность планировать свою работу, она, в конце концов, смогла стабилизировать систему. А тем временем пожарная команда полностью отказалась от попыток что-либо планировать и работала полностью по запросам, то есть только устраняла очередной проявившийся ужасный дефект.
    Естественно, полностью оставить Scrum-команду в покое не получилось. Частенько пожарная команда вынуждена была привлекать к решению вопросов отдельных людей из Scrum-команды, или, в худшем случае, всю команду.
    В любом случае через пару месяцев система стала настолько стабильной, чтобы мы могли отказаться от пожарной команды в пользу дополнительных Scrum-команд. «Пожарные» были просто счастливы сдать свои шлемы и присоединиться к обычным Scrum-командам.
    Разбивать product backlog или нет?
    Предположим, у вас есть один продукт и две Scrum-команды. Сколько вам нужно product backlog'ов?
    Сколько product owner'ов? Выбор достаточно сильно повлияет на то, как будут проходить встречи по планированию спринта. Мы оценили три возможных подхода.
    Подход первый: Один product owner – один backlog
    "Должен остаться только один". Наш любимый подход.
    Преимущество этого подхода в том, что можно разрешить команде самой планировать работу на основе приоритетов, расставленных product owner'ом. Product owner может сосредоточиться на том, что ему нужно, и предоставить командам самим, разбивать истории на задачи.
    Продукт А
    Product owner
    Product
    Backlog
    Ближе к делу. Давайте посмотрим, как проходит встреча по планированию спринта для этой команды.
    Встреча по планированию спринта проходит на нейтральной территории.
    Прямо перед встречей product owner называет одну из стен "стеной product backlog'а" и развешивает на ней истории (учетные карточки), отсортированные по приоритету. Он продолжает вешать их, пока не займёт всю стену. Как правило, такого количества историй более чем достаточно для спринта.

    Scrum и XP: заметки с передовой
    83
    Каждая Scrum-команда выбирает пустой участок стены и вешает там своё название. Это будет их "командная стена". После этого каждая команда отклеивает истории со "стены product backlog'а", начиная с самых важных, и переклеивает их на свою "командную стену".
    На рисунке ниже показана описанная ситуация. Желтые стрелки изображают движение учетных карточек со "стены product backlog'а" на стены команд.
    Команда 1
    Команда 3
    Команда 2
    Команда 4
    Product
    Backlog
    По ходу встречи product owner и команды торгуются за учетные карточки, двигают их между командами, передвигают карточки вверх-вниз, меняя приоритеты, разбивают их на части и т.п. Где-то через час каждая из команд получает предварительную версию sprint backlog'а на своей "командной стене". Дальше команды работают независимо, оценивая истории и разбивая их на подзадачи.

    Scrum и XP: заметки с передовой
    84
    Да, хоть этот дурдом и забирает массу сил, но зато это эффективно, прикольно и способствует общению.
    Когда время заканчивается, у всех команд, как правило, достаточно информации, чтобы начать спринт.
    Подход второй: Один product owner – несколько backlog'ов
    В этом подходе product owner ведёт несколько product backlog'ов, по одному на команду. Мы на самом деле не применяли этот подход, но мы делали что-то похожее. Это был наш запасной план на случай, если первый подход не сработает.
    Недостатком этого подхода является то, что здесь истории командам раздает product owner, хотя команды, вероятно, справились бы с этим лучше сами.
    Продукт А
    Product owner
    Product
    Backlog
    Product
    Backlog
    Подход третий: Несколько product owner'ов – несколько backlog'ов
    Похоже на второй вариант, по отдельному product backlog'у на команду, только ещё и с отдельным
    product owner'ом на каждую команду.

    Scrum и XP: заметки с передовой
    85
    Продукт А
    Product owner
    Product
    Backlog
    Product
    Backlog
    Product owner
    Мы не пробовали так делать, и, скорее всего, пробовать не будем.
    Если два product backlog'а касаются одного и того же исходного кода, это скорее всего приведёт к серьёзному столкновению интересов между product owner'ами.
    Если же два product backlog'а имеют дело с разными исходниками, то это, по большому счету, всё равно, что разбить продукт на отдельные подпродукты, и разрабатывать их независимо. И это значит, что мы вернулись к ситуации "одна команда разрабатывает один продукт", которая для нас приятна и понятна.
    Параллельная работа с кодом
    При наличии нескольких команд, одновременно работающих над одним исходным кодом, нам неизбежно придется иметь дело с параллельными ветками кода в системе SCM (software configuration management). Есть много книг и статей, рассказывающих, как обеспечить одновременную работу с кодом для нескольких людей, поэтому я не буду вдаваться в детали. Вряд ли мне удастся добавить что-то новое. Однако я хотел бы вкратце поделиться наработками нашей команды:
    • Всегда поддерживайте основную ветку проекта в рабочем состоянии. Это, как минимум, означает, что все должно компилироваться, и все юнит-тесты должны проходить. Таким образом, мы получаем возможность в любой момент выпустить рабочий релиз. Желательно, чтобы сервер непрерывной интеграции строил и автоматически устанавливал готовый продукт в тестовом окружении каждую ночь.
    • Помечайте каждый релиз тэгом. Всякий раз, когда для приемочного тестирования или реального использования выпускается очередной релиз, соответствующая версия кода должна быть помечена тэгом. Это позволит вам при необходимости в любой момент создать в этой точке отдельную ветку для поддержки выпущенного продукта.
    • Создавайте новые ветки кода только тогда, когда это действительно необходимо. Хорошим практическим правилом будет создание новой ветки только при условии, если вы вынуждены нарушать стратегию использования текущий ветки. Если у вас есть сомнения, то не делайте ветвлений. Почему? Потому что каждое ветвление требует дополнительной работы и последующей поддержки.
    • Используйте ветвление для разделения кода разных стадий разработки. Вы можете создать для каждой Scrum команды отдельную ветку разработки. Но если вы смешаете краткосрочные изменения с долгосрочными изменениями в одной и той же ветке, вам очень сложно будет выпускать небольшие заплатки!
    • Чаще синхронизируйтесь. Если вы работаете в отдельной ветке, синхронизируйтесь каждый раз, когда вы хотите что-либо построить. Каждый день, когда вы начинаете работу, синхронизируйтесь с главной ветвью разработки, так чтобы ваша ветка была в адекватном состоянии и учитывала все изменения, сделанные другими группами. Даже если это приведет к кошмару слияния (merge- hell), учтите, что все могло бы быть еще хуже, если бы вы затянули слияние.

    Scrum и XP: заметки с передовой
    86
    Ретроспектива для нескольких команд
    Как мы проводим ретроспективы в случае, если над одним продуктом работает сразу несколько команд?
    Сразу же после того как закончилась демонстрация спринта и отшумели бурные овации, команды расходятся по своим комнатам или отправляются в какое-то удобное местечко. И каждая команда проводит свою ретроспективу как это описано на странице 50 "Как мы проводим ретроспективы".
    А на планировании (где присутствуют все команды, так как мы стараемся синхронизировать спринты всех команд, которые работают над одним продуктом), мы первым делом выслушиваем представителей каждой команды, на тему наиболее важных моментов последней ретроспективы. Выходит примерно по 5 минут на команду. После этого проводим свободное обсуждение минут на 10-20. И, собственно, только потом начинается планирование спринта.
    Мы не пробовали никаких других способов, потому что и такой подход работает достаточно хорошо.
    Однако, самый большой недостаток этого подхода, состоит в отсутствии возможности немного передохнуть между ретроспективой и началом планирования (см. стр. 55 «Отдых между спринтами»).
    В ходе планирования с одиночной командой мы не подводим итоги ретроспективы. В этом нет необходимости, ведь каждый член команды присутствовал на ретроспективе.

    Scrum и XP: заметки с передовой
    87 16
    Как мы управляем географически распределёнными командами
    Что же делать, если участники команды находятся в географически разнесённых местах? Большая часть "магии" Scrum'а и XP основана на совместном тесном взаимодействии участников команд, которые программируют парно и встречаются лицом к лицу каждый день.
    У нас есть географически распределённые команды. Так же некоторые участники работают дома время от времени.
    Наша политика относительно распределённых команд очень простая. Мы используем все возможные способы, чтобы максимизировать пропускную способность средств связи между физически разделёнными участниками команды. Под "пропускной способностью средств связи" я понимаю не только Mbit/sec (хотя это тоже важный показатель). Я имею в виду пропускную способность средств связи в более широком смысле:
    • Возможность практиковать парное программирование.
    • Возможность встречаться лицом к лицу в ходе ежедневного Scrum'а.
    • Возможность увидеть друг друга в любой момент.
    • Возможность личных встреч и живого общения.
    • Возможность проводить незапланированные совещания всей командой.
    • Возможность видеть одни и те же версии sprint backlog'а, sprint burndown'а, product backlog'а и других источников информации по проекту.
    Вот некоторые меры, предпринятые нами (или предпринимаемые в настоящий момент) для достижения цели:
    • Web-камера и наушники с микрофоном на каждой рабочей станции.
    • Комната для проведения телеконференций, оборудованная web-камерами, микрофонами, компьютерами со всем необходимым ПО – для общего доступа к рабочему столу, проведения телеконференций и т.д.
    • "Удалённые окна". Большие мониторы в каждом офисе, на которых постоянно можно видеть, что происходит в других офисах. Что-то типа виртуального окна между двумя отделами. Можно стоять перед ним и наблюдать. Например, кто на своём рабочем месте или кто с кем разговаривает. Всё для того, чтобы создать ощущение, что все находятся вместе.
    Используя эти и другие техники, мы медленно, но уверенно начинаем понимать, как проводить планирование спринтов, демонстрации, ежедневные scrum'ы и пр. в географически распределённых командах.
    Как обычно, главное – не прекращать экспериментировать. Обсуждение => адаптация =>
    обсуждение => адаптация =>
    обсуждение => адаптация =>
    обсуждение => адаптация =>
    обсуждение => адаптация
    Оффшорная разработка
    У нас есть несколько оффшорных команд. Мы экспериментировали с тем, как эффективно ими управлять, используя Scrum.
    Существуют две основных стратегии: удаленные команды и удаленные участники команд.

    Scrum и XP: заметки с передовой
    88
    Удалённые участники команд
    Scrum команда №1
    Страна А
    Страна Б
    Scrum команда №1
    Страна А
    Страна Б
    Scrum команда №2
    Удалённые команды
    Первая стратегия – удалённые команды – очевидный выбор. И всё-таки, мы начали с использования второй стратегии – удалённые участники команд. На то существует несколько причин.
    1. Мы хотим, чтобы участники команд лучше узнали друг друга.
    2. Мы хотим, чтобы была налажена эффективная коммуникация, и чтобы команды поняли её важность.
    3. На начальной стадии оффшорная команда слишком маленькая, чтобы самоорганизоваться в эффективную scrum-команду.
    4. Мы хотим, чтобы был период интенсивного обмена знаниями, прежде чем задействовать независимые оффшорные команды.
    В долгосрочной перспективе мы вполне можем перейти к стратегии "удалённые команды".
    Члены команды, работающие дома
    Работа дома иногда может быть действительно эффективной. Порой, за один день дома можно сделать больше, чем за всю неделю на работе. По крайней мере, если у вас нет детей :o)
    Однако, усадить команду вместе – одна из основополагающих идей Scrum'а. И что же делать в этом случае?
    Чаще всего мы позволяем команде решать, как часто и когда именно её члены могут работать дома.
    Некоторые люди регулярно работают дома, так как живут далеко. И всё-таки, мы стараемся делать так, чтобы большую часть времени команда проводила вместе.
    Когда члены команды работают дома, они участвуют в ежедневном Scrum'е, используя Skype- конференции (иногда видео конференции). Они доступны в чате в течение всего дня. Не так хорошо, как находиться в той же комнате, но этого достаточно.
    Как-то мы опробовали идею выделения среды, как специального дня для работы на дому. По сути это означало: "Хочется поработать дома? Нет проблем, но только по средам. И согласуйте это с командой". Для

    Scrum и XP: заметки с передовой
    89 команды, на которой ставился эксперимент, это сработало отлично. По средам большая часть команды обычно оставалась дома и выполняла значительный объём работ, будучи при этом на связи друг с другом.
    Один такой день не сильно нарушал синхронизацию людей в команде. Но по каким-то причинам с другими командами этот подход не сработал.
    В целом, люди, работающие дома, не стали для нас проблемой.

    Scrum и XP: заметки с передовой
    90 17
    Памятка ScrumMaster'а
    Напоследок я познакомлю вас с нашей памяткой ScrumMaster'а. Она содержит наиболее важные административные задачи, за которые отвечает ScrumMaster. Есть вещи, про которые очень легко забыть. Но есть и очевидные, такие как "устранять препятствия на пути команды", которые мы не включаем в наш список.
    В начале спринта
    • После планирования создать “страницу с информацией о спринте”. o
    На стартовой странице wiki-портала поместить ссылку на созданную страницу. o
    Распечатать эту страницу и повесить её на стене, которая у всех на глазах.
    • Разослать e-mail'ы с уведомлением о начале нового спринта. Не забыть указать цель спринта и дать ссылку на "страницу с информацией о спринте".
    • Обновить статистику спринтов. Добавить оценку предварительной производительности, размера команды, длины спринта и т.д.
    Каждый день
    • Следить за тем, чтобы ежедневный Scrum начинался и заканчивался вовремя.
    • Следить за тем, чтобы в случае добавления или удаления истории из sprint backlog'а все было сделано, как положено, чтобы эти изменения не сорвали график работ. o
    Следить за тем, чтобы product owner знал про эти изменения.
    • Следить за тем, чтобы команда постоянно обновляла burndown-диаграмму.
    • Следить за тем, чтобы все проблемы решались. Как вариант можно проинформировать о них product owner'а и/или начальника отдела разработки.
    В конце спринта
    • Провести открытую демонстрацию результатов спринта.
    • За несколько дней до демонстрации напомнить всем про её проведение.
    • Провести ретроспективу при участии всей команды и product owner'а. Пригласить начальника отдела разработки, чтобы он помог найти оптимальное решение проблем.
    • Обновить статистику спринтов. Внести значение реальной производительности и основные тезисы прошедшей ретроспективы.

    Scrum и XP: заметки с передовой
    91 18
    Заключительное слово
    Фух! Вот уж не ожидал, что это займёт столько времени.
    Надеюсь, эта книга навеяла вам несколько полезных идей, будь вы новичками или уже бывалыми специалистами.
    Поскольку Scrum всё равно необходимо подстраивать под каждую конкретную среду, спор по поводу общих практик заведомо будет неконструктивен. Однако мне всё же интересно получить от вас отзывы и предложения. Расскажите мне, чем ваши подходы отличаются от наших. Поделитесь идеями, как стать лучше!
    Пишите мне на
    henrik.kniberg@crisp.se
    Кроме того, я заглядываю сюда:
    scrumdevelopment@yahoogroups.com
    Если вам понравилась эта книга, вы, вероятно, захотите иногда заглядывать на мой блог. Я надеюсь и впредь писать там заметки по Java и разработке софта:
    http://blog.crisp.se/henrikkniberg/
    А ещё никогда не забывайте ...
    Это ведь просто работа, правда?

    Scrum и XP: заметки с передовой
    92
    Список рекомендованной литературы
    Ниже перечислены книги, которые стали для меня источниками идей и вдохновения. Настоятельно рекомендую!
    От переводчика: большая часть рекомендованных Хенриком книг не переведена на русский язык.
    Приведенные переводы достаточно точны, качественные и не меняют смысла написанного в оригинале.
    • Donald G. Reinertsen "Managing the Design Factory"
    • Mary Poppendieck, Tom Poppendieck "Implementing Lean Software Development"
    • Mike Cohn "Agile Estimating and Planning"
    • Джоэл Спольски "Джоэл о программировании"
    • Mary Poppendieck, Tom Poppendieck "Lean Software Development. An Agile Toolkit"
    • Barry Boehm, Richard Turner, "Balancing Agility and Discipline"

    Scrum и XP: заметки с передовой
    93
    • Ken Schwaber, Mike Beedle, "Agile Software Development with Scrum"
    • Фредерик Брукс "Мифический человеко-месяц"
    • Ken Schwaber, "Agile Project Management with Scrum"
    • Кент Бек "Экстремальное программирование"
    • Том ДеМарко, Тимоти Листер "Человеческий фактор"

    Scrum и XP: заметки с передовой
    94
    Об авторе
    Хенрик Книберг (
    henrik.kniberg@crisp.se
    ) – консультант компании Crisp в Стокгольме (
    www.crisp.se
    ), специализируется на Java и Agile-разработке.
    С тех пор как увидели свет agile-манифест и первые книги по XP, Хенрик начал следовать agile принципам и изучать, как наиболее эффективно их применять в организациях различного типа. Будучи соучредителем и генеральным директором компании Goyada в 1998-2003 гг. он получил прекрасную возможность поэкспеременировать с TDD и другими agile-практиками, поскольку он начинал с нуля, управлял технической платформой и отделом в тридцать человек.
    В конце 2005 года Хенрик по контракту стал главой отдела разработки в шведской игровой компании.
    Компания была в кризисе и нуждалась в срочном разрешении организационных и технических проблем.
    Используя инструменты Scrum и XP, Хенрик помог компании преодолеть кризис, внедрив принципы гибкой и бережливой (lean) разработки на всех уровнях.
    Однажды в пятницу в ноябре 2006 Хенрик лежал дома с температурой и решил написать несколько коротких заметок о том, что ему удалось сделать за прошлый год. Однако, как только он начал писать, он уже не смог остановиться, и через три дня неистовой графомании первоначальные заметки выросли до восьмидесятистраничной статьи “Scrum and XP from the Trenches”, которая вскоре переросла в эту книгу.
    Хенрик применяет целостный подход и с удовольствием выступает в роли менеджера, программиста,
    ScrumMaster'а, учителя или тренера. Помогая компаниям создать прекрасный софт и крепкую команду, он с энтузиазмом берётся за любую роль, которая в данной ситуации необходима.
    Хенрик вырос в Токио, а сейчас живёт в Стокгольме со своей женой Софией и двумя детьми. Он увлечённо занимается музыкой в свободное время, сочиняет, играет на бас-гитаре и клавишных инструментах в местных группах. Чтобы узнать биографию более детально, посетите http://www.crisp.se/henrik.kniberg
    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта