Одним из факторов успеха компании, которая специализируется в оффшорном программировании, является наличие отстроенного процесса производства проектов, своего рода фабрики. Однако очень часто слово «фабрика» произносится в отрицательном контексте и связывается с потогонной системой, отсутствием креативности, тяжелыми условиями труда. И вообще, владелец «фабрики» — это некий Карабас-Барабас, который стоит с кнутом над бедными программистами. Посмотрим на эту «фабрику» в несколько ином контексте, а именно в контексте организованного производства.

Прежде всего, ответим на вопрос: зачем нужно отстроенное и организованное производство? Компании оффшорного программирования необходимо высокое качество исполнения проектов — для того, чтобы удерживать существующих заказчиков, стимулируя их на новые проекты. (Под качеством исполнения проектов понимается их выполнение в соответствии с согласованными требованиями, с согласованным уровнем разработки и в заданные сроки.) Когда у компании есть проблемы с привлечением новых заказчиков, качество жизненно важно. Если проблем с новыми заказчиками нет, то низкое качество может привести к их появлению, поскольку рынки не велики, а молва о неудачах распространяется гораздо быстрее слухов об успехах. Качество исполнения проектов должно быть повторяемым, не меняться от проекта к проекту. Организованное производство необходимо, чтобы обеспечить повторяемость высокого качества исполнения проектов и, следовательно, приток новых проектов и рост бизнеса.

Фабрика — это компания с управляемым качеством производства. Там, где начинают управлять качеством, предполагают, что базовое производство организовано и налажено. Управление качеством сосредотачивается на трех уровнях.

Первый уровень — качество персонала

В компаниях оффшорного программирования люди решают все. Это не лозунг, а сама жизнь. Компьютеры, компиляторы и т.п. — лишь инструменты. Сотрудники, которые вне зависимости от уровня своей подготовки из-за скверного морального климата, плохого управления или отсутствия мотивации не желают эффективно работать, означают смерть для компании. Не секрет, что зачастую у нас не работают даже землекопы, для которых можно задать четкие нормы выработки, выраженные в кубометрах или длине траншеи. Необходимо нанимать правильных людей, готовить их и создавать им такие условия, чтобы они самостоятельно работали с максимальной эффективностью. Можно заставить человека копать, но трудно заставить человека думать. В этом и заключаются основные трудности построения управления в программистских компаниях.

Только хорошо отобранный, подготовленный и мотивированный персонал может исполнять проекты с высоким качеством. Утверждают, что даже в рамках одного проекта качество работы программистов может разниться на порядки. (При этом речь не идет о строках кода; нет большой проблемы написать много кода — проблема в эффективном коде с минимумом ошибок, легком в понимании и обслуживании.) Между качеством, с которым работают отборные кадры и персонал, нанятый «с улицы», может лежать пропасть. И никакие воздействия на следующих уровнях обеспечения качества не помогут скорректировать, не то что решить проблему персонала.

