Все четыре предмета — требования, технологии, использование и график работ — тесно связаны, поэтому если ваша цель — успешный проект, их нельзя рассматривать в отрыве друг от друга. Без них придётся полагаться только на догадки, допущения и игнорировать ключевые элементы проекта, внося неприемлемый риск, часто ведущий к возникновению проблем и срывам графика. Помните: почти все самые большие ошибки делаются в первые несколько недель работы над проектом, при планировании.
Планирование закончено — всё готово для создания продукта. При наличии толковых людей, верных технологических приёмов и хорошего плана, шансы уложиться в срок весьма велики. Однако необходимо следить за тем, чтобы и на завершающих стадиях проекта всё шло должным образом.
В третьей части я рассказываю о моделях исполнения проекта, управляющих повседневными работами по разработке продукта. Мы рассмотрим:
•
•
•
•
В конце каждой главы приводятся ответы на распространённые вопросы и методы решения проблем, часто возникающих во время применения изложенных в книге идей на практике. Большинство вопросов и проблем взято из реальных случаев, поэтому я надеюсь, что они помогут вам выйти из реальных затруднительных ситуаций.
Кроме того, по ходу изложения есть врезки под заголовком
Я бы хотел услышать ваши соображения и комментарии по поводу этой книги. Кроме того, было бы интересно, если б читатели поделились своими уроками, которые они извлекли из собственного опыта, а также оригинальными способами создания программ в срок. Пишите мне по адресу:
Часть 1
Люди, организация и методы
Глава 1
Замечательные люди и как их найти
Замечательные люди создают замечательные программы. Они формулируют требования, отлаживают технологию и придерживаются графиков. Они тестируют, документируют и сопровождают продукт. Их идеи, профессионализм и энтузиазм определяют успех или провал разработки. Поскольку на судьбы проекта больше всего влияет «человеческий фактор»,
Так-то оно так, но в команды разработчиков часто попадают не совсем те. Трудности с поиском кандидатов и неспособность распознать талант могут усугубляться жёсткими требованиями к срокам поставки продукта, хотя их принимают в расчёт из лучших побуждений. Если вам не по силам решить эти проблемы, то в лучшем случае вы наберёте команду посредственную, в худшем — несостоятельную. И не надейтесь, что таланты сами придут к вам: как бы там ни было, так будет далеко не всегда. Напротив, нужно иметь жёсткое, закреплённое на уровне организации правило находить и удерживать наиболее квалифицированных специалистов. Это правило должно распространяться на три ключевых направления деятельности: поиск, собеседование и удерживание кандидатов.
В этой и следующей главе мы обсудим лучшие методики поиска, отбора и удерживания талантливых людей. Я также расскажу о том, почему эта деятельность, как и сама разработка ПО, требует планирования, дисциплины и контроля исполнения.
Определение «замечательных»
Прежде всего нужно понять, кого же вы ищете. Если вы не можете определить, кто вам нужен, как вы узнаете, что нашли того, кого искали? Как отличить классного разработчика, потрясающего технического писателя и cупep-тестировщика от не столь выдающихся? Критериев оценки масса, но я выделил шесть основных.
Каждый потенциальный кандидат должен иметь признание в своей области. Разработчик должен иметь квалификацию в своей специфической технической области, технический писатель — опыт в создании учебных материалов, инженер по обеспечению качества — владеть методами автоматизированного тестирования.
Я говорю не просто о компетентности, а о мастерстве. Кандидат должен в совершенстве (ну, почти) владеть предметом, относящимся к потребностям проекта. Он должен быть способен «с лёту» рассказать о своей теме и в любой момент продемонстрировать глубокое понимание того, что и как было сделано. Разработчик, например, должен доказать, что его технические познания соответствуют предлагаемой ему должности. Вот некоторые возможные темы:
• C++ объектно-ориентированное проектирование;
• создание СОМ-компонентов;
• MFC и разработка пользовательского интерфейса;
• ассемблер и внутренняя организация Windows;
• разработка драйверов устройств;
• разработка сетевых протоколов;
• оптимизация производительности.
Почему это важно? Во-первых, если человек в совершенстве овладел хотя бы одним предметом, он, вероятно, при необходимости освоит и другие. Технология меняется быстро, и способность к обучению и постижению сложных предметов — очень важное качество.
Во-вторых, в мощных командах важно взаимоуважение друг к другу её членов, а оно зачастую основывается на знаниях и способностях. Каждый должен иметь квалификацию в одной или нескольких областях, в которые он может внести такой же или больший вклад, чем другие.
Значит ли это, что каждый разработчик должен иметь учёную степень и 20-летний опыт разработки ПО? Нет, конечно. Но если вы решили нанять начинающего разработчика для поддержки и сопровождения, вы должны быть уверены, что он выделится на своём месте, а не просто будет ему соответствовать.
На собеседования с кандидатом вам нужно основательно потрудиться, чтобы удостовериться в его квалификации и в том, что она соответствует вашим текущим или будущим потребностям. (О собеседовании мы поговорим ниже.)
Разработка практически любого проекта переживает плохие времена. Кто знает, какие проблемы вас ждут впереди: ваш конкурент объявит о выпуске своего продукта первым, ведущий разработчик заболеет, производительность продукта окажется плачевно низкой — мало ли что! Но именно преданность ваших людей и их вера в то, что они делают, доведёт проект до конца. Они будут демонстрировать свою приверженность делу, не прекратят работу и будут помогать, пока не добьются своего. Самые преданные люди стремятся к завершению проекта и готовы пожертвовать чем угодно во имя победы.
Хорошие специалисты зачастую проявляют завидное усердие и недюжинную энергию. Они самоуверенны, но не циничны и сосредоточены на хорошем. Их трудно выбить из колеи: они оптимисты и легко адаптируются. Ищите их. Тяните в свою команду. Они будут поддерживать её моральный дух во всё время работы над проектом, особенно в тяжелые времена. Их энтузиазм воодушевит коллектив.
Вам нужны специалисты, склонные к активным действиям, из тех, кто идёт своим путём для достижения цели. Имённо стремление к действию отличает истинно классных разработчиков. Люди этой породы не сворачивают с намеченного пути, они стремятся иметь больше обязанностей, исправить пару лишних ошибок или общаться по электронной почте, чтобы оставаться в курсе событий.
Для разработки ПО нужны люди, способные делиться идеями, мнениями и опытом. Только тогда можно решать сложные проблемы. Только так человек способен помочь другому. Только так создаётся ощущение, что работа кончается тогда, когда закончен весь проект. ПО создаётся командой. Если у вас нет хорошей команды, вы не создадите хорошего ПО.
Вот почему необходимо поддерживать сплочённость команды. Исключений здесь быть не должно. Если суперспециалист не способен сработаться с другими, его ценность для коллектива становится заметно ниже. В худшем случае люди такого типа могут даже разрушить команду. На первом месте — забота о коллективе.
Ищите жаждущих знаний, тех, кто постоянно занимается самообразованием, поиском новых интересных способов применения технологий. Они интересуются новинками и знают, что происходит в их индустрии; они не дают своим знаниям устареть. Они понимают, что происходило с ПО раньше, что творится сейчас и что его ждёт в будущем. Наличие таких людей при выработке перспективных решений трудно переоценить. Это поможет вашей команде быстро и легко переходить к новым технологиям, инструментам и методам.
Совершенных людей не бывает. Так что не надейтесь, что найдёте кандидата идеального во всех отношениях.
Скажем, подходит ли вам прекрасный специалист, демонстрирующий заинтересованность в проекте, хорошо работающий в команде и читающий всё, что ему попадёт, но вялый и не уверенный в себе? Как знать. Во всяком случае, если с ним нет других проблем.
Ещё один важный фактор — способность кандидата к росту. Посмотрите на его потенциал: его способности, отношение к делу. То, что он знает в первый день, не так важно в сравнении с тем, что он будет знать через три, шесть месяцев и через год. Убедитесь, что вы правильно оценили способность кандидата к росту, даже если он не столь ярок, как другие члены вашей команды. Не бойтесь взять подающего надежды талантливого человека и вырастить его.
Иногда просчёт при выборе кандидата может обернуться серьёзными проблемами.
•
Допустим, это было сделано не по злому умыслу — просто кто-то не приложил достаточно усилий, чтобы оценить квалификацию нового сотрудника, но он принят на должность, для которой не годится.
•
В сплочённых командах очень важно, чтобы каждый тянул свою лямку. Работник, не способный справиться со своей работой, часто становится изгоем: люди редко советуются, просят помощи или оценки у отстающего. Им кажется, что он «сидит у них на шее». Если у вас более одного неуспевающего, коллектив раздробится на группировки, начнутся интриги… Чтобы команда функционировала нормально, каждый должен вносить свой ощутимый вклад и общее дело.
•
Если с одним из членов команды невозможно работать, боевой дух всей команды начнёт стремительно падать. Нужно проверять, что любой кандидат — особенно претендующий на роль лидера, — хорошо вписывается в команду.
•
Для общего успеха коллектива очень важно реагировать на изменения в своей индустрии. Например, если вы решили, что ваша традиционная стратегия двухуровневых клиент-серверных приложений устарела и вам нужно переходить на трехуровневую стратегию Web-приложений, а кто-то из членов команды не способен достаточно быстро усовершенствовать свои знания, вы потеряете время, а возможно, и интересные заказы.
Теперь посмотрим, как неправильный выбор сотрудника сказывается на финансах. Вот пример одно— и двухгодичных выплат одному разработчику:
$90 000 Зарплата
$5 000 «Подъёмные»
$20 000 Комиссионные агентам по найму
$30 000 Социальное страхование, льготы, обучение
Итого:
$145 000 Затраты за первый год
$175 000 Затраты за первый и второй год (включая небольшой рост, без премий)
Куча денег! И только на одного человека. Так как зачастую оплата труда является крупнейшей статьёй расходов при разработке ПО, возникает вопрос: стоит ли тратить столько же времени и сил на оценку новых кандидатов, как на новые технологии и средства разработки?
В обоих случаях вы хотите быть уверены. В том, что удовлетворены ваши сегодняшние и будущие потребности. И в том, что сделали надёжный выбор, который облегчит вашу деятельность. Очевидно, что вы должны выбирать новых сотрудников не менее тщательно, чем оборудование.
Одно неверное решение при подборе сотрудников, конечно, не очень приятно, но не имеет фатального влияния на проект. Гораздо сложней преодолеть последствия серии неудачных решений при подборе персонала, в результате которых команда формируется из посредственностей.
•
Низкая производительность для слабой команды — норма. Трудно рассчитывать на череду успехов, победы кратковременны, и проект начинает пробуксовывать. Сбиваясь с пути, слабая команда начинает бессмысленную борьбу, поскольку не может понять суть проблем и сменить курс быстро и решительно.
•
Слабая команда часто выпускает «сырой» продукт. У людей нет стремления сделать своё дело наилучшим образом и страстного желания создать солидный продукт, удовлетворяющий пользователя. В плохой команде люди не остаются после работы и не прихватывают обеденное время, чтобы чуть повысить производительность программы, прогнать лишний тест или переписать параграф документации. Без таких мелочей время работы увеличивается, а его качество значительно ухудшается.
•
Плохой команде трудно спланировать график выпуска продукта. Исполнители зачастую не осознают сложность технологий, с которыми имеют дело, не способны предвидеть возможных проблем и не желают жертвовать во имя своевременного завершения работы. Сама по себе задержка проекта не значит, что у вас плохая команда. Но я убеждён, что для плохой команды это в порядке вещей и что эти проблемы часто являются следствием плохо организованного кадрового обеспечения.
Поиск и привлечение достойных кандидатов
Как же их найти? Основных методик девять. В NuMega мы использовали практически все. Кто скажет, откуда возьмётся хороший кандидат! Так что мы решили задействовать все имеющиеся механизмы. Каждая методика имеет свои плюсы и минусы, но некоторые работают лучше других, особенно для начинающих компаний (табл. 1-1).
Табл. 1-1. Каналы для поиска новых сотрудников.
Сегодня Интернет предоставляет, пожалуй, самые широкие возможности для найма сотрудников. Важнейшим преимуществом Интернета является его огромная популярность во всём мире и то, что он может работать на вас круглосуточно. Кроме обычной публикации объявлений в телеконференциях, один из лучших способов — работа с интерактивными узлами поиска кадров: они могут дать вам исключительную возможность найти талантливых профессионалов. Вот пара хороших узлов:
Идея проста: вы, как работодатель, публикуете на Web-узле описание своей работы, а потенциальные кандидаты просматривают список предложений в поисках интересующих их должностей. Чтобы это работало, нужно очень чётко описать предлагаемую работу. Web-узлы обычно ограничивают описание предложения лишь парой абзацев, так что убедитесь, что оно содержит чёткое описание должностных обязанностей, технологии и рабочей обстановки.
Web-узел вашей компании также играет важную роль. Хотя большинство работодателей часто используют свои узлы для описания вакансий, многие из них недооценивают, насколько важны их узлы для потенциальных кандидатов.
Большинству малых или вновь появившихся компаний трудно привлечь кандидатов на свои узлы: о них просто мало кто знает. Поэтому маловероятно, что кандидаты обратят внимание на вашу компанию только благодаря вашему Web-узлу. Но если ваша компания побольше или широко известна, нужно использовать эту возможность. В поисках работы люди часто заходят на Web-узлы компаний, о которых они что-то слышали или об успехах которых они знают.
По мере роста вашей компании и укрепления её репутации вы будете замечать увеличивающийся трафик посещений вашего узла потенциальными кандидатами. Приготовьтесь к этому. Если компания широко известна, не упустите возможность извлечь выгоду из вашей репутации и представляйте свои вакансии всем посетителям Web-узла.
Независимо от возможностей компании привлекать внимание людей к Web-узлу, разместите на нём ваши предложения по трудоустройству. Нет разницы, откуда кандидату стало о вас известно (от кадрового агентства, из объявления, по рекомендации или как-то ещё), — важно, что теперь именно ваш Web-узел должен разрекламировать ваши вакансии и вашу компанию. Нужно, чтобы на посетителей узел произвёл глубокое впечатление. Профессионально ли сделан узел? Достаточно ли чётко подана информация, насколько он аккуратен, интересен и ярок? Надо не просто перечислить вакансии, надо показать, почему это так здорово — работать в вашей компании.
Почти все хорошие кандидаты посмотрят Web-узел компании перед собеседованием. Даже если ваша компания маленькая и вы ограничены в ресурсах и во времени, важно произвести сильное впечатление на потенциальных кандидатов, представляя свою компанию и имеющиеся вакансии. Далее я привожу список наиболее важных задач, которые должен решать ваш узел.
• Предоставьте ясное и точное описание предлагаемой работы:
— опишите свободные вакансии;
— опишите применяемые технологии;
— укажите требуемый опыт работы.