Процесс разработки проекта становится гибче


Некоторое время назад у нас начался большой проект, который потребовал внедрения новых методик работы. Классический “водопад” не может обеспечить быстрое и безболезненное внесение изменений в проект. А это плохо. В условиях не четко поставленной задачи (а она и не может быть четко поставлена) требуется быстро вносить изменения, дополнения, новые требования клиента.
Похоже, что работа над подобными проектами, а также просто работа с разнородными задачами клиентов убеждает меня в том, что я бы не осмеливался сказать еще пару-тройку лет назад:

написать большое и всеобъемлющее ТЗ на крупный проект не реально.

Т.е. я хочу сказать, что это или не реально сложно или вообще не реально. Да я писал большие толстые ТЗ, которые описывали с точностью до запятой, как должен работать сайт, где у него какая информация и на какую кнопку надо нажать и вписать, чтобы он сообщил: “Такой формат e-mail недопустим”.
Но времена изменились. Я понял, что люди не просто не хотят читать большие ТЗ (это как раз не самая большая проблема), иногда невозможно по большому ТЗ сделать именно то, что хотят клиенты и то чего требует рынок. А чего хотят клиенты? Кто ответит? Кто знает чего хотят клиенты? А я отвечу: Они сами не знают чего хотят. И это будет истинной правдой.

Приведу пример. Недавно я заказывал себе новый рабочий стол домой и столкулся с проблемой. Мне престояло выбрать не просто цвет стола, но также внешний вид выдвижных ящиков. Менеджер показала мне штук 15 вариантов, к которым добавлялось несколько видов разметки. В этот момент я понял, что я не знаю какие мне нужны ящики. Я мог сказать, что у меня желтые обои в комнате и черный компьютер, но какой цвет при этом должен быть у ящиков я не знал. Просто ткнул в картинку и сказал: “Такие!”.

Так вот клиенты точно также не знают, что им надо. Надо им “молочный дуб” или “ясень”, хотят они видеть снятую фаску по периметру или нет. Если им показать набросок, с которым можно попробовать поработать, обсудить, то только тогда могут появиться какие-то требования от клиента. И чем более нов и не тривиален проект, тем получать требования сложнее и неоднозначнее. Задавая миллион вопросов в самом начале проекта вы натыкаетесь на “ложные” решения: клиенты просто тыкают в один из вариантов и говорят “этот”. А спустя 3 месяца они смотрят на результат и говорят: “Нет, давайте лучше этот!”

Как с этим жить?
Я вовсе не призываю писать ТЗ по-меньше и по-тоньше. Это как раз плохо. Просто в итоге подобных рассуждений мы наталкиваемся на то, что надо менять сам метод ведения проектов и отношений с клиентами. Надо быть гибче. И сейчас мы как раз занимаемся выработкой такого взаимодействия и внутренней работы.

Имя тренду, в котором мы движемся, agile. Итеративная, спиральная разработка.

Вот процесс прохождения проекта, который я набросал на доске для команды проекта:

Ничего секретного в моих каракулях нет. Это спиральный метод разработки.
Требуются некоторые пояснения к схеме.

Имеются 2 итерационных кольца:

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

Спираль пробегается один раз по большому кругу на всю итерцию и может пробегаться по малому кругу (без привлечения клиента) несколько раз на одну функциональность. Т.е. мы можем несколько раз изменить/улучшить/усложнить “профиль пользователя” не трогая при этом представителя заказчика.

Большой круг
В большом круге: презентация, сбор требований с клиента и ПМ (тикеты, истории) и малый круг это непосредственно разработка.
Итерация длится 2-4 недели (а не 3-5 месяцев, как было бы с “толстым” ТЗ). Ответственной за итерацию считается вся команда.
Критерий успеха прохождения итерации: выполненние поставленных задач, отклик на изменения и работающий код.
Дизайн и ТЗ под каждую задачу отдельно. В явном виде они никогда не будут закончены.

