Разработчики программного обеспечения прошлого века столкнулись с проблемой. Рынок активно рос за счет спроса, не по дням, а по часам. А вот методы разработки остались те же. Команды попросту не успевали выпускать ПО в темпе, который требовала индустрия. Компании тонули в микроменеджменте, лишнем регулировании процессов и реагировать на изменения им было тяжело.
Разработка затягивалась на месяцы и за это время ситуация на рынке менялась. Спрос смещался на другой функционал, и к моменту релиза программа оказывалась никому не нужной.
В разработке тогда использовалась каскадная модель, также известная как «Водопад». Структура метода была такой:
- Определение требований.
- Проектирование.
- Реализация.
- Воплощение
- Тестирование и отладка.
- Инсталляция.
- Поддержка.
Если упрощать, то создается объемное техзадание, на основе которого строится вся работа. Модель не предусматривает отклонений от этой инструкции, то есть какой продукт «заказывали», такой и получаем. Но разработка — это долгий процесс. Планирование на такой длительный срок часто оказывается делом неблагодарным: за это время рынок может уже измениться. Плюс есть шанс, что на середине проекта найдется критическая недоработка в техзадании и разработка затянется.
Поэтому в 1990-х годах специалисты стали развивать альтернативные методы разработки ПО. Впоследствии исследователи объединят их в семейство Agile-методологий. Большинство из них направлены на работу в разрезе итераций, отрезков, по результатам которых корректируется курс проекта. Это позволяет не упираться в техзадание и адаптироваться к ситуации: добавлять и убирать функционал, менять позиционирование.
Результат каждой итерации — это либо готовая часть продукта, либо продукт в миниатюре.
Больше всего гибкие методологии (от англ. agile — гибкий) подходят для небольшой команды, которая создает творческий продукт. Не только ПО, но и программу, журнал или дизайн интерьера.
В 2001 году независимые практики вывели 4 основных ценности и 12 принципов Agile.
Ценности Agile
- Люди и взаимодействие важнее процессов и инструментов.
- Работающий продукт важнее исчерпывающей документации.
- Сотрудничество с заказчиком важнее согласования условий контракта.
- Готовность к изменениям важнее следования первоначальному плану.
Группа не отрицает важности того, что справа, но видит большую ценность в том, что слева.
Принципы Agile
- Высший приоритет — удовлетворение потребностей заказчика. Это достигается благодаря регулярной и ранней поставке продукта.
- Изменение требований приветствуется на любой стадии разработки. Agile позволяет изменять продукт для получения конкурентного преимущества.
- Рабочий продукт нужно выпускать так часто, как это возможно.
- Создатели продукта и представители бизнеса работают вместе ежедневно.
- В команде должны работать мотивированные профессионалы. Нужно создать для них комфортные условия и полностью им довериться.
- Общение лицом к лицу — это самый эффективный способ общения с командой и внутри нее.
- Прогресс измеряется рабочим продуктом.
- Инвесторы, разработчики и пользователи должны иметь возможность поддерживать постоянный ритм.
- Внимание к качеству исполнения продукта и проектированию повышает гибкость проекта.
- Нужно стремиться к минимизации лишней работы.
- Самые лучшие решения появляются у самоорганизующихся команд.
- Команда должна систематически анализировать способы улучшения эффективности и на основе этого корректировать рабочий процесс.
И хоть этим ценностям уже более 20 лет, они все еще применимы и помогают эффективно создавать продукты.