Scrum (Скрам) — методология управления проектами, активно применяющаяся при разработке информационных систем для гибкой разработки программного обеспечения. Scrum чётко делает акцент на качественном контроле процесса разработки. Скрам представляет из себя набор принципов, на которых строится процесс разработки, позволяющий в жёстко фиксированные и небольшие по времени итерации, называемые спринтами (sprints), предоставлять конечному пользователю работающее ПО с новыми возможностями, для которых определён наибольший приоритет. При этом строго фиксированная небольшая длительность спринта придаёт процессу разработки предсказуемость и гибкость.
Подход впервые описали Хиротака Такэути и Икудзиро Нонака в статье The New Product Development Game (1986г). Авторы этой провели исследования среди японских компаний и выявили, что старый подход к разработке продуктов, в котором каждая фаза разработки следует только после предыдущей, малопродуктивен. Согласно старому подходу, процесс разработки продукта двигался как эстафета. Группы специалистов последовательно передавали друг другу эстафетную палочку. Разработка продукта шла последовательно, от фазы к фазе: разработка концепции, проверка осуществимости, дизайн продукта, процесс разработки, пилотный продукт и финальный продукт. Согласно этому методу функции были специализированы и сегментированы. Вместо данного подхода ряд компаний стали применять другой подход, основанный на том, что над одной задачей работают разно профильные специалисты. Такой подход аналогичен стратегии в игре Регби, когда команда вместе старается пройти всю дистанцию, передавая мяч друг другу. Авторы статьи применили термин из этой игры под названием Scrum для описания совместной работы нескольких специалистов из разных областей, который представляет собой ситуацию, когда несколько игроков оказываются в схватке над мячом.
Впервые метод Scrum был представлен на общее обозрение задокументированным, чётко сформированным и описанным совместно Швабером и Джефом Сазерлендом на OOPSLA’96 в Остине. С тех пор данная методология претерпевала незначительные изменения и доработки, однако кардинальных отличий не было. В 2001 году Швабер совместно с Майком Бидлом детально описал данный метод ведения проектов в книге «Agile Software Development with SCRUM». В настоящее время на рынке программных разработок данный подход очень востребован, существует множество учебников, статей и советов по поводу его использования и внедрения. Так же существует сайт scrum.org, который посвящен данной методологии.
Спринт — итерация в скрам, в ходе которой создаётся функциональный рост программного обеспечения. Жёстко фиксирован по времени. Длительность одного спринта от 2 (в некоторых случая от 1) до 4 недель. В отдельных случаях, к примеру согласно Scrum стандарту Nokia, длительность спринта должна быть не более 6 недель. Тем не менее, считается, что чем короче спринт, тем более гибким является процесс разработки, релизы выходят чаще, быстрее поступают отзывы от потребителя, меньше времени тратится на работу в неправильном направлении. С другой стороны, при более длительных спринтах команда имеет больше времени на решение возникших в процессе проблем, а владелец проекта уменьшает издержки на совещания, демонстрации продукта и т. п. Разные команды подбирают длину спринта согласно специфике своей работы, составу команд и требований, часто методом проб и ошибок. Для оценки объема работ в спринте можно использовать предварительную оценку, измеряемую в очках истории. Предварительная оценка фиксируется в резерве проекта. На протяжении спринта никто не имеет права менять список требований к работе, внесенном в резерв проекта. Резерв проекта (Product backlog) — это список требований к функциональности, упорядоченный по их степени важности, подлежащих реализации. Элементы этого списка называются «пожеланиями пользователя» (user story) или элементами резерва (backlog items). Резерв проекта открыт для редактирования для всех участников скрам процесса. Резерв спринта (Sprint backlog) — содержит функциональность, выбранную владельцем проекта из резерва проекта. Все функции разбиты по задачам, каждая из которых оценивается скрам-командой. Каждый день команда оценивает объем работы, который нужно проделать для завершения спринта. Пожелание заказчика (User Story) — требуемая функциональность, которую добавляют в резерв часто называют историей. Зачастую история имеет следующую структуру: «Будучи пользователем <тип пользователя> я хочу сделать <действие>, чтобы получить <результат>». Такая структура удобна тем, что понятна как разработчикам так и заказчикам. Очки истории (Story Points) — абстрактная метрика оценки сложности истории, которая не учитывает затраты в человекочасах. Обычно используют одну из следующих шкал: ряд Фибоначчи (1,2,3,5,8,13,21,34,55); линейную шкалу (1,2,3,4 … n); степень двойки (1,2,4,8 … 2n); размеры одежды (XS, S, M, L, XL). График сгорания задач (Burndown chart) — Диаграмма, показывающая количество сделанной и оставшейся работы. Обновляется ежедневно с тем, чтобы в простой форме показать подвижки в работе над спринтом. График должен быть общедоступен. Существуют разные виды диаграммы:
Происходит в начале новой итерации Спринта.
В методологии Scrum всего три основных роли: Скрам Мастер, Владелец продукта, Команда. По методике Scrum в производственном процессе есть определенные роли, разбитые на 2 группы «свиней» и «цыплят». Свиньи создают продукт, тогда как куры заинтересованы, но не настолько — ведь им все равно, будет ли проект удачным или нет, на них это мало отразится. С 2011 года данные термины не используются. Скрам Мастер (Scrum Master) - самая важная роль в методологии. Скрам Мастер отвечает за успех Scrum в проекте. По сути, Скрам Мастер является интерфейсом между менеджментом и командой. Как правило, эту роль в проекте играет менеджер проекта или тимлид. Важно подчеркнуть, что Скрам Мастер не раздает задачи членам команды. В Agile команда является самоорганизующейся и самоуправляемой. Основные обязанности Скрам Мастера таковы:
Владелец Продукта (Product Owner) - это человек, отвечающий за разработку продукта. Он представляет единую точку принятия окончательных решений для команды в проекте, именно поэтому это всегда один человек, а не группа или комитет. Обязанности владельца продукта таковы:
Команда (Team) – непосредственно исполнители задач. В методологии скрам команда является самоорганизующейся и самоуправляемой. Команда берет на себя обязательства по выполнению объема работ на спринт перед владельцем продукта. Работа команды оценивается как работа единой группы. В скрам вклад отдельных членов проектной команды не оценивается, так как это разваливает самоорганизацию команды. Обязанности команды таковы:
Рассмотрим наиболее привычный жизненный цикл проекта, над которым работают по методологии Scrum. Пусть все юридические и бюрократические детали разрешены, и все готовы к началу нового проекта. Первым делом организуется первое планирование спринта, на котором присутствуют все: заказчик, пользователи, все участники разработки. Цель этого совещания – составить резерв продукта. Все пожелания (истории) заказчика записываются, команда их оценивает в очках истории. В результате такого совещания должна сформироваться очередь продукта, отсортированная в порядке значимости для клиента.
Иногда выделяют нулевой спринт, в ходе которого команда изучает технологии, которые необходимо будет применять в проекте, настраивает инструменты разработки и проводит другие подготовительные работы. Так же иногда в ходе этого спринта изменяется резерв продукта, так как становятся очевидны какие-то трудности, не выявленные ранее. Из этого списка задач команда набирает задачи на текущий спринт с учетом из средней производительности (после нескольких спринтов команда способна оценить свою производительность в очках истории на спринт), и тут же происходит совещание, целью которого является обсуждение предстоящего спринта, но уже только в составе команды, скрам мастера и владельца продукта. Каждая история разбивается на подзадачи, длительность которой не должна превышать 12 часов. В результате формируется список задач, который распределяется между командой, и после этого все принимаются за работу – начинается спринт. В начале каждого дня на протяжении спринта проводиться ежедневные встречи, задача которых контролировать ситуацию на текущем спринте. Спринт может быть закончен раньше положенного срока по двум причинам:
Если для текущего спринта был намечен выпуск новой версии продукта, то по завершению текущей итерации продукт демонстрируется заказчику, собираются отзывы и проводится тестирование продукта. После этого команда вновь организует планирование спринта и процесс повторяется. Если же для текущей итерации выпуск продукта намечен не был, то сразу после окончания организует новое планирование спринта. Так же в конце каждого спринта организуется обзор итогов спринта и ретроспектива спринта. Первое проводится с целью показать инкремент функциональности и является средством мотивации членов команды для дальнейшей работы. Как правило, такие собрания полностью открыты для сотрудников компании. Второе является анализом прошедшего спринта: участники команды высказываются о своих успехах и неудачах в ходе прошедшего спринта, пытаются решить внутренние конфликты и возникшие проблемы.
В настоящее время данный подход является очень распространенным и многие, наслушавшись позитивных отзывов об успешном внедрении данной методологии, начинают пытаться внедрять её и в своих компания. Однако следует учитывать, что Scrum – не панацея от пропущенных сроков и низкой производительности. Многие команды попросту не могут работать в таком режиме, и чтобы понять это, им надо попробовать. При этом любой человек не любит перемены, поэтому поначалу производительность команды может упасть, а её моральный дух будет подавлен. Поэтому к скраму следует относиться не как к набору правил, которые следует выполнять, а как к некому инструменту, которым необходимо уметь пользоваться и применять только в уместных ситуациях.