Управление проектами

индекс
176,80

Круговорот артефактов в Agile

Доброго времени суток.

В этой статье я хочу продолжить рассказ о «прагматическом» Agile процессе разработки ПО. На суд Читателя предлагается иная перспектива обзора этого процесса — с точки зрения создания и эволюции артефактов (Artifact Flow) в ходе развития проекта. А также мы рассмотрим практический подход для работы с артефактом «Коллекция Требований» с использованием Google Wave и Google Docs.

Артефакт — это рукотворный объект. В первом приближении артефактами можно назвать и код программы, и документы написанные программистами. При более тщательном подходе мы можем значительно расширить круг примеров и отнести к артефактам электронные письма, фрагменты чатов и даже наброски фламастером на доске.

На самом деле последовательность создания/модификации артефактов и их содержание имеет критическое значение для здоровья проекта. Особое значение, с моей точки зрения, имеют коллективно созданные артефакты.

Диаграммы потоков артефактов.


Дальше я предлагаю взглянуть на зарисовки жизненного цикла артефактов на трех разных этапах развития Agile проекта. При этом мы будем использовать такие обозначения:

image

Где Person и Group — создатели артефактов, Communication и Development — процессы, в которых рождаются артефакты, и, собственно сами артефакты. Обратите внимание, что в Communication процессах рождаются коллективные артефакты, а при Development — персональные.

Почему я акцентирую на важности коллективных артефактов? Потому что они являются каналами связи и синхронизаторами информации между заказчик(ом)(ами) и исполнител(ем)(ями) проекта. При отсутствии таких каналов связи проект будет протекать по «законам здравого смысла», которые весьма субъективны, и в результате заказчик «не узнает» в готовой системе ту «картинку» которая у него в голове. В итоге неизбежен конфликт.

Итак, посмотрим «слайды»…

Этап начала проекта (Project Initiation Artifact Flow).

image

Сценарий здесь такой: Sales сделали свою часть работы и у нас появился потенциальный клиент. На этом этапе в компании выделяется человек, который будет начинать общение с клиентом на технические темы. Роль этого человека можно назвать по-разному — аналитик, консультант, владелец проекта (Product Owner). Мы будем использовать последнее название.

Во время первой (реальной или виртуальной) беседы владельца проекта с заказчиком формируется самый первый из коллективных артефактов — Vision & User Story titles. Это текстовый документ где описывается основная идея проекта и его функциональность в виде коротких Историй Пользователя.

Затем следует внутренний митинг где встречаются владелец проекта и менеджер проекта. Задача этой встречи — принять решение о составе команды разработчиков и исходя из ее возможностей построить оценочный или предварительный план (Preliminary Plan). К примеру, в нашей команде мы «моделируем» выполнение Историй Пользователя с помощью Гантта с ресурсами.

Этап заканчивается согласованием оценочного плана с заказчиком на уровне Sales-, финансового- менеджера и прочего начальства (это и есть момент покупки сервиса) и официальным стартом разработки.

Architectural Iteration Artifact Flow

image

Первая итерация — архитектурная, во время которой строятся слои будущей системы, пишутся прототипы темных мест. Давайте посмотрим что творится с артефактами.

На входе у нас Vision & User Storiy titles. Этот артефакт выносится на первый большой митинг с командой. Задача митинга — выработать архитектуру ПО и план на архитектурную итерацию. Идет обсуждение, доска загромождается рисунками… Первый артефакт который рождается в споре — это драфт архитетктуры. Дальше оцениваются и распределяются задачи — инфраструктурные (что-то сконфигурировать и настроить), прототипы (проверить что архитектурная идея работает), архитектурные (подключить компонент архитектуры — например Веб-Сервисы). Оценки по времени поступают от самой команды. В результате появляется второй артефакт — план итерации.

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

