Почему нельзя сделать систему стабильной?

Feb 01, 2010 23:55


Сегодня объяснял коллеге, почему невозможно сделать систему (в нашем случае большой сайт) достаточно стабильным, чтобы прекратить затраты на разработку, оставив только поддержку. Почему нельзя доделать проект до такого состояния, чтобы он просто ровненько работал? По ходу получилось сформулировать то, что давно крутилось в голове.

Дело в том, что чем сложнее система, тем меньше шансов сделать ее без ошибок. Более того, вероятность фундаментальной (архитектурной) ошибки в системе равна 100% (даже если ее нет сегодня, по мере изменения условий и среды, она проявится). Получается, что любая система не сегодня, так завтра содержит ошибки, требующие ее полной переделки. При этом, ресурсы, необходимые на исправление ошибки так велики, что это становится нецелесообразным. Получается, что довести систему до законченного вида и избавиться от всех багов стоит многократно дороже, чем ее создание, вне зависимости от того, как тщательно ее делали (кстати, по этой же причине, стоимость тиражного продукта на порядок выше индивидуального)

В тоже время, если не останавливать разработку, то по мере производства новых версий системы, можно заодно исправить и старые, даже архитектурные огрехи. Говоря проще, только ради исправления багов смысла тратиться нет, но такой смысл появляется, если речь идет о новых возможностях и новой версии продукта. Новая версия уже не будет содержать ошибок прошлой редакции, хотя и обзаведется своими, не менее критичными.

Получается, что система ВСЕГДА содержит баги, но у владельца проекта есть 2 сценария действий: либо постоянно их «замазывать», «подправлять», мирясь с тем, что все равно архитектура решения не позволяет их исправить до конца, либо постоянно разрабатывать новые версии, параллельно избавляясь от старых проблем (но получая новые).

Это как если бы у кого-то возникло желание довести телевизор Рубин (советского образца) до совершенства. Было бы потрачено много сил и времени, но все это было бы бесполезно, потому что в этот момент с похожими затратами кто-то делает принципиально новые телевизоры, уже лишенные недостатков Рубина, но содержащие уже свои проблемы (такие же большие, и такие же не устранимые, но другие). Очевидно, что надо либо терпеть несовершенство старого образца, либо идти вперед. Похожие примеры можно привести из любой высокотехнологичной отрасли, из машиностроения, из всех наукоемких продуктов. Более того, чем сложнее и больше продукт, тем явнее просматривается этот эффект - «эффект вечной разработки».

Многие наши заказчики удивляются, почему вложив N-ую сумму в разработку, они получают продукт, которым нельзя «просто пользоваться». Непонимание этого эффекта часто губит проекты, потому что менеджеры наивно полагают, что статья «поддержание проекта» может существовать без статьи «развитие», что проект можно довести до достаточно стабильного состоянии и после только поддерживать, однако, я берусь утверждать, что в случае индивидуальной разработки это невозможно.

веб-разработки, общие рассуждения

Previous post Next post
Up