При расчёте срока проекта традиционно мы оцениваем длительность промежуточных шагов, затем их суммируем и прибавляем буфер на всякие случайности. Затем руководство режет нам этот срок вдвое. В рамках данной заметки автора будут интересовать наши расчёты, потому что даже руководитель проектов с большим опытом зачастую понимает, что рассчитанный срок слишком короткий и сильно, иногда в разы, расходится с его личной экспертной оценкой. Да, он поправит оценки сроков проекта и промежуточных шагов до своей экспертной оценки и при истинном мастерстве с некоторыми переработками уложится в срок с точностью до 15%, но осадочек останется.

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

Корень ошибки


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

Нормальное распределение означает, что проект с корректно оценённой длительностью 6 месяцев с равной вероятностью завершится через 9 месяцев или через 3 месяца. На равных расстояниях от центра распределения вероятность завершения проекта равна — такова особенность кривой Гаусса. С другой стороны, на практике мало кто видел IT-проект, завершившийся в два раза быстрее (через 3 месяца), зато проекты затянувшиеся в полтора раза по срокам (9 месяцев) мы видим регулярно. Кроме того, при нормальном распределении половина проектов у нас заканчивалась бы до оценённого срока, а половина — после. Но этого на практике тоже не наблюдается. Это говорит о том, что нормальное распределение для оценки сроков неприменимо. То есть у нас не нормальное распределение, а какое-то иное, с разной вероятностью завершения до наиболее вероятного срока и после.

Рассмотрим в качестве примера подобного распределения логнормальное. Оно нам покажет особенности данного класса распределений. Для логнормального распределения медиана и математическое ожидание находятся существенно дальше пика:

image

На представленном графике пик показывает наибольшую вероятность срока завершения проекта В план проекта обычно вписывается эта цифра плюс некий запас. Медиана указывает на точку разделения при которой половина проектов завершится до этого срока, а вторая половина — после. Математическое ожидание указывает среднее значение длительности проекта. Для фрагмента работы распределение будет иметь те же самые особенности: большую разницу между наиболее ожидаемым сроком реализации фрагмента работы (на основе него традиционно строятся планы) и средним значением срока.

Чтобы спрогнозировать длительность проекта, мы определяем самую длинную по времени цепочку и складываем длительности её фрагментов. Если мы складываем так величины, распределённые по Гауссу, то в среднем должен получиться корректный итоговый срок. Ведь половина фрагментов работы завершиться раньше срока, половина позже и эти неоднородности взаимно скомпенсируются. Чем больше фрагментов, тем точнее скомпенсируются неоднородности. Плюс мы можем посчитать погрешность и чуть сдвинуть срок на сигму-другую в зависимости от последствий срыва сроков.

Но у нас не распределение Гаусса. У нас удлинение срока выполнения каждого фрагмента работы значительно вероятнее, чем укорачивание на такую же величину. В итоге, если мы складываем сроки наиболее вероятного завершения каждого фрагмента работы, то у нас неоднородности по срокам выполнения не компенсируются, а усиливаются. Причём усиливаются в сторону удлинения реального среднего срока проекта по сравнению с оценкой. Что мы и наблюдаем в реальной жизни: если первый срок просрочен, то будут просрочены и все остальные сроки, при этом просрочка будет только расти. Лишь прикладывая дополнительные усилия можно остановить рост отставания проекта.

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

Если мы пытаемся чуть сдвинуть оценённый срок для всего проекта или его частей на сигму-другую, считая распределение нормальным, то это не сильно помогает, так как хвост распределения сильно толще, чем у кривой Гаусса. В итоге, за счёт такого увеличения оценки срока не удаётся дойти даже до медианы, не говоря уже о среднем значении длительности проекта в виде математического ожидания.

Что делать


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

Метод Брукса: считаем срок реализации программы “в лоб” (пользователем выступает сам программист) и умножаем на 3 для программного продукта (пользователем выступает неограниченный круг лиц) или программного комплекса (в текущих реалиях — набор микросервисов) и на 9 для системного программного продукта (в текущих реалиях — набор связанных инфраструктурных компонентов). Откуда берутся такие коэффициенты хорошо теоретически обосновано в первой главе книги Брукса “Мифический человеко-месяц” и это описание 1975 года хорошо перекладывается на текущие реалии.

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

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

