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

Данный свод высказываний предназначен для руководителей, которым волей судеб пришлось заниматься новым для себя делом — управлять тем или иным «программистским» проектом (созданием информационной системы предприятия, разработкой сайта, и т. п.).

Опытному человеку сказанное ниже может показаться набором простых и давно известных истин. Я и не собираюсь претендовать на авторство всех приведенных ниже правил.

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

Много раз видели мы срыв сроков, провал проектов. Видели бизнесменов, с готовностью вкладывавших деньги в новую технологию, поражающую воображение — без понимания рынка, бизнес-планов и даже примерных результатов и сроков работ. Я и сам совершал множество подобных ошибок за 15 лет работы в индустрии производства программного обеспечения.

Вот эти простейшие вещи и собраны здесь в виде свода правил. Вот самое первое из них:

Первое правило Ашманова. Не бывает технических проблем. Бывают только человеческие, то есть организационные.

Я не даю здесь технических советов относительно управления проектами, правил планирования и документирования, процедур тестирования и выпуска. Обо всем этом написаны горы специальной литературы, в том числе классическая книга Фредерика Брукса «Мифический человеко-месяц».

Однако должностные инструкции и правильные процедуры — далеко не всё. При запуске проекта руководитель в первую очередь вступает в человеческие отношения с коллегами, исполнителями, подчиненными. Эти отношения сложны, непривычны и часто могут просто поставить в тупик, если не знать всего нескольких простых правил.

Об управлении программистами

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

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

Мифы. Управление программистами имеет особенности, осложненные мифами и иллюзиями вокруг программирования. Эти мифы охотно поддерживаются разработчиками и продавцами компьютерных услуг. Основной причиной мифов является противоречие между очевидной интеллектуальностью и сложностью работы с одной стороны, и совершенно обычными свойствами персонала и проектов — с другой стороны. Независимость от мифов приходит с опытом и знанием.

Распространенные мифы о разработке программного обеспечения

Миф об уникальной специфике программного обеспечения. Производство программного обеспечения не является особым бизнесом, что бы там ни говорили сами разработчики или продавцы информационных систем. Оно не более особенное, чем пищевая промышленность или косметология. Законы развития и окупаемости проектов при разработке ПО, интернет-сайтов и корпоративных информационных систем — те же самые, что и везде.

Поэтому разговоры об уникальности разработчиков ПО, специфике управления программистским проектом, особых путях бизнеса — всегда очень подозрительны.

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

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

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

Нужно помнить, что разработчик ПО — это инженер, а в бизнесе высоких технологий выигрывают не инженеры, а бизнесмены и менеджеры. Как и везде.

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

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

Правила, которые полезно знать менеджеру

Правило 2. Технический жаргон ничего не значит.

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

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

Правило 3. Разработчики всегда называют неверные сроки.

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

Правило 4. Разработчику свойственен врожденный оптимизм.

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

Типичный признак необъезженного разработчика-оптимиста — самоуверенность и горячность, стремление пойти и сделать, а не сесть и запланировать.

Правило 5. Программист испытывает страсть к обобщению.

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

И в этом же — серьезная угроза бизнесу. Если дать разработчику волю, разработка общей платформы отнимет 100% времени и денег, и продукт никогда не выйдет на рынок.

Поэтому программирование в наиболее общем виде нужно категорически запрещать. Верным признаком страсти к обобщению является планирование создания мощных ядер и наиболее общих платформ со сроками исполнения больше года.

Баланс между обобщением и текущими требованиями рынка достигается опытом и соображениями бизнеса. Программистам доверять здесь абсолютно бессмысленно, как бессмысленно обсуждать с пьяницей семейный бюджет.

Правило 6. Нельзя делать «по-хорошему».

Всякий программист свою страсть к обобщению оправдывает похвальным желанием наконец-то всё сделать по-хорошему. Точно так же системный администратор всегда просит денег на самую лучшую технику и самое дорогое программное обеспечение от Oracle. Делать по-хорошему — теоретически неправильно и практически вредно для бизнеса. Нужно делать так, чтобы всё работало, удовлетворяло клиентов (ровно на уровне цены продукта) и бизнес развивался.

Верный признак работы в стиле «по-хорошему» — упорная работа с «ядром», задержки с реализацией конкретной запланированной функциональности и срыв сроков выхода продукта.

Правило 7. Приминание травы может отнять любое количество времени.

Программист всегда стремится удовлетворить свою потребность в вооруженности — максимально обустроить рабочее место, то есть создать инструментарий, установить самое последнее программное обеспечение, самую современную технику. Если дать ему волю, он потратит на это 100% рабочего времени, причем сумеет доказать начальству необходимость такой работы.

Верный признак такого перманентного обустройства — полуразобранные компьютеры на рабочих местах и необычные, нестандартные программы на этих компьютерах.

