Пользовательские истории. Искусство гибкой разработки ПО - Джефф Паттон 27 стр.


При традиционном подходе к разработке программного обеспечения работу по контролю и удалению неудачных фрагментов непременно объяснили бы плохими требованиями. Но после того, как вы надели плащ и шляпу рыцаря Agile, эта работа становится обучением и итеративным улучшением.

Игра "Хорошо – лучше – идеально"

Одна из моих любимых и очень простых техник окончательного разбиения историй – игра "Хорошо – лучше – идеально". Чтобы играть в нее, нужны большая история и пачка стикеров. Результат игры выглядит примерно так.

Довольно хорошо… пока

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

Если рассмотреть в качестве примера, скажем, IMDb.com (the Internet movie database – интернет-база данных кинофильмов), мы можем обсудить историю "Просмотреть информацию о фильме". Представим себе экран, где можно увидеть разные подробности о фильме и, таким образом, принять решение, стоит ли его смотреть. Обсуждая этап "довольно хорошо", можно ограничиться следующими простыми вещами.

• Просмотреть базовую информацию: название, рейтинг, режиссер, жанр и т. д.

• Просмотреть постер фильма.

• Просмотреть трейлер.

Лучше

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

• Прочитать аннотацию к фильму.

• Прочитать рейтинги участников.

• Прочитать рейтинги в обзорах.

• Просмотреть список всех актеров фильма.

Идеально

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

• Посмотреть альтернативные обзоры или видео об этом фильме.

• Почитать любопытные факты о фильме.

• Почитать новости о фильме.

• Почитать дискуссии об этом фильме и принять в них участие.

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

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

Рецепт планирования цикла разработки

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

Но этот подход – не единственный из возможных.

Вот простой рецепт, который поможет вам избежать самых распространенных проблем.

Подготовка

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

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

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

Планирование

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

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

Дайте командам время на самостоятельное планирование. Помните: толпа не может сотрудничать. А специалистам, которые будут разрабатывать и тестировать программный продукт, необходимо продумать собственные рецепты создания историй – точно так же, как делала Сидни из главы 10. Дайте командам примерно час на то, чтобы они разбились на небольшие группы и хорошенько обдумали свои истории. Если вы владелец продукта, UI-дизайнер или бизнес-аналитик, оставайтесь где-то поблизости. Наблюдайте, если хотите. Будьте готовы ответить на вопросы, которые помогут им продвигаться быстрее.

Работая в маленькой группе, создайте план для каждой истории. Помните трех амиго, о которых мы говорили в главе 12? Возьмите их за образец при формировании групп. Затем как команда разработки решите, сколько историй могут быть успешно завершены в данном цикле разработки. Не забудьте принять во внимание праздники и отпуска. Однажды мне рассказывали историю, как замечательный план разработки провалился из-за Дня благодарения – как будто никто не знал о том, что приближается этот праздник!

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

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

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

Используйте карту историй во время разработки

Используйте карту, чтобы у членов команды разработки выработалось одинаковое понимание. Я часто слышу от участников различных команд, работающих по процессу Agile, как сильно они любят помогать друг другу и какими продуктивными чувствуют себя, потому что каждую неделю или две видят и демонстрируют работающие программные продукты. Но потом они всегда говорят нечто вроде: "Я, кажется, утратил понимание общей картины. Все, что я вижу, – это маленькие части продукта, который мы создаем". Используйте карту, чтобы облегчить команде понимание продукта в целом или функциональности, над которой вы работаете. Нахождение тактических проектных решений и выполнение задач разработки будет куда эффективнее, если люди хорошо понимают контекст, в который должна встроиться их работа.

Используйте карту для визуализации прогресса

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

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

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

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

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

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

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

Визуализация рабочего бэклога

Крис Гансен и Джейсон Канеш

Интернет навсегда изменил политику, что доказала избирательная кампания президента Обамы в 2008 году. Онлайн-стратегия Барака Обамы сыграла непосредственную и значительную роль в его продвижении и последующем избрании. Поэтому стратегия выборов 2012 года включала в себя обеспечение сервисов, которые поддерживали массовый сбор средств и традиционное движение снизу, при использовании технологий в качестве коэффициента силы, чтобы компенсировать огромное количество денег со стороны, вращающихся в предвыборной гонке. Мы использовали специальные инструменты, такие как Pivotal и Basecamp, для отслеживания своей работы по созданию личного кабинета кампании Обамы 2012 года, а для того, чтобы все остальные могли легко понять, что происходит, мы использовали стену, которую вскоре полностью заклеили стикерами. Вы можете удивиться, зачем мы тратили время на возню с этими дурацкими стикерами? А вот почему.

Так вышло, что в одном пространстве и над одной целью работали две совершенно разные культуры. Мы сидели в углу, выкрутив лампочку, чтобы работать в относительной темноте. Мы притащили собственные шумные клавиатуры. Мы носили гигантские наушники, чтобы заглушить шум новостей и интервью по кабельному телевидению, звонки и аплодисменты, которые проникали в пространство нашего офиса. Мы даже носили футболки метал-групп вместо официальных костюмов. Все люди, работавшие в предыдущих кампаниях, все эти ребята в наглухо застегнутых костюмах с галстуками имели традиционные взгляды на разработку программного обеспечения. "Мы описываем функции, которые нам нужны, а вы их для нас разрабатываете. Срок – вчера". Они не привыкли к постепенному предъявлению функций и итеративным изменениям или улучшениям, и они уж точно не будут искать оптимальные соотношения, чтобы получить нужные функции в тот момент, когда они могут дать наибольший эффект. Это предвыборная кампания! Нельзя сместить дату представления продукта, разве что указом конгресса! На следующий день после выборов все заканчивается независимо от того, успели мы или нет. Поэтому о том, чтобы они получили абсолютно все, чего хотели, и речи не шло.

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

Через семь месяцев мы выпустили маленький, минимально жизнеспособный продукт – только то, чего достаточно было для работы наших пользователей в штате Айова. Именно тогда все изменилось. Первая реакция была резко отрицательной, так как мы выпустили совершенно не то, что представляли себе люди. Было пропущено немало важных вещей. Попадались баги. Нас забросали вопросами: "Почему вы не сделали все как надо с первого раза?" И хотя мы уверяли, что будем вносить улучшения и исправлять неполадки каждую неделю, никто не собирался нам верить до того, как увидит это своими глазами. Но по мере того, как мы воплощали свои обещания в жизнь, росло и доверие.

Именно здесь сыграла важную роль стена со стикерами. Мы использовали Pivotal Tracker и Basecamp, но все остальные люди не хотели пользоваться этими инструментами. Нужен был абсолютно прозрачный способ показать всем, над чем мы работаем и к чему вскоре придем. Наша стена с историями была организована слева направо по календарным неделям, а сверху вниз – по приоритету. Самым важным для нас было время. На стене висели огромные часы, показывавшие, сколько дней, часов, минут и секунд осталось до дня выборов. Все понимали, что некоторые элементы сейчас не очень важны, а некоторые станут более критичными по мере приближения дня выборов. Каждая идея на стене была отмечена своим цветом, соответствующим определенному виду деятельности, связанному с этой идеей, например работе с избирателями, построению команды, регистрации голосов и явке избирателей. На этой картинке много фиолетового потому, что это ранний этап работы и построение команды, соответствующее фиолетовому цвету, сейчас более важно, чем другие моменты, например явка избирателей.

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

Назад Дальше