Интересно что на фоне артефакт-оборота разработки выполняется второй, не менее важный: сбор Требований. Это постоянный процесс в результате которого общий взгляд на систему скоординировано детализируется. Иногда в результате детализации меняется и сам изначальный общий взгляд. Сам процесс сбора требований может протекать по-разному, но его участниками всегда являются владелец проекта (наш аналитик) и заказчик (либо его технический консультант). Результатом этого процесса является постоянно развивающийся драфт Требований. Во второй части статьи я покажу как можно использовать сервисы Google Wave и Google Docs для работы над этим артефактом.

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

Functional Iteration Artifact Flow

image

Это самая важная составляющая проекта. Во время функциональных итераций продукт «растет». Как правило (у нас) разработка начинается с архитектурной итерации, а затем идут несколько функциональных итераций вплоть до релиза проекта.

Если в общих словах описывать потоки артефактов такой итерации, то кроме потока разработки и сбора требований добавляется поток спецификации: команда QA на основе коллекции Требований и списка наименований Историй Пользователя пишет короткие, но исчерпывающие Test Cases. Эти Test Cases вместе с итерационным планом являются главными движущими артефактами во время разработки.

Сбор сведений при помощи Google Wave и Google Docs


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

Первый вопрос в Agile проекте возникает всегда: зачем писать Требования если можно просто поговорить по телефону или скайпу? Такой сценарий не исключается, но он ограничен случаем, когда домен хорошо понятен и программисту и заказчику, они говорят на одном языке примерно на одном уровне, они обладают одинаковым менталитетом (используют одинаковые принципы Здравого Смысла), части системы, которые обсуждаются легко укладываются в памяти (они компактны, а система как правило небольшая). На самом деле такой случай относится больше к исключениям, чем к правилам. Системы строятся большие и разветвленные, команды у нас сейчас распределенные, с разным менталитетом, с разной специализацией, мир многополярен, ИМХО, это хорошо.

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

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

Волна состоит из текста и рисунков. Рисунки представляют макеты страниц пользовательского интерфейса системы. Текст — это описания к макетам и логическим потокам вокруг них. На первый взгляд все просто. Однако у Волны есть свои недостатки. Как ни странно самой серьезной проблемой является то, что волна имеет слишком много свободы для организации ветвления. Если начинать использовать Волну без продуманного набора правил она быстро превратится в бестолковое захламленное пространство. Эти правила мы обсудим через пару секунд.

Теперь о макетах. На данный момент наилучшим средством для их создания я считаю Google Document и его компонент Drawing. Он прост и надежен. В волну документ вставляется при помощи iFrame гаджета.

Теперь о правилах построения волн для сбора Требований:

1. Отдельные Истории пользователя являются отдельными волнами, собранными в «волновую» папку с названием проекта.

2. Макеты, относящиеся к определенной странице и ее состояниям собираются вместе в отдельной папке Google Docs с названием проекта. В названиях этих макетов присуствует название действия или эффекта, который они демонстрируют. Также следует отметить, что каждый Google документ имеет свою собственную систему версий — поэтому не следует дублировать версии макетов отдельными документами — это существенно упрощает всю схему.

3. Используйте один экземпляр точного макета на один шаг Истории Пользователя. Под точным макетом я подразумеваю Google документ. При этом набросков может быть много. Для набросков удобно использовать этот гаджет.

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

Внутри шага истории идут в виде Replies три секции — макет (Google документ в iFrame), текст комментариев к макету и текст логических потоков на этом шаге истории. Эти части шага реализованы как Replies для того, чтобы их можно было быстро закрыть — это удобно для длинных и закрученных Волн.

Преимущества такого подхода к организации Волны следующие:

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

2. Упрощается и ускоряется общение по бизнес домену во время спринта. Если у программиста или QA-щика возникают вопросы — он их тут-же задает в Волну.

3. Заказчик может быстро инициировать разговор по любой точке Требований.

Пример сбора требований для простой Истории Пользователя

Рассмотри некий пример обсуждения и накопления требований по такой истории: посетитель веб-сайта знакомится с текстом домашней страницы и новостями.

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

image