Качество персонала обеспечивается последовательно следующими мерами.

  • Построение системы отбора. Лучше не взять человека, чем взять неправильного. Этот довольно консервативный подход к отбору не отвечает привычному российскому «авось», но как нельзя лучше подходит для обеспечения качества персонала. Должны быть сформулированы четкие требования к персоналу, нарушение которых не допускается. Требования должны быть максимально детализированы. Необходимо предусмотреть средства проверки кандидата на соответствие этим требованиям: резюме и уверения кандидата в собственной «крутости» не помогут понять, что за этим стоит. Должна быть построена система собеседований с ведущими разработчиками компании, которые в состоянии оценить уровень квалификации кандидата. Целесообразно проводить собеседование с несколькими ведущими специалистами с организацией обратной связи, т.е. с анализом последующей истории работы принятых кандидатов: это позволяет вводить поправки на излишний оптимизм/пессимизм интервьюеров во время процедуры отбора.
  • Построение системы естественного отбора персонала внутри компании. Очень важно построить систему выявления проблемных сотрудников, контроля их работы и принятия решения об их адекватности служебным обязанностям. Очень часто для решения этих задач строят мощную менеджерскую структуру из расчета один менеджер на 7-10 сотрудников. Надо отметить, что в разрешении ситуации с проблемным сотрудником больше заинтересованы его коллеги, но они не хотят участвовать в принятии непопулярного решения. В качестве одного из вариантов системы естественного отбора (когда коллеги по работе принимают участие в выявлении проблемных сотрудников) может быть использовано так называемое правило отказов. Сотрудник может быть уволен, если от него последовательно отказываются проектные команды. У менеджеров проекта есть право отказаться, а у руководства есть право принять непопулярное решение на основе отказов.
  • Построение системы оценки и карьерного роста. Кроме начальной оценки и наблюдения за сотрудником необходимо построить систему постоянной аттестации сотрудников. Система аттестации неразрывно связана с системой карьерного роста сотрудника. При этом цели должны ставиться как в профессиональной, так и в управленческой плоскости; они должны иметь четко выраженный характер и четкие сроки контроля, а их достижение должно стимулироваться. Такая система не только дает сотрудникам возможность расти материально и профессионально, но и позволяет при расширении компании адаптировать ее структуру за счет собственных сотрудников.
  • Построение системы обучения персонала. Знания персонала должны соответствовать требованиям рынка, поэтому необходимо уделять внимание переподготовке сотрудников применительно к новым условиям. Переподготовку можно организовать через курсы или исследовательские проекты. Кроме того, система обучения может быть завязана с системой отбора. Например, если требуется нанять больше сотрудников, чем их можно найти на рынке в соответствии с заданными критериями отбора, то единственный способ все же набрать штат необходимой численности — снизить требования, одновременно организовав подготовку набранных сотрудников.
  • Построение системы мотивации. Очень важно построить в компании систему мотивации персонала, направленную на высокое качество исполнения проектов. Одновременно система мотивации должна давать сотруднику ощущение некоторого гарантированного дохода, когда производство связано с успехами других подразделений, например, отдела продаж. Это означает, что у сотрудника должна быть базовая гарантированная зарплата, которая определяется его профессиональным уровнем и пересматривается на аттестации, прирастая еще и премиальными за успех конкретного проекта. Важно, чтобы схема подсчета и распределения премиальных была прозрачной. Еще одним наиглавнейшим условием правильной системы мотивации является ее обязательное исполнение. Задержка выплат зарплаты и проблемы с выплатой премий после успешного завершения проекта могут привести к нарушению морального климата в компании и проблемам с качеством последующих проектов. Можно сэкономить рубль, но затем потерять тысячи.
  • Построение системы социальной защиты персонала. Очень часто систему социальной защиты, которая включает в себя медицинскую страховку, обеды, кредиты, ипотеку и другие элементы, воспринимают как некую затратную составляющую, призванную обеспечить конкурентоспособность компании на рынке труда. Однако социальная защита сотрудника может нести компании прямую выгоду. Так, отсутствие сотрудника по болезни в течение недели наносит убыток, потому что его время нельзя выставлять в счетах заказчику. Если же из скоротечного проекта из-за эпидемии гриппа выбыло 30% штатного состава, то проект этот будет трудно спасти.

Второй уровень качества — уровень проекта

Предположим, что у компании имеется подготовленный, обученный и правильно мотивированный персонал. Что дальше? Есть ли теперь уверенность, что все проекты станут выполняться с требуемым качеством в требуемые сроки? Думаем, нет. Надо еще дать сотрудникам средства для успешного выполнения проекта.

Проект удобно представлять себе в виде треугольника, в вершинах которого три параметра.

  • Функциональность. Набор требований к проекту.
  • Качество. Набор критериев к количественному выражению качества проекта (например, число ошибок определенного приоритета при тестировании по конкретно заданным сценариям).
  • Сроки. Даты доставки проекта заданного качества и требуемой функциональности.

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

Проанализируем средства для успешного выполнения проекта.

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

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

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

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

Третий уровень качества — уровень компании

