Waterfall и Agile: проектирование и эволюция как способы формирования систем
В книге Social Architecture Pieter Hintjens делит системы на “спроектированные” и “живые”. Смысл разделения в том, что спроектированная система должна быть продумана сразу и во всех деталях. Напротив, живая система формируется эволюционно, заранее не имея окончательного плана.
Для проектирования нужна хорошо формализованная проблема и ее контекст. На этом строится проект и его реализация. Но пока мы год идем к цели, мир меняется: технологии, конкуренты, запросы пользователей. Иногда сама исходная проблема теряет актуальность.
В этом смысле waterfall фиксирует контекст в момент старта. Обратная связь может влиять на реализацию, но сама постановка задачи уже оторвана от реальности. Иногда это единственный вариант, когда итеративность невозможна. Марсоход нельзя переделать, когда он уже на месте.
Agile, наоборот, организуется вокруг идеи постоянной обратной связи с реальностью. Мы сделали кусок, посмотрели, что происходит, и оставляем за собой право менять не только реализацию, но и само понимание проблемы.
Это шире вопроса методологий разработки. По сути — проектирование против эволюции. Форма либо задается заранее и реализуется, либо рождается и меняется по ходу взаимодействия со средой.
То же применимо к жизни. Гибкий человек живет с пониманием, что его сегодняшние цели актуальны лишь в контексте сегодняшнего дня. Жизнь тогда не сводится к одному глобальному проекту с заданной точкой финиша, а превращается в череду контекстно обусловленных целей. И в каждую из них можно верить не менее страстно, чем в одну на всю жизнь.