Я использовал эту аналогию ... много программных проектов начинаются, потому что человек, которому нужно какое-то программное обеспечение, знает эквивалент «разнорабочего», и они нанимают этого человека, чтобы построить им программный эквивалент садового сарая. Это небольшое полезное небольшое приложение, которое отлично справляется со своей задачей.
Затем клиент возвращается к мастеру, довольному своей работой, и просит его сменить программное обеспечение, чтобы сделать еще одну вещь. Часто эта новая функция не имеет ничего общего с первоначальным запросом, поэтому похоже, что они просят вас построить еще одну комнату на заднем дворе сарая с отдельным входом.
Затем они хотят включить свет в сарае, чтобы у них был мастер на все руки, и он запускает единственную цепь от главной панели в доме, устанавливает выключатель цепи с натяжной цепью в потолке каждой комнаты и подключает их к цепи. ,
Затем клиент решает, что он хочет запустить некоторые электроинструменты, но он продолжает срабатывать выключатель, поэтому они перезванивают человека, и он фактически должен разорвать единственную цепь, которую он побежал к главной панели, и установить проводник большего размера и Подпанель в сарае. Он должен был дважды проложить провод, заплатить за два разрешения на электричество и т. Д. Это неэффективно.
Тогда клиент спрашивает что-то нелепое: можешь ли ты превратить мой садовый сарай в гараж? Я не хочу, чтобы вы делали все, что сделали ... Я просто хочу, чтобы вы сделали это побольше, чтобы я мог оставить свою машину там. Затем, во многих случаях, мастер думает, что «клиент всегда прав» и приступает к строительству надстроек на 3 сторонах сарая, чтобы увеличить его, сбивает стену между перегородками и т. Д. Конечно, крыша заканчивается до провисания, потому что он не построен правильно и т. д.
Таким образом, клиент больше не впечатлен, но он все еще хочет большего. Они просят разнорабочего снова и снова просто добавить еще одну комнату или изменить существующую комнату, чтобы сделать это, и т. Д. В итоге вы получите нечто, похожее на Нору и примерно такое же архитектурное звучание.
Сейчас большинство людей не настолько глупы, чтобы попробовать это в мире разработки, но это происходит постоянно в мире программного обеспечения, потому что люди не устанавливают такие связи:
Человек, способный построить действительно хороший садовый сарай, не обязательно квалифицирован, чтобы построить дом.
Если бы вы знали заранее, что построите дом поэтапно, но все начнется как садовый сарай, вы сделаете все по-другому, и сарай будет стоить намного дороже (вы бы налили действительно толстая прокладка, убедитесь, что у вас достаточно большой проводник для полной нагрузки готового дома и т. д.).
Во многих случаях переход с одного этапа на другой включает в себя отмену большого объема ранее выполненной работы, что делает ее более дорогой, чем кажется.
В мире строительства мы можем дать клиенту хорошее представление о том, как будет выглядеть результат на этапе проектирования, но у нас нет такой возможности в мире программного обеспечения. Если вы дошли до этого, вы в основном написали значительную часть программного обеспечения.
Agile Manifesto является результатом признания того, что аналогия программного обеспечения / конструкции нарушена. Такие вещи, как автоматизированные модульные тесты и итеративные циклы выпуска, не имеют параллели в построении. Эти вещи используют почти нулевую стоимость перехода от проекта к прототипу (мы называем это компиляцией или сборкой).