Правило 8. Разработчик не интересуется бизнесом, он — типичный автор.

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

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

Это нормально, так как авторские мотивы — очень мощные и их можно правильно использовать с большой пользой для компании.

Выводы

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

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

Словарь ненормативной лексики программиста

Здесь я собрал «практический материал» — высказывания, которые менеджер не должен понимать буквально.

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

  • Ну, не знаю, у меня на машине всё работает.Комментарий: это неправда. То есть, конечно, что-то работает — после серии магических пассов, недоступных пользователю и тестировщикам.
  • Да у вас просто «Винды» кривые.Комментарий: это не имеет никакого отношения к делу. У большинства пользователей в мире «Винды» — кривые, а прикладные программы все-таки работают.
  • Попробуйте перезапуститься. Думаю, всё заработает.Комментарий: это маловероятно, хотя возможно. Но программа должна работать и без перезапуска.
  • Как дела в проекте? Работа ведется!Комментарий: «Работаем» — обычный ответ разработчика на вопросы менеджера. Помогает «отбить» две трети, а то и четыре пятых запросов о ходе проекта. Сам по себе этот ответ — не криминал, и на самом деле в разработке бывают периоды упорной работы «от забора до обеда», когда результатов не видно. Но частое повторение этой формулы подозрительно — она может служить и для сокрытия уже обнаружившихся проблем со сроками и трудоемкостью, которые разработчик надеется решить сам, не доводя до начальства.
  • Я уже неделю ночами работаю, а вы меня укоряете за срыв срока.Комментарий: ночная работа — это вовсе не доблесть. Скорее всего, просто у программиста сложился такой режим (что часто бывает), а в сутки всё равно выходит 8-10 рабочих часов. Даже если и была бы переработка, то это недостаток организации работ.
  • Нельзя подпускать к проекту этих маркетоидов, которые ничего не понимают в технологиях.Комментарий: маркетоиды не дают программировать всякие интересные штуки и вносят слишком много приземленных коммерческих требований.
  • Эти менеджеры опять начнут совещаться, а мне работать нужно.Комментарий: действительно, часто совещания не имеют смысла, но совсем без них нельзя. А программисты с удовольствием участвуют в одних совещаниях, где идут обсуждения вообще и придумываются всякие классные идеи, и не любят другие — те, на которых наступает слишком большая ясность относительно состояния дел и выполнения планов.
  • Чего там планировать, я быстрее сделаю и всё уже будет работать.Комментарий: это неправда. Скорее всего, будет сделано не совсем то и неработающее. А срок доводки окажется длиной в целый проект.
  • Планировать разработку бессмысленно, жизнь всё равно богаче. Программные проекты всегда срывают сроки, потому что это сложное и творческое дело, вроде научных исследований.Комментарий: это миф. При правильном проектировании и планировании сроки разработки ПО возможно выдержать и это нужно делать.
  • Нанимать персонал должен только технический менеджер проекта, потому что ему потом с ними работать.Комментарий: это часто приводит к неумолимому срабатыванию Закона Паркинсона — найму по знакомству ненужных, слабых или неконтролируемых сотрудников. Нанимать разработчиков должен высший менеджмент и по возможности через кадровое агентство, а технический менеджер — накладывать вето при необходимости.
  • Если всё сделать общим образом, мы получим не только решение частной задачи, но и готовый программный продукт, который будем продавать другим, и таким образом всё окупим.Комментарий: это просто приятные фантазии. Разработка готового продукта стоит примерно в три раза дороже программы для собственных нужд (см. «Мифический человеко-месяц» Фредерика Брукса). Кроме того, никто ведь не изучал рынок на предмет выяснения, а нужен ли такой продукт, и сколько у него сильных конкурентов.
  • К пятнице готово не будет, но в понедельник — точно. Или во вторник.Комментарий: скорее всего и во вторник ничего не будет. В лучшем случае будет не готовая версия, а нечто для показа из рук с объяснениями на пальцах, как всё будет потом.
  • К сроку готово не будет, потому что сгорел жесткий диск и пропала работа за неделю (месяц).Комментарий: скорее всего, это неправда. Диск действительно сгорел, но причина срыва сроков не в этом. Кроме того, если бы работа ежедневно архивировалась, проблемы бы в любом случае не возникло.
  • Срок сорван — а что вы хотели? С самого начала было ясно, что ресурсов не хватает.Комментарий: это точно неправда. В начале проекта никто не поднял тревоги, что мало ресурсов. И в середине проекта — тоже. Это просто самая распространенная «отмазка».
  • Программа хорошо документирована на языке Си.Комментарий: программистская шутка «для своих», отражающая тот печальный факт, что никто не писал комментариев и документации к программам и не будет писать, если не заставить твердой рукой.
Игорь Ашманов

Комментирование закрыто.