От занижения сроков к равновесию Нэша

За все сферы деятельности не скажу — быть может, и там тоже — но в сфере разработки программного обеспечения давно уже наблюдается занимательная тенденция: занижение сроков разработки на этапе получения заказа. Не в том смысле, что разрабатывают всё быстрее, а в том смысле, что это обещают заказчику.

Я статистику не собирал, но по моим умозрительным прикидкам сейчас заказчику называется срок минимум в два раза меньший, чем необходимо даже по самому оптимистичному сценарию — без проектирования, тестирования и даже без исправления ошибок. Конечно, угадать точное время, которое потребуется на разработку большой программы, довольно тяжело, если не сказать невозможно, однако тут всё гораздо круче: уверенно озвучивается заведомо заниженный срок.

q584-1095339

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

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

Посмотрим, как это работает.

В силу специфики производства разработка программ действительно довольно непредсказуема по срокам — слишком велик объём того, что надо держать в голове, а потому целый ряд весьма сложных вещей становится понятен только на этапе производственного экспериментирования или даже только во время разработки. Заранее всё это предвидеть довольно сложно и остаётся уповать только на некое «усреднение своего опыта», то есть на умозрительную аппроксимацию времени разработки предыдущих проектов тем же коллективом. Но любые умозрительные построения в цель попадают далеко не всегда, а тут мы ещё имеем дело с весьма сложными и относительно сильно варьирующимися задачами, поэтому даже совершенно честные оценки (то есть сделанные без желания обмануть заказчика) вполне могут оказаться радикально неверными.

Многие проекты затягивались, и все привыкли к тому, что временами программы выходят позже, чем договаривались, чего бы там про сроки в договоры ни понаписали. Перестать платить разработчикам при этом тоже как бы нельзя. Ну то есть так тоже делают (иногда даже без причины), однако это нельзя превратить в систему, поскольку в большинстве случаев при остановке выплат программу никто дописывать не будет, а программисты просто уволятся — благо работу им найти легко. Не то чтобы это всё очень нравилось заказчикам, но срыв сроков давно уже не кажется чем-то из ряда вон.

Так вот, в этой ситуации довольно выгодным оказывается занижать срок на этапе переговоров. Ведь санкции будут в основном моральными (крики через телефон, гневные письма), а денег вполне можно срубить: ведь занижая обещаемый срок, фирма ставит себя в более выгодное положение, нежели конкуренты: заказ-то достаётся именно ей. В срок разработчики, разумеется, не уложатся, но деньги-то уже у них. А иначе могли бы оказаться у конкурентов.

Парадоксальным образом оказывается, что для заказчиков важнее обещание сделать быстро, нежели реальное исполнение этого обещания — первое перевешивает второе, а даже если и не перевесит, то в следующий раз можно найти другого заказчика. Заказчику же, скорее всего, достанется исполнитель, который тоже сорвёт срок, но вдобавок ещё и предметную область не знает.

Фирма, воспользовавшись этим отличным способом повышения собственной конкурентоспособности, вынуждает пользоваться тем же самым и другие фирмы тоже — ведь иначе они будут терять заказы в пользу «нечестных» фирм. Компенсировать этот психологический эффект строгим соблюдением сроков нереально — заказчики на этапе заказа софта хотят обещаний, а исход разработки им ещё неизвестен. Писать с такой скоростью, чтобы уложиться в срок, который обещают другие фирмы, не теряя при этом в качестве во многие разы, тоже нереально. Единственный вариант — тоже врать о сроках. Благо для вранья клиентам давно уже есть специальные люди в штате.

Ну а когда все занижают срок в два раза, то кому-нибудь рано или поздно придёт идея занизить и в три. И он снова получит преимущество, чем вынудит остальных последовать тому же. Выйти из этого порочного круга никто уже не может: в рамках рынка он начнёт проигрывать конкурентам и будет ими вытеснен.

Дело в том, что в рыночной экономике оптимизируется прибыль. Приравнивание большей прибыли к «быстрее, лучше, дешевле» основано в лучшем случае на благих пожеланиях, и описанный здесь процесс тому пример. «Быстрее, лучше и дешевле», конечно, тоже бывает, но только как частный случай. В целом же тенденции могут быть самыми разными — рынок ни разу не ориентируется на некое «благо окружающих» или тем более «всеобщее благо». Прибыль и только прибыль.

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

Что, впрочем, можно наблюдать не только в сфере разработки софта, но и почти в любой другой, только не всегда настолько наглядно: все мы покупаем товары довольно низкого качества (что зачастую делается производителями сознательно — чтобы оно само сломалось сразу после гарантийного срока и у него купили ещё), но зато тратим на них весьма изрядную часть своей зарплаты.

Описанный процесс является частным случаем так называемого «равновесия Нэша» — одной из ключевых закономерностей «некооперативных игр». Краткая его суть состоит в том, что при определённых «правилах игры» игроки, если не сговариваются между собой, то приходят к точке устойчивого равновесия, которая может сколь угодно далеко отстоять от оптимума, достижимого при кооперативных действиях. Из данной закономерности, в частности, вытекает, что рынок с неизбежностью приводит к сговору олигополий, поскольку желание получать ещё больше у них никуда не девается, а без сговора из равновесия Нэша выйти нельзя.

Данный пример равновесия, как и само равновесие, столь интересны, что я, думаю, посвящу им ещё одну статью.