Евгений Зуев - Редкая профессия
К нашему удивлению, бельгийцы легко согласились с продлением срока работы. Впрочем, они довольно плотно (хотя до времени и формально) контролировали весь процесс и могли понять, что мы даром времени не теряем и перенос сроков носит объективный характер.
Дальше начинается психология. Вообще говоря, первоначальные сроки никто никому не навязывал: предложили их мы, но они-то согласились! Поэтому, казалось бы, ответственность за тот факт, что эти сроки оказались нереальными (кажется, и они, и мы сейчас это понимали), следовало бы разделить между всеми. Однако комплекс вины чувствовали именно мы (они, как в личном общении, так и в письмах, вообще проявляли мало эмоций и крайне редко допускали неформальный стиль общения). И хотя теперь-то мы могли предложить более обоснованные и реалистичные сроки завершения проекта, этот комплекс нам, к несчастью, помешал.
К тому времени мы уже вполне убедились, что квалификация позволяет нам на достойном уровне довести проект до завершения без чьей бы то ни было помощи. Наши консультации с заказчиками сводились к вопросам о конкретном устройстве тех компонент их системы программирования, с которыми компилятор должен взаимодействовать. Даже на вопросы о формате промежуточного представления, которое, согласно фирменной документации, было их собственной разработкой, они далеко не всегда могли дать вразумительный ответ (позднее это нашло свое объяснение). Обсуждать детали языка было не с кем, собственных специалистов по Си++ у них не было, они вообще до сих пор программировали на Си самой древней версии Кернигана и Ритчи. Их помощь состояла в периодических посылках очередных версий предварительного стандарта (до тех пор, пока рабочая группа не стала выкладывать их на свой Web-сервер) и материалов очередных заседаний и дискуссий, предшествующих принятию того или иного языкового свойства. Последнее было действительно интересно и ценно, так как эти материалы, насколько мы знаем, нигде не публикуются и рассылаются только членам рабочих групп.
В общем, мы вполне могли бы чувствовать себя полноправными партнерами фирмы. Однако, несмотря на все сказанное, мы еще долгое время не могли избавиться от ощущения учеников или, по крайней мере, подмастерьев в мастерской именитого художника. И то, что мы не успевали вовремя выполнить работу, осознавалось нами как непростительная оплошность новичка, не поспевшего загрунтовать холст к приходу мэтра. К этому добавлялась не имеющая совершенно никаких оснований боязнь, что, услышав просьбы о пересмотре сроков, фирма прекратит сотрудничество с нами.
Так или иначе, мы… снова назвали срок, гораздо меньший того, какой нам действительно требовался! Сейчас мы уже не помним, скоько времени мы просили, но что срок был явно занижен, это точно. Надо ли говорить, что потом нам пришлось корректировать и этот срок, и еще один, и еще…
Когда говорят о необходимости какого-либо трудного, но необходимого решения вместо серии половинчатых мер, часто приводят поговорку: нельзя отрубать хвост собаке по частям в надежде, что это будет не так жестоко. Мы поступали в точности наоборот: вместо того чтобы с самого начала назначить реальный срок, мы несколько раз понемногу его увеличивали. Боялись ли мы испугать фирмачей большим сроком? Наверное. Но, может быть, важнее даже то, что мы сами далеко не всегда могли в точности предсказать, сколько времени потребует тот или иной этап проекта. Нас все время подводил излишний оптимизм. Даже шеф, опыт которого в управлении программными проектами не сравним с нашим, не участвуя в реализации, не мог определить настоящих временных затрат.
Теперь, по прошествии времени, мы поняли, что получили очень важный урок. Способность определять реалистичные сроки больших программных проектов и умение их выдерживать — исключительно ценная составляющая опыта профессионального разработчика. По крайней мере, для нас этот урок не прошел даром: следующая серьезная и длительная работа, связанная с нашим компилятором Си++ (несколько слов о ней будет в заключение), была спланирована и выполнена почти идеально; сроки этапов выдерживались очень строго, и весь полуторагодовой проект завершился всего лишь с одно-полуторамесячным отставанием относительно первоначальных сроков. И это несмотря на то, что система состояла из нескольких компонент, в проекте участвовало около десятка человек, большинство которых впервые имело дело с разработкой таких системных программ, как ассемблеры, редакторы связей, эмуляторы и т.п., а аппаратные спецификации изменялись в течение всей работы.
Поистине учиться можно только на собственных ошибках!
Кризис
Работа вошла в режим хронического отставания. Примерно в середине описываемого периода сложилась особенно тяжелая ситуация. Процесс реализации, т. е. непосредственного программирования, постепенно набирал обороты, потоком пошли ошибки, которые следовало скрупулезно выявлять и ликвидировать. Это означало многие часы монотонной и тяжелой работы в отладчике. Однако многие ошибки показывали просчеты в наших проектных решениях; значит, нужно было откладывать в сторону отладку и опять проводить дни в обсуждениях. Наша работа приобрела характер прыжков из стороны в сторону, мы в буквальном смысле не знали, за что хвататься.
Процент пройденных тестов рос очень медленно, появлялись все новые и новые неожиданные ошибки. Мы же, несмотря на увеличивающееся отставание, уже не хотели заниматься поспешным "латанием дыр". Если ошибка свидетельствовала о некотором недочете проекта, мы, не задумываясь, пересматривали соответствующее решение и переписывали все места в компиляторе, относящиеся к нему. Образно говоря, если и приходилось делать в компиляторе "заплату", то мы стремились наложить ее прочно, захватывая стежками большие области здоровой ткани.
Проект, кряхтя и обливаясь потом, переваливал экватор. Сейчас все происшедшее представляется едва ли не закономерным, но тогда при взгляде со стороны могло выглядеть почти как катастрофа. Руководство фирмы, естественно, не вникавшее в подробности процесса и ориентирующееся только на формальные аспекты — постоянно переносимые сроки завершения очередных этапов,-- начало проявлять недовольство.
Своеобразным буфером для нас в этих условиях стал Вальтер. Несмотря на свое сравнительно высокое положение в компании, большую занятость (мы видели это по его постоянным командировкам по всему земному шару — от Америки до Австралии) и широкий диапазон сфер деятельности, он довольно глубоко вникал в наши исходные тексты, проводил дополнительное тестирование, анализировал некоторые проектные решения и давал рекомендации. Хорошо зная текущее состояние проекта, он, видимо, пытался сгладить негативное впечатление от постоянного переноса сроков. Давно перестав программировать, он не потерял квалификации как разработчик и в некотором смысле показывал пример того, как можно сочетать в одном лице менеджера европейского уровня и программиста, не гнушающегося рутинного процесса тестирования чужих программных текстов.
Тем не менее, и в его отношении к проекту стало проявляться недовольство. Первые же признаки этого повергли нас в панику: неужели мы переоценили свои возможности, и нам не по силам этот проект? Однако ничего сделать мы уже не могли: работа уже полностью захватила нас, процесс постепенно приобретал собственную внутреннюю логику, набирал инерцию и как бы сам тянул нас вперед. Наши эмоции, чье бы то ни было недовольство и вообще все сопутствующие обстоятельства все меньше и меньше влияли на ход работы. Однако отсрочка с закрытием каждого очередного этапа означала соответствующую задержку выплат.
Примерно через полгода самый трудный этап был преодолен и компилятор почти целиком вышел на стадию тестирования и отладки. Теперь по проценту пройденных тестов и по скорости прироста этого процента можно было более или менее достоверно судить о перспективах завершения всего проекта.
Вдруг начались задержки с платежами. Очередной этап пусть с опозданием, но завершается, программные тексты переданы, документация представлена,-- словом, формальности соблюдены, однако под различными предлогами нам предлагается подождать. Постепенно эта практика приняла постоянный характер. Или они решили нас проучить? Как бы то ни было, мы были в бешенстве. Не в состоянии выплатить даже такие откровенно нищенские суммы — как это можно объяснить?
В один из последних приездов Вальтера мы решили продемонстрировать твердость. Никаких ультиматумов ставить, конечно, не собирались, однако хотели дать понять, что нам не нравится характер отношений с фирмой. В переписке, предшествующий его визиту, мы настоятельно просили увеличить оплату, однако получали весьма уклончивые ответы. В первую же встречу мы заявили, что суммы, которые мы получаем, существенно ниже типичной по Москве зарплаты среднего программиста (это было действительно так), а мы к тому же не средние программисты. Кроме того, получаем мы их последнее время крайне нерегулярно. Поэтому, чтобы обеспечить хотя бы сносное существование, мы вынуждены искать дополнительную работу. По этой причине мы теперь не сможем уделять проекту все свое рабочее время. (Тем самым мы заранее предупреждали о возможности очередной задержки.)