Итеративный и инкрементный подход к разработке: разница, пример и риски

Итеративный и инкрементный подход к разработке: разница, пример и риски Полезное

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

Это два разных свойства процесса. Итеративность отвечает на вопрос «как часто мы возвращаемся и переделываем», инкрементность — «как мы наращиваем объем». На практике их почти всегда совмещают, и тогда говорят об итеративно-инкрементной разработке: на ней построены Scrum и большинство гибких практик. Ниже — мини-словарь, сравнение с каскадом, разбор на примере мессенджера, плюсы и риски.

Иногда подход ищут под искаженными названиями — «анимеративный» или «интерактивный». В методологиях разработки правильный термин — итеративный (от лат. iteratio — повторение).

Мини-словарь

Термин Что это Пример в мессенджере
Итерация Отрезок времени с полным циклом «план — работа — проверка — выводы» Двухнедельный цикл команды
Инкремент Прирост работающей функциональности по итогам работы Добавили голосовые сообщения
Релиз Выпуск версии пользователям Обновление в магазине приложений
MVP Минимальная версия, на которой можно проверить главную гипотезу Чат на двоих без групп и медиа
Обратная связь Данные о том, как продуктом пользуются: метрики, отзывы, демо заказчику «Люди просят отправлять фото»

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

Итеративный и инкрементный: в чем разница

Удобная аналогия — картина (ее популяризировал Джефф Паттон на примере «Моны Лизы»). Инкрементный художник пишет полотно по кускам: сначала полностью и начисто левый верхний угол, потом соседний. Итеративный делает набросок всей картины, затем прорисовывает ее целиком все подробнее, переделывая то, что не получилось.

Признак Итеративный Инкрементный
Главный вопрос Что переделать и улучшить по итогам проверки Какую часть добавить следующей
Меняется ли уже сделанное Да, это нормальная часть работы В чистом виде — нет, части добавляются
Требования Уточняются по ходу Могут быть известны заранее и разбиты на части
Когда есть что показать После каждой итерации, но может быть «сырым» После каждого инкремента, часть уже готова
Главный риск Бесконечная доработка без выпуска Неверный общий план, который выяснится поздно

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

Чем оба подхода отличаются от каскада

Каскадная модель (waterfall) проходит этапы один раз и по порядку: требования, проектирование, разработка, тестирование, внедрение. Работающий продукт пользователь видит в конце.

Критерий Каскад Итеративно-инкрементный подход
Требования Фиксируются в начале Уточняются после каждой итерации
Первая работающая версия В конце проекта После первых итераций
Цена позднего изменения Высокая: нужно вернуться на ранний этап Ниже: изменение планируют в следующую итерацию
Тестирование Отдельный этап ближе к концу В каждой итерации
Что проще зафиксировать в договоре Объем, срок и бюджет Срок и бюджет итерации, объем гибкий
Где уместен Стабильные требования, регулируемые отрасли, жесткий объем Новые продукты, неясные требования, высокая неопределенность

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

Как проходит одна итерация

Итерация обычно ограничена по времени (таймбокс). В Scrum такой отрезок называется спринтом, по Scrum Guide его длина — не больше месяца, на практике часто 1-2 недели. Внутри итерации повторяются одни и те же шаги.

  1. Планирование. Выбрать цель итерации и задачи, которые к ней ведут. Цель формулировать через результат для пользователя: «можно отправить фото», а не «сделать модуль загрузки».
  2. Разработка. Сделать задачи до состояния «готово»: код, тесты, проверка. Полуготовые задачи в инкремент не входят.
  3. Проверка. Автотесты и ручная проверка нового и старого поведения.
  4. Демонстрация и обратная связь. Показать результат заказчику или пользователям, собрать метрики и отзывы.
  5. Выводы. Решить, что оставить, что переделать, что убрать из плана. Отдельно разобрать сам процесс: что мешало команде.

Без шагов 4-5 итерации превращаются в мини-каскады: отрезки короткие, но план не меняется.

Пример: мессенджер по итерациям

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

