Здесь также можно встретить людей, которые работают неплохо, но обычно не демонстрируют исключительных качеств. Они стабильны, надёжны и последовательны, но их никак нельзя назвать выдающимися. Создание текущей версии продукта во многом зависит от их способностей, однако их нельзя считать «ключевыми игроками».
Внешний круг
   Внешний круг по большей части состоит из людей, новых для организации, которые ещё не оправдали ожиданий в полной мере. Какими бы многообещающими ни казались новые работники, пока они всё равно остаются неизвестными и неиспытанными. Нужно дать им время, чтобы влиться в работу организации и доказать свои способности делом.
   Людей внешнего круга можно без особого труда заменить. Их внезапный уход из организации не будет иметь стратегических последствий для её успеха.
Для чего нужно ранжирование?
   С помощью ранжирования легче распределить ограниченные ресурсы и решить, перед кем открыть новые возможности. Кроме того, оно помогает позаботиться о людях, внёсших наибольший вклад в успех организации, и избежать увольнения сотрудников, играющих ключевые роли в создании ПО. Обсудим некоторые области применения ранжирования.
   • Поощрение заслуженных сотрудников
   Ранжирование позволяет отметить заслуженных сотрудников. Если специалист-«суперзвезда» пять лет трудился на благо группы, то факт принадлежности этого человека к внутреннему кругу и особого отношения к нему важен не только для него, но и для других членов группы. Он свидетельствует о том, что организация видит личный вклад сотрудника, благодарна за него и вклад других людей со временем также заслужит признание.
   • Распределение привилегий и ограниченных ресурсов
   Когда в компании появляются новые привилегии и ресурсы, которые нельзя разделить поровну, возникает вопрос: кому отдать предпочтение? Хорошая мысль — определить достойных по их рангу. Неважно, что это будет: захватывающие исследования новой технологии, посещение выставки, собственный кабинет или встреча с клиентом на Гавайях, — ранжирование даёт упорядоченный список авторов наибольшего вклада в успехи компании, которые будут первыми кандидатами на получение привилегий.
   Значит ли это, что все блага будут доставаться лишь людям внутреннего круга? Вовсе нет. Если все работники внутреннего круга уже обеспечены, а некоторая привилегия имеет особое значение для другого работника, наверное, разумно было бы отдать ему эту привилегию. Важно, чтобы все привилегии не доставались лишь одному кругу — вместе с членами внутреннего круга что-то должны получать и люди среднего и внешнего кругов. И всё же основной принцип остаётся в силе: достойны заботы лишь те, кто заботится об успехе продукта.
   • Планирование денежных компенсаций
   Рейтинг также помогает спланировать повышения зарплаты, денежные и другие премии. Несомненно, наибольшее внимание при этом надо уделять людям внутреннего круга, чтобы выразить им благодарность за большой вклад в дело компании. Возможно, их следует внести в список на получение премий или подарков, а может быть, и в оба списка. Что бы вы ни выбрали, важно компенсировать затраченные усилия, чтобы люди видели признание их достижений.
   Во вторую очередь следует позаботиться о членах среднего круга и наконец — о людях внешнего. Помните: слова «во вторую, и „в последнюю“ очередь вовсе не означают, что размер компенсации должен быть равным или меньше рыночного уровня. Вы не пытаетесь наказать людей внешнего круга, просто размер их вознаграждения не так велик, как у других. Сам факт, что повышение качества работы открывает доступ к более высокой компенсации, должен быть стимулирующим.
   • Планирование кадровой политики
   Один мудрец как-то сказал мне, что текучесть кадров подобна ветру: не беда, если он сорвёт большую часть листьев (т.е. если уйдёт много людей внешнего круга): пройдёт немного времени, и они вырастут снова. Намного хуже, если ветер повредит ветви (средний круг) или ствол (внутренний круг) — их трудно восстановить и они долго растут. Мораль проста: если компанию покидают люди среднего и внутреннего кругов — это признак серьёзной проблемы, которую нужно решить. Ранжирование помогает разобраться, где появилась текучка и какой ущерб она наносит группе.
Некорректное использование ранжирования
   Некорректное ранжирование может привести к расколу и конфронтации в коллективе. Старайтесь избежать в этом вопросе лицемерия, ханжества и высокомерия. Когда люди слишком важничают и перестают понимать необходимость личного вклада для всеобщего успеха, не замедлят появиться самые разные проблемы. Помните: выделяя и вознаграждая чей-либо вклад, важно не вызвать зависти и вражды остальных участников коллектива.
Привилегии и ответственность
   Большие привилегии означают и более высокую ответственность. В случае ранжирования как никогда верна старая поговорка: «положение обязывает». Не допускайте, чтобы привилегии, которыми наделены сотрудники в соответствии с их рангом, были больше возложенной на них ответственности. Если что-то одно начинает перевешивать, жди проблем, малых и не очень.
 
   Из собственного опыта
   В NuMega мы в шутку называли наших инженеров «богами», «полубогами» и «учениками богов». Хотя все работники компании были по крайней мере хорошими, а большинство — отличными специалистами, не все вносили одинаковый вклад в дело компании.
   Чем больше вклад сотрудника, тем больше у него было возможностей и свободы. Но взамен от них ожидали новых идей и способности возглавить остальных, при необходимости направить их усилия и помочь советом. Поскольку большинство наших «cуперзвезд» были не только талантливы, но и скромны, признание их вклада редко вызывало у других отрицательные эмоции.
 
