serge_gorshkov


Сергей Горшков - о бизнесе в сфере ИТ

о семантической интеграции, программировании, управлении...


Previous Entry Share Next Entry
КПД и мотивация программистов
serge_gorshkov
Предпринималось немало попыток свести в какую-то теоретическую систему представления о мотивации программистов, и сформулировать на ее основе рекомендации по управлению коллективом. Кое-кто делает это в терминах эльфов, троллей и гномов, кто-то вообще не верит ни в какую мотивацию, кроме материальной...

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



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

Другой вариант показателя эффективности - доходность программиста, выраженная в рублях. Для ее вычисления вычтем все затраты, связанные с программистом, из той суммы, которую заплатил клиент за его работу. Нормируем значение: самую высокую доходность программиста в компании возьмем за 100%, тогда доходность остальных будет лежать в интервале до 100%. Эту величину назовем КПД в деньгах.
Оба показателя далеко не равнозначны, как может показаться на первый взгляд. Способный программист может тратить на работу мало времени, и при этом быть выгодным экономически. Новичок может сидеть на работе сутками, но практический результат его труда будет скромным.

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

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


ПрограммистКПД по времениКПД в деньгах
Альфа84100
Бета5283
Гамма3258
Дельта6762
Эпсилон6556
Дзета6645

Сразу видно, что  КПД по времени имеет среднее значение - около 66%. Эта цифра вполне обоснована, и согласовывается с моим ощущением, которое закладывается в расчеты стоимости часа.

Удобно представить эти данные на диаграмме, отложив по оси X КПД по времени, а по оси Y - КПД в деньгах. Сразу станут видны две группировки с определенной общностью характеристик:

Диаграмма КПД программистов

Замечу в скобках, что чем-то эта диаграмма может напомнить изучавшим физику диаграмму Рассела, а области на ней - Главную Последовательность и остальные группы звезд :))

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

Другая группа, "гении", объединена только одним - работа им интересна сама по себе, зарабатываемые деньги интересны не в первую очередь. То есть, сильна нематериальная сторона мотивации. По КПД у них наблюдается большой разброс в зависимости от того, насколько эта мотивация реализуется в предложенных нами условиях работы. "Альфа" - человек на своем месте: работа ему интересна и увлекает полностью. "Бета" с легкостью справляется с работой (фактически тратит на нее меньше времени, чем заложено в технических заданиях), но она не удовлетворяет всех его интеллектуальных потребностей. "Гамма" находится определенно не на своем месте, и сильно от этого страдает (а еще больше страдает работа). Также у этого человека большие проблемы с самоорганизацией, способностью вовлечь себя в планомерную работу.

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

Динамика мотивации программистов

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

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

Разумеется, с практической точки зрения нам наиболее интересны "работяги" с КПД в деньгах выше 50%, и "гении" с КПД в деньгах выше 80%. Все остальные состояния являются нестабильными, и люди в них долго находиться не могут.

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

Остается еще один вопрос - как я все это посчитал? Для этого необходима методология ведения управленческого учета, которая формировалась у нас годами. В одном из следующих постов я поделюсь ее основами.

И - с Днем Программиста всех, кто причастен к этой профессии!



  • 1
(Deleted comment)

солидно )) спасибо!

как долго вы ждете прежде чем предлагаете сотруднику уйти? или проще чтобы он сам ушел?


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

А есть какие то косвенные признаки хорошего программиста. Типа "увлекается классической музыкой" или "любит перечить начальству"?

Признаков, конечно, море. В первую очередь играют роль "первичные признаки", с которыми все понятно - знание языков программирования, характер мышления и т.п.

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

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

Из моих наблюдений косвенным признаком хорошего программиста является грамотная русская речь, особенно письменная. Точнее так: если человек пишет по-русски с ошибками, то вряд ли он хороший программист. Невнимательность к -ться и -тся коррелирует с глупыми опечатками и недосмотром в коде. Если для человека норма - перед отправкой проверить свое письмо или пост в блоге на предмет опечаток, то больше вероятность, что он свой модуль оттестирует перед сдачей, а не когда тестер носом ткнет.