Развитие этой волны происходило таким образом: владелец проекта создал волну под названием соответствующей истории пользователя. Затем он добавил сообщение — заголовок с общими словами по этой истории и адресами двух гаджетов (для удобства, чтобы они были всегда под рукой). Далее он пригласил в Волну заказчика. Создал сообщение для первого шага истории пользователя, создал Google документ с первым макетом страницы. Добавил несколько слов для описания макета и логического потока.

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

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

Давайте это обсудим.

Удачи!
+18
28 января 2010, 19:21
42

комментарии (12)

+1
Azy #
Вики на мой взгляд больше подходит для этого. К примеру возьмем стандартный кейс входа в панель управления неавторизованным пользователем:
1. Неавторизованный пользователь открывает панель управления
2. Пользователю отображается форма входа
3. Пользователь вводит логин и пароль и нажимает «ок»
4. Пользователю показывается панель управления

Смысл такой что это небольшой кейс. И будет лучше если он останется таким, чтобы его можно было оценить сразу. В вики это решается ссылками на страницы, с подробностями каждого шага.
В волне это всё растянется на полэкрана.
0
adrobnych #
Вики — отличный инструмент для инженерных артефактов или тест кейсов.

Для сбора требований на мой взгляд нам нужно что-то другое. Мы должны создать некоторое виртуальное пространство со свойствами чата, онлайн доски для набросок и т.д. Здесь решающим фактором за Волну именно для меня является синхронность общения плюс сокращение времени на формирование вопроса — обозначения к какой части системы идет вопрос, его бекграуда.

С другой стороны я не призываю в волну записывать, скажем, тест кейсы. Здесь лучше Вики. Или какая-то система менеджмента документов с версиями.
0
Brainstress #
Спасибо за статью )). Комментов я вижу у вас маловато. Наверное большинство просто не догнало о чем речь или обламались читать всю статью ))
0
adrobnych #
На самом деле это урок мне — не писать длинных статей :) В данном случае наверное нужно было разбить на два поста. Увлекся…
+1
Jay_Di_Human #
Спасибо за статью!
Мы тоже попробовали использовать Волну в небольшом проекте (5-7 человек) для хранения артефактов и быстрых коммуникаций. Наткнулись на все те проблемы, что описаны в статье. И точно так же их решали. :) Лично сидел и «облагораживал» нашу Волну, приводя её в адекватное состояние.
Волна действительно даёт очень много свободы, и поэтому очень важно обговорить все правила заранее.
+1
adrobnych #
Да, Волна только начинает свое движение. Есть много мест которые нужно развивать… Например очень не хватает «фирменного» Drawing гаджета. Также хотелось бы иметь возможность тонких настроек — например не разрешать редактировать определенные сообщения в волне. Очень не хватает конвертеров из Волны (всей я имею ввиду) в pdf, doc и рисунок. Пригодилась бы очень система версионности Волны, нотификаций в еmail, элементов VOIP.

В целом Волна — серезный шаг вперед для коммуникаций. Думаю *ребята* еще не раз нас удивят…
0
Jay_Di_Human #
Согласен.
И очень не хватает возможности удалять пользователей из волны. Я как-то случайно добавил человека, который не должен был читать эту волну… так пришлось заново создавать волну и переносить туда весь контент.
Да, там много ещё чего предстоит сделать. Но я верю, Гугл доведёт эту технологию до ума.
+1
stepanov_victor #
Имеется несколько вопросов. Возможно, некоторые из них окажутся вне вашей компетенции, но тем не менее:

1) Как видно из примера, драфты страниц сайта рисует project owner. Каким образом в этом процессе задействован дизайнер? Он подключается уже после согласования всех страниц и рисует дизайн по драфтам?

2) Каким образом вам удалось затащить в волну заказчика? :) Что делать, если заказчик отказывается общаться любыми другими способами как по телефону, электронной почте, личных встречах?

3) Окончательный аппрув, что вот эта страница/фича должна выглядеть вот так дает заказчик? Что делать, если заказчик срывает срок согласования страницы/фичи?
+1
adrobnych #
Спасибо за вопросы. Прокомментирую по пунктам…

В: 1) Как видно из примера, драфты страниц сайта рисует project owner. Каким образом в этом процессе задействован дизайнер? Он подключается уже после согласования всех страниц и рисует дизайн по драфтам?

