«Проект без рисков – удел неудачников. Риски и выгода всегда ходят рука об руку» (с) Том Демарко, Тимоти Листер.
Руководителю проекта разработки ПО надо уметь делать немногое. Надо лишь уметь управлять рисками. Рисками не уложиться в срок. Рисками сделать не то, что требуется. Рисками перерасходовать проектный бюджет. Всё остальное – производные активности.
Можно, разумеется, рисками не управлять. Чувствовать себя Ником Валлендом от разработки ПО и ходить по канату без страховки нацеливать себя и свою команду исключительно на благоприятное развитие событий.
Таким большим оптимистам можно дальше и не читать. Для остальных продолжу.
Бытует мнение, что каждый новый проект разработки является уникальным предприятием. Это не совсем так. В отрасли уже накопился определенный опыт и большинство значимых рисков проектов разработки ПО известны и собраны коллекции (контрольные списки) грабель, на которые особенно часто наступают начинающие руководители программных проектов, предпочитающие учиться на собственном опыте.
Оговорюсь сразу, что самый значимый риск в разработке ПО – неадекватный РП. Но сейчас не об этом.
Коллекция Барии Боэма
(с) Barry W. Boehm. «A Spiral Model of Software Development and Enhancement», Computer, May 1988
- Дефицит специалистов.
- Нереалистичные сроки и бюджет.
- Реализация несоответствующей функциональности.
- Разработка неправильного пользовательского интерфейса.
- “Золотая сервировка”, перфекционизм, ненужная оптимизация и оттачивание деталей.
- Непрекращающийся поток изменений.
- Нехватка информации о внешних компонентах, определяющих окружение системы или вовлеченных в интеграцию.
- Недостатки в работах, выполняемых внешними (по отношению к проекту) ресурсами.
- Недостаточная производительность получаемой системы.
- “Разрыв” в квалификации специалистов разных областей знаний.
Коллекция Демарко и Листера
- Изъяны календарного планирования.
- Текучесть кадров.
- Раздувание требований.
- Нарушение спецификаций.
- Низкая производительность.
Моя коллекция
- Требования заказчика не полны.
- Требования подвержены частым изменениям.
- Отсутствие рабочего взаимодействия с заказчиком.
- Отсутствие необходимых ресурсов и опыта.
- Неполнота планирования. Забытые работы.
- Ошибки в оценках трудоемкости и сроков работ.
И что теперь с этим делать?
Возможны четыре метода реагирования на риски:
- Уклонение от риска (risk avoidance).
- Передача риска (risk transference).
- Снижение рисков (risk mitigation).
- Принятие риска (risk acceptance).
Как это происходит в обыденной жизни. Предположим нам надо доставить очень ценный груз через горный перевал. Мы можем: уклониться от риска обойдя горный хребет; передать риск, наняв вертолетную компанию; снизить последствия риска, вбивая страховочные костыли через каждые пять метров подъема, и, наконец, принять риск и ничего не делать.
О чем следует помнить. Надо понимать, что реагирование на риски — это всегда затраты. Поэтому не стоит планировать мероприятия, направленные на борьбу с риском, стоимость которых превышает убытки от реализации самого риска. И еще, управляя рисками, мы меняем наш план. Поэтому стоит проанализировать вторичные риски, связанные с этими изменениями.
Первое решение, которое мы обсудили провести штатный подъем орбиты несколько ранее запланированного срока. Но тут мы вспомнили про вторичные риски. Мы просто не успевали еще раз пересчитать прогноз столкновений для новой орбиты. Поэтому тогда впервые был принят подход, направленный на снижение риска, который используется и теперь уже для МКС. Космонавты на время пролета опасного объекта перешли в спускаемый модуль.
Для тех, кто владеет матчастью
Требования заказчика не полны
О каких требованиях обычно забывают. Функциональные: программы установки, настройки, конфигурации, миграция данных, интерфейсы с внешними системами, справочная система. Нефункциональные: производительность, надежность, открытость, масштабируемость, безопасность, портируемость, эргономичность. Заказчик, как правило, предполагает, наличие подобных требований по умолчанию. Поэтому разумно, не дожидаться приемо-сдаточных испытаний и обсудить с заказчиком все эти требования на этапе подготовки контракта.
Требования подвержены частым изменениям
Методы реагирования: переоценка проекта каждый раз, когда требования добавляются; итерационная разработка; контракт на основе «Time&Materials»; учет (резервирование) в оценках трудоемкости и сроков возможности роста требований, например, на 50%.
Отсутствие рабочего взаимодействия с заказчиком
Что делаем: устанавливаем доверительные отношения с заказчиком, непрерывно с ним взаимодействуем, прототипируем и согласовываем пользовательские интерфейы, периодически ставим тестовые версии конечным пользователям.
Отсутствие необходимых ресурсов и опыта
Как можно бороться: привлечь экспертов-консультантов на начальных этапах, учесть в оценках обучение сотрудников, уменьшить потери от текучести кадров, привлекая избыточное число участников, учесть в оценках «время разгона» для новых сотрудников.
Неполнота планирования. Забытые работы
Работы в вашем проекте: обучение, координация, уточнение требований, управление конфигурациями, поддержка автосборки, разработка автотестов, создание тестовых данных, обработка запросов на изменения. Проходим по списку и работы, которые нужны в проекте, оцениваем и включаем в план. Другие, как правило, более оприоритетные работы, на которые будут тратить время участники: сопровождение действующих систем, повышение квалификации, участие в пресейлах, административная работа, отпуска, праздники, больничные. Боремся, планируя загрузку бойцов в проекте на 60-80%.
Ошибки в оценках трудоемкостей и сроков работ
Как боремся, в этот пост, к сожалению не поместится. В другой раз.
ЗЫ.
Конечно, вряд ли кто-нибудь когда-нибудь составит исчерпывающий список всех возможных рисков программного проекта. Думать своей головой никто не отменял. Необходимо внимательно изучать особенности вашего конкретного проекта. Но начинать анализировать риски разумно с исследования наличия на вашем пути уже хорошо известных перечисленных граблей.
Успехов!
Автор: craft_brother