Когда люди меняются
   Что происходит, когда член внутреннего круга начинает вести себя, как член внешнего? Или наоборот, когда новичок поражает всех качеством своей работы?
   В первом случае лучше всего обсудить возникшие проблемы с этим человеком, представив ему конкретные факты в подтверждение снижения эффективности его труда. Часто такое обсуждение позволяет выявить источник проблемы: может, это упадок сил или какие-то личные проблемы? Вооружившись этим знанием, можно попробовать сразу же решить эту проблему с большими шансами на успех.
   Во втором случае похоже, что вы наткнулись на «суперзвезду». Во-первых, важно убедиться, что продемонстрированные незаурядные результаты стабильны. Не стоит спешить с выводами, обычно лучше подождать конца цикла разработки. «Суперзвёзды» не вспыхивают на миг, но продолжают «светить» и постоянно проявляют себя. Если новый сотрудник продолжает демонстрировать выдающиеся результаты, следует с радостью принять его во внутренний круг.
К чему стремиться
   Естественно, конечная задача — перевести всех работников во внутренний круг. Самый лучший исход, которого можно желать — это формирование стабильной команды, состоящей сплошь из людей внутреннего круга. Не следует искусственно ограничивать число людей внутреннего круга. Обычно во внутреннем круге меньше сотрудников, чем в среднем, а в среднем — меньше, чем во внешнем. И всё же не следует насильственно поддерживать такое распределение — оно должно отражать реальный вклад участников группы.

Корпоративная культура

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

Типичные проблемы и их решение

   Далее обсуждается ряд типичных проблем и вопросов, возникающих при использовании описываемых здесь методик, а также их решения.
Проблемы с ранжированием
   • Не держите ранжирование в секрете
   Не скрывайте факт, что в компании ведётся ранжирование сотрудников, хотя вывешивать транспарант с рангами на виду у всех тоже не стоит. Людям важно знать, что их личный вклад востребован, будет оценен по достоинству и его учтут при распределении различных привилегий и компенсаций.
   • Не затрудняйте переход из одного круга в другой
   Не стройте искусственных преград между внешним, средним и внутренним кругами. Единственным способом перехода в высшие круги должно быть повышение личного вклада, а единственной причиной перевода в низшие — недостаточный вклад. Кроме того, обязательно нужно отмечать стабильные результаты переводом из внешнего круга в средний, а хроническое снижение качества работы — переводом из внутреннего круга во внешний.
   Как сказано выше, при переходе работника из одного круга в другой непременно нужно обсудить это с ним. Позитивные переходы должны быть отмечены и поощрены. Негативные переходы тоже следует отметить и обсудить с глазу на глаз.
   • Не заводите фаворитов
   Не допускайте использования рангов для определения фаворитов и не путайте его со средством вознаграждения любимчиков. Ранг должен быть основан исключительно на личном вкладе работника. Если ваш друг из группы не вносит вклад наравне с остальными, он не должен участвовать в получении благ наравне с остальными, и точка. Если вы не в состоянии пойти на такое решение, следует вовсе отказаться от ранжирования.
   • Играйте честно
   Некоторые считают ранжирование сплошным обманом. Причина может быть в том, что ранее этим людям уже приходилось сталкиваться с некорректным использованием ранжирования (см. обсуждение фаворитизма выше). Но с другой стороны, ранжирование никогда не бывает честным, если под честностью понимать уравниловку. Ранжирование призвано не уравнять всех, но помочь при распределении ресурсов на основе размера личного вклада, отметить выдающиеся достижения и стимулировать дальнейшие успехи. В мире, где ресурсы ограничены, нужно найти способ распределения ресурсов, и, вероятно, нет ничего лучше, чем распределение на основе вклада в создание продукта или работу коллектива.
Проблемы с культурой
   • Культуру можно изменить
   Одна из самых серьёзных проблем с культурой — в ощущении её неизменности. Корпоративная культура больших коллективов и компаний кажется особенно непоколебимой. Хотя изменить культуру может быть трудно, это вполне возможно, если руководство всерьёз на это решилось. Кроме того, в отдельных подразделениях часто складывается собственная микрокультура, созданная в рамках корпоративной культуры, изменить которую сравнительно легко.
   • Если организация растёт
   По мере роста организации очень важно прививать корпоративную культуру новым работникам. Особенно часто быстрый рост штата отмечается в начинающих компаниях, поэтому там следует особенно тщательно следить за сохранением основных корпоративных ценностей. Для этого следует не забывать о таких вопросах:
   — кто мы?
   — чем мы занимаемся?
   — почему мы делаем своё дело лучше, чем кто-либо другой?
   — чем мы отличаемся от других?
   — что мы ценим?
   Проследите, чтобы все работники компании знали ответы на эти вопросы и эти знания передавались новичкам. Будет ли это собрание с участием участника группы администраторов или просто обсуждение коллегами по команде — вопросы культуры непременно следует обсуждать в открытую и со всей серьёзностью, которой они заслуживают.

Глава 5
Инструментальные программы

   В компании NuMega мы использовали лишь те инструментальные программные средства, которые были жизненно необходимы для нашей работы и вписывались в наш стиль работы. Из всех доступных инструментов мы больше всего применяли и полагались на систему управления исходным кодом и систему устранения проблем и неисправностей (поиска «жучков»). Возможность приспосабливать эти продукты к нашим нуждам позволила ускорить работу — вся команда использовала их почти каждый день.

Средства управления исходным кодом

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