Итеративная разработка/управление проектами: путь от хаоса к успеху

Короткие итеративные циклы в работе далеко не новы, но они лучше остальных подходят для условий неопределённости. Адаптировать продукт можно буквально на ходу. Знаменитую фразу про «украл, выпил, в тюрьму» можно перефразировать для итеративных проектов примерно так: «запланировали, сделали, переделали… переделали снова… и снова…».

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

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

Определение итеративной разработки/управления проектами

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

Если сильно упростить, то это научный аналог метода проб и ошибок: попробовали концепцию, не получилось, вернулись в исходную точку, попробовали новую концепцию, получилось, двинулись дальше и так далее, от итерации к итерации.

Почти все гибкие методологии управления проектами близки к такой идеологии. Метод итераций широко применяется в Agile-подходах: Scrum, Kanban, бережливое производство (lean), Six sigma, метод критического пути и т.д.

Тем не менее, итеративную разработку можно внедрить где угодно, привязка к Agile не обязательна. Простейший пример – связка с MVP. Сначала вы разрабатываете минимальный жизнеспособный продукт, а затем планомерно улучшаете его и доводите до совершенства. Получается, что первая итерация – это создание MVP, а все последующие – улучшение продукта.

Основная проблема коротких итераций – потенциальная возможность застрять в бесконечных циклах доработок, когда проект рискует превратиться в одно сплошное «вечное улучшение». Это будет состояние, похожее на «Ещё чуть-чуть, и мы точно выпустим первую стабильную версию!», которое никогда не заканчивается.

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

Итеративная разработка Vs Инкрементная

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

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

А инкрементный подход – это когда продукт проектируется таким, каким он должен получиться на выходе. В соответствии с планом (или календарным графиком) разработка разбивается на небольшие шаги (инкременты), и начинается работа. Границами инкрементов могут выступать, например, какие-то специальные самодостаточные функции или реализация подсистем. После каждого шага нет остановок или какого-то комплексного анализа. Деление на инкременты делается скорее для удобства управления. Конечный продукт планомерно обрастает новыми функциями по мере их реализации – но всё в рамках изначального генерального плана. Отклонения от плана маловероятны.

Это чем-то напоминает подход Waterfall, только разбитый на более мелкие шаги – инкременты. Каждый новый инкремент не меняет уже реализованные функции, а только дополняет их.

Из каких элементов (этапов) состоит цикл итеративной разработки

Каждая итерация включает в себя следующие этапы и элементы:

  1. Планирование (Plan)

Цель: определение задач и целей на конкретную итерацию.

Составляющие компоненты или шаги:

  • Формирование бэклога (списка требований и задач).
  • Определение ключевых целей и критериев успешности (в рамках конкретной итерации).
  • Распределение обязанностей в команде (функции, задачи, планирование нагрузки).
  • Оценка сроков выполнения.
  1. Анализ и проектирование (Analyze & Design)

Цель: разработать архитектуру и выбрать подходящие технические решения.

Составляющие компоненты или шаги:

  • Определение структуры будущей системы.
  • Подготовка входящих данных и ресурсов (схем, API, UX-дизайна, если речь о программной разработке).
  • Проектирование задач и их декомпозиция при необходимости (проработка алгоритмов и ключевой логики работы).
  1. Разработка (Develop)

Цель: реализовать намеченные цели и задачи для конкретной итерации.

Составляющие компоненты или шаги:

  • Непосредственно работа над реализацией списка задач (написание кода, реализация новых функций и т.п.).
  • Интеграция с предыдущими версиями продукта / с уже реализованными функциями.
  • Ведение документации по изменениям.
  1. Тестирование (Test & Review)

Цель: выявить ошибки и проверить то, что получилось, на предмет соответствия исходным требованиям (поставленным задачам/целям).

Составляющие компоненты или шаги:

  • Различные тестирования и проверки (юнит-тесты, интеграционные тесты, UI/UX-тестирования и т.д.).
  • Проверка на соответствие техническому заданию.
  • Исправление найденных ошибок (если это возможно в размах текущей итерации, если нет – работа над исправлениями выносится в следующую итерацию).
  1. Демонстрация и обратная связь (Demo & Feedback)

Цель: получить фидбэк от пользователей и заказчиков (пример того, как это можно сделать в рамках подхода Voice of Customer).

Составляющие компоненты или шаги:

  • Презентация текущего результата.
  • Сбор обратной связи от заинтересованных сторон.
  • Анализ (кластеризация) замечаний и выявление необходимых изменений (с расстановкой приоритетов и параметров важности/критичности).
  1. Корректировка и доработка (Evaluate & Adapt)

Цель: улучшить (оптимизировать) продукт на основе полученных данных.

Составляющие компоненты или шаги:

  • Приоритизация новых задач (например, по методике Кано).
  • Корректировка бэклога и стратегии.
  • Подготовка к следующей итерации.

∞ Начало новой итерации (заход на новый цикл)

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

Picture background

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