Малый круг
Тут тоже маленькая спираль.
В малом круге 3 точки: Аналитика, Разработка, Тестирование. Весь процесс разработки как раз и бегает меж этих “трех сосен” с каждой задачей.

Анализ
Описание историй или тиктов (user stories или tickets). Они регистрируются в системе управления проектом. Описывает клиент или менеджер проекта, а также любой заинтересованный участник проекта.
Главный на этом этапе все же ПМ. Он составляет список необходимой функциональности на текущую итерацию при участии представителя заказчика.
Составляются тест-кейсы.

Разработка
Далее tickets должны быть переработаны в ТЗ и представлены в виде задач (task и subtask, change request). Дополнены информацией и переведены в новую сущность в системе управления. Этой задачей занимается тим-лидер и ПМ.
Должны планироваться и выполняться автоматизированные тесты (кстати, это только предстоит).
Далее ведется разработка. С регулярными митингами. Обязательный митинг раз в неделю, а остальные при необходимости в процессе работы, хоть каждый день.
Сборки постоянные. Интеграция непрерывная. Проект практически каждый день должен работать. Да, в сущности выпускать билд каждый день не получается, но надо стремиться к этому.

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

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

Распределение ролей в команде:

  • Анализ — Менеджер и проектировщик.
  • Разработка — Тим лид и группа разработки.
  • Тестирование — QAщики.
  • Презентация — клиент, аккаунт и прочие менеджеры.

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

Говоря здесь и далее в своем блоге про agile я не буду утверждать, что мы следуем каким-то описанным жестким методологиям agile. Вдруг мне станут указывать на то, что по srum положено то, а по XP другое. Я заметил, что чем более профессиональна команда разработчиков тем более они сторонятся вского рода методологий. “Если менеджмент начинает работать по методологиям, значит не знают как надо работать…” — так рассуждают многие из них. И они не далеки от истины. Поэтому настраивая команду на работу я стараюсь предоставить им самим выбор делать митинги раз в день или в неделю, ну или делать ли таскборд.

Information and Links

Join the fray by commenting, tracking what others have to say, or linking to it from your blog.


Other Posts
Интервью
Сайт переехал на новый хостинг

Write a Comment

Take a moment to comment and tell us what you think. Some basic HTML is allowed for formatting.

Reader Comments

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

Это по мотивам гугловского ror2ru что ли?

“написать большое и всеобъемлющее ТЗ на крупный проект не реально.”

О, наконец-то гуру написания ТЗ признал эту аксиому :)

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

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

Мужики, только один нюанс - смотрите при отсутствии ТЗ не подпишите контракт на фиксед прайс проект. Потому что в таком случае отсутствие ТЗ начинает играть против вас, как в старом украинском анекдоте: “Мамо, а як?” - “Не знаю! но нэ так!!!” И проект можно не принимать годами. (Фиксед прайс проекты вообще зло, но если уж за него браться, то хотя бы под подписанный statement of work с перечислением функционала, который будет разработан (очертить границы). Внутри границ скорее всего прогнут не раз, но вот нового протащить уже не смогут).

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

А по поводу того, что тебе не нравится… Возможно надо процесс выстраивать более четко. Не смотря на то, что он должен быть гибким он должен быть процессом. :)

Очень напоминает подход Келли Гото “семь шагов”…

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

[...] отдельного материала, но Юрий Шиляев недавно писал об этом процессе для этого же проекта у [...]

Денис, по поводу заключать договор с фиксированной ценой и без ТЗ - это понятно. А как быть с этим моментом при Agile-подходе? Time&material? Какие есть варианты?

Всё то, что тут называется словом “Метод”, а также IDEF & UML - это не руководство к действию.
Для кого-то это цветущий сад, а для кого-то кладбище опыта.
Именно опыта, и дословное исполнение написанного - не более чем показатель квалификации.
Если опыт получен сегодня - он уже устарел. Новый день - новый восход, а разрабатываемая сегодня система только завтра выйдет на рынок, а значит в сегодняшних разработках надо опираться на завтряшний опыт.
Как узнать что будет завтра? всё новое - хорошо забытое старое :)