Одним из важных факторов обеспечения качества на уровне компании является создание оптимальной структуры управления компанией. Природа бизнеса такова, что изменения происходят постоянно. Невозможно работать по принципу «стартовал проект и забыл о нем». Жизнь кипит: постоянно приходят новые проекты, происходят изменения в текущих, проекты внезапно закрываются, — и структура компании должна быть готова воспринимать такие изменения, реагируя на них с максимальной скоростью и качеством. Перечислим требования к структуре управления компании.

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

Для постоянного повышения качества на уровне компании существует много подходов. Приведем некоторые из них.

  • Лучший опыт (best practices). Основан на стимулировании генерации изменений внутри проектной команды, направленных на улучшение качества, их выявлении, анализе и последующем закреплении внутри всех проектных команд.
  • Метрики. Направлен на постоянный сбор и анализ объективной информации о работе каждого сотрудника, проекта и компании в целом. Под объективной информацией подразумеваются количественные параметры, описывающие качество работы. Например, средняя величина задержки в доставке проекта или количество ошибок. Наличие таких метрик и сбор информации в течение длительно времени позволяет менеджменту компании принимать решения на основе более объективных данных и, следовательно, более эффективно повышать качество.
  • Аудит проекта. Преследует две основные цели: выявление проблем с ведением проекта, которые еще не выявил заказчик, и принятие корректирующих мер; выявление соответствия работы проектной команды требованиям компании и принятие корректирующих мер по поводу команды.
  • Пост-анализ проекта. Аналог аудита, осуществляется в конце проекта и позволяет выявить достижения и проблемы, встретившиеся в ходе работы над проектом.
  • Сертификация компании. Закрепляет то, что уже наработано в процессе построения системы управления компанией. Часто сертификацию рассматривают как панацею для создания системы качества. Однако последовательность должна быть иная — сначала построение системы качества (возможно, с учетом последующей сертификации), а потом ее сертификация.

Снова о фабрике и организованном производстве

Теперь попробуем ответить тем, кто воспринимает слово «фабрика» в негативном смысле.

Фабрика — это потогонный труд программистов с красными глазами, которые, сгорбившись перед экранами, не отрывая головы, стучат по клавишам. Организованное производство — это четко организованная работа, где каждый знает, что он должен делать и что он за это получит. Работа изначально организована так, чтобы избежать авралов с проектами, чтобы сотрудники чувствовали себя комфортно и думали лишь о том, как сделать проект лучше.

Фабрика — это отсутствие креативности, где можно выполнять только стандартные, простые проекты. Организованное производство — это место, где необходимо проявлять креативность, чтобы улучшить проект. Любая идея будет проанализирована и принята либо отвергнута, поэтому надо не только быть креативным, но и уметь доказывать, что твоя идея приводит к улучшению проекта, а не к его провалу.

Фабрика — место, где нам, русским, не место. Впрочем, есть разные русские — те, кто любит бардак, и те, кто любит порядок. Организованное производство — место для тех, кто любит порядок и не ловит рыбу в мутной воде.

Анатолий Гавердовский (AnatolyG@ moscow.vestedev.com), Александр Шмелев — сотрудники компании VDI (Москва).


Проблемы выполнения проектов

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

  • Местный менеджер заказчика, который территориально находится рядом с заказчиком, является «аборигеном» — говорит на одном языке с заказчиком, понимает его культурные особенности и взаимодействует с заказчиком и с командой проекта. Естественно, его роль и значение зависит от его персональных особенностей. Нужно также понимать, что нетрудно найти человека, который может решать бизнес-проблемы, либо технические проблемы, но трудно найти того, кто будет силен как в том, так и в другом.
  • Следующим этапом является формирование группы технических специалистов, которые работают в офисе заказчика (on-site) и взаимодействуют с удаленной командой. По опыту больших индийских компаний, часто используется соотношение: один сотрудник on-site и девять удаленных.

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

  • Максимальная детализация требований к проекту и другой проектной документации.
  • Постоянная доставка измененной проектной документации заказчику.
  • Регулярные совещания для детального совместного анализа проектной документации; именно на них выявляются непонимание и основные проблемы.

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