Метод функциональных элементов: вводим промежуточную единицу трудоёмкости, составляем список функциональных элементов (экраны в браузере, микросервисы, настраиваемые элементы инфраструктуры и т.д.), оцениваем трудоёмкость работы над каждым функциональным элементом в промежуточных единицах. После этого по своему экспертному опыту работы с конкретной командой разработчиков оцениваем переводной коэффициент промежуточной единицы во время. Лично я ещё независимо оцениваю переводные коэффициенты для разных видов деятельности: аналитики, проектирования, написания постановок задач, написания кода, вёрстки, тестирования, интеграции и т.д. После этого следует учесть порядок операций, характерное время задержки между завершением предыдущей операции и началом новой и определить длительность проекта методом критического пути.

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

Обоснование сроков


И вот, мы оценили прогнозную длительность проекта. Как обосновать полученный срок? На основе проделанных расчётов. Например, автор заметки для не-Скрам проектов обычно делает в Google Sheets большую многострочную наглядную таблицу с детальным расчётом методом функциональных элементов. Расчёт опирается на практику, все коэффициенты и параметры наглядны, а практика для заинтересованных лиц обычно является сильным и хорошим аргументом, даже если получился неудобный для тех или иных лиц срок. Особенно практика наглядная и полученная в рамках текущей компании.

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

Комментарии (11)


  1. codecity
    24.09.2019 11:53
    +1

    Затем руководство режет нам этот срок вдвое.

    Как то безапелляционно… Вы считаете что везде такой дурдом?


    1. GreyStrannik Автор
      24.09.2019 23:01

      Это не всегда дурдом, далеко не всегда идиотизм руководства и не всегда в два раза. Есть целый класс проектов, очень интересных проектов, в которых обстоятельства вынуждают вменяемых многоопытных руководителей идти на такие шаги или на несколько более мягкие шаги. С другой стороны, есть большое количество компаний, в которых такое случается крайне редко, и целый госсектор с его э… неторопливостью.


      1. codecity
        25.09.2019 01:51

        Оценка сроков и рисков — это не компетенция разработчиков. Есть метод FP, есть требования. Ну и есть логически обоснованные интересы: разработчику выгоднее взять срок с запасом, по этому нет смысла давать ему на оценку — должно быть две стороны. Т.е. должно быть разделение: оценивает сроки/риски один а делает другой. Точно так — делает один а тестирует другой.

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

        Гораздо более интересный момент — оценка уже проделанной работы. Т.е. если сроки были сорваны и заняло больше времени — то как определить кто виноват — оценщик, который дал неверную оценку, или исполнитель, который работал слишком медленно?

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


  1. rboots
    24.09.2019 17:49
    +2

    Корень проблемы в том, что маленькие сроки социально ожидаемы, а называя большие как правило столкнёшся с неприятной реакцией спрашивающего. Это сдвигает оценку в меньшую сторону по чисто психологической причине, причём оценивающий этого может даже не осознавать. Иногда сроки принимают как есть, хотя всё равно видно реакцию. А иногда за сроки вообще ведутся торги, как будто можно родить ребёнка за 7 месяцев, а не за 9, если сильно постараться. Как правило это ведёт просто к урезанию функционала и «ребёнок» получается недоношеный, без руки/ноги и с багами. Часто реальные сроки и так понятны, но многие не хотят их видеть. По своей практике хорошо показал себя следующий подход, давать три оценки, оптимистичную, пессимистичную и наиболее вероятную. Если руководство завязывается на внешние контректы или маркетинговую активность — используем пессимистичную оценку. Если на план на неделю — наиболее вероятную. А если на мотивацию и чувство героизма — оптимистичную.


  1. bacminuscab
    24.09.2019 20:19

    Особенностью данного способа подсчёта является известный факт: чем мельче дробить работы для оценки срока проекта, тем менее точной оказывается оценка. Хотя по теории должно быть ровно наоборот.

    Немного странно считать известным фактом то, что детальная декомпозиция работ ухудшает точность итоговой оценки.
    Вы правильно отметили, что теория (тот же PMBoK) рекомендует детальную декомпозицию для оценки, и исходя из своего опыта пары десятков проектов я соглашусь здесь с рекомендациями методологии.
    Наоборот, когда в проекте есть участки, которые нельзя разбить на детальные задачи (к примеру, из-за нечетких требований, новой предметной/технологической области), начинается неточность в оценках затрат проекта.


    1. mrsantak
      24.09.2019 22:56
      +1

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

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


      1. codecity
        25.09.2019 03:21

        менеджеры на полном серьезе считали что можно нормально оценить проект объём которого измеряется в человекогодах за день-два

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

        Анализ требований/декомпозиция/исследования занимают 15-20% от общего времени. За это время нужно разработать базовую архитектуру проекта, так как без нее оценка не возможна. Т.е. выделить основные сущности системы, разбить на модули/сервисы, определить контракты, рассмотреть существующие библиотеки (и предварительно проверить), выделить технически сложные части и т.д.

        Если эту работу не проделать, то могут быть сюрпризы. К примеру, вы рассчитываете что некая сторонняя библиотека реализует нужный вам функционал, рассчитываете ее купить и сэкономить 2 недели времени. А оказывается что эта библиотека реализует не все что вам нужно, но на этапе планирования у вас не было времени это проверить.


    1. GreyStrannik Автор
      24.09.2019 23:22
      +1

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

      Пример из личной практики. Когда-то у меня бывали небольшие проекты, в которых я, как ведущий разработчик, оценивал сроки разработки новой подсистемы, защищал их и потом сам же реализовывал. Месяцев на 3-5 работы. При этом при оценке сроков отдельных задач я прекрасно знал, как буду делать каждую из них — был богатый опыт. Зная теоретическое обоснование Брукса, хотелось сразу умножить сроки на три. Далее оценивал на взгляд весь объём работы — успею или нет в целом и за сколько — и умножал в зависимости от реалистичности получившейся оценки всего проекта в полтора-два раза. В итоге, еле вписывался в свои же сроки, но вписывался всегда. И это, замечу, идеальные условия для оценки: оценивает эксперт, который знает, как долго делается каждая задача, и сам же потом делает весь проект.


      1. codecity
        25.09.2019 02:27

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

        Опыт разработки и опыт оценки/рисков — это разное. Хороший исполнитель не всегда хороший оценщик, равно как и наоборот.

        В итоге, еле вписывался в свои же сроки, но вписывался всегда.

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

        Если ты заграл себя в психологичекую ловушку, т.е. подписался под сроками и взял все риски на себя — то вероятность выгореть — очень высока. По 12 часов в день будешь работать и т.д. Т.е. нельзя назвать это нормальной жизнью, потом будешь платить чем-то более дорогим (здоровьем).

        Гораздо более интересен момент оценки уже проделанной работы — это база. Сразу можно сказать — была ли плановая оценка верной, соответствует ли ей проделанная работа. Но, как правило, никто не обладает такой компетентностью. Все только привыкли «играть в карты», торговаться и пр. — не обладая реальной тех. компетентностью.


    1. codecity
      25.09.2019 02:18

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

      Сколько времени вам нужно на оценку проекта, который будете делать в течение 3-х месяцев? Считается что на детальный анализ — нжуно около 20% времени. Т.е. если проект примерно на 3 мес., то 13 раб. дней уйдет на детальный анализ требований и декомпозицию.

      Если же на работу, которая должна занимать 2 недели, вам в приказном порядке выделят 1 день или, хуже того, 4 часа — то это явная манипуляция и попытка перевесить собак на исполнителя за неверную оценку. Рассчет на то, что вы не учтете многих нюансов.

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


  1. meranged
    24.09.2019 22:36

    В материале есть несколько неозвученных допущений. В частности, нет ничего про изменение требований. На практике не встречал ни одного проекта, чтобы заказчик не менял требований. А это уже работа по управлению изменениями, что делает задачу нелинейной. Так же просматривается допущение, что мы как-то можем влиять на сроки проекта. Вероятно, в продуктовом мире это так и есть, но в деливери-мире после заключения контракта сроки проекта уже зафиксированы, и всё, чем мы можем управлять — это технологии и команда. И тут остаётся только верить, что на этапе оценки были учтены все риски, а руководитель проекта грамотно разрулит все запросы на изменения.