Итерация Цель Инкремент Что узнали Решение
1-2 Проверить, будут ли переписываться Регистрация, список контактов, чат на двоих (MVP) Пользователи возвращаются, но жалуются на задержку сообщений Следующая итерация — стабильность доставки, а не новые функции
3 Надежная доставка Переделана отправка, добавлены статусы «доставлено» и «прочитано» Жалобы на задержку ушли Можно наращивать функции
4 Обмен медиа Отправка фото Фото отправляют часто, запросы на видео единичны Видео отложено, в план — голосовые сообщения
5 Голосовые Запись и отправка голосовых Растет объем хранилища В план — ограничение размера и сжатие

Что здесь итеративного, а что инкрементного. Итерация 3 — в основном итеративность: главная работа — переделка уже сделанной отправки по обратной связи, а статусы «доставлено» и «прочитано» — небольшой попутный инкремент. Итерации 4-5 — инкременты: к работающему продукту добавились медиа и голосовые. А решение «видео отложить» — главный выигрыш подхода: по каскадному ТЗ видео сделали бы сразу, потратив бюджет на функцию, которая почти не нужна.

Пример показывает логику решений, а не типичные сроки.

Преимущества

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

Преимущества работают только при условии: у команды есть доступ к заказчику или пользователям и право менять план. Если обратную связь некому давать, итерации превращаются в формальность.

Риски и как их снижать

«Нагрузка на серверы» и «медленные базы данных», которые иногда приписывают подходу, зависят от архитектуры, а не от процесса. Реальные риски другие.

Риск Как проявляется Что делать
Размытый объем (scope creep) Каждая итерация добавляет «еще одну функцию», продукт не выпускается Цель релиза и критерии готовности, приоритизация бэклога
Нефиксированный бюджет и срок Заказчик не может заранее понять итоговую цену Фиксировать бюджет и срок, а объем делать переменным; считать стоимость итерации
Технический долг Ранние быстрые решения тормозят следующие итерации Закладывать время на рефакторинг, пересматривать архитектуру раз в несколько итераций
Регрессии Новая функция ломает старую Автотесты, непрерывная интеграция, проверка старого поведения в каждой итерации

Итеративный подход не делает бюджет бесконечным, он меняет то, что фиксируется: в каскаде — объем, из которого считают цену, в итеративной модели — цену и срок, а объем определяют приоритеты.

Спиральная модель — итерации, управляемые рисками

Спиральная модель — вариант итеративного подхода, который описал Барри Боэм (статьи 1986 и 1988 годов). Каждый виток спирали включает постановку целей, анализ рисков и поиск способов их снизить, разработку и планирование следующего витка. После витка решают, продолжать ли проект.

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

Выводы

  • Итеративный подход — это повторение цикла «план — работа — проверка — выводы» с переделкой сделанного; инкрементный — наращивание продукта работающими частями.
  • На практике подходы совмещают: итеративно-инкрементная разработка лежит в основе Scrum и других гибких практик.
  • От каскада подход отличает ранняя работающая версия, тестирование в каждой итерации и дешевые изменения требований.
  • Главные риски — размытый объем, технический долг и регрессии; они снижаются фиксацией бюджета и срока при гибком объеме, автотестами и рефакторингом.
  • Спиральная модель — итерации, содержание которых определяет главный риск.

Где применяется / связь с практикой

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

Освойте тему на практике

Если хочется освоить управление такими проектами системно, с практикой на кейсах, посмотрите курс «Менеджер Agile-проектов». Отдельные темы по управлению разработкой разбирают на открытых уроках Otus.

FAQ

Итеративный подход и Agile — одно и то же?
Нет. Итеративная разработка появилась задолго до Agile-манифеста 2001 года. Agile — набор ценностей и принципов, а итеративно-инкрементный цикл — один из механизмов, на которые эти принципы опираются.

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

Какой длины должна быть итерация?
Единого правила нет. В Scrum спринт не длиннее месяца, чаще 1-2 недели. Короче — быстрее обратная связь, но больше накладных расходов на планирование и демо.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)