Плюсы итеративного управления проектами

  1. Гибкость и адаптивность. Вы можете вносить изменения в проект на любом этапе разработки, адаптируясь к новым требованиям и внешним условиям (буквально на ходу).
  2. Быстрое выявление и исправление ошибок. Это становится возможно благодаря этапам тестирования и сбора обратной связи, плюс в каждой итерации предусматривается место (время и ресурсы) для внесения корректировок.
  3. Возможность улучшения и усовершенствования продукта. Каждая итерация делает продукт лучше (актуальнее и конкурентоспособнее).
  4. Быстрое приближение к первой работоспособной версии продукта. Достаточно в первых итерациях поставить цель реализации минимальной жизнеспособной модели. Соответственно, работающий продукт уже можно демонстрировать заказчикам и потенциальной аудитории, собирать актуальную обратную связь. А это всегда твёрдая база для дальнейших шагов и оптимизаций.
  5. Снижение рисков. Разделение работы на небольшие циклы помогает выявлять потенциальные проблемы на ранних этапах, снижая вероятность провала всего проекта. Даже если потери будут, они будут минимальными.
  6. Повышение прозрачности процесса. И клиенты, и заказчики, и сама команда разработчиков будут видеть реальный результат своей работы, а также смогут вживую изучать все изменения и улучшения. Регулярные отчёты и обратная связь позволяют всем заинтересованным сторонам следить за ходом реализации проекта и понимать, на каком этапе находится работа.
  7. Улучшение взаимодействия команды. При итеративной разработке обсуждения проводятся чаще, а сами коммуникации становятся более продуктивными. Исполнители лучше понимают цели проекта и свои задачи. Соответственно, им становится проще находить эффективные решения и сглаживать острые углы.
  8. Возможность тестирования гипотез. Если продукт создаётся в условиях неопределённости, итеративный подход позволяет проверять идеи на практике и быстро корректировать общую стратегию.

Минусы и подводные камни итеративного управления

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

  • Высокий риск бесконечных доработок. Достичь идеала нереально. Поэтому доработками, улучшениями и тестированием можно заниматься бесконечно. Итеративная разработка может привести к постоянному внесению изменений, из-за чего проект рискует не то, что никогда не завершиться, но даже не зарелизиться. Потенциальное решение такой проблемы: стараться определять чёткие цели итераций и устанавливать границы для количества исправлений (очерчивать пределы: бюджеты, время, качество).
  • Рост затрат на управление проектом. Каждая итерация требует дополнительного времени на анализ, тестирование, обратную связь и планирование, что увеличивает срок реализации проекта. А время – это ценный ресурс, который легко конвертируется в оплату труда команды. Много времени = большой бюджет. Потенциальное решение: оптимизировать и максимально автоматизировать рабочие процессы, внедрить систему управления, поставить чёткие границы для сроков и бюджета.
  • Опасность разрастания требований (в английском даже есть термин «Scope Creep», русск. «расползание рамок»). У гибкости и адаптивности есть обратная сторона – из-за того, что в исходный план постоянно вносятся изменения, стартовая модель проекта может существенно отличаться от реальной (той, что получается после каждой новой итерации). Соответственно, в какой-то момент можно полностью потерять нить – то, ради чего проект затевался. В итоге вы полностью утратите контроль над продуктом. Потенциальное решение: приоритизировать задачи и строго фиксировать критически важные требования (они должны выступать в роли некоего костяка или каркаса, чтобы было от чего отталкиваться и на основе чего оценивать конечный результат).
  • Накопление технического долга. Случается в ситуациях, когда что-то остаётся недоделанным в рамках одной из итераций (например, из-за того, что задачи были неправильно оценены на входе и не уложились в разумные сроки стандартного цикла разработки). Чем чаще случаются такие недоделки и чем больше у вас на входе новых задач, тем выше вероятность того, что к реализации «задолженностей» уже никто и никогда не вернётся. Просто будет не до них. А большой объём технического долга в какой-то момент может стать проблемой для базовой архитектуры. Потенциальное решение: регулярно пересматривать актуальность ключевых функций и механизмов проекта, например, рефакторить код, внедрять автоматизированное тестирование и т.п., а также повышать приоритет незавершённых задач при переносе их в новую итерацию.
  • Требуется высокая вовлечённость заказчиков и клиентов. Различные тестирования, опросы, исследования и т.п. отнимают массу времени и сил. И если клиенты ещё хоть как-то могут выделить минутку на опрос, то для заказчика получается ситуация, когда ему нужно обеспечить наличие постоянного представителя в команде разработчиков продукта (он будет отвечать за оперативную коммуникацию и формирование позиции по разным вопросам). Такое могут себе позволить далеко не все. А если оперативной обратной связи не будет, циклы разработки могут существенно замедлиться, что тоже недопустимо (для всех сторон процесса). Потенциальное решение: устанавливать регулярные точки контакта и обеспечивать прозрачность разработки на уровне информационных систем (например, за счёт систем управления проектами, к которым представители заказчика подключаются в особом статусе – со специальными аккаунтами и ограниченными правами доступа).

Выводы и рекомендации

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

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