Изменение среды не выходит за пределы человеческих возможностей. Конечно, почти в каждой компании существует властная структура, мебельная полиция, управляющая всем хозяйством. Но разве нельзя донести до них здравые мысли или отобрать у них власть? В оставшейся части главы мы представим некоторые из причин, по которым следует сделать именно это, а в последующих главах приведем некоторые соображения относительно конкретных действий.
Военные маневры разработчиков: наблюдаемые факторы производительности
За несколько лет до выхода в свет первого издания этой книги мы начали ежегодно проводить открытое исследование производительности. К настоящему моменту в исследованиях приняли участие более трехсот организаций со всего мира. В конечном итоге мы начали проводить это ежегодное исследование в виде открытого конкурса, команды-участницы которого состояли из программистов различных организаций. Команды писали код заданного приложения и тестировали этот код на время. Мы назвали эти соревнования военными маневрами разработчиков (Coding War Games). Проходят они следующим образом:
Боевую единицу составляют два разработчика из одной организации. Участники пары работают не совместно, но друг против друга, а также против всех других пар.
Оба участника пары выполняют совершенно одинаковую работу: проектируют, создают и тестируют среднего размера программу по нашей спецификации.
Выполняя упражнения, участники записывают потраченное время в специальный журнал.
Когда все участники завершают тестирование, результаты проходят наши стандартные процедуры приемки.
Участники работают на своих привычных рабочих местах, используют те же языки, инструменты, терминалы и компьютеры, что и для всех своих проектов.
Все результаты сохраняются в тайне.
За период с 1984 по 1986 годы более 600 разработчиков из 92 компаний приняли участие в маневрах. Интерес отдельного участника в том, чтобы оценить свое положение относительно других. Интерес компании в том, чтобы оценить свою эффективность относительно других компаний, участвующих в состязаниях. А наш интерес в том, чтобы много всего узнать о факторах, влияющих на производительность. Эти факты мы и обсудим ниже в данной главе.
Индивидуальные различия
Одним из первых результатов военных маневров стало доказательство огромной разницы между участниками соревнований. Разумеется, на этот факт и раньше обращали внимание. На рис. 8.1 представлены результаты, полученные из различных источников, и он иллюстрирует масштабы различий между индивидуумами.
Рис. 8.1. Вариации производительности
Похоже, что при измерении вариаций производительности для выборки индивидуумов действуют три основных правила:
Отношение производительности лучших сотрудников к производительности худших составляет примерно 10:1.
Наиболее производительный сотрудник в 2,5 раза более производителен, чем средний.
Наиболее производительная половина сотрудников имеет в 2 раза большую производительность, чем менее производительная половина.
Эти правила действуют практически на любые параметры производительности, которые возможно определить. Так, к примеру, лучшая половина выборки сделает заданную работу минимум в полтора раза быстрее остальных; представители другой половины, которые чаще ошибаются, сделают более двух третей всех ошибок и так далее.
Результаты военных маневров разработчиков достаточно точно соответствовали такому распределению. В качестве примера рассмотрим рис. 8.2, на котором показано распределение затрат времени на достижение первого промежуточного финиша (чистая компиляция, готовность к тестированию) для реально проводившихся маневров.
Рис. 8.2. Вариации производительности для отдельных участников
Лучшая производительность в 2,1 раза превышает среднюю. Лучшая половина опережает худшую в соотношении 1,9:1. Результаты последующих маневров были практически идентичны этим.
Что не влияет на производительность
Исследуя результаты состязаний, мы обнаружили, что следующие факторы слабо влияли на производительность или не влияли вовсе:
Язык: Разработчики, использовавшие старые языки, такие как COBOL или Fortran, выполняли задание не хуже тех, кто писал на Pascal и С. Внутри каждой языковой группы распределение производительности было таким же, как в целом по выборке. Единственным исключением из этого наблюдения стал язык ассемблера: участники, писавшие на ассемблере, сильно отстали от всех остальных языковых групп. (Впрочем, люди, пишущие на ассемблере, привыкли к такому положению вещей.)
Опыт: Люди с десятилетним опытом не превосходили по производительности тех, у кого опыта было всего два года. Опыт и производительность никак не коррелировали, разве что люди, менее шести месяцев имевшие дело с языком, работали не так эффективно, как другие участники.
Количество недочетов: Около трети участников выполняли упражнение с нулевым количеством недочетов. В целом не было отмечено снижения производительности из-за более высокой точности работы. (Более того, в среднем эта треть участников выполняла задание быстрее, чем участники, допускавшие недочеты.)
Зарплата: Уровень зарплаты достаточно сильно варьировался для выборки. Между зарплатой и производительностью наблюдалась весьма слабая связь. Лучшая половина получала не более 10% сверх худшей, но работала почти в два раза эффективнее. Распределение производительности для любого уровня зарплаты было примерно таким же, как для выборки в целом.
Опять же ничего удивительного, поскольку большинство таких особенностей отмечалось ранее. Немного более удивительными были факторы, которые, как мы выяснили, на производительность влияли, причем значительно.
Об этом не стоит рассказывать боссу
Среди обнаруженных нами факторов, положительно влияющих на производительность, оказался и весьма неожиданный: большое значение имел выбор напарника. Если вам доставался производительный напарник, все получалось и у вас. Если ваш напарник никак не мог закончить работу, не могли закончить ее и вы. Если он совсем не мог завершить упражнение, вероятнее всего, то же получалось и у вас. В среднем разница в производительности для участников пары не превышала 21%.
Почему это так важно? Дело в том, что, хотя пары не работали совместно, участники каждой пары происходили из одной организации. (В большинстве случаев организацию представляли лишь два участника.) Они работали в одной физической среде и происходили из одной корпоративной культуры. Тот факт, что у них была практически одинаковая производительность, позволяет предположить, что широкое распределение способностей среди участников маневров невозможно в организации: любые два человека из одной организации, как правило, имеют близкую производительность. Это означает, что лучшие работники накапливаются в определенных организациях, в то время как в других собираются худшие. Этот эффект Харлан Миллз (Harlan Mills), один из пионеров разработки программного обеспечения, предсказал в 1981 году:
Такой разброс [10:1] в производительности отдельных программистов понятен, но существует точно такой же разброс в производительности организаций, разрабатывающих программное обеспечение.
Наше исследование показало огромные различия между 92 организациями, принявшими в нем участие. В целом по выборке производительность лучшей организации (то есть показавшей лучшую среднюю производительность своих сотрудников) более чем на порядок выше производительности худшей. Код, созданный участниками из быстрейшей организации, оказался не только самым быстрым, он также прошел основные приемочные испытания.
Это вызывает серьезную тревогу. В течение многих лет руководители проявляли определенный фатализм в отношении индивидуальных различий. Они утверждали, что различия присущи людям, так что с ними ничего нельзя поделать. Гораздо труднее проявлять фатализм по поводу