И про кругозор согласна с Сергеем.

из моего опыта:

1. Способность хорошо формулировать. Ясность мышления. Выявила простую проверку: если основные идеи текста, написанного программистом (коммент в карточке задания, кусок спецификации, письмо и т.д) легко воспроизвести в уме, закрыв текст, программист умеет хорошо формулировать

2. Отсутствие истеричности

3. Интерес к профессиональным познавательным, в том числе условно развлекательным, ресурсам (хабр, популярная механика, узкоспециальные порталы и т.д).

4. Умение играть в шахматы

5. Ну и сомнительное. Большинство моих знакомых талантливых программистов и тимлидов - интроверты.

1, 2, 3 - согласен полностью. Особенно актуален пункт 2 - часто встречается в жизни, к сожалению. Программистом-истеричкой может быть как мальчик, так и девочка.
4 - далеко не факт (знаю полно программистов, которые не играют, да и сам могу адекватно играть в шахматы только со своим 7-летним сыном :)) ).
5 - скорее отражает общую статистику популяции... Знаком с несколькими хорошими программистами-экстравертами.

Сохранил для применения.
И да. Плохой программист лучше, чем отсутствие программиста.

Плохой программист лучше, чем отсутствие программиста.

Замечательная фраза, учитывая, что хороший программист от плохого может по результативности может отличаться в 100 раз.

Конечно же хороший программист лучше плохого.
Аксиома.

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

Бывают настолько плохие программисты, что кажется лучше бы их совсем не было...

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

(Deleted comment)
Здесь рассматривались только штатные программисты. У внештатников КПД по времени посчитать невозможно, а КПД по деньгам у них будет, пожалуй, выше, чем у штатных.
Отношусь к удаленщикам в целом положительно, но, к сожалению, на каждый случай успешной работы с таким специалистом приходится 3-5 случаев неудач. Поэтому - есть люди, с которыми мы сотрудничаем годами, и довольны ими; а к новым удаленщикам относимся очень осторожно.

Если переносить линейку "гениев" на реальность, то выходит, что надолго такие нигде не задерживаются и в конце концов открывают свой бизнес.
Более того, в ситуации дефицита кадров, имея лишь денежную мотивацию, работник может взлететь так же быстро, так как с появлением нового опыта, его тут же могут захантить на большую зп.
Отсюда возникает несколько вопросов (интересно ваше мнение):
1) с позиции работника, на каком проценте от максимальных знаний на текущем месте работы стоит искать другую?
2) как вы считаете, не является ли некорректным по отношению к начальству\коллективу скорое увольнение (мотивировка - любая)? например, увольнение через полгода при незаконченных проектах, или же никто никому ничего не должен.
3) как вы сами относитесь к работникам с такой стремительной карьерой? является ли это плюсом\минусом при найме?

Edited at 2012-09-20 08:45 pm (UTC)

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

По вопросам:
1. Далеко не для всех программистов получение новых знаний настолько важно, что является стимулом для смены работы. Прямая материальная мотивация однозначно встречается чаще; у многих довольно сильна инерция, которая заставляет осторожно относиться к смене работы, как к рискованному мероприятию. Есть и другие "якоря", которые привязывают к коллективу/компании.
Что касается тех, для кого накопление опыта - важная цель: на мой взгляд, они уходят после полного исчерпания возможностей получения новых знаний в тех условиях, которые предоставляет компания, плюс еще немного.
2. С моральной точки зрения - да, это некорректно. Все хорошие (в смысле, как люди) программисты, которые у нас были, завершали все проекты перед уходом. А самые лучшие - помогали с ними/сопровождали их и после ухода.
Хотя, если посмотреть на привычки московского сообщества программистов - там преобладает подход, что "никто никому не должен". Но там и работодатели другие, без такого индивидуального отношения, как у нас - и вообще текучка выше.
3. Мы вообще не берем на работу "скакунов" - тех, кто работал на каждом месте по полгода. Для нас важно, чтобы у человека на одном из последних мест работы был стаж года полтора, хотя бы. Иначе брать его - совершенно бессмысленное и убыточное дело.

  • 1
?

Log in

No account? Create an account