О: У нас так сложилось так что дизайнер работает на отдельном потоке. Его задача — нарисовать и согласовать с заказчиком главную страницу сервиса и несколько второстепенных — чтобы задать look&feel всего проекта. В то-же время в задачу дизайнера не входит рисование всех страниц сервиса. Программисты должны экстраполировать дизайн на их страницы. Разумеется если у них возникают вопросы пор деталям дизайна — они обсуждаются с дизайнером отдельно.

Макеты могут отличаться от дизайна по layout. Программист по макету создает функционал UI, но layout подбирает по дизайну.

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

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

В: 2) Каким образом вам удалось затащить в волну заказчика? :) Что делать, если заказчик отказывается общаться любыми другими способами как по телефону, электронной почте, личных встречах?

О: Да это сложный момент. Но здесь владелец проекта проводит откровенный разговор с заказчиком, объясняя насколько важно участвовать во всех деталях во время разработки проекта. Приводятся *плохие* примеры которые случились с *плохими* клиентами.

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

В: 3) Окончательный аппрув, что вот эта страница/фича должна выглядеть вот так дает заказчик? Что делать, если заказчик срывает срок согласования страницы/фичи?

О: Драфт требований пишется на следующую итерацию. Клиент имеет достаточно времени на его inputs и он в курсе, что, если на момент старта Спринта он не успевает отреагировать на предложения и вопросы, то включается правило делегирования принятия решения в команду.
0
stepanov_victor #
Спасибо за ответы. У нас пока все проходит не так гладко, как у вас, поэтому очень интересно ваше мнение.

Еще пару вопросов, с вашего позволения:

1) Как вы считаете, какой минимальный срок реализации должен иметь проект (в месяцах от начала до финального релиза), чтобы имело смысл применять в нем Agile? Стоит ли применять Agile на маленьких проектах (1-1.5 мес от начала до конца)?

2) Всегда интересно читать как все работает, но еще интересней узнать, каким образом все это строилось. Расскажите немного о себе и как вы пришли к Agile. С чего начинали, как развивались, какие методологии использовали ранее и т.д.
+1
adrobnych #
Да и у нас не все так гладко :). Разработка софта — это не конвейер. В него вовлечено много умных и хитрых людей. А что делают умные и хитрые люди с правилами ;)? На ровном месте всегда может возникнуть конфликт…

По поводу Agile vs Waterfall (ВФ) можно говорить часами. Мне кажется что самое главное — это то, что в Agile заказчик участвует в проекте (входит в команду если хотите), а в ВФ — нет.

С точки зрения менеджера и команды, вообще, ВФ *ПРОЩЕ* — и его проще организовать и поддерживать. Если мы исключаем клиента из схемы потоков, все радикально упрощается.

Agile на мой взгляд — это более сложный, более дорогой сервис для клиента чем ВФ. Платинум сервис (или как там маркетинговые люди говорят)… Это как пересесть на самолет после автомобиля. Понятно что заказчик должен быть готов к такому сервису и понимать что вокруг него происходит и что хотят все эти люди от него.

Что же получает заказчик в Agile — он видит как его продукт *растет*. Он может сказать что здесь нужно чтото убрать а там — добавить. В ВФ все происходит как в старом фильме про графа Калиостро: молодой барин загадал увидеть Лауру, а как скинули покрывало — там оказалась подружка фокусника :). Но деваться то некуда — все уже подписано.

Извините за пространные рассуждения, просто мне хотелось синхронизировать картинку которую мы видим в этом вопросе. По сути… мне кажется что критерием выбора между Agile и ВФ есть не длина проекта — она может быть любой — а принцип включать или не включать заказчика в процесс.

Что касается нашей истории — то мы конечно работали и иногда работаем в ВФ (по договоренности с заказчиком). Пробовали также Скрам, но не прижилось — слишком много этикета. Поэтому построили свою адаптацию Agile, как впрочем и многие другие команды вроде нашей.

0
stepanov_victor #
Спасибо за ответы

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