Когда в 1991 году я стал генеральным директором компании по разработке программного обеспечения, то столкнулся с массой новых для меня проблем и в лучших университетских традициях стал старательно изучать литературу по менеджменту, а уж если встречал статью по менеджменту в области разработки ПО, то читал ее особенно внимательно, с карандашом в руках. Оказалось, что освоить общие основы менеджмента сравнительно нетрудно, но в реальной практике руководства коллективами программистов постоянно возникали вопросы, требующие особого подхода. Я пытался сформулировать какие-то правила, специфичные именно для ИТ-индустрии, но и это оказалось довольно трудно. Работа программиста сильно отличается от работы системного интегратора или администратора ИТ-инфраструктуры крупного предприятия.

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

Рассмотрим международный стандарт PMBоK – свод знаний по управлению проектами, который достаточно полно покрывает вопросы, необходимые менеджеру практически в любой сфере [1]. Стандарт включает в себя девять областей знаний по управлению проектами:

1) интеграционные процессы (координация, разработка и выполнение плана, контроль изменений);
2) предметная область (отбор только тех работ, которые необходимы для проекта);
3) управление временем (состав работ, их последовательность, продолжительность каждой работы, разработка календарного плана и контроль за его исполнением);
4) стоимость (бюджет, ресурсы, оценка стоимости, контроль затрат);
5) качество (планирование, обеспечение и контроль качества);
6) человеческие ресурсы (организация, подбор кадров, развитие команды);
7) коммуникации (планирование коммуникаций, распределение информации, отчеты об исполнении);
8) риски (определение рисков, количественная оценка, разработка мер реагирования, контроль);
9) поставки и субподряд (планирование, изучение предложений, выбор поставщика, руководство контрактом, закрытие).

Этот список содержит все пункты, необходимые для качественного управления проектами и в ИТ-индустрии. Так почему же менеджеры с МВА или ВВА, обязательно изучающие PMBоK в своих программах, не способны работать в индустрии разработки ПО без специальной подготовки?

В компании «ЛАНИТ-Терком» 90% сотрудников – выпускники матмеха СПбГУ, и связи с СПбГУ достаточно прочные, но среди наших сотрудников, являющихся руководителями коллективов программистов, нет ни одного выпускника факультета менеджмента СПбГУ, хотя некоторые наши сотрудники ведут там занятия. И это несмотря на то, что необходимость в хороших менеджерах есть всегда. Чтобы понять, почему, обладая исключительно менеджерскими навыками, тяжело управлять проектами по разработке программного обеспечения, рассмотрим некоторые особенности таких проектов и их отличие от проектов в других отраслях.

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

Другие особенности разработки ПО менее очевидны. Программисты – работники умственного труда в полном смысле этого слова. Их трудно и долго готовить, они работают в больших коллективах, у программистов значительно ярче проявляются индивидуальные особенности, чем у представителей других профессий.

Абстрактность природы ПО затрудняет оценку его сложности, а следовательно, планирование, определение стоимости разработки и корректность достигнутых результатов. В сочетании с индивидуализмом программистов это затрудняет руководство проектом – трудно даже добиться повторяемости результатов, не говоря уж о достижении совершенства. Иными словами, если менеджер-строитель построил один дом, то с высокой вероятностью он построит и второй такой же дом в те же сроки с таким же бюджетом и тем же качеством, даже если сменится половина его команды. В программировании это не так. Программистов труднее заменить, объективно оценить результаты и качество их труда. Хороший менеджер должен быть хорошим психологом, иначе ему не справиться даже с небольшой командой программистов.

Итак, мы выяснили, что хорошими менеджерами в ИТ-индустрии становятся преимущественно программисты, овладевшие наукой управления. Но как научить программиста менеджменту? Частично ответы на эти вопросы есть в тексте международного стандарта SE Curricula 2004 по образованию в области программной инженерии. Это действительно полезный, достаточно полный документ, раскрывающий основные направления обучения программистов, в том числе менеджеров. По идее достаточно следовать всем рекомендациям стандарта и на выходе получить готового системного аналитика, Web-разработчика или руководителя проекта (team-leader, небольшого начальника). Но это только на словах. Преподаватели хорошего университета прочитают лекции в точном соответствии с заданной программой, проведут практические занятия. Студенты, в свою очередь, сдадут экзамены, выполнят положенные работы. Но SE2004 предлагает огромное количество производственных практик, коллективных работ, в том числе и в смежных с программированием областях. В стандарте подчеркивается, что эти работы должны носить характер, приближенный к производственному (проект, план, бюджет, команда, еженедельные отчеты, версионный контроль, проверка качества, документирование и т.д.). Вряд ли этого можно добиться на традиционных занятиях в классных комнатах.

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

Во-первых, задача для проекта должна быть достаточно интересной, но не слишком большой, чтобы за один-два семестра ее можно было решить. Во-вторых, используемые технологии должны соответствовать интересам того департамента, где работает руководитель проекта. В-третьих, нельзя сразу требовать получения коммерческих результатов. Организация работ должна быть вполне серьезной, но при этом задача может быть забавной игрой. Чаще всего руководители проектов предлагают темы, связанные с апробацией новых технологий, только что появившихся на рынке. Поскольку мы всячески поощряем в сотрудниках компании стремление к инновациям, то в последнее время все чаще предлагаются темы, связанные с отработкой идей новых продуктов. Вот несколько примеров студенческих проектов 2008/2009 учебного года.

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

Робоматмех. На платформе Microsoft Robotics Studio нужно разработать игру с участием роботов двух типов: преподаватель и студент. Роботы бродят по довольно точной виртуальной копии нашего матмеха, сталкиваются друг с другом, взаимодействуют и т.д.

Реализация идеи карты ума. Группа студентов реализовала похожий на mind-map (www.comapping.com) подход для новой платформы Google Android.

При работе над такими проектами примерно две недели уходит на распределение студентов по проектам, объяснение сути задачи. Еще две – на объяснение правил работы в коллективе и введение в предметную область. Студенты работают обычно дома, но не реже чем два раза в неделю собираются на семинары, где показывают свои результаты и задают вопросы руководителям. Работать со студентами нелегко: у кого-то есть академические проблемы с успеваемостью, кто-то занимается другими видами творчества, кто-то просто ленится и т.п. Все это накладывается на принципиально коллективный характер работы – задержки с работой одного исполнителя влияют на успех всего коллектива. Чаще всего мы предлагаем студентам самим разобраться с такими «двоечниками», и только после нескольких неудачных попыток выгоняем их из проекта.

Обычно на втором курсе мы набираем около 100 человек, организуем 10-12 проектов, каждым из которых руководят не меньше двух сотрудников предприятия (один из руководителей, как правило, более опытный). К концу года остается 50-60 человек, для лучших из них мы организуем летнюю школу, где они в течение месяца четыре часа в день работают в компьютерных классах. Этим студентам мы платим стипендию, поскольку они отрывают месяц от своего отпуска. В начале третьего курса мы приглашаем отличившихся в студенческих проектах ребят на работу в качестве стажеров. Каждый год мы берем на работу 20-25 выпускников матмеха, причем все они уже имеют стаж работы у нас два-три года.

Разумеется, иногда компании нужны специалисты по направлениям, по которым не обучают в СПбГУ, и всегда найденные «на улице» специалисты обходятся нам дороже (дообучение, вхождение в коллектив…), да и текучка среди них гораздо выше.

Со временем описанный процесс «производственного» обучения студентов привел нас к несколько неожиданному результату – молодые специалисты, которые руководят студенческими проектами, сами получают бесценный опыт руководства весьма непростыми коллективами. Все они сдавали экзамены по курсу «Управление проектами», когда сами были студентами, но опыт реального руководства (все процессы в студенческих работах организованы «по-взрослому») трудно переоценить. Часто мне приходится обсуждать с молодыми руководителями студенческих проектов различные производственные моменты, и уже по их вопросам видно, насколько глубоко они понимают эти проблемы. Многие из тех, кто когда-то руководил студенческими проектами, сейчас руководят большими коллективами, причем часто в эти коллективы входят их бывшие ученики. Многие компании сейчас строят подготовку своих кадров похожим образом, например Exigen Services.

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

Литература

  1. Guide to the Project Management Body of Knowledge, Third Edition, Project Management Institute, 388 p., 2004.

Андрей Терехов (Andrey.Terekhov@at-software.com) – зав. кафедрой системного программирования СпбГУ, председатель совета директоров компании AT Software (Санкт-Петербург).


Вирус проектного менеджмента
Основной разработчик свода знаний по управлению проектами PMBoK и автор процессной модели управления проектами Билл Дункан рассказывает об особенностях дисциплины управления проектами.
http://www.osp.ru/os/2003/05/183048

Хроника одного стандарта
Как должна развиваться дисциплина проектного менеджмента в современном мире? Новый стандарт GAPPS:2006 и сертификация на его основе позволяют оценить практическую компетентность менеджеров проектов, проверив не только их теоретические знания и базовые навыки, но и реальные способности по руководству проектами различного уровня сложности.
http://www.osp.ru/os/2009/02/7323136

Computing Curricula: Software Engineering и российское образование
В 2004 году совместный комитет по образованию ACM и IEEE CS выпустил документ "Computing Curricula 2001: Software Engineering", содержащий рекомендации по преподаванию программной инженерии. Особенностью этого документа является наличие рекомендаций по адаптации учебных программ к различным условиям преподавания и специфике отдельных стран.
http://www.osp.ru/os/2006/08/3282281