Тезис: Не используйте проценты для контроля хода выполнения работ
Для многих людей в IT управление проектами ассоциируется с MS Project, диаграммами Ганнта, графиками загрузки и т.д. Ничего не имею против всех этих вещей, но есть одна гадость, которая не даёт мне спокойно спать, а именно – отслеживание статуса хода проекта по разработке ПО по процентам выполнения задачи.
Процент выполнения задачи по всей видимости происходит из более традиционных видов человеческой деятельности – строительство, выпуск продукции и т.д. Одна из важных характеристик такой деятельности – её однородность. Речь вот о чём – здесь вполне применимы понятия “копать и не копать”, т.е. производительность труда есть величина постоянная для конкретного типа производственного ресурса, таким образом объём сделанной работы прямо пропорционален затраченному на неё времени. Таким образом можно говорить о количестве произведённого результата или затраченном времени – и обе эти величины будут достаточно хорошо характеризовать динамику процесса.
Если же посмотреть на типичные задачи по разработке ПО – “спроектировать БД”, “настроить интеграцию с Outlook”, “реализовать компонент фильтрации данных”, то мы увидим, что задачи эти неоднородны по характеру выполняемой работы в пределах одной работы. Что значит “компонент реализован на 23%”? Что значит “интеграция выполнена на 78%”? Понятно, что как минимум единицы процентов в общем случае ничего не говорят о реалиях, если только в проекте нет специально оговорённой метрики процента, а такое практически никогда не случается. Но говорят ли что-либо десятки процентов? Да, в общем случае они выражают видение исполнителя относительно количества оставшейся трудоёмкости по доведению задачи до завершения. Вместе с тем, достаточно небольшое количество разработчиков может похвастаться адекватными оценками. Для отрасли вцелом характерны постоянный недоучёт рисков возникновения трудностей из-за самого характера работы, что влечёт за собой появление ряда абсурдных в своей безысходности эвристик “возьми оценку трудоёмкости разработчика и умножь на Pi”.
Как уже говорилось рядом исследователей, работа по созданию ПО гораздо ближе по своему характеру к работе исследовательско-проектной организации, где ключевая часть работы состоит в исследовании, анализе, выдвижении гипотез, проектировании, конструировании, макетировании и проверке, а не в реализации продукта. Реализация продукта как таковая в современных условиях разработки ПО представляет собой зачастую полностью автоматизированное создание системы за несколько минут или часов.
Даже при достаточно хорошо сформулированных требованиях к ПО большая часть работы по проектированию проходит в голове человека, разработчик может размышлять над возможным решением 3 дня, а потом сесть и описать его за 3 часа. Вот почему, на мой взгляд, метрика в духе “сделано 56% работы” плохо соотносится с реальностью – разработчик мог оценить задачу в 3 дня, а на поверку окажется, что её получилось сделать только за 5, причём к вечеру 3-го, и даже 4-го дня никаких осязаемых результатов задачи ещё даже не существовало.
И в таких услових единственные виды метрик, о которых можно говорить безотносительно привязки к конкретной задаче, это:
- статус выполнения работы в виде логического признака – сделана/не сделана;
- оценка количество потраченного на работу времени в абсолютном выражении (+/- час);
- отношение количества потраченного на задачу времени к первоначально запланированному.
Рекомендация, которую можно сделать на таких наблюдениях, следующая – разбивайте проект на достаточно мелкие задачи, чтобы их трудоёмкость не превышала нескольких дней, а лучше – дня. Если трудоёмкость задачи составляет несколько дней, попросите разработчика разбить её на отдельные подзадачи.
Я предлагаю взять рассуждения Брукса о вехах проекта и применить его для всех задач:
«Как управлять большим проектом по жесткому графику? Прежде всего, надо иметь график. У каждого из событий, называемых вехами, должна быть дата. Выбор дат – уже обсуждавшаяся задача оценки, и он решающим образом зависитот опыта.
Для выбора всех вех есть только одно пригодное правило. Вехами должны служить конкретные особые события, которые можно идентифицировать с полной определенностью. В качестве отрицательных примеров отметим, что написание программы “закончено на 90 процентов” в течение половины всего времени кодирования. Отладка “закончена на 99 процентов” почти всегда. “Планирование завершено” – событие, которое можно объявить почти произвольно.
Напротив, вехи должны быть 100-процентными событиями. “Спецификации подписаны архитекторами и разработчиками”, “исходный код готов на 100 процентов, отперфорирован и загружен в библиотеку на диске”, “отлаженная версия прошла все контрольные примеры”. Такие конкретные вехи разграничивают расплывчатые этапы планирования, кодирования и отладки.
Наличие четко очерченных границ и недвусмысленность важнее, чем возможность легкой проверки начальником. Едва ли человек станет лгать о прохождении вехи, если она очерчена столь ясно, что от не может себя обманывать. А вот если веха расплывчата, начальник часто воспринимает доклад
иначе, чем тот, кто ему докладывает. Дополняя Софокла, скажем, что никто не любит и сам приносить дурные вести, поэтому они смягчаются без злого намерения ввести в заблуждение.»
Контролируйте проект по количеству выполненнных задач, а не по проценту выполнения тех или иных задач. Процентная оценка потраченного времени поможет выявить отстающие задачи и скорректировать планы и работу, но полагаться на неё для контроля хода проекта можно, только если вы уверены в качестве оценок трудоёмкости тех или иных разработчиков (хотя оценка потраченного времени всегда достаточно объективна).