
- •В.Н. Лукин,
- •Руководитель проекта: кто он
- •Кем приходится руководить
- •Программист
- •Команда
- •Роли в команде
- •Цель – проект
- •Постановка задачи
- •Планирование
- •Внутренние стандарты
- •Качество изделия
- •Контроль
- •Цель – команда
- •Понимание
- •Передача знаний
- •Делегирование
- •Проверка
- •Участие
- •Другие принципы руководства
- •Управление программными проектами – Теория w Барри Боэма
- •В какой обстановке живёт команда
Кем приходится руководить
По выражению Йордона [4], каждый программный проект – это потенциальная катастрофа. Попытка спасти его от провала требует постоянных усилий, поэтому при работе в нем крайне важен человеческий фактор. От поддержки команды зависит его успех или провал. Никогда не следует экономить усилия, если речь идет о сохранении команды. При подборе команды делается упор на взаимную совместимость участников.
Программист
Сложная природа программирования как профессионального занятия требует особого внимания к психологической стороне личности программиста, ибо от этого зависит и качество производимого продукта, и взаимодействия в процессе его производства. И то, и другое входит в сферу интересов руководителя проекта, поэтому рассмотрим черты, которые на них влияют [6].
Настойчивость/пассивность. Настойчивый человек обычно не боится задавать неудобные вопросы, его нелегко сбить с толку, он обладает столь нужной программисту инициативой.
Внутренняя/внешняя управляемость. Личности с внутренней управляемостью стараются подчинить себе обстоятельства, они способны управлять событиями. Внешняя управляемость позволяет доминировать другим, эти личности считают себя жертвами.
Интровертность/экстравертность. Интроверт предпочитает работать в одиночестве, экстраверт стремится продемонстрировать своё изделие окружающим. И тот, и другой может быть хорошим программистом, нужно только быть внимательным к их взаимодействию с командой.
Высокая/низкая возбудимость. Умеренная возбудимость – хорошее свойство, чрезмерная возбудимость, особенно в критические моменты разработки, может привести к излишней суете, ошибкам и торможению проекта.
Сильная/слабая реакция на мотивацию. Сильная реакция сотрудников на мотивацию позволяет руководителю проще находить способы их стимулирования, что благоприятно сказывается на работе. Хорошие программисты обычно обладают этим свойством.
Высокая/низкая терпимость к неопределённости. По характеру работы программистам постоянно приходится сталкиваться с неопределённостью. Если сотрудник не умеет принимать решение в условии ограниченной информации, с ним работать будет непросто: порой легче сделать самому, чем детально объяснить, как нужно.
Умение быть точным. Программирование и так проистекает в условиях значительной неопределённости, и усугублять ситуацию собственной неточностью не следует.
Скромность. Удивительно, но такое естественное свойство далеко не часто свойственно программистам. Так что, столкнувшись с излишней самоуверенностью сотрудника, не спешите от него отказываться: возможно, он всё же умеет прислушиваться к мнению других и правильно реагировать на собственные ошибки.
Способность переносить стресс. Исключительно важное качество, особенно на стадии завершения программного проекта.
Исследования характера работ и особенностей программистов, для которых характерна постоянная интенсивная умственная нагрузка, показывают, что у них, в отличие от других профессий, довольно низкая потребность в общении, значительная потребность роста, высокая мотивация, высокая самооценка, нелюбовь к регламентированию рабочего времени [6]. Заметим, что это не те свойства, которые способствуют формированию работоспособного коллектива. Вот руководителю проекта и нужно проявить умение собрать команду, по выражению Рейнвотера [5] – умение «пасти котов».
Предположим, что вы подобрали команду из неизвестных вам специалистов и приступили к работе. И тут выясняются те особенности ваших сотрудников, о которых вы, возможно и не подозревали. Очень хорошо они описаны в работе Рейнвотера [5], где он относит их к различным «породам» программистов.
Архитектор. Для руководителя проекта – лучший вариант. Концентрируется на общей структуре кода, мыслит объектами. Проводит детальный анализ задач, после чего переходит к кодированию. Недостаток – зачастую не понятный для других код, что затрудняет сопровождение. Лучше, если он будет готовить общий набросок кода, а детальной реализацией займётся программист попроще.
Конструктивист. Получает удовольствие от написания кода и его результата. Стратегическим планированием обычно не занимается, но код пишет блестяще, как по качеству, так и по надёжности. Недостаток – в силу того, что код он пишет по наитию, логика не всегда бывает понятной. Но даже если, как это бывает у лучших представителей, код получается прозрачный, документацию он пишет крайне неохотно, лишь под давлением. Лучшее сочетание в команде – конструктивист и архитектор.
Художник. Сконцентрирован на эстетической стороне написания кода. Код отличается изящностью структуры. Недостаток – затягивает кодирование, пытаясь построить наиболее красивую программу. Но если ему не дать этого сделать, программа может превратиться в «мину замедленного действия».
Инженер. Собирают все возможные средства для решения задачи, сводят всё воедино и получают прекрасную версию 1.0. В следующих версиях проявляется их страсть к усложнению, которая, в конечном итоге, может погубить систему.
Учёный. Работают строго в соответствии с фундаментальными научными принципами. При решении трудных задач программирования им нет цены. Но их педантичность противоречит практичности, что приводит к нарушению сроков разработки.
Лихач. Делает всё быстро. И вплоть до первой ошибки всё работает хорошо. Далее выясняется, что в угоду скорости текст написан ужасно: без комментариев, отступов и т.п. Этот стиль характерен для молодых программистов, которые хотят произвести впечатление.
Кроме этих пород, Рейнвотер приводит ещё две группы: редкие породы и дворняги. К первой относятся волшебники (гуру), которые всё могут, минималисты, которые умеют создавать компактный, но весьма функциональный код, аналогисты, которые прекрасно умеют работать, используя аналогии, трюкачи, которые увлекаются техническими трюками. Такие работники зачастую очень полезны. Ко второй он относит разгильдяев, на которых нельзя положиться, тормозов, которые не знают, с чего начать, любителей, которые пошли в программисты, так как считают, что это круто, профанов, которые либо тупицы, либо невежды. От подобных деятелей лучше избавиться.
Чистый тип программиста, скорее, исключение, чем правило. Обычно в одном человеке сочетаются разные типы, некоторые из которых доминируют. Команда, разумеется, состоит из разработчиков разных типов, руководителю нужно заботиться об их совместимости. Считается, что лучшее сочетание – это архитектор и конструктивист, особенно, если они в одном лице.
Нужно иметь в виду, что по результатам исследований, лучшие программисты во много раз (более чем на порядок) превосходят слабейших. Ели учесть, что лучшим никогда не платят пропорционально их производительности, их участие в проекте исключительно выгодно. Правда, здесь есть одно «но»: крайне сложно их выявить. Различные тесты и сертификационные экзамены ничего не дают [1]. Так что приходится ориентироваться на опыт и интуицию руководителя проекта.