KnigaRead.com/

Хенрик Книберг - Scrum и XP: заметки с передовой

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Хенрик Книберг, "Scrum и XP: заметки с передовой" бесплатно, без регистрации.
Перейти на страницу:

Инициатор запроса (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.

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

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

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

c) Уровень важности используется исключительно для упорядочивания историй. Т. е. если история А имеет уровень важности 20, а история Б важность 100, это означает что Б важнее A. Это не означает, что Б в пять раз важнее А. Если Б присвоить важность 21 — смысл не поменяется!

d) Полезно оставлять промежутки из целых чисел между значениями на тот случай, если появится история В, более важная, чем А, но менее важная, чем Б. Конечно, можно выкрутиться, присвоив ей уровень важности 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 (список историй, которые вошли в спринт).

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

• Место и время проведения ежедневного Scrum'а.

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

Иногда 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'ом, так как именно он отвечает за определение объёма работ. И напротив — внутреннее качество не может быть предметом дискуссии. Команда постоянно должна следить за качеством системы, поэтому оно попросту не обсуждается. Никогда.

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*