Недавно я заинтересовался гибкими практиками в разработке программного обеспечения, и с тех пор я видел много статей, указывающих, что эти практики позволяют снизить общие затраты.
Логика, лежащая в основе этого, обычно выглядит следующим образом: если ваши требования изменятся, вы можете отразить это изменение в очередном зачете спринта, и это приведет к снижению затрат, поскольку разработка новой функции и ее реализация близки по времени, поэтому стоимость снижается, согласно известному правилу: чем позже вам нужно будет внести изменения в свои требования, тем дороже будет выполнить это требование.
Но средние и большие программные проекты сложны. Внезапное изменение требований не означает, что вам не придется прикасаться к другим частям вашей системы, чтобы удовлетворить это требование. Во многих случаях архитектуру необходимо будет очень существенно изменить, что также будет означать, что вам нужно будет повторно реализовать все функции, которые опирались на более старую архитектуру. Таким образом, весь смысл снижения затрат вроде бы уходит отсюда. Конечно, если новое требование требует новой независимой части системы, это не проблема, старая архитектура просто растет, ее не нужно переосмысливать и переопределять.
И наоборот. Если вы используете водопад и вдруг понимаете, что необходимо ввести новое требование, вы можете изменить свой дизайн. Если это требует, чтобы существующая архитектура была изменена, вы изменяете ее. Если он действительно не связывается с ним, а просто вводит новую часть системы, тогда вы идете и делаете всю работу, здесь нет проблем.
С учетом вышесказанного, мне кажется, что единственное преимущество, которое имеет гибкая разработка, - это создание полнофункциональных сборок между спринтами, и для многих людей и проектов это не критично. Кроме того, Agile, похоже, приводит к плохой архитектуре программного обеспечения в целом, потому что функции как бы накладывают друг на друга, гибкие команды заботятся только о том, работает ли функция, а не как она работает. Похоже, что когда системы со временем усложняются, практики гибкой разработки фактически увеличивают хаос в общей архитектуре продукта, что в конечном итоге приводит к более высоким затратам, поскольку вносить изменения будет все сложнее, тогда как водопад позволяет усовершенствовать архитектуру. прежде чем что-то выпустить.
Может кто-нибудь указать мне, где я иду не так, потому что очевидно, что многие люди используют Agile в производственных средах, поэтому я где-то ошибаюсь.