WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     || 2 | 3 |

«Scrum и XP: заметки с передовой Yes, we did! Чтобы прочитать эту книгу вам понадобится всего лишь два-три часа. Чтобы её перевести участникам сообщества Agile Ukraine потребовалось 4 месяца. Поверьте, мы не халтурили и ...»

-- [ Страница 1 ] --

Scrum и XP: заметки с передовой

Yes, we did!

Чтобы прочитать эту книгу вам понадобится всего лишь два-три часа. Чтобы её перевести участникам

сообщества Agile Ukraine потребовалось 4 месяца. Поверьте, мы не халтурили и делали свою работу от всей

души.

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

наших активистов в фактах.

Максим Харченко умудрялся переводить даже на море. Спасибо Гипер.NET.

Дима Данильченко – директор и по совместительству (да и такое бывает ) один из самых активных переводчиков в нашем проекте.

Если по ходу книги вам очень понравился перевод, и вы заулыбались, то, скорее всего, эту главу переводил Артём Сердюк.

Боря Лебеда автоматизировал конвертацию оригинала из word'а в wiki формат. Я и понятия не имел, что это можно сделать так легко.

Ярослав Гнатюк знает Хенрика лично.

Антон Марюхненко – самый молодой и перспективный.

Сергей Петров – самый старший и опытный.

Марина Кадочникова – наша единственная девушка-переводчица.

Серёжа Мовчан, конечно же, я про тебя не забыл. Просто хотел сказать тебе отдельное спасибо. Ты был тем вторым локомотивом, благодаря которому нам удалось дотянуть до победного конца. Ведь как говорится в одной японской поговорке: "Начинать легко, продолжать сложно".

Спасибо Марине Зубрицкой и Лёше Мамчию за финальную вычитку и редактуру. Им удалось найти свыше ста ошибок, в уже, казалось бы, вылизанном тексте. Нет предела совершенству.

Не забудем мы и про тех, у кого было желание, но, как часто это бывает, не было времени: Сергей Евтушенко, Артём Марченко, Алексей Тигарев, Тим Евграшин, Александр Кулик.

Лёша Солнцев, инициатор и координатор первого украинского краудсорсингого проекта, Certified Scrum Master P.S. Оригинал книги вы можете скачать по адресу http://www.infoq.com/minibooks/scrum-xp-from-the-trenches Scrum и XP: заметки с передовой Оглавление Предисловие Джеффа Сазерленда

Предисловие Майка Кона

Предисловие – Эй! А Scrum-то работает!

Вступление

Отказ от ответственности

Зачем я это написал

Так что же такое Scrum?

Как мы работаем с product backlog'ом

Дополнительные поля для user story

Как мы ориентируем product backlog на бизнес

Как мы готовимся к планированию спринта

Как мы планируем спринт

Почему без product owner'а не обойтись

Почему качество не обсуждается

Планирование спринта, которое никак не заканчивается

Распорядок встречи по планированию спринта

Определяем длину спринта.

Определение цели спринта

Выбор историй, которые войдут в спринт

Как product owner может влиять на то, какие истории попадут в спринт?

Как команда принимает решение о том, какие истории включать в спринт?

Планирование, основанное на интуиции

Планирование, основанное на методе оценки производительности

Какую технику мы используем для планирования?

Почему мы используем учетные карточки

Критерий готовности

Оценка трудозатрат с помощью игры в planning poker

Уточнение описаний историй

Разбиение историй на более мелкие истории

Разбиение историй на задачи

Выбор времени и места для ежедневного Scrum'а

Когда пора остановиться

Технические истории

Как мы используем систему учёта дефектов для ведения product backlog'а

Свершилось! Планирование спринта закончено!

Как мы доносим информацию о спринте до всех в компании

Как мы создаём sprint backlog

Формат sprint backlog'a

Как работает доска задач

Пример 1 – после первого ежедневного Scrum'а

Пример 2 – еще через пару дней

Как работает burndown-диаграмма

Тревожные сигналы на доске задач

Эй, как насчет отслеживания изменений?

Как мы оцениваем: в днях или часах?

Как мы обустроили комнату команды

Уголок обсуждений

Усадите команду вместе

Не подпускайте product owner'а слишком близко

Не подпускайте менеджеров и тренеров слишком близко

Как мы проводим ежедневный Scrum

Как мы обновляем доску задач

Как быть с опоздавшими

Как мы поступаем с теми, кто не знает, чем себя занять

Как мы проводим демо

Почему мы настаиваем на том, чтобы каждый спринт заканчивался демонстрацией

Памятка по подготовке и проведению демо

Что делать с "недемонстрируемыми" вещами

Как мы проводим ретроспективы

Почему мы настаиваем на том, чтобы все команды проводили ретроспективы

Как мы проводим ретроспективы

Как учиться на чужих ошибках

Изменения. Быть или не быть

Типичные проблемы, которые обсуждают на ретроспективах

«Нам надо было больше времени потратить на разбиение историй на подзадачи».................. «Очень часто беспокоят извне»

«Мы взяли огромный кусок работы, а закончили только половину»

«У нас в офисе бардак и очень шумно»

Отдых между спринтами

Как мы планируем релизы и составляем контракты с фиксированной стоимостью

Определяем свою приёмочную шкалу

Оцениваем наиболее важные истории

Прогнозируем производительность

Сводим всё в план релиза

Корректируем план релиза

Как мы сочетаем Scrum с XP



Парное программирование

Разработка через тестирование (TDD)

TDD и новый код

TDD и существующий код

Эволюционный дизайн

Непрерывная интеграция (Continuous integration)

Совместное владение кодом (Collective code ownership)

Информативное рабочее пространство

Стандарты кодирования

Устойчивый темп / энергичная работа

Как мы тестируем

Скорее всего, вам не избежать фазы приёмочного тестирования

Минимизируйте фазу приёмочного тестирования

Повышайте качество, включив тестировщиков в Scrum-команду

Тестировщик – это "последняя инстанция".

Чем занимается тестировщик, когда нечего тестировать?

Повышайте качество – делайте меньше за спринт!

Стоит ли делать приёмочное тестирование частью спринта?

Соотношение спринтов и фаз приёмочного тестирования

Подход №1: "Не начинать новые истории, пока старые не будут готовы к реальному использованию"

Подход №2: "Начинать реализовывать новые истории, но наивысшим приоритетом ставить доведение старых до ума"

Неправильный подход: "Клепать новые истории"

Не забывайте об ограничении системы

Возвращаясь к реальности

Как мы управляем несколькими Scrum-командами

Сколько сформировать команд

Виртуальные команды

Оптимальный размер команды

Синхронизировать спринты или нет?

Почему мы ввели роль "тимлида"

Как мы распределяем людей по командам

Нужны ли узкоспециализированные команды?

Подход №1: команды, специализирующиеся на компонентах

Подход №2: универсальные команды

Стоит ли изменять состав команды между спринтами?

Участники команды с частичной занятостью

Как мы проводим Scrum-of-Scrums

Scrum-of-Scrums уровня продукта

Scrum-of-Scrums уровня компании

Чередование ежедневных Scrum'ов

«Пожарные» команды

Разбивать product backlog или нет?

Подход первый: Один product owner – один backlog

Подход второй: Один product owner – несколько backlog'ов

Подход третий: Несколько product owner'ов – несколько backlog'ов

Параллельная работа с кодом

Ретроспектива для нескольких команд

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

Оффшорная разработка

Члены команды, работающие дома

Памятка ScrumMaster'а

В начале спринта

Каждый день

В конце спринта

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

Список рекомендованной литературы

Об авторе

Предисловие Джеффа Сазерленда Командам необходимо знать основы Scrum'а. Как создать и оценить product backlog? Как получить из него sprint backlog? Как работать с burndown-диаграммой и вычислять производительность(velocity) своей команды? Книга Хенрика – это базовое руководство для начинающих, которое поможет командам перейти из состояния "мы пробуем Scrum" в состояние "мы успешно работаем по Scrum'у".

Хорошая реализация Scrum'а становится всё важнее и важнее для команд, которые хотят получить инвестиции. Я выступаю в качестве тренера по гибким методологиям для группы компаний с венчурными инвестициями, помогая им в стремлении вкладывать деньги только в настоящие Agile-компании. Глава группы инвесторов требует от компаний, составляющих инвестиционный портфель, ответа на вопрос, знают ли они производительность своих команд. Многих этот вопрос ставит в тупик. Будущие инвестиции требуют от команд знания собственной производительности разработки программного обеспечения.

Почему это так важно? Если команда не знает собственной производительности, следовательно product owner не может разработать стратегический план развития продукта с достоверными датами релизов. Без такого плана компанию может постичь неудача, в результате чего инвесторы потеряют свои деньги.

С этой проблемой сталкиваются разнообразные компании: большие и маленькие, старые и новые, с финансированием и без. Во время недавнего обсуждения реализации Scrum'а компанией Google на лондонской конференции я решил узнать у аудитории, состоящей из 135 человек, кто из них использует Scrum? Я получил утвердительный ответ лишь от тридцати человек. Затем я поинтересовался, соответствует ли их процесс Nokia-стандарту итеративной разработки. Итеративная разработка – это ключевое положение Agile Manifest'а: "Постарайтесь предоставлять версии работающего программного обеспечения как можно чаще и раньше". В результате проведения ретроспектив с сотнями Scrum-команд в течение нескольких лет, Nokia выработала некоторые базовые требования к итеративной разработке:

• Итерации должны иметь фиксированную длину и не превышать шести недель.

• К концу каждой итерации код должен быть протестирован отделом качества (QA) и работать как Из тридцати человек, которые сказали, что работают по Scrum'у, лишь половина подтвердила, что их команды придерживаются первого принципа Agile Manifest'а и соответствую Nokia-стандарту.

Затем я спросил их, придерживаются ли они Scrum-стандарта, разработанного Nokia:

• У Scrum-команды должен быть один product owner и команда должна знать, кто это.

• У product owner'а должен быть один product backlog с историями и их оценками, выполненными • У команды должна быть burndown-диаграмма, а сама команда должна знать свою производительность.

• На протяжении спринта никто не должен вмешиваться в работу команды.

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

Основная ценность книги Хенрика состоит в том, что если вы будете следовать его советам, то у вас будет и product backlog, и оценки для product backlog'а, и burndown-диаграмма. Вы также будете знать производительность вашей команды и сможете использовать все наиболее важные практики высокоэффективных Scrum-команд. Вы пройдёте Nokia Scrum-тест, за что инвесторы оценят вас по достоинству. Если вы – начинающая компания, то, возможно, вы получите такие жизненно важные для вашего проекта финансовые вливания. Возможно вы – будущее разработки программного обеспечения, вы – создатель нового поколения программ, которые станут лидерами рынка.

Джефф Сазерленд, доктор наук, соавтор Scrum Предисловие Майка Кона И Scrum, и XP (экстремальное программирование) требуют от команд завершения вполне осязаемого куска работы, который можно предоставить пользователю в конце каждой итерации. Эти итерации планируются таким образом, чтобы быть короткими и фиксированными по времени. Такая целенаправленность на выпуск рабочего кода за короткий промежуток времени означает только одно: в Scrum и XP нет места теории. Agile-методологии не гонятся за красивыми UML моделями, выполненными при помощи специальных case-средств, за созданием детализированных спецификаций или написанием кода, который сойдёт на все случаи жизни. Вместо этого Scrum и XP команды концентрируются на том, чтобы завершить необходимые задачи. Эти команды могут мириться с ошибками в ходе работы, но они понимают, что лучшее средство выявить эти ошибки – это перестать думать о софте на теоретическом уровне анализа и дизайна, и, закатав рукава, полностью посвятить себя созданию продукта.

Именно акцент на действии, а не на теории ярко выделяет эту книгу среди прочих. То, что Хенрик разделяет эти взгляды, видно с самых первых страниц книги. Он не предлагает нам длинное описание того, что такое Scrum; вместо этого он просто ссылается на необходимые веб-ресурсы. Первым делом Хенрик начинает с описания того, как его команда работает со своим product backlog'ом. Затем он проходит по всем элементам и практикам правильно поставленного agile-проекта. Без теоретизирования. Без справочных данных. Ничего этого не нужно: книга Хенрика – не философское объяснение, почему Scrum работает или почему мы должны делать так, а не иначе. Это описание того, как работает одна успешная agile-команда.

Хенрик предлагает набор избранных практик и описывает живые примеры, чтобы помочь нам понять, как использовать Scrum и XP на передовой.

Майк Кон Автор книг Agile Estimating and Planning и User Stories Applied for Agile Software Development.

Предисловие – Эй! А Scrum-то работает!

Scrum работает! По крайней мере, нам он подошёл (я имею в виду проект моего клиента из Стокгольма, чьё имя я не хотел бы называть). Надеюсь, вам он тоже подойдёт! И, возможно, именно эта книга поможет вам на пути освоения Scrum'а.

Это был первый случай в моей жизни, когда я увидел как методология (ну да, Кен [Кен Швебер – соавтор Scrum'а], – фреймворк) работает "прямо из коробки". Просто подключи и работай. И при этом все счастливы:

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

Не хочеться говорить, что я удивлён, но... так и есть. После беглого знакомства с парой книг по теме, Scrum произвёл на меня хорошее впечатление, даже слишком хорошее, чтобы быть похожим на правду. Так что неудивительно, что я был настроен слегка скептически. Однако после года использования Scrum'а, я настолько впечатлён (и большинство людей в моих командах тоже), что, скорее всего, буду использовать Scrum во всех новых проектах, ну, разве что кроме случаев, когда есть веская причина не делать этого.

Вступление Собираетесь начать практиковать Scrum у себя в компании? Или вы уже работаете по Scrum’у пару месяцев? У вас уже есть базовые понятия, вы прочитали несколько книг, а, возможно, даже получили сертификат Scrum Master'а? Поздравляю!

Однако, согласитесь, какая-то неясность всё равно остаётся.

По словам Кена Швебера, Scrum – это не методология, это фреймворк. А это значит, что Scrum не дает готовых рецептов, что делать в тех или иных случаях. Вот незадача!

Но у меня для вас есть хорошая новость: я расскажу, как именно я практикую Scrum... очень подробно и со всеми деталями. Однако, и без плохой новости не обойдётся: я расскажу всего лишь о том, как практикую Scrum я. Это значит, что вам не обязательно делать всё точно так же. На самом деле, в зависимости от ситуации, я и сам могу делать что-то по-другому.

Достоинство Scrum'a и одновременно самый большой его недостаток в том, что его необходимо адаптировать к вашей конкретной ситуации.

Моё видение Scrum’а формировалось на протяжении целого года и стало результатом экспериментов в команде численностью около 40-ка человек. Одна компания попала в крайне сложную ситуацию: постоянные переработки, авралы, серьёзные проблемы с качеством, проваленные сроки и прочие неприятности. Эта компания решила перейти на Scrum, но внедрить его толком у неё не получалось. В итоге эта задача была поручена мне. К тому времени для большинства сотрудников слово «Scrum» было просто набившим оскомину термином, эхо которого звучало время от времени в коридорах без какого-либо отношения к их повседневной работе.

Через год работы мы внедрили Scrum на всех уровнях компании: поэкспериментировали со всевозможными размерами команд (от 3 до 12 человек), попробовали спринты различной длины (от 2 до недель) и разные способы определения критерия готовности, разнообразные форматы product и sprint backlog'ов (Excel, Jira, учетные карточки), разные стратегии тестирования, способы демонстрации результатов, способы синхронизации Scrum-команд и так далее. Также мы опробовали множество XP практик: с разными способами непрерывной интеграции, с парным программированием, TDD (разработкой через тестирование), и т.д. А самое главное – разобрались, как все это дело сочетается со Scrum'ом.

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

Отказ от ответственности Эта книга не претендует на звание «единственно правильного» учебного пособия по Scrum'у! Она всего лишь предлагает вам пример удачного опыта, полученного на протяжении года в результате постоянной оптимизации процесса. Кстати, у вас запросто может возникнуть ощущение, что мы всё поняли не так.

Эта книга отражает моё субъективное мнение. Она никоим образом не является официальной позицией Crisp'а [от переводчика – консалтинговая компания, в которой работает Хенрик] или моего нынешнего Зачем я это написал клиента. Именно поэтому я специально избегал упоминания каких-либо программных продуктов или людей.

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

Так что же такое Scrum?

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

Ой, простите, я совсем забыл про новичков в Scrum'е и XP. Если вы к ним относитесь, вам не мешало бы посетить следующие веб-ресурсы:

• http://agilemanifesto.org/ • http://www.mountaingoatsoftware.com/scrum • http://www.xprogramming.com/xpmag/whatisxp.htm Нетерпеливые же могут продолжать читать книгу дальше. Я объясню все основные Scrum’овские термины по ходу изложения.

Я надеюсь, что эта книга станет стимулом для тех, кто так же не против поделиться своими мыслями на счёт Scrum'а. Пожалуйста, не забывайте сообщать мне о них!

Как мы работаем с product backlog'ом Product backlog – это основа Scrum’а. С него все начинается. По существу, product backlog является списком требований, историй, функциональности, которые упорядочены по степени важности. При этом все требования описаны на понятном для заказчика языке.

Элементы этого списка мы будем называть "историями", user story, а иногда элементами backlog'а.

Описание каждой нашей истории включает в себя следующие поля:

• ID – уникальный идентификатор – просто порядковый номер. Применяется для идентификации историй в случае их переименования.

• Название – краткое описание истории. Например, “Просмотр журнала своих транзакций”. Оно должно быть однозначным, чтобы разработчики и product owner (владелец продукта) могли примерно понять, о чем идет речь, и отличить одну историю от другой. Обычно от 2 до 10 слов.

• Важность (Importance) – степень важности данной задачи, по мнению product owner'а. Например, 10. Или 150. Чем больше значение, тем выше важность.

o Я предпочитаю не использовать термин “приоритет”, поскольку обычно в этом случае обозначает наивысший приоритет. Это очень неудобно: если впоследствии вы решите, что какая-то история еще более важна, то какой "приоритет" вы тогда ей поставите? Приоритет • Предварительная оценка (initial estimate) – начальная оценка объема работ, необходимого для реализации истории по сравнению с другими историями. Измеряется в story point’ах.

Приблизительно соответствует числу “идеальных человеко-дней”.

o Спросите вашу команду: “Если собрать команду из оптимального количества людей, то есть не слишком большую и не слишком маленькую (чаще всего из двух человек), закрыться в комнате с достаточным запасом еды и работать ни на что не отвлекаясь, то, сколько дней тогда понадобится на разработку завершённого, протестированного продукта, готового к демонстрации и релизу? “. Если ответ будет “Для трёх человек, закрытых в комнате, на это потребуется 4 дня”, это значит, что изначальная оценка o В этом случае важно получить не максимально точные оценки (например, для истории в story point’а потребуется 2 дня), а сделать так, чтобы оценки верно отражали относительную трудоёмкость историй (например, на историю, оцененную в 2 story point’а потребует примерно в два раза меньше работы по сравнению с историей в 4 story point’а).

• Как продемонстрировать (how to demo) – краткое пояснение того, как завершённая задача будет продемонстрирована в конце спринта. По сути, это простой тестовый сценарий типа “Сделайте это, сделайте то – должно получиться то-то”.

o Если у вас практикуется Test Driven Development (разработка через тестирование или кратко TDD), то это описание может послужить псевдокодом [пр. Переводчика: в программировании специальный способ записи любого алгоритма] для приемочного • Примечания – любая другая информация: пояснения, ссылки на дополнительные источники информации, и т.д. Обычно она представлена в форме кратких тезисов.

Product backlog (пример) ID Название Важность Предварительная Как продемонстрировать Примечания Мы экспериментировали и с другими полями, но в итоге именно эти 6 оказались для нас самыми применимыми.

Обычно product backlog хранится в Excel таблице с возможностью совместного доступа (несколько пользователей могут редактировать файл одновременно). Хотя официально документ принадлежит product owner’у, мы не запрещаем другим пользователям редактировать его. Ведь разработчикам довольно часто приходится заглядывать в product backlog, чтобы что-то уточнить или изменить оценку предполагаемых трудозатрат.

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

Дополнительные поля для user story Однако почти все остальные артефакты хранятся у нас в системе контроля версий.

Иногда мы используем дополнительные поля в product backlog’е. В основном для того, чтобы помочь product owner’у определиться с его приоритетами.

• Категория (track). Например, “панель управления” или “оптимизация”. При помощи этого поля product owner может легко выбрать все пункты категории “оптимизация” и установить им низкий • Компоненты (components) – указывает, какие компоненты (например, база данных, сервер, клиент) будут затронуты при реализации истории. Данное поле состоит из группы checkbox’ов, которые отмечаются, если соответствующие компоненты требуют изменений. Поле “компоненты” окажется особенно полезным, если у вас несколько Scrum команд, например, одна, которая работает над панелью управления и другая, которая отвечает за клиентскую часть. В данном случае это поле существенно упростит для каждой из команд процедуру выбора истории, за которую она могла бы взяться.

• Инициатор запроса (requestor). Product owner может захотеть хранить информацию о всех заказчиках, заинтересованных в данной задаче. Это нужно для того, чтобы держать их в курсе дела • ID в системе учёта дефектов (bug tracking ID) – если вы используете отдельную систему для учёта дефектов (например. Jira), тогда в описании истории полезно хранить ссылки на все дефекты, Как мы ориентируем product backlog на бизнес Если product owner – технарь, то он вполне может добавить историю вроде “Добавить индексы в таблицу Events”. Зачем ему это нужно? Да потому, что реальной целью этой истории, скорее всего, будет “ускорение поиска событий в панели управления”.

И вообще, может оказаться, что не индексы были узким местом, приводящим к медленной работе поисковой формы. Причиной могло быть что-то абсолютно другое. Обычно команде виднее, каким образом лучше решить подобную проблему, поэтому product owner должен ставить цели с точки зрения бизнеса (т.е.

что надо).

Когда я вижу технические истории подобные этой, я обычно задаю product owner’у вопросы вроде “Да, но зачем?”. Я делаю это до тех пор, пока не проявится истинная причина появления истории (в приведенном примере – повысить скорость поиска событий в панели управления). Первоначальное техническое описание проблемы можно поместить в колонку с примечаниями: “Индексирование таблицы Events может решить проблему”.

Как мы готовимся к планированию спринта Не успеешь оглянуться – как наступил день планирования нового спринта. Мы не раз приходили к одному и тому же выводу:

Вывод: Убедитесь, что product backlog находится в нужной кондиции, прежде чем начинать планирование.

Что значит в нужной кондиции? Что все user story отлично описаны? Что все оценки трудозатрат корректны? Что все приоритеты расставлены? Нет, нет и ещё раз нет! Это значит:

• Product backlog должен существовать! (Кто бы мог подумать?) • У каждого продукта должен быть один product backlog и один product owner.

• Все наиболее важные задачи должны быть классифицированы по уровню важности, а их числовые значения не должны совпадать.

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

o Все user story, которые, по мнению product owner’а имеют гипотетическую возможность попасть в следующий спринт, должны иметь уникальное значение важности.

o Уровень важности используется исключительно для упорядочивания историй. Т.е. если история А имеет уровень важности 20, а история Б важность 100, это означает что Б важнее A. Это не означает, что Б в пять раз важнее А. Если Б присвоить важность 21 – смысл не o Полезно оставлять промежутки из целых чисел между значениями на тот случай, если появится история В, более важная, чем А, но менее важная, чем Б. Конечно, можно выкрутиться, присвоив ей уровень важности 20.5, но выглядит это коряво, поэтому для промежутков мы решили использовать только целые числа!

• Product owner должен понимать каждую историю (чаще всего он их автор, хотя иногда другие члены команды тоже могут вносить предложения, и тогда product owner обязан назначить им приоритетность). Он не обязан знать во всех подробностях, что конкретно следует сделать, но он должен понимать, почему эта user story была включена в product backlog.

Примечание: Хотя заинтересованные лица могут добавлять user story в product backlog, они не имеют права присваивать им уровень важности. Это прерогатива product owner’а. Они также не могут добавлять оценки трудозатрат, поскольку это прерогатива команды.

Мы также попробовали:

• Использовать Jira (нашу систему учёта дефектов) для хранения product backlog’а. Но для большинства product owner’ов навигация по Jira была слишком обременительна. В Excel’е манипулировать историями намного проще и приятней. Вы можете раскрашивать текст, переставлять пункты, добавлять, в случае необходимости, новые колонки, комментировать, импортировать и экспортировать данные и т.д.

• Использовать программы, заточенные под Agile процесс, такие как VersionOne, ScrumWorks, Xplanner и т.д. Но толком до них руки так и не дошли, хотя, возможно, когда-нибудь мы их всётаки попробуем.

Как мы планируем спринт Как по мне, планирование спринта – наиболее важная часть Scrum’a. Плохо проведённое планирование может испортить весь спринт.

Цель планирования заключается в том, чтобы, с одной стороны, дать команде достаточно информации для спокойной работы в течение нескольких недель, а с другой – убедить product owner’а в том, что команда сможет сделать свою работу.

Хорошо-хорошо, это было весьма расплывчатое определение. Давайте лучше поговорим о том, что должно быть итогом планирования:

• Список участников команды (и степень их занятости, если она не стопроцентная).

• Sprint backlog (список историй, которые вошли в спринт).

• Дата демонстрации.

Почему без product owner'а не обойтись • Место и время проведения ежедневного Scrum’а.

Иногда product owner с большой неохотой тратит своё время на планирование вместе с командой:

“Ребята, я уже перечислил всё, что мне нужно. Я больше не могу тратить время на ваше планирование”. Это, между прочим, очень серьёзная проблема.

Команде и product owner’у просто необходимо планировать вместе, потому что каждая user story имеет три параметра, которые очень тесно связаны между собой.

Объём работ и приоритеты задач определяются product owner’ом. Зато оценка трудозатрат – это прерогатива команды. Благодаря взаимодействию команды и product owner’а в ходе планирования спринта вырабатывается оптимальное соотношение всех трех переменных.

Чаще всего product owner начинает планирование следующего спринта с описания основных целей и наиболее значимых историй. После этого команда производит оценку трудозатрат всех user story, начиная с самой важной. В процессе у команды возникают очень важные вопросы по поводу объёма предстоящих работ. Например, “Подразумевает ли история “удалить пользователя” удаление всех его незавершённых транзакций?”. Иногда ответ на этот вопрос будет большим сюрпризом для команды и потребует пересмотра всех оценок для данной user story.

В некоторых случаях время, которое понадобится на выполнение user story, не будет совпадать с ожиданиями product owner’а. Следовательно, он захочет пересмотреть приоритет для story или изменить объём работы. Это, в свою очередь, заставит команду выполнить переоценку и так далее, и так далее.

Такая взаимная зависимость является основой Scrum’а, да, в принципе, и всего Agile’а.

Но что если product owner всё-таки упорно отказывается выделить пару часов на планирование спринта? В таком случае я обычно пытаюсь последовательно применить следующие стратегии:

• Попытайтесь донести до product owner’а, почему его участие крайне важно – а вдруг до него • Попробуйте найти в своих рядах добровольца, который смог бы стать представителем product owner’а. Скажите своему product owner’у: “У вас нет времени на планирование, Джеф будет исполнять вашу роль. У него будут все полномочия на изменение приоритетов и объёмов работ.

Советую вам обсудить с ним как можно больше нюансов до начала планирования. Если вы против Джефа, тогда выберите кого-то другого, но только с условием, что он будет присутствовать на планировании от начала до конца”.

• Попробуйте убедить менеджмент найти вам нового product owner’а.

• Отложите начало спринта до того момента, пока у product owner’а не появится свободная минутка для совместного планирования. А пока не берите на себя никаких новых обязательств. Пусть в это Почему качество не обсуждается время ваша команда займётся любой другой полезной работой.

В предыдущей главе я намеренно не показал на треугольнике четвертую переменную – качество.

Попытаюсь объяснить разницу между внутренним качеством и внешним качеством.

• Внешнее качество – это то, как пользователи воспринимают систему. Медленный и неинтуитивный пользовательский интерфейс – это пример плохого внешнего качества.

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

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

Я рассматриваю внешнее качество, как часть общего объема работ. Ведь с точки зрения бизнеса бывает весьма целесообразно как можно быстрее выпустить версию системы с немного корявым и медленным пользовательским интерфейсом, и лишь потом подготовить версию с доработками и исправлениями. Здесь право выбора должно оставаться за product owner’ом, так как именно он отвечает за определение объёма работ. И напротив – внутреннее качество не может быть предметом дискуссии. Команда постоянно должна следить за качеством системы, поэтому оно попросту не обсуждается. Никогда.

(Ну ладно, почти никогда) Так как же нам различать задачи, связанные с внутренним и внешним качеством?

Представьте, что product owner говорит: “Хорошо ребята, я понимаю, почему вы оценили эту задачу в story point’ов, но я уверен, что, если вы чуточку помозгуете, то сможете по-быстрому “залатать” проблему”.

Ага! Он пытается использовать внутреннее качество как переменную! Как я догадался? Да, потому что он хочет, чтобы мы уменьшили оценку задач, не уменьшив при этом объём работ. Слово “заплатка” должно вызывать у вас тревогу.

Почему же мы так жестко стоим на своем?

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

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

Возможно, стоит упростить обработку ошибок и сделать “Улучшенную обработку ошибок” отдельной историей оставив ее на будущее? Или может понизить приоритет остальных историй, чтобы мы могли Планирование спринта, которое никак не заканчивается сосредоточить все свои усилия на этой?”.

Самая большая сложность при планировании спринта состоит в следующем:

1. Люди не расчитывают, что это займёт так много времени 2. … но так оно и происходит!

В Scrum’е всё ограничено по времени. Мне очень нравится это простое правило, и мы всячески пытаемся его придерживаться.

Так что же мы делаем, когда ограниченное по времени планирование спринта близится к концу, а цель спринта или sprint backlog всё ещё не определены? Просто обрываем планирование? Продлеваем на час?

Или, быть может, мы завершаем собрание и продолжаем его на следующий день?

Это случается снова и снова, особенно в новых командах. Как вы обычно решаете эту проблему? Я не знаю. А как решаем её мы? Ну, обычно, я бесцеремонно обрываю встречу. Заканчиваю её. Пусть спринт пострадает. Точнее, я говорю команде и product owner’у: «Итак, встреча заканчивается через 10 минут. Мы, до сих пор, полностью не спланировали спринт. Можем ли мы начать работать с тем, что у нас есть, или назначим ещё одно 4-х часовое планирование спринта на завтра в 8 утра?». Можете догадаться, что они отвечают… :o) Я несколько раз давал возможность совещанию затянуться, но обычно это, ни к чему не приводило.

Главная причина этому – усталость участников встречи. Если команда не выработала подходящий план спринта за 2 – 8 часов (зависит от конкретно ваших ограничений по времени), они, скорее всего, не управятся с ним и в дополнительное время. Второй вариант, по правде, достаточно хорош: назначить новую встречу на следующий день. За исключением того, что люди обычно нетерпеливы и хотят быстрее начать спринт, а не тратить ещё пару часов на планирование.

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

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

Распорядок встречи по планированию спринта Наличие хотя бы примерного расписания значительно увеличит ваши шансы закончить планирование спринта в отведённое для этого время.

Например, наше расписание выглядит так:

Планирование спринта: с 13:00 до 17:00 (после каждого часа перерыв на 10 минут) • 13:00 – 13:30. Product owner разъясняет цель спринта и рассказывает про бизнес-процессы из product backlog’а. Обсуждается время и место проведения демо.

• 13:30 – 15:00. Команда проводит оценку времени, которое потребуется на разработку бизнеспроцессов и, при необходимости дробит их на более мелкие. В некоторых случаях product owner может изменить приоритет их исполнения. Выясняем все интересующие нас вопросы. Для наиболее важных заполняем поле «Как продемонстрировать».

• 15:00 – 16:00. Команда определяет набор user story, которые войдут в следующий спринт. Чтобы проверить насколько это реально, вычисляем производительность команды.

• 16:00 – 17:00. Договариваемся о времени и месте проведения ежедневного Scrum’а (если они изменились по сравнению с прошлым спринтом). После чего приступаем к разбиению user story на Наличие расписания ни в коем случае не подразумевает наличия жестких ограничений. В зависимости от Определяем длину спринта.

того, как проходит встреча, ScrumMaster может увеличить, или уменьшить продолжительность каждого этапа.

Одна из основных задач планирования спринта – это определение даты демо. А это значит, что вам придётся определиться с длиной спринта.

Какая же длина оптимальна?

Короткие спринты – удобны. Они позволяют компании быть максимально “гибкой”, а значит готовой часто корректировать свои планы. Короткий спринт = короткий цикл обратной связи = частые релизы = быстрые отзывы от клиентов = меньше времени тратится на работу в неправильном направлении = быстрое обучение, совершенствование и т.д.

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

В основном короткие спринты больше нравятся product owner’у, а длинные – разработчикам. Поэтому длина спринта – это всегда компромисс. Мы долго экспериментировали и выбрали нашу любимую длину:

3 недели. Большинство наших команд (но не все) используют трёхнедельный спринт. Достаточно короткий, чтобы предоставить адекватную корпоративную “гибкость”, но в тоже время достаточно длинный, для того чтобы команда смогла достигнуть максимальной производительности и успеть решить все вопросы, которые возникнут по ходу спринта.

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

Однако, как только вы найдёте подходящею длину, надолго зафиксируйте её. После нескольких месяцев экспериментов нам подошла длина в 3 недели, поэтому теперь мы следуем этому правилу и используем трёхнедельные спринты. Иногда спринт будет казаться слишком длинным, иногда – слишком коротким. Но сохранение фиксированной длины спринта позволяет выработать корпоративный ритм, в котором все чувствуют себя достаточно комфортно. К тому же исчезнут споры, насчёт даты релиза, так как все знают, что как ни крути, а выпуск новой версии продукта каждые 3 недели.

Определение цели спринта Это случается практически всегда, когда в ходе нашего планирования я задаю вопрос: “Итак, какова же цель спринта?”. Все начинают смотреть на меня удивлёнными глазами, а product owner – морщить лоб, почёсывая свой подбородок.

Почему-то сформулировать цель спринта бывает довольно непросто. Но я до сих пор убеждён, что усилия, потраченные на попытки сформулировать цель, оправдывают себя. Лучше паршивая цель, чем её отсутствие. Например, цели могут быть следующие: “заработать больше денег”, “завершить три истории с наивысшими приоритетами”, “удивить исполнительного директора”, “подготовить систему к бетатестированию”, “добавить возможность администрирования” или что-нибудь в этом духе. Самое главное, чтобы цель была обозначена в терминах бизнеса, а не в технических терминах. То есть языком, понятным даже людям вне команды.

Цель спринта должна отвечать на главный вопрос “Зачем мы работаем над этим спринтом? Почему мы все просто не уйдём в отпуск?”. На самом деле, самый простой способ вытянуть цель спринта из product owner’a – напрямую задать ему этот вопрос.

Целью должно быть что-то, что не было ещё достигнуто. “Удивить исполнительного директора” может быть неплохой целью. Но только не в том случае, когда он и так в восторге от текущего состояния системы. В этом случае, все могут просто собраться и пойти домой, а цель спринта всё равно будет достигнута.

Цель спринта может показаться слегка глупой и надуманной на протяжении всего планирования. Но чаще всего, основная её ценность начинает проявляться к середине спринта, когда люди начинают забывать чего они хотят достичь в этом спринте. Если у вас работают несколько Scrum-команд (как у нас) над разными продуктами, очень полезно иметь возможность просмотреть список целей спринтов для всех команд на одной wiki-странице (или ещё где-нибудь), а также вывесить их на видном месте, чтобы все (а не только топВыбор историй, которые войдут в спринт менеджеры) знали, чем занимается компания и зачем!

Основное в планировании спринта – процедура выбора историй, которые войдут в спринт. А точнее, выбор историй, которые нужно скопировать из product backlog’a в sprint backlog.

Взгляните на картинку. Каждый прямоугольник представляет собой историю, расположение которой соответствует уровню её важности. Наиболее важная история находится наверху списка. Размер истории (т.е.

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

Честно говоря, sprint backlog – это выборка историй из product backlog'a. Он представляет собой список историй, которые команда обязалась выполнить в течение спринта.

Именно команда решает, сколько историй войдёт в спринт. Ни product owner, ни кто-нибудь ещё.

В связи с этим, возникают два вопроса:

1. Каким образом команда решает, какие истории попадут в спринт?

2. Как product owner может повлиять на их решение?

Как product owner может влиять на то, какие истории попадут в спринт?

Начну со второго вопроса.

Допустим, на планировании спринта возникла следующая ситуация:

Product owner’а разочаровал тот факт, что история “Г” не попадает в спринт. Что он может сделать в ходе совещания?

Первый вариант – изменение приоритетов. Если product owner назначит истории “Г” более высокий приоритет, то команда будет обязана включить её в спринт первой (исключив при этом историю “В”).

Второй вариант – изменение объёма работ: product owner начинает уменьшать объём истории “А” до тех пор, пока команда не решит, что историю “Г” можно втиснуть в спринт.

Третий вариант – разбиение истории. Product owner может решить, что некоторые части истории “А” не так уж и важны. Таким образом, он разбивает историю “А” на две истории “А1 и “А2, а затем назначает им разный приоритет.

Итак, несмотря на то, что в большинстве случаев product owner не может контролировать прогнозируемую производительность, у него существует множество способов повлиять на то, какие истории Как команда принимает решение о том, какие истории включать в спринт?

попадут в спринт.

Мы используем два подхода:

1. на основе интуиции Планирование, основанное на интуиции 2. на основе подсчёта производительности ScrumMaster: “Ребята, мы закончим историю “А” в этом спринте?” (Показывает на самую важную историю в product backlog’е) Лиза: “Конечно, закончим. У нас есть три недели, а это довольно тривиальная функциональность”.

ScrumMaster: “Хорошо. А как на счёт истории “Б”?” (Показывает на вторую по важности историю) Том и Лиза одновременно: “Легко!” ScrumMaster: “Хорошо. Как на счёт историй “А”, “Б” и “В”?” Сэм (обращаясь к product owner): “Нужно ли реализовывать расширенную обработку ошибок для истории “В”?” Product owner: “Нет. Пока хватит базовой”.

Сэм: “В таком случае историю “В” мы тоже закончим”.

ScrumMaster: “Хорошо, как на счёт истории “Г”?” Лиза: “Хмм…” Том: “Думаю, что сделаем”.

ScrumMaster: “Вероятность 90% или 50%?” Лиза и Том: “скорее 90%.” ScrumMaster: “Хорошо, значит, включаем историю “Г” в этот спринт. Что скажете на счет истории “Д”?” Сэм: “Возможно”.

ScrumMaster: “90%? 50%?” Сэм: “Ближе к 50%”.

Лиза: “Сомневаюсь”.

ScrumMaster: “В таком случае, не включаем историю “Д”. Обязуемся реализовать истории “А”,”Б”,”В” и “Г”.

Конечно, если успеем, то реализуем и историю “Д”, однако не стоит на это расчитывать. Поэтому историю “Д” исключаем из плана спринта. Согласны?” Все: “Согласны”.

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

Этот подход включает в себя два этапа:

1. Определить прогнозируемую производительность.

производительности.

Производительность является мерой “количества выполненной работы”. Она рассчитывается как сумма первоначальных оценок всех историй, которые были реализованы в течение спринта.

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

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

Я уже слышу ваши возражения: “Какая от этого польза? Высокий или низкий уровень производительности зависит от миллиона факторов! Недалёкие программисты, неправильная начальная оценка, изменение объёма работ, незапланированные потрясения в ходе спринта и т.д.” Согласен, производительность – это приблизительная величина. Но, тем не менее, очень полезная. Она лучше, чем ничего. Производительность даёт нам следущее: “Независимо от причин, мы имеем разницу между запланированным и выполненным объемом работ”.

А что, если история была почти закончена? Почему мы не используем дробные значения для таких историй при подсчете реальной производительности? Потому, что Scrum (как и гибкая разработка (agile), да и бережливое производство (lean)) ориентирован на то, чтобы создавать законченный, готовый к поставке продукт! Ценность реализованной наполовину истории нулевая (а то и отрицательная). См. книгу “Managing the Design Factory” автора Donald Reinertsen или одну из книг авторов Mary Poppendieck и Tom Poppendieck.

Так каким же магическим способом мы оцениваем производительность?

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

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

Более продвинутый вариант оценки производительности заключается в определении доступных ресурсов. Допустим, мы планируем трёхнедельный спринт (15 рабочих дней). Команда состоит из 4-ёх человек. Лиза берёт два отгула. Дэйв сможет уделить проекту только 50% времени плюс берёт один отгул.

Сложим всё вместе …... получаем 50 доступных человеко-дней на спринт.

Получили ли мы прогнозируемую производительность? Нет! Потому что наша единица измерения – это story point, который, в нашем случае приблизительно равен “идеальному человеко-дню”. Идеальный человеко-день – это максимально продуктивный день, когда никто и ничто не отвлекает от основного занятия. Такие дни – редкость. Кроме того, нужно принимать во внимание, что в ходе спринта может быть добавлена незапланированная работа, человек может заболеть и т.д.

Без всякого сомнения, наша прогнозируемая производительность будет менее пятидесяти. Вопрос в том, насколько? Для ответа на него введём определения фокус-фактора.

Прогнозируемая производительность этого спринта (доступные человеко-дни) x (фокус-фактор) = (прогнозируемая производительность) Фокус-фактор – это коэффициент того, насколько команда сфокусирована на своих основных задачах.

Низкий фокус-фактор может означать, что команда ожидает неоднократного вмешательства в свою работу или предполагает, что оценки слишком оптимистичны.

Выбрать разумный фокус-фактор лучше всего, взяв его из последнего спринта (а ещё лучше – среднее значение за несколько последних спринтов).

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

Допустим, в ходе последнего спринта командой из трёх человек в составе Тома, Лизы и Сэма реализовано 18 story point’ов. Продолжительность спринта была 3 недели, что составляет 45 человеко-дней. Необходимо спрогнозировать производительность команды на будущий спринт. Слегка усложним задачу появлением Дэйва – нового участника команды. Принимая во внимание отгулы членов команды и другие вышеупомянутые обстоятельства, получим 50 человеко-дней.

Фокус-фактор последнего спринта: Прогнозируемая производительность этого спринта:

Таким образом, наша прогнозируемая производительность будущего спринта – это 20 story point’ов. Это означает, что команде следует включать истории в план спринта до тех пор, пока их сумма не будет примерно равна 20.

В нашем случае команда может выбрать 4 наиболее важные истории (что составляет 19 story point’ов) или 5 наиболее важных историй (24 story point’а). Остановимся на четырёх историях, т.к. их сумма близка к 20.

Если возникают сомнения, выбирайте меньше историй.

Ввиду того, что выбранные 4 истории составляют 19 story point’ов, окончательная прогнозируемая производительность будущего спринта составляет 19.

Техника “вчерашней погоды” очень удобна, однако использовать её нужно, полагаясь на здравый смысл.

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

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

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

Нет возможности взять данные других команд? Выберите фокус-фактор наугад. Хорошая новость состоит в том, что фокус-фактор придётся угадывать лишь для первого спринта. После первого спринта вы будете располагать статистическими данными и сможете непрерывно измерять и совершенствовать ваш фокусфактор и прогнозируемую производительность.

В качестве “значения по умолчанию” фокус-фактора для новых команд мы обычно используем 70%, т.к.

Какую технику мы используем для планирования?

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

Я упоминал несколько подходов подсчёта производительности: на основе интуиции, на основе “вчерашней погоды” и на основе определения доступных ресурсов с учётом фокус-фактора.

Какой же подход используем мы?

Обычно мы совмещаем все перечисленные подходы. На это не требуется много времени.

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

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

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

Большинство встреч по планированию спринта посвящены историям из product backlog’а: их оценке, расстановке приоритетов, уточнению требований, разбиению на части и т.д.

Как это происходит у нас?

Обычно команда включает проектор, который показывает backlog в Excel’е. Кто-то (обычно product owner или ScrumMaster) садится за клавиатуру, быстро зачитывает историю и начинает обсуждение. По мере того, как команда и product owner обсуждают приоритеты и детали, парень за клавиатурой обновляет историю прямо в Excel’е.

Неплохо, да? А вот и нет! На самом деле это фигня. И что ещё хуже, команда обычно не замечает, что это фигня, аж до конца встречи, когда оказывается, что ещё куча историй не обработана!

Есть способ получше – сделать учетные карточки и прикрепить их на стену (или на большой стол).

Такой “пользовательский интерфейс” выигрывает по сравнению с компьютером и проектором, по следующим причинам:

• Люди вынуждены вставать и ходить, поэтому они более сконцентрированы и не засыпают.

• Каждый чувствует себя причастным к процессу (а не только парень за клавиатурой).

• Можно редактировать несколько историй одновременно.

• Изменить приоритеты очень просто – достаточно поменять местами учетные карточки.

• После окончания встречи учетные карточки можно забрать в комнату, где работает команда, и использовать их на доске задач (см. стр. 38 “Как мы создаём sprint backlog?”).

Вы можете заполнить учетные карточки собственноручно или (как мы обычно делаем) сгенерировать версию для печати прямо из product backlog’а, используя простой скрипт.

PS – скрипт можно найти в моём блоге на http://blog.crisp.se/henrikkniberg.

Важно: После планирования спринта наш ScrumMaster вручную обновляет product backlog в Excel’е, чтобы учесть все изменения, которые были сделаны на карточках. Да, это определённая морока, но мы на это согласны с учетом того, насколько эффективнее проходят встречи по планированию спринтa с использованием бумажных учетных карточек.

Несколько слов о поле “Важность” (Importance). Это значение “важности” из product backlog’а в Excel’е на момент распечатки карточки. Её обозначение на карточке помогает нам отсортировать карточки на стене.

Обычно мы располагаем более важные элементы левее, а менее важные – правее. Однако, когда карточки уже на стене, можно забыть о значении поля “важность” и, вместо этого, использовать порядок, чтобы показать относительную важность истории. Если product owner меняет местами карточки, не тратьте время на обновление значений на бумажках. Просто после встречи убедись, что обновили значения степени важности историй в product backlog’е.

Историю обычно можно оценить легче и точнее, если она разбита на задачи. На самом деле мы использует термин “действие” (activity), потому что слово “задача” (task) значит на шведском кое-что совершенно другое :o) [прим. переводчика – шведско-русский онлайн словарь находится по адресу http://lexin.nada.kth.se/swe-eng.html] Использование карточек также упрощает процедуру разбиения историй на задачи. Можно разбить команду на пары, тогда они смогут одновременно разбивать истории на задачи – каждая свою.

На нашей доске мы отображаем задачи в виде маленьких стикеров под каждой историей. Каждый стикер соответствует одной задаче в рамках этой истории.

Мы не добавляем задачи в product backlog в Excel’е по двум причинам:

• Список задач обычно часто меняется: к примеру, задачи могут изменяться и пересматриваться на протяжении sprint’а. Чтобы синхронизировать с ними product backlog в Excel’е нужно слишком • Скорее всего, на этом уровне детализации product owner не будет участвовать в процессе.

Так же, как и учетные карточки, стикеры с задачами можно использовать в sprint backlog’e (см. стр. 38 “Как мы создаём sprint backlog?”).

Критерий готовности Важно, чтобы и product owner, и команда совместными усилиями определили критерий готовности.

Можно ли считать историю готовой, если весь код был добавлен в репозиторий? Или же она считается готовой, лишь после того как была развёрнута на тестовом сервере и прошла все интеграционные тесты? Где только это возможно, мы используем следующее определение критерия готовности: “история готова к развёртыванию на живом сервере”, однако, иногда мы вынуждены иметь дело с определением типа “развёрнуто на тестовом сервере и готово к приёмочному тестированию”.

Поначалу мы использовали детализированные контрольные листы для определения того, что история готова. А сейчас мы часто просто говорим: “история готова тогда, когда так считает тестировщик из нашей Scrum-команды”. В этом случае проверка того, что пожелания product owner’а были правильно восприняты командой, остаётся на совести тестировщика. В его задачи также входит контроль того, что история достаточно “готова” для того, чтобы удовлетворить принятому критерию готовности.

В конце концов, мы осознали, что нельзя все истории ровнять под одну гребёнку. История “форма поиска пользователей” будет очень сильно отличаться от истории под названием “руководство по эксплуатации”. В последнем случае “готово” может просто означать “принято отделом поддержки клиентов”. Поэтому здравый смысл часто лучше, чем формальный контрольный лист.

Если вы часто путаетесь с определением критерия готовности (как это было поначалу у нас), то вам, Оценка трудозатрат с помощью игры в planning poker наверное, стоит ввести поле “критерий готовности” для каждой истории.

Оценка – это командная работа, и, зачастую, все члены команды участвуют в оценке каждой истории.

Почему?

• Во время планирования мы обычно не знаем, кто будет выполнять ту или иную часть.

• Реализация историй обычно требует участия различных специалистов (дизайн пользовательского интерфейса, кодирование, тестирование, и т.д.).

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

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

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

Но существует прекрасная практика, которая позволяет этого избежать. Она называется planning poker (придуманная Майком Коном, насколько я знаю).

Каждый член команды получает колоду из 13-ти карт, таких же, как на картинке выше. Всякий раз, когда нужно оценить историю, каждый член команды выбирает карту с оценкой (в story point’ах), которая, по его мнению, подходит, и кладёт её на стол рубашкой наверх. Когда всё члены команды определились с оценкой, карты одновременно вскрываются. Таким образом, члены команды вынуждены оценивать самостоятельно, а не “списывать” чужую оценку.

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

Очень важно напоминать всем членам команды, что они должны оценивать общий объём работ по истории, а не только “свою часть”. Тестировщик должен оценивать не только работы по тестированию.

Заметьте, последовательность значений на картах – нелинейная. Вот, например, между 40 и 100 ничего нет. Почему так?

Это нужно, чтобы избежать появления ложного чувства точности для больших оценок. Если история оценивается примерно в 20 story point’ов, то нет смысла обсуждать должна ли она быть 20, или 18, или 21.

Всё, что нам нужно знать, это то, что её сложно оценить. Поэтому мы примерно назначаем ей оценку в 20.

Если у вас возникло желание более детально переоценить эту историю, то лучше разбейте её на более мелкие части и оцените уже их!

И, кстати, жульничать, выкладывая карты 5 и 2, чтоб получить 7, нельзя. Вы должны выбрать или 5 или 8 – семёрки нет.

Есть ещё несколько специальных карт:

• 0 = или “история уже готова” или же её оценка “пара минут работы”.

• ? = “Я понятия не имею. Абсолютно”.

Уточнение описаний историй • Чашка кофе = “Я слишком устал, чтобы думать. Давайте сделаем перерыв”.

Нет ничего ужасней, чем ситуация, когда команда с пафосом демонстрирует новую функциональность продукта, а product owner тяжко вздыхает и говорит: “ну да – всё это красиво, вот только не то, что я просил!” Как убедиться, что product owner и команда понимают историю одинаково? Или что все члены команды понимают все истории одинаково? Да никак. Есть простые способы выявить разницу в понимании. Наиболее простая практика – всегда заполнять все поля для каждой истории (точнее, для всех историй, которые могут попасть в текущий спринт).

Пример №1:

Команда и product owner вполне довольны планом на спринт и уже готовы закончить планирование, но тут ScrumMaster говорит: “Минуточку! У нас нет оценки для истории “добавить пользователя”. Давайте-ка оценим!”. После пары сдач в planning poker, команда сходится на оценке в 20 story point’ов, на что product owner вскакивает с криком: “ЧЕГООО?!?”. Пара минут ожесточённых споров и вдруг выясняется, что команда имела в виду “удобный web-интерфейс для функций добавить, редактировать, удалить и искать пользователей”, а product owner имел в виду только “добавлять пользователей напрямую в базу данных с помощью SQL-клиента”. Команда оценивает историю заново и останавливается на 5-ти story point’ах.

Пример №2:

Команда и product owner вполне довольны планом на спринт и уже готовы закончить планирование, но тут Scrum master говорит: “Минуточку! Вот тут у нас есть история “добавить пользователя”… Как она может быть продемонстрирована?”. Народ пошепчется и через минуту кто-то встанет и начнёт: “ну, для начала надо залогиниться на сайт, потом…”, а product owner тут же перебьёт: “залогиниться на сайт?! Не-не-не-не… эта функция вообще к сайту не должна иметь никакого отношения – это будет просто маленький SQL-скрипт, только для администраторов”.

Поле “как продемонстрировать” может (и должно) быть очень кратким! Иначе вы не успеете вовремя закончить планирование спринта. По сути, это лаконичное описание на обычном русском языке, как вручную выполнить наиболее общий тестовый пример: “Сделать это, потом это, потом проверить, что получилось такто”.

И я понял, что такое простое описание часто позволяют обнаружить разное понимание объёма работ для Разбиение историй на более мелкие истории историй. Хорошо ведь узнать об этом заранее, не так ли?

Истории должны быть не слишком маленькими, но и не слишком большими (в смысле оценок). Если вы получили кучу историй в половину story point’а, то вы наверняка падёте жертвой микроменеджмента. С другой стороны, история в 40 story point’ов несёт в себе риск того, что к концу спринта её успеют закончить лишь частично, а незавершённая история не представляет ценности для вашей компании, она только увеличивает накладные расходы. Дальше – больше: если ваша прогнозируемая производительность 70 story point’ов, а две наиболее важные истории оценены в 40, то планирование несколько усложнится. Команда станет перед выбором: или расслабиться (т.е. включить в спринт только одну историю), или взять на себя невыполнимые обязательства (т.е. включить обе).

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

Обычно мы стремимся получить истории объёмом от двух до восьми человеко-дней. Производительность нашей среднестатистической команды обычно находится в пределах 40-ка – 60-ти человеко-дней, что позволяет нам включать в спринт примерно по 10 историй. Иногда всего 5, а иногда целых 15. Кстати, таким Разбиение историй на задачи числом учётных карточек достаточно удобно оперировать.

Секундочку… В чём разница между “задачами” и “историями”? Очень правильный вопрос.

А различие очень простое: истории это нечто, что можно продемонстрировать, что представляет ценность для product owner’а, а задачи либо нельзя продемонстрировать, либо они не представляют ценности для product owner’a.

Пример разбиения истории на более мелкие:

Пример разбиения истории на задачи:

Несколько интересных наблюдений:

• Молодые Scrum-команды не любят тратить время на предварительное разбиение историй на задачи. Некоторые считают это “водопадным” подходом.

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

• Такая предварительная разбивка заметно увеличивает эффективность ежедневного Scrum’а (см.

стр. 46 “Как мы проводим ежедневный Scrum”).

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

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

следующую главу “Когда пора остановиться”).

Примечание: мы практикуем TDD (разработку через тестирование), из-за чего первой задачей почти каждой истории является “написать приёмочный тест”, а последняя – “рефакторинг” (улучшение Выбор времени и места для ежедневного Scrum'а читабельности кода и удаление повторений кода).

Все часто забывают, что на планировании спринта, помимо всего прочего, необходимо выбрать время и место проведения ежедневного Scrum'а. Без этого ваш спринт обречён на неудачный старт. Ведь первый ежедневный Scrum – это, по большей части, ввод мяча в игру, когда каждый решает с чего начать работу.

Я предпочитаю проводить ежедневный Scrum утром. Хотя, должен признаться, мы особо и не пробовали проводить его в обед или ближе к вечеру.

Недостатки обеденного Scrum'а: приходя на работу утром, вам надо попытаться вспомнить, чем вы обещали команде заниматься сегодня.

Недостатки утреннего Scrum'а: приходя на работу утром, вам надо попытаться вспомнить, чем вы занимались вчера, чтобы можно было отчитаться об этом.

Мне кажется, первый недостаток хуже, так как наиболее важно то, что вы собираетесь делать, а не то, что вы уже сделали.

Мы обычно выбираем самое раннее время, которое не вызывает стонов ни у кого в команде. Обычно это 9:00, 9:30 или 10:00. Очень важно, чтобы все в команде искренне согласились на это время.

Когда пора остановиться Ну вот, время заканчивается. Чем мы можем пожертвовать из всего того, что мы собирались сделать на планировании спринта, если время поджимает?

У меня, например, приоритеты для встречи по планированию спринта такие:

Приоритет №1: Цель спринта и дата демонстрации. Это тот минимум, с которым можно начинать спринт.

У команды есть цель и крайний срок, а работать они могут прямо по product backlog'у. Да это нехорошо, и нужно запланировать ещё одну встречу по планированию sprint backlog'а на завтра, но если вам крайне необходимо стартовать спринт, то это, скорее всего, сработает. Хотя, если быть честным, я так никогда и не стартовал спринт, имея всего лишь цель и дату.

Приоритет №2: Список историй, которые команда включила в sprint backlog.

Приоритет №3: Оценки для каждой истории из sprint backlog'а.

Приоритет №4: Поле "Как продемонстрировать" для каждой истории из sprint backlog'а.

Приоритет №5: Расчёты производительности и ресурсов в качестве "испытания реальностью" для плана на спринт. Также нужен список членов команды с указанием их степени участия в проекте (без этого нельзя рассчитать производительность).

Приоритет №6: Определённое время и место проведения ежедневного Scrum'а. Вообще, выбрать время и место можно за одну минуту, но если время собрания уже закончилось, то ScrumMaster просто выбирает их сам после собрания и оповещает всех по электронной почте.

Приоритет №7: Истории, разбитые на задачи. Разбивать истории на задачи можно также и по мере их поступления в работу, совмещая это с ежедневным Scrum'ом, но такой подход слегка нарушает течение Технические истории спринта.

А теперь ещё одна сложная проблема: технические истории. Это нефункциональные требования, или как их там ещё называют.

Я имею в виду всё, что должно быть сделано, но невидимо для заказчика, не относится ни к одной user story, и не даёт прямой выгоды product owner'у.

Мы называем это "техническими историями".

Например:

• Установить сервер непрерывной интеграции o Почему это надо сделать? Потому, что это сэкономит много времени разработчикам и снизит риск проблемы "большого взрыва" при интеграции в конце итерации.

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

• Обновить Jira (систему учёта дефектов) o Почему это надо сделать? Текущая версия очень нестабильная и медленная: обновление Имеют ли смысл эти истории? Или это задачи не связанные ни с одной историей? Кто задаёт приоритеты?

Нужно ли вовлекать сюда product owner'а?

Мы попробовали различные варианты работы с техническими историями. Мы пробовали считать их самыми обычными user story. Это была неудачная идея: для product owner'а приоритезировать их в product backlog'е было всё равно, что сравнить тёплое с мягким. По очевидным причинам технические истории получали самый низкий приоритет с объяснением: "Да, ребята, несомненно, ваш сервер непрерывной интеграции – очень важная штука, но давайте сперва реализуем кое-какие прибыльные функции? После этого вы можете прикрутить вашу техническую конфетку, окей?" В некоторых случаях product owner действительно прав, но чаще все-таки нет. Мы пришли к выводу, что product owner не всегда компетентен, чтобы идти на компромисс. И вот что мы делаем:

1. Стараемся избегать технических историй. Ищем способ превратить техническую историю в нормальную историю с измеряемой ценностью для бизнеса. В таком случае у product owner'а больше шансов найти разумный компромисс.

2. Если мы не можем превратить техническую историю в обычную, смотрим нельзя ли включить эту работу в уже существующую историю. Например, "рефакторинг доступа к данным" мог бы стать частью истории "редактировать пользователя", поскольку она подразумевает работу с данными.

3. Если оба подхода не прошли, отмечаем это как техническую историю и храним список таких историй отдельно. Пусть product owner видит список, но не редактирует. В переговорах с product owner'ом используем параметры “фокус-фактора” и “прогнозируемой производительности” и выделяем время в спринте для реализации технических историй.

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

Команда: “У нас есть кое-какие внутренние технические работы, которые должны быть сделаны. Мы бы хотели заложить на это 10% всего времени, т.е. снизить фокус-фактор с 75% до 65%. Это возможно?” Product owner: “Естественно, нет! У нас нет времени!” Команда: “Хорошо, давайте посмотрим на наш последний спринт (все бросают взгляд на график производительности на белой доске). Наша прогнозируемая производительность была 80, но реальная производительность оказалась 30, верно?” Product owner: “Именно! У нас нет времени на внутренние технические работы! Нам нужен новый функционал!” Команда: “Хорошо. Но причина ухудшения нашей производительность в том, что мы тратим слишком много времени на создание полной сборки для тестирования”.

Product owner: “Ну и что?” Команда: “А то, что производительность и дальше будет такой низкой, если мы ничего не сделаем”.

Product owner: “Да... и что вы предлагаете?” Команда: “Мы предлагаем выделить примерно 10% следующего спринта на установку билд сервера и другие вещи, чтобы сделать интеграцию менее болезненной. Это, скорее всего, увеличит производительность всех последующих спринтов как минимум на 20%!” Product owner: “Серьёзно? Почему же мы это не сделали на предыдущем спринте?!” Команда: “Хм... потому что вы не захотели, чтобы мы это сделали...” Product owner: “О! Ммм..., ладно, тогда логично, если вы это сделаете сейчас!” Конечно, есть и другой вариант: не вести переговоры с product owner'ом по поводу технических историй, а просто поставить его перед фактом, что у нас фокус-фактор такой-то. Но это не правильно даже не попытаться достичь компромисса.

Если product owner оказался сообразительным и компетентным (нам в своё время с этим действительно повезло), я бы рекомендовал информировать его как можно лучше и дать ему возможность определять общие приоритеты. Ведь прозрачность – это один из основополагающих принципов Scrum'а, верно?

Как мы используем систему учёта дефектов для ведения product backlog'а Есть ещё одна непростая задача. С одной стороны, Excel очень хороший формат для product backlog'а. С другой стороны, вам всё равно нужна система учёта дефектов, и Excel здесь явно не тянет. Мы используем Jira.

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

Мы пробовали следующие подходы:

1. Product owner распечатывает самые высокоприоритетные задачи из Jira, выносит их на планирование спринта и вешает их на стенку с другими историями (неявно указывая их относительный приоритет).

2. Product owner создаёт истории, соответствующие задачам из Jira. Например, “Исправить самые критические ошибки отчётности в админке, Jira-124, Jira-126, и Jira-180”.

3. Работы по исправлению ошибок не включаются в спринт, то есть команда определяет довольно низкий фокус-фактор (например, 50%), чтобы хватало времени на исправления. Затем, вводится предположение, что команда в каждую итерацию будет тратить определённую часть времени на 4. Заносим product backlog в Jira (просто переносим из Excel'а). Считаем баги обычными историями.

Мы ещё не определились, какой подход для нас самый лучший; в действительности он может отличаться в разных командах и меняться от спринта к спринту. Я больше склоняюсь к первому подходу: он прост и Свершилось! Планирование спринта закончено!

понятен.

Ух, я и не думал, что глава по планированию спринта будет такой длинной! [прим. переводчика: я, если честно, тоже :)] Полагаю, этот факт отражает моё мнение: планирование спринта – самая важная вещь в Scrum'е. Вложите побольше усилий в планирование – и всё остальное пойдёт как по маслу.

Планирование спринта прошло успешно, если все (и команда, и product owner) с улыбкой завершают встречу, с улыбкой просыпаются следующим утром и с улыбкой проводят первый ежедневный Scrum.

Затем, конечно, всё может пойти криво, но вы, как минимум, не сможете списать всю вину на планирование спринта :o) Как мы доносим информацию о спринте до всех в компании Важно информировать всю компанию о том, что происходит в вашей команде. Если этого не делать, то остальные начнут жаловаться, или – что ещё хуже – придумывать всякие ужасы про вас.

Мы для этой цели используем “страницу с информацией о спринте”.

Команда ”Джокер”, спринт № • Релиз, готовый к бета-тестированию!

Sprint backlog (в скобках – оценки) • Админка: управление пользователями (5) Прогнозируемая производительность: • Ежедневный scrum: 9:30 – 9:45, в главной комнате • Демонстрация: 24/11/2006, 13:00, в кафетерии Иногда мы также добавляем к названию истории поле ”как продемонстрировать” Сразу же после встречи по планированию спринта эту страницу создаёт ScrumMaster. Он помещает её в wiki, и тут же спамит на всю компанию:

Тема письма: Спринт №15 у команды ”Джокер” начался Всем привет! Команда ”Джокер” только что стартовала спринт №15. Наша цель – продемонстрировать релиз, готовый к бета-тестированию, 24-го ноября.

Страница информации о спринте доступна по адресу:

http://wiki.mycompany.com/jackass/sprint Кроме этого у нас есть ”панель” в wiki, в которой содержаться ссылки на текущие спринты всех команд.

Корпоративная панель Текущие спринты В дополнение ко всему этому наш ScrumMaster распечатывает страницу информации о спринте и вывешивает её на стену в коридоре. Таким образом кто угодно, проходя мимо, может взглянуть на эту страницу и узнать, чем же занимается наша команда.

Когда спринт подходит к концу, ScrumMaster напоминает всем про приближающуюся демонстрацию.

Тема письма: Завтра в 13:00 команда ”Джокер” проводит демонстрацию в кафетерии Всем привет! Все приглашаются на демонстрацию спринта №15 команды ”Джокер” завтра в 13:00 в кафетерии. Будет продемонстрирован релиз, готовый к бета-тестированию.

Страница информации о спринте доступна по адресу:

http://wiki.mycompany.com/jackass/sprint Если всё это делать, то ни у кого не получится сказать, что он не мог узнать, чем занимается команда.

Как мы создаём sprint backlog Уже добрались до этой главы? Отлично!

Итак, мы только что закончили планирование и протрубили на весь мир про начало нашего новоиспечённого спринта. Теперь настал черёд ScrumMaster'а создать sprint backlog. Это необходимо сделать Формат sprint backlog'a после планирования спринта, но до начала первого ежедневного Scrum'а.

Мы поэкспериментировали с разными форматами sprint backlog'а, включая Jira, Excel, не забыли попробовать и обычную настенную доску. Сперва в основном использовали Excel, в интернете можно найти довольно много Excel'евских шаблонов для sprint backlog'ов, с авто-генерацией burndown диаграмм и всякими другими примочками. Я мог бы долго рассказать про sprint backlog'и, созданные при помощи Excel, но я не буду. Даже не стану приводить примеров.

Вместо этого я опишу во всех подробностях формат sprint backlog'а, который мы сочли наиболее эффективным – доску задач на стене.

Найдите большую стену, на которой либо ничего нет, либо висит всякая ерунда вроде логотипа компании, старых диаграмм или ужасных картинок. Очистите её (если необходимо, спросите разрешения). Склейте скотчем большущее полотно бумаги (как минимум 2x2 или 3x2 метра для большой команды). А потом сделайте что-то вроде этого:

Как вариант, можно использовать белую доску. Но такое её использование неэффективно. Если это возможно, сохраните белую доску для набросков будущего дизайна, а в качестве доски для задач используйте "бумажные стены".

Примечание: если вы пользуетесь стикерами для задач, не забудьте прикрепить их скотчем, или же в один "прекрасный" день вы найдете их аккуратной кучкой на полу.

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

Я понял, что простота крайне ценна в такого рода вещах, поэтому я делаю усложнения только в случае, Пример 1 – после первого ежедневного Scrum'а если цена неделания слишком велика.

После первого ежедневного Scrum'a доска задач может выглядеть примерно так:

Как видно, три задачи находятся "в процессе", то есть команда будет заниматься ими сегодня.

Иногда, в больших командах, задача зависает в состоянии "в процессе" потому, что никто не помнит, кто над ней работал. Если такое случается часто, команда обычно принимает меры. Например, отмечает на Пример 2 – еще через пару дней карточке задачи имя человека, который взялся над ней работать.

Через пару дней доска задач может выглядеть примерно так:

Как видно, мы закончили историю "Депозит" (т.е. она была зафиксирована в системе контроля версий, протестирована, отрефакторена и т.д.) "Автоматическое обновление" сделано частично, "Админка: вход" начат, а "Админка: управление пользователями" еще нет.

У нас возникло 3 незапланированные задачи, как видно справа внизу. Об этом полезно будет вспомнить на ретроспективе.

Вот пример настоящего sprint backlog'а ближе к концу спринта. Он, в самом деле, становится довольно беспорядочным по ходу спринта, но ничего страшного, так как это ненадолго. На каждый новый спринт мы начинаем sprint backlog с чистого листа.

Как работает burndown-диаграмма Давайте присмотримся к burndown-диаграмме:

Вот о чем она говорит:

• В первый день спринта, 1-го августа, команда определила, что работы осталось примерно на story point'ов. Это как раз и есть прогнозируемая производительность на этот спринт.

• 16-го августа работы осталось примерно на 15 story point'ов. Пунктирная направляющая показывает, что они на верном пути, то есть в таком темпе они успеют закончить все задачи к Мы пропускаем выходные по оси X, так как в это время редко что-то делается. Раньше мы их включали, но burndown при этом выглядел странновато, так как он "выравнивался" на выходных, и это походило на повод Тревожные сигналы на доске задач для беспокойства.

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

Эй, как насчет отслеживания изменений?

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

Если отслеживание изменений для вас очень важно, тогда возможно подход с доской задач вам вообще не подходит.

И все-таки, я бы предложил вам сначала оценить значение детального отслеживания изменений в спринте. После того как спринт закончен и рабочий код вместе с документацией был отослан заказчику, будет ли кто-нибудь разбираться, сколько историй было закончено на 5й день спринта? Будет ли кто-нибудь волноваться о том, какова была реальная оценка для задачи "Написать приемочный тест для истории Как мы оцениваем: в днях или часах?

Депозит" после того, как история была закончена?

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

Однако мы отказались от этой практики по следующим причинам:

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

• Оказалось, что всё равно все оценивают в человеко-днях, а когда нужно получить оценку в человеко-часах, просто умножают дни на шесть. "Хм, эта задача займёт примерно день. Ага, я должен дать оценку в часах. Что ж, значит шесть часов".

• Две разных единицы измерения вводят в заблуждение. "Это оценка в человеко-днях или человеко-часах?" Поэтому мы используем человеко-дни в качестве основной единицы при оценке времени (мы называем их story point'ами). Наше наименьшее значение – 0.5. Т.е. любые задачи, оцененные менее чем в 0.5, либо удаляются, либо комбинируются с другими, либо оценка остаётся 0.5 (ничего страшного в слегка завышенной оценке нет). Изящно и просто.

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

Поэтому мы пытаемся оформить это место как отдельный "уголок обсуждений" Это и в самом деле полезно. Нет лучшего способа посмотреть на систему в целом, чем стать в уголок обсуждений, посмотреть на обе стены, а потом сесть за компьютер и пощелкать последний билд системы (в случае, если вам повезло, и у вас внедрена практика "непрерывной интеграции" системы (см. стр. 62" Как мы сочетаем Scrum с XP") "Стена проектирования" – это просто большая доска, на которой развешены самые важные для разработки наброски и распечатки (блок-схемы, эскизы интерфейса, модели предметной области и т.п.) На фотографии: ежедневный Scrum в вышеупомянутом уголке.

Хммммм... Эта burndown диаграмма выглядит подозрительно красивой и гладкой, правда? Но команда Усадите команду вместе настаивает на том, что это правда :o) Когда приходит время расставить столы и рассадить команду, есть одно правило, которое сложно переоценить.

Усадите команду вместе!

Чуть поясню, что я имею в виду:

Усадите команду вместе!

Людям не нравится переезжать. По крайней мере, в тех компаниях, в которых работал я. Они не хотят собирать все свои вещички, выдергивать шнуры из компьютера, переносить весь свой скарб на другой стол, и снова втыкать все шнуры. Чем меньше расстояние, тем больше недовольство. "Да ладно, шеф, НА КОЙ ЧЕРТ меня пересаживать всего на 5 метров вправо"?

Но когда мы строим эффективную команду по Scrum'у, другого выхода нет. Просто соберите команду вместе. Даже если придется им угрожать, самому переносить все их имущество, и самому вытирать застарелые следы от чашек на столах. Если для команды нет места – найдите место. Где угодно. Даже если придется посадить команду в подвале. Передвиньте столы, подкупите офис-менеджера, делайте всё, что нужно. Но как бы то ни было, соберите команду вместе.

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

Да, кстати, а что значит "вместе"? Как должны стоять столы? Ну, лично у меня нет однозначного мнения о наилучшем расположении столов. Но даже если бы и было, я думаю, у большинства команд нет такой роскоши – решать, как будут расставлены столы в их комнате. Всегда существуют физические ограничения – соседняя команда, дверь в туалет, здоровый автомат с батончиками и напитками посреди комнаты – да что угодно.

"Вместе" значит:

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

• В пределах видимости: каждый член команды может увидеть любого другого. Каждый может видеть доску задач. Не обязательно быть достаточно близко, чтобы читать, но, по крайней мере, • Автономно: если вдруг вся ваша команда поднимется и начнет внезапную и очень оживлённую дискуссию об архитектуре системы, никого из не-членов команды не окажется достаточно близко, чтобы ему это помешало. И наоборот.

"Автономно" не значит, что команда должна быть полностью изолирована. В пространстве, разделённом на секции, вполне может хватить отдельной секции для команды, с достаточно высокими стенами, чтобы не пропускать большую часть шума извне.

А как быть с распределённой командой? Ну, тогда вам не повезло. Чтобы уменьшить негативные последствия, используйте как можно больше технических средств: видеоконференции, вебкамеры, средства Не подпускайте product owner'а слишком близко для совместного использования рабочего стола и т.п.

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

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

Если честно, то это всего лишь догадки: в действительности, я сам никогда не видел, чтобы product owner сидел рядом с командой, а, значит, у меня нет оснований говорить, что это плохая идея. Мне это просто Не подпускайте менеджеров и тренеров слишком близко подсказывает внутреннее чутьё и другие ScrumMaster'а.

Эту главу мне писать немного тяжело, ведь я был как менеджером, так и тренером...

Тесная работа с командами входила в мои непосредственные обязанности. Я создавал команды, переходил из одной команды в другую, программировал с ними в парах, тренировал ScrumMaster'ов, организовывал планирования спринтов и т.д. Оглядываясь назад можно сказать, что я творил Хорошие Дела.

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

Но потом меня назначили (звучит тема Дарта Вейдера) руководителем отдела разработки. В общем, я стал менеджером. Это означало, что моё присутствие автоматически делало команду менее самоорганизующейся. "О! Шеф тут. У него, небось, есть куча идей о том, что надо сделать, и кто должен этим заняться. Давай-ка послушаем".

Я придерживаюсь следующей точки зрения: Если вы Scrum-тренер (и возможно совмещаете эту роль с ролью менеджера), не бойтесь очень плотно работать с командой. Но только в течение определённого промежутка времени, а потом оставьте команду в покое и дайте ей возможность сработаться и самоорганизоваться. Время от времени контролируйте её (однако не очень часто). Это можно делать, посещая демо, изучая доску задач или принимая участие в ежедневном Scrum'е. Если вы увидите как можно улучшить процесс, отведите ScrumMaster'а в сторонку и дайте ему дельный совет. Не стоит поучать его на глазах у всей команды. Посещение ретроспективы (см. стр. 51 "Как мы проводим ретроспективы") тоже будет не лишним. Если степень доверия к вам со стороны команды невелика, то сделайте доброе дело, не ходите на ретроспективы, а то ваше присутствие заставит команду молчать о своих проблемах.

Если Scrum-команда работает хорошо, обеспечьте её всем необходимым, а потом оставьте в покое (за исключением демо, разумеется).

Как мы проводим ежедневный Scrum Наш ежедневный Scrum очень похож на то, как это описывают в книгах. Каждый день он начинается в одно и то же время, в одном и том же месте. Вначале, мы предпочитали проводить его в отдельной комнате (это были дни, когда мы использовали sprint backlog'и в электронном формате), однако сейчас мы проводим ежедневный Scrum у доски задач в комнате команды. Нет ничего лучше!

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



Pages:     || 2 | 3 |


Похожие работы:

«РОССИЙСКАЯ АКАДЕМИЯ НАУК П р о е к т Н ау ч н о е н а с л е д и е Ро с с и и А.А. П Е Т Р О В НИКИТА НИКОЛАЕВИЧ МОИСЕЕВ Москва 2009 Содержание Предисловие................................................. 1 Моисеев на физтехе........................................ 3 Судьба Моисеева............................................ 7 Моисеев в науке............»

«ТЕХНИЧЕСКИЙ КОДЕКС ТКП 214-2010 (02140) УСТАНОВИВШЕЙСЯ ПРАКТИКИ ИЗЫСКАТЕЛЬСКИЕ РАБОТЫ ДЛЯ ПРОЕКТИРОВАНИЯ ЛИНЕЙНЫХ СООРУЖЕНИЙ ГОРОДСКИХ ТЕЛЕФОННЫХ СЕТЕЙ. ПРАВИЛА ПРОВЕДЕНИЯ ВЫШУКОВЫЯ РАБОТЫ ДЛЯ ПРАЕКТАВАННЯ ЛIНЕЙНЫХ ЗБУДАВАННЯЎ ГАРАДСКIХ ТЭЛЕФОННЫХ СЕТАК. ПРАВIЛЫ ПРАВЯДЗЕННЯ Издание официальное Минсвязи Минск ТКП 214-2010 УДК 621.395.74.001.2 МКС 33.040.35 КП 02 Ключевые слова: изыскания, подготовительные работы, автоматическая телефонная станция, линейные сооружения местной телефонной сети,...»

«ФЕДЕРАЛЬНЫЙ ГОРНЫЙ И ПРОМЫШЛЕННЫЙ НАДЗОР РОССИИ ПОСТАНОВЛЕНИЕ от 5 июня 2003 года N 58 Об утверждении Правил безопасности при разведке и разработке нефтяных и газовых месторождений на континентальном шельфе Госгортехнадзор России постановляет: 1. Утвердить Правила безопасности при разведке и разработке нефтяных и газовых месторождений на континентальном шельфе. 2. Направить Правила безопасности при разведке и разработке нефтяных и газовых месторождений на континентальном шельфе на...»

«УТВЕРЖДЕНО Приказом Генерального директора № 4 от 07 февраля 2013г. ПРАВИЛА страхования строительно-монтажных рисков г. Москва 1. ОБЩИЕ ПОЛОЖЕНИЯ. СУБЪЕКТЫ СТРАХОВАНИЯ 1.1. В соответствии с действующим законодательством и Гражданским кодексом Российской Федерации, Законом РФ “Об организации страхового дела в Российской Федерации”, нормативными правовыми актами в области строительства и страхования, настоящие Правила регулируют отношения возникающие между Страховщиком и Страхователем по поводу...»

«СТРАТЕГИЯ РАЗВИТИЯ ЛЕСОПРОМЫШЛЕННОГО КОМПЛЕКСА СВЕРДЛОВСКОЙ ОБЛАСТИ НА ПЕРИОД ДО 2020 ГОДА (основные положения) актуализированная Екатеринбург СОДЕРЖАНИЕ Введение...3 1. Характеристика лесопромышленного комплекса Свердловской области...4 1.1. Место и роль лесопромышленного комплекса в экономике Свердловской области..4 1.2 Предварительная оценка спроса на внешнем и внутреннем рынках лесобумажной продукции..8 1.3 Потенциал лесных ресурсов Свердловской области.17 1.4 Предварительная оценка...»

«24. Приложение Основные положения Технической политики ОАО Московская объединенная электросетевая компанияв области информационных технологий. Содержание 1. Общие положения 1.1. Цели и задачи Технической политики ИТ 1.2. Ожидаемый эффект от реализации Технической политики ИТ 1.3. Нормативно-техническое обеспечение ИТ-деятельности 1.4. Адаптация и развитие политики 2. Современные тенденции в области ИТ 2.1. Консолидация ресурсов 2.2. Виртуализация ресурсов 2.2.1. Логическое разделение...»

«РУССКАЯ ШКОЛЬНАЯ БИБЛИОТЕЧНАЯ АССОЦИАЦИЯ ДВИЖЕНИЕ МОЛОДАЯ РОССИЯ ЧИТАЕТ ПРОЕКТ РОДИТЕЛЬСКОЕ СОБРАНИЕ ПО ДЕТСКОМУ ЧТЕНИЮ Подсказки для взрослых Приложение для родителей, воспитателей, учителей и библиотекарей к журналу Читайка № 4, 2008 приложение к журналу Читайка № 4—2008 Дорогие наши взрослые читатели! Мы продолжаем выпуск специального приложения для взрослых к детскому журналу Читайка. Наша общая зада ча — помочь детям раскрыть свой творческий потенциал, сформировать у подрастающего...»

«Ф. М. Мустафин, Н. Г. Блехерова, О. П. Квятковский А. Ф. Суворов, Г. Г. Васильев, И. Ш. Гамбург Ю. С. Спектор, Н. И. Коновалов, С. А. Котельников Ф. М. Мустафин, Р. А. Харисов СВАРКА ТРУБОПРОВОДОВ Утверждено Редакционно-издательским советом Уфимского государственного нефтяного технического университета в качестве учебного пособия для студентов вузов, обучающихся по специальности 090700 Проектирование, сооружение и эксплуатация газонефтепроводов и газонефтехранилищ Москва НЕДРА 2002 УДК...»

«ТЕХНИЧЕСКИЙ КОДЕКС ТКП 210-2010 (02140) УСТАНОВИВШЕЙСЯ ПРАКТИКИ ЭЛЕКТРОУСТАНОВКИ ОБОРУДОВАНИЯ ЭЛЕКТРОСВЯЗИ. ПРАВИЛА ПРОЕКТИРОВАНИЯ ЭЛЕКТРАЎСТАНОЎКI АБСТАЛЯВАННЯ ЭЛЕКТРАСУВЯЗI. ПРАВIЛЫ ПРАЕКТАВАННЯ Издание официальное Минсвязи Минск ТКП 210-2010 УДК 621.311.4:621.39 МКС 43.060.50; 33.040 КП 02 Ключевые слова: батарея аккумуляторная, электроустановка, электрооборудование, устройство электроснабжения, устройство преобразовательное, электростанция, дизельная электростанция, подстанция,...»

«Все отчеты по лабораторным работам, пояснительные записки к курсовым работам, курсовым проектам, расчетно-графическим работам и дипломным проектам оформляются согласно ДСТУ 3008-95. Отчет оформляется на листах формата А4 (210297 мм), текст печатается только на одной стороне листа (вторая сторона листа чистая). Размеры полей на странице: верхнее, левое, нижнее – не менее 20 мм (лучше 25 мм), правое – не менее 10 мм (лучше 15 мм). Страницы нумеруются арабскими цифрами (2,3,4,.). Номера страниц...»

«International POPs Elimination Network Стокгольмская конвенция о стойких органических загрязнителях (СОЗ) и новые СОЗ Обучающий модуль Проект Цель 2020 Будущее без токсичных веществ! Химические вещества должны производиться и использоваться так, чтобы предотвратить существенное негативное воздействие на здоровье людей и окружающую среду (Всемирный саммит по устойчивому развитию, Йоханнесбург, ЮАР, 2002). КАЗАХСТАН 2013 -2014 гг. 1 О МОДУЛЕ Обучающий модуль Стокгольмская конвенция о стойких...»

«Статья 1. ОСНОВНЫЕ ПОЛОЖЕНИЯ 1.1 Открытое акционерное общество Первенец (далее по тексту Общество) создано в соответствии с законодательством Российской Федерации и действует на основании Федерального закона Об акционерных Обществах (далее Федеральный закон), других законов и нормативных актов Российской Федерации, а также настоящего Устава. Общество является правопреемником Закрытого акционерного общества Ленская золоторудная компания и Закрытого акционерного общества Горнорудная компания...»

«НАЦИОНАЛЬНЫЕ СТАНДАРТЫ КОРПОРАТИВНОГО УПРАВЛЕНИЯ РЕСПУБЛИКИ ТАДЖИКИСТАН (ПРОЕКТ) ПРОЕКТ СОДЕРЖАНИЕ: ПРЕАМБУЛА Глава 1. ПРИНЦИПЫ КОРПОРАТИВНОГО УПРАВЛЕНИЯ Глава 2. ОБЩЕЕ СОБРАНИЕ АКЦИОНЕРОВ Глава 3. СОВЕТ ДИРЕКТОРОВ Глава 4. ИСПОЛНИТЕЛЬНЫЙ ОРГАН Глава 5. КОРПОРАТИВНЫЙ СЕКРЕТАРЬ Глава 6. СУЩЕСТВЕННЫЕ КОРПОРАТИВНЫЕ ДЕЙСТВИЯ Глава 7. ДИВИДЕНДНАЯ ПОЛИТИКА Глава 8. СИСТЕМА КОНТРОЛЯ ЗА ФИНАНСОВОХОЗЯЙСТВЕННОЙ ДЕЯТЕЛЬНОСТИ Глава 9. ПОЛИТИКА РАСКРЫТИЯ ИНФОРМАЦИИ Глава 10. ВЗАИМООТНОШЕНИЯ ОБЩЕСТВА И...»

«МАРТ 2013 МИСС 2013 стр. 13 KEROSIN Слово редактора Что чувствует человек, когда понимает, что он главный редактор? Трудно осознать, что ты смог собрать команду, потратить кучу времени для создания идей, написания статей, редактирования материала, обдумывания дизайна, в конце концов вёрстки и защиты проекта. Да, многие до этого пытались создать журнал, но в большинстве случаев всё проваливалось. Люди просто не могли собраться, организовать самих себя. А впрочем, наверное, у них не было цели и...»

«Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования РОССИЙСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТУРИЗМА И СЕРВИСА Факультет сервиса Кафедра сервиса ДИПЛОМНЫЙ ПРОЕКТ на тему: Проект сувенирного настольного колокольчика, декорированного филигранью и эмалями по специальности: 100101.65 Сервис Студент Минкеева Айса Баировна Руководитель д.т.н., профессор Пашковский Игорь Эдуардович Москва 2014 г....»

«ИПМ им.М.В.Келдыша РАН • Электронная библиотека Препринты ИПМ • Препринт № 37 за 2014 г. Платонов А.К., Казакова Р.К. Создание проектного и оперативного баллистического обеспечения полётов космических аппаратов. Проектные работы на первых ЭВМ Платонов А.К., Казакова Р.К. Рекомендуемая форма библиографической ссылки: Создание проектного и оперативного баллистического обеспечения полётов космических аппаратов. Проектные работы на первых ЭВМ // Препринты ИПМ им. М.В.Келдыша. 2014. № 37. 35 с. URL:...»

«2 1. ЦЕЛИ И ЗАДАЧИ ДИСЦИПЛИНЫ Цель дисциплины - комплексное изложение вопросов планирования и управления на предприятии в условиях рыночной экономики, а также получение студентами практических навыков в решении вопросов оценки экономической эффективности капитальных вложений, организации основных производственных процессов, организации управления качеством, разработке бизнес – плана. Задачи дисциплины – в процессе изучения дисциплины студент должен получить знания по следующим направлениям:...»

«УТВЕРЖДЕНО Общим собранием членов Некоммерческого партнерства Межрегиональный институт сертифицированных бухгалтеров и финансовых менеджеров 14 апреля 2011 г. Годовой отчет Некоммерческого партнерства Межрегиональный институт сертифицированных бухгалтеров и финансовых менеджеров за 2010 год Новосибирск 2011 СОДЕРЖАНИЕ Об организации 1. Научно-исследовательская работа 2. Учебно-методическая работа 3. Организационная работа НП МИСБФМ 4. Реализация Проектов НП МИСБФМ 5. Работа официального сайта...»

«НАША СТРАНА – РОДИНА КОСМОНАВТИКИ, СТАРТОВАЯ ПЛОЩАДКА КОСМИЧЕСКОЙ ЭРЫ Мы сделали мечту и сказку предков былью Грядущие века не скроют это пылью! Космическая эра человечества началась в нашей стране, называвшейся тогда Советским Союзом, на космодроме Байконур, откуда стартовали первая в мире межконтинентальная баллистическая ракета, первый в мире спутник, первый в мире лунник, первый космонавт Земли Юрий Алексеевич Гагарин, первые автоматические межпланетные станции к планетам Марс и Венера,...»

«2 Введение..3 1. Возрастные кризисы.4 1.1 Кризис одного года.5 1.2 Кризис трёх лет..12 1.3 Кризис семи лет.19 Заключение..25 Список литературы.26 3 ВВЕДЕНИЕ Возраст - это ключевое понятие для проектирования систем развивающего образования и соответственно для периодизации нормативного развития человека в течение всей (индивидуальной) жизни. Основой понимания возраста может служить представление о соотношении генетически заданного, социально воспитанного и самостоятельно достигнутого (И.С....»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.