Разработка ПО по Agile
Что это такое
Разработка ПО по Agile — это ценности, применённые к неделе одной инженерной команды. Работа идёт в стволе, изменения маленькие и сливаются часто, тесты автоматические, а сборка к концу каждой итерации готова к развёртыванию. К этому добавляется предпочтение решать задачу, стоящую перед вами, а не ту, которую вы себе представляете. Отличие от «Методологии Agile» в уровне: та запись — про ценности и их компромиссы, эта — про то, как на самом деле выглядит неделя инженерной команды, когда ценности восприняты всерьёз.
Почему это важно
Ценности не выпускают ПО. Команда может согласиться с каждым принципом и всё равно интегрироваться раз в месяц — а значит, цикл обратной связи растянется на месяц, как бы ни называлась итерация. Именно инженерные практики ниже делают границу итерации реальной, ведь работающее ПО не покажешь в конце двух недель, если за одиннадцать дней никто ничего не слил. От них же зависит, способна ли команда реагировать на изменения вообще: кодовая база, выпуск которой занимает неделю, не отвечает ни на что.
Ключевые идеи
Интегрируйтесь непрерывно, выпускайте по требованию
Все сливают в одну ветку как минимум ежедневно, и конвейер доказывает, что сборка работает. Однако без этого итерация остаётся единицей планирования, а риск интеграции всё равно выпадает раз на релиз.
Ежедневно слияние в trunk; конвейер прогоняет тесты меньше чем за десять минут
На элемент готово к развёртыванию; решение о развёртывании — бизнес-решение
За цикл демонстрация чего-то, что работает в реальном окружении
Маленькие изменения, отревьюенные быстро
Изменение, ревью которого занимает три дня, блокирует двух человек. Держите изменения настолько маленькими, чтобы уложиться в час, и проверяйте их в тот же день.
Тесты — спецификация, которая переживает время
Приёмочные тесты описывают, что функция должна делать, в такой форме, что падают, как только это перестаёт быть правдой. Там, где раньше лежала бы письменная спецификация, команда держит тест и запись решения в одну строку.
Требование "возврат не может превышать исходный платёж"
Тест refund_of_more_than_paid_is_rejected
Запись одна строка: reason = chargeback liability
Команда владеет определением готовности
Запишите его и включите негламурные части: тесты проходят, развёрнуто в общем окружении, наблюдаемость на месте, документация обновлена. Иначе «готово» означает «работает на моей машине».
Рефакторинг идёт непрерывно, а не по графику
Команда, которой нужен отдельный квартал на рефакторинг, откладывала его каждую неделю. Закладывайте долю каждой итерации, а не отдельную фазу.
Практика
Опишите своё определение готовности
Перечислите условия, которым должен удовлетворять элемент, прежде чем считаться законченным. Затем сверьте с ними три последних завершённых элемента.
Готово, когда: каждое условие либо выполнено на трёх последних элементах, либо записано как пробел с владельцем.
Измерьте свой интервал интеграции
В течение недели фиксируйте самый длинный промежуток между слияниями в ствол — у рабочей пары или у отдельного человека.
Готово, когда: вы знаете самый длинный промежуток и назвали одну вещь, которая мешает ему быть короче.
Частые ошибки
- Одна интеграция на релиз — риск выпадает в худший момент, а итерация остаётся лишь ярлыком; исправить: сливайте в ствол ежедневно.
- Большие и медленные ревью — изменения выстраиваются в очередь, и цикл обратной связи удлиняется; исправить: держите изменения такими, чтобы уложиться в час ревью.
- Нет письменного определения готовности — «готово» означает «работает на моей машине»; исправить: запишите условия и сверяйте с ними элементы.
- Рефакторинг отложен навсегда — кодовая база теряет способность отвечать на изменения; исправить: выделяйте долю каждой итерации.
- Спецификации, которые никто не обновляет — тесты и код расходятся с документом; исправить: держите приёмочные тесты как долговечное утверждение.
Что читать дальше
- Методология Agile (04-product-process/02-agile-methodology) — прочитайте это первым; эта запись — те же ценности на уровне инженерии.
- Короткие итерации и обратная связь (04-product-process/02-agile-methodology/02-short-iterations-and-feedback) — цикл, который эти практики держат честным.
- Модульное тестирование (01-cs-fundamentals/10-unit-testing) — тесты, которые делают рефакторинг безопасным.
- CI/CD (06-cloud-devops/08-ci-cd) — конвейер, который делает ежедневную интеграцию настоящей.