Agile Манифест был опубликован в 2001 году. Он определил ценности и принципы, на основе которых всё множество практик, использовавшихся в разработке программного обеспечения, как новых, так и ранее существовавших, было разделено на две части – Agile практики и не-Agile практики.


Например, юнит-тестирование, покер планирования, ежедневные стендапы стали считаться Agile практиками.


С другой стороны, штрафование сотрудников, подготовка и подписание полного ТЗ проекта, разделение команд по функциональному признаку (отделы архитектуры, разработки, качества) в Agile список не попали.


Причины, по которым ту или иную практику считают Agile или наоборот, не всегда очевидны.


Данная статья – попытка переосмыслить известные мне Agile практики, сформулировать простые и четкие критерии того, какую практику можно считать Agile, а какую нет.


Что значит быть Agile?


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


Критерии


Практику (а также идею, ценность, принцип, или даже целый фреймворк) будем считать Agile, если она соответствует хотя бы одному критерию (и не противоречит всем остальным). И наоборот, если практика противоречит хотя бы одному критерию, она не будет считаться Agile.


Люди Креативные профессионалы


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

Agile поощряет обучение и профессиональный рост.

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

Эффективные коммуникации Эффективные коммуникации


Эффективные – это те коммуникации, которые ведут к принятию правильных решений.

Главный инструмент Agile – живое общение лицом к лицу (face-to-face). При этом задействуются все каналы передачи информации, доступные человеку, причем в обоих направлениях.

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

Прозрачность, полное раскрытие информации без страха быть наказанным.

Ценность Ценность для заказчика/пользователя


Следуя идеям бережливого (lean) производства, Agile фокусируется на деятельности, создающей ценность.

Agile старается исключать/минимизировать всё, что ценности не приносит (eliminate waste).

Обратная связь Обратная связь


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

Важнейший фактор – оперативность обратной связи.

Соответствие ценностей Agile Манифеста предложенным критериям


Agile Value Критерии
Люди и взаимодействие важнее процессов и инструментов Люди Эффективные коммуникации
Работающий продукт важнее исчерпывающей документации Ценность Эффективные коммуникации
Сотрудничество с заказчиком важнее согласования условий контракта Эффективные коммуникации Ценность Обратная связь
Готовность к изменениям важнее следования первоначальному плану Обратная связь

Протестируем известные Agile практики


Регулярный рефакторинг кода


Люди проясняет архитектуру, открывает путь к творчеству, обучению и совершенствованию


Ценность облегчает дальнейшее развитие продукта, ускоряет внесение изменений (eliminate waste)


Обратная связь замыкает петлю обратной связи: выявили проблемы – решаем их


Настольный теннис в офисе


Люди позволяет перемежать работу и отдых, снижает стресс, подчеркивает свободу


Конструктивный конфликт


Эффективные коммуникации разносторонняя оценка, принятие эффективных решений посредством двусторонней коммуникации


Кросс-функциональные команды


Ценность нет потерь времени при передаче задач между командами


Эффективные коммуникации разносторонняя оценка, принятие решений, учитывающих все аспекты


Ежедневные стендапы


Обратная связь быстрая обратная связь


Эффективные коммуникации прозрачность, взаимопомощь


Информационные радиаторы (канбан-доски, burnup charts)


Эффективные коммуникации прозрачность


Бэклог, user stories


Ценность наиболее ценные задачи делаем в первую очередь


Обратная связь механизм обратной связи заложен в приемку каждой user story; декомпозиция сторей до небольшого размера повышает оперативность обратной связи


Planning Poker (быстрая коллективная оценка задач)


Эффективные коммуникации предварительное обсуждение задач и плана работ, прозрачность


Ценность не тратим много времени на раннюю проработку и точную оценку (многие из оцениваемых задач не дойдут до разработки, тратить на них время бессмысленно)


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


Планирование спринта


Эффективные коммуникации обсуждение задач непосредственно перед разработкой


Ценность наиболее ценные задачи делаем в первую очередь


Обратная связь обратная связь о том, что может или не может быть сделано прямо сейчас


Открытые рабочие пространства (open space)


Эффективные коммуникации оперативный обмен информацией, фоновое восприятие и вычленение релевантной информации


Разработка короткими итерациями (спринтами)


Обратная связь частое планирование и частое подведение итогов


Парное программирование


Обратная связь наиболее оперативная обратная связь – в момент написания кода


Автоматизированное тестирование, юнит-тесты, непрерывная интеграция и поставка (CI/CD)


Обратная связь оперативная обратная связь


Definition of Done


Обратная связь выполнение DoD – важная точка обратной связи


Ценность DoD обычно включает поставку ценности клиенту


Не Agile практики


Работа по большому ТЗ, подписанному заказчиком


Нет обратной связи существенно откладывает или даже блокирует обратную связь


Нет ценности ценность продукта падает, так как не учитываются изменившиеся требования


Неэффективные коммуникации блокирует открытое общение с заказчиком, создает почву для конфликтов с ним


Поиск виноватого, штрафование сотрудников


Не для людей демотивирует конкретного человека, подрывает доверие в команде; штраф – сильнейший демотиватор


Неэффективные коммуникации вместо обмена мнениями о проблеме и способах её решения, идет поиск виноватого


Нет обратной связи блокирует обратную связь, так как проблемы пытаются скрывать, замалчивать


Персональное назначение задач (тимлидом / менеджером проекта)


Не для людей ограничивает творчество, не способствует укреплению команды


Неэффективные коммуникации отсутствие обсуждения не способствует эффективному принятию решений


Нет ценности создает узкое место в лице того, кто назначает, что приводит к простоям и ожиданиям


Нет ценности способствует отстраненности, не фокусирует команду на целях и ценностях клиента


Логирование времени


Не для людей демотивирует сотрудников


Неэффективные коммуникации вместо обсуждения проблемы навязывается процесс


Нет ценности требует дополнительных усилий, не приносящих ценности


Обратная связь может быть полезным в качестве обратной связи для улучшения процесса


Технический долг


Не для людей рутина (сложность кода, долгое устранение ошибок) блокирует творчество


Нет ценности обслуживание технического долга – это расточительство, оно не приносит ценности, наоборот, отнимает её


Попытки заказчика/менеджера уменьшить оценки трудозатрат, определенные разработчиками


Не для людей демонстрирует недоверие, демотивирует разработчиков; повышенный стресс приводит к перенапряжению, выгоранию


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


Нет обратной связи авторитарное принятие решений блокирует обратную связь


Заключение


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


Напишите, пожалуйста, в комментариях, всегда ли вам очевидно, является та или иная практика Agile? Как вы разрешаете этот вопрос?


Напишите, какие Agile или не-Agile практики не соответствуют, на ваш взгляд, предложенным критериям. Предложите свои критерии.