Глава 1. Гибкие методологии
Семейство гибких методологий буквально ворвалось на софтверную сцену и перевернуло все с ног на голову:
• мы стали сосредотачиваться на людях и улучшении коммуникаций между ними вместо выстраивания сверхжестких процессов;
• мы начали концентрироваться на продукте вместо того, чтобы писать изощренную проектную документацию, которую никто не читает;
• мы больше не заставляем заказчика расписываться кровью, ограничивая его жесткими и неудобными условиями договоров, а строим действительно партнерские отношения и выясняем, чего он хочет и что ему нужно;
• мы всегда готовы к изменениям, так как понимаем, что мир вокруг нас меняется и то, что месяц назад казалось абсолютно необходимым в нашем проекте, сейчас уже не нужно вообще.
В более строгом варианте эти тезисы были сформулированы отцами-основателями гибких методологий в документе, который получил название Agile Manifesto.
Люди и их взаимодействие важнее процессов и инструментов.
Готовый продукт важнее документации по нему.
Сотрудничество с заказчиком важнее жестких контрактных ограничений.
Реакция на изменения важнее следования плану.
Визуализация ценностей манифеста гибкой разработки
Полный текст манифеста и его переводы доступны на сайте http://agilemanifesto.org. Каждый, кто хочет работать по гибкой методологии, должен ориентироваться на эти четыре «взвешивания»: как только начинает тяжелеть не та «чаша весов», надо задуматься: «На верном ли я пути?» Таким образом, манифест станет вашим компасом, по которому можно определять направление движения.
Отдельно отмечу, что, хотя в манифесте гибкой разработки понятия противопоставляются, нет полного отрицания, то есть гибкие методологии – это не отсутствие процессов и инструментов, документации, контрактных ограничений и плана.
Принципы гибких методологий
Не менее важны принципы Agile, о которых часто даже не упоминают, когда обсуждают гибкие методологии разработки. Если вы их соблюдаете, то не имеет значения, как называется ваша методология, – она будет гибкой.
1. Наш высший приоритет – это удовлетворение заказчика с помощью частых и непрерывных поставок продукта, ценного для него.
Основная проблема с программными продуктами заключаются в том, что для потребителя они представляются чем-то эфемерным. Чтобы понять, что наш продукт действительно удовлетворяет заказчика, необходимо максимально часто (в идеале – непрерывно) поставлять его и собирать отзывы.
2. Мы принимаем изменения в требованиях даже на поздних этапах реализации проекта.
Такие изменения будут, и к этому нужно быть готовыми во время реализации проекта, потому что заказчик начнет понимать, какой функционал представляет для него ценность, после поставок продукта.
3. Гибкие процессы приветствуют изменения, что является конкурентным преимуществом для заказчика.
Этот принцип развивает предыдущий и подчеркивает, что в нынешней турбулентной среде необходимо уметь создавать продукты быстро и гибко. Вы не можете позволить себе тратить годы (и даже месяцы) на создание продуктов, ведь ваши конкуренты сделают это за несколько месяцев (и даже недель), если будут использовать гибкие методологии.
4. Необходимо поставлять полностью рабочее программное обеспечение каждые несколько недель, в крайнем случае каждые несколько месяцев. Чем чаще, тем лучше.
Результатом нашей работы должен быть рабочий программный продукт, а не техническое задание, какие-либо макеты и т. п., что мы демонстрируем заказчику. Мы должны уметь быстро делать максимально готовый программный продукт.
5. Представители бизнеса и команда разработки должны работать вместе над проектом.
Успех вашего проекта во многом зависит от качества взаимодействия между членами команды. Для его максимизации в команду необходимо включить представителей бизнеса, которые могут быть полезны для реализации проекта.
6. Успешные проекты строятся мотивированными людьми. Дайте им подходящую окружающую среду, снабдите всем необходимым и доверьте сделать свою работу.
Наверное, основная задача руководства и компании, в которой реализуется проект по гибкой методологии, – это умение доверять команде и не проверять каждый ее шаг, занимаясь микроконтролем.
7. Самый эффективный метод взаимодействия и обмена информацией – это личная беседа.
Гибкие методологии построены скорее на взаимодействии между людьми, нежели на процессах, поэтому необходимо выбирать самые эффективные способы взаимодействия, а именно личную беседу. От себя добавлю, что лучше ее проводить возле доски с маркером.
8. Рабочее программное обеспечение – главная мера прогресса проекта.
Мы не делим проект на водопадные этапы, поэтому прогресс мы можем измерять только одним способом – количеством рабочего функционала в нашем продукте.
9. Гибкие процессы способствуют непрерывному развитию. Все участники проекта должны уметь выдерживать такой темп постоянно.
Непрерывное развитие и совершенствование – это неотъемлемая часть гибких методологий разработки. В этом процессе должны участвовать все заинтересованные лица, и он должен происходить непрерывно.
10. Постоянное внимание к техническому совершенству и качественной архитектуре способствует гибкости.
Чтобы иметь возможность вносить изменения на любых стадиях проекта, необходимо иметь действительно гибкую архитектуру и правильные технические решения. Технически совершенные решения – залог того, что вы сможете добавлять в ваш продукт новые «фишки», не теряя при этом скорости.
11. Простота необходима как искусство максимизации работы, которую не следует делать.
Простота важна во всем, от интерфейса/дизайна до архитектуры. Чем проще продукт, тем легче им пользоваться, проще изменять и дешевле поддерживать.
12. Лучшая архитектура, требования и дизайн создаются в самоорганизующихся командах.
Если вы собрали команду профессионалов, помогите им самоорганизоваться, и результаты не заставят себя ждать. Такой команде достаточно поставить цель, а она сможет выработать самый эффективный способ ее достижения.
13. Команда должна постоянно искать способы стать эффективнее путем настройки и адаптации своих процессов.
Без постоянных улучшений вы будете топтаться на месте. Команда должна все время искать пути улучшения своей деятельности.
Оригинальные принципы Agile на английском языке вы можете найти на странице http://agilemanifesto.org/principles.html.
Scrum в двух словах
Общая схема Scrum
Организуйте работу в вашей компании в небольших многофункциональных командах, которые содержат всех необходимых специалистов для реализации проекта. Выделите человека – скрам-мастера, который будет отвечать за соблюдение процессов в команде и конструктивную атмосферу.
Требования разбейте на небольшие, ориентированные на пользователей, функциональные части, которые максимально независимы друг от друга, в результате чего получите журнал пожеланий продукта (иначе называют «бэклог»). Затем упорядочьте элементы журнала пожеланий по их важности и произведите относительную оценку объемов каждого элемента. Выделите отдельного человека – владельца продукта, который будет отвечать за требования и их приоритеты, работая с заинтересованными лицами.
Всю работу ведите короткими (от одной до четырех недель) фиксированными итерациями – спринтами, поставляя в конце каждого из них законченный функционал, который можно при необходимости вывести на рынок, – инкремент продукта. Команда согласно своей скорости набирает задачи на неизменяемую по времени итерацию – спринт. Каждый день проводится скрам-митинг, на котором команда синхронизирует свою работу и обсуждает проблемы. В процессе работы члены команды берут в работу элементы журнала пожеланий согласно приоритету.
В конце каждого спринта проводите обзор спринта, чтобы получить обратную связь от владельца продукта, и ретроспективу спринта, чтобы оптимизировать ваши процессы. После этого владелец продукта может изменить требования и их приоритеты и запустить новый спринт.
Не Scrum’ом единым
Scrum не является единственной гибкой методологией, хотя на данный момент он – самый популярный среди собратьев. Однако знание и понимание других методологий важно, чтобы оценивать их преимущества и недостатки. Кроме того, на поздних этапах адаптации Scrum можно позаимствовать различные практики из этих методологий.
Хотелось бы также поделиться результатами исследования Agile Survey о популярности гибких методологий.
Популярность гибких методологий
Менее популярные методологии перечислены и кратко описаны в главе 12.
Экстремальное программирование. Практики экстремального программирования можно условно разделить на управленческие и инженерные.
Практики экстремального программирования
Разделение, повторюсь, весьма условное, но оно показывает, что экстремальное программирование имеет много общего со Scrum, однако есть и определенные отличия. Инженерные практики будут рассмотрены подробнее в соответствующем разделе, а управленческие практики применяются обычно из Scrum.
Канбан
Канбан – это высокоадаптивный инструмент, который требует от команды, решившей использовать его, соответствующего уровня самоорганизации и дисциплины.
1. Визуализируйте производственный процесс.
Для этого обычно используют доску, размеченную по этапам работы над задачей. Конечно, более продвинутым вариантом будет использовать плазму/проектор и выводить туда состояние трекера.
2. Ограничивайте количество незавершенной работы (WIP, Work In Progress).
У каждого столбца-состояния команда указывает максимальное количество задач, которые могут в нем находиться. Таким образом, минимизируются переключение между задачами и связанные с этим потери при производстве.
Доска задач в рамках канбана
Среднее время реализации задачи (lead time) – метрика, показывающая, насколько быстро задача проходит весь поток.
3. Оптимизируйте процесс.
Третье правило – основа оптимизации производства в рамках канбана. Необходимо отслеживать среднее время задачи и уменьшать его (например, с использованием Value Stream Mapping, см. соответствующий раздел).
С Ввиду малого количества директив начать использовать канбан можно легко и просто, но чтобы применять данный инструмент эффективно, не следует отклоняться от процесса непрерывного совершенствования.