Оцени меня, если сможешь. Методика точной оценки крупных задач

Практически постоянно на проектах вижу такого рода постановки задач:
-
[DEV] Разобраться с логированием при ретрае
-
Реализовать отчеты
-
NGINX. Мониторинг и логирование
-
Реализовать статусную модель
-
[ENG] Настроить мониторинг для мониторинга
Что объединяет эти формулировки?
-
Простота постановки
-
Отсутствие конкретики
Знакомы ли вам такие постановки?
К сожалению, с такими постановками я сталкиваюсь постоянно, независимо от проекта и компании, в которой работаю. И самое грустное в таких задачах — их реализация никогда не совпадают со своими оценками. А это значит, что задачи не сдают в условленный срок. Затем начинается тягучий процесс, когда менеджеры постоянно спрашивают «когда доделаете?», а инженеры виновато говорят, что ещё не готово, и начинают оправдываться: мол, появились новые вводные / подводные камни / неучтённые обстоятельства и т.п.
И так повторяется из недели в неделю, из спринта в спринт…

Я не люблю оправдываться. Это выглядит так, что ты обещал сделать и не сделал. Поэтому стал искать решение, как точно оценить объём работ по задаче. И мне удалось найти одно. Оно позволяет мне оценивать крупные задачи и максимально близко (90+%) попадать в оценке к реальным трудозатратам.
Крупная задача — как мечта
И начну я с одной известной фразы:
«I have a dream…» (У меня есть мечта…, — пер. с английского).
Эта фраза одного политического деятеля нашла отклик в сердцах миллионов людей по всему миру и стала крылатой.
Мечта — это слово, знакомое нам с детства, ведь начиная с детского возраста человек мечтает. Например, стать лётчиком или о покупке заветной игрушки. Вырастая, мечты не уходят, более того, появляются новые.
Но в каком бы возрасте человек ни мечтал, у всех мечт есть нечто общее: желанность и сложность в достижении. И именно сложность достижения наши желания со временем превращает в мечты. А в чём выражается сложность? — В количестве усилий и объёме работы, которую нужно сделать, чтобы исполнить мечту. Поэтому мечта похожа на крупную задачу:
-
у всех мечт, как правило, простые и лаконичные названия (постановки)
-
у всех мечт в названиях мало конкретики
И все, кто когда-либо пытался осуществить свою мечту, знают: мечтается — легко, а воплощать мечты в жизнь — трудно.
Чтобы разобраться, почему так, предлагаю посмотреть на мечту как на крупную задачу в task-трекере. Тогда слово «мечтать» станет постановкой крупной задачи. Например, стать лётчиком. А воплощать мечты в жизнь — это уже шаги реализации задачи. Например, действия, которые нужно выполнить, чтобы выучиться на лётчика и найти работу по этой специальности.
В сфере разработки программного обеспечения за постановку задачи отвечает менеджер, а за решение задачи — инженер.
Менеджер не погружается в детали реализации задачи и смотрит на неё словно издалека, видя только общие очертания, — отсюда как раз и возникает та простота постановки задачи. А инженер, в свою очередь, смотрит на задачу с более близкого расстояния, поэтому он видит больше деталей — конкретные шаги, которые нужно сделать, чтобы решить задачу.
И именно поэтому мечтать и претворять мечту в жизнь — разные вещи, т.к. требуют разных компетенций. Но на этом разница не заканчивается, и я продемонстрирую её на примере решения такой крупной задачи, как строительство дома.
Экспертная оценка
Как видят объём работ одной и той же задачи менеджер и инженер?
Менеджер обычно не владеет компетенциями инженера, поэтому в лучшем случае, он знает примерный порядок действий, которые нужно выполнить. И с позиции менеджера создаётся видение объёма работ как при строительстве небольшого одноэтажного домика.
Инженер же, как исполнитель, смотрит на задачу через призму конкретных шагов, которые нужно выполнить, и поэтому объём работ совершенно другой, как при строительстве многоэтажного дома.
В итоге разные специалисты расходятся в понимании объёма работ одной и той же задачи. Поэтому и оценки будут отличаться, и у инженера она будет точнее, т.к. он видит больший объём работ. И именно поэтому менеджеры всегда идут за оценкой к инженеру.
Его оценка называется экспертной.
Но, к сожалению, оценка крупной задачи, сделанная инженером, частенько оказывается меньше, чем реальное время её выполнения.
Почему же так получается?
Экспертная оценка с коэффициентом
Чтобы разобраться, почему экспертная оценка имеет низкую точность, нужно посмотреть на её алгоритм. И здесь мы сталкиваемся с одним из недостатков экспертной оценки — каждый эксперт по-разному высчитывает оценку. Я пробовал разные методы экспертной оценки и самый лучший результат получал, используя следующий алгоритм: представляю последовательность действий, которые нужно сделать, и точку (финишную ленточку), когда задача будет считаться решённой. Зная начало и предполагаемый конец задачи, можно получить представление об объёме работы над задачей, и уже после этого дать оценку.
Такой алгоритм оценки понятен и интуитивно кажется правильным, но на практике он очень часто даёт ошибку, оценка получается сильно ниже, чем реальные трудозатраты. И основная проблема такого алгоритма кроется в том, что предполагаемый при оценке конец задачи на самом деле мираж, подобный тому, что изображён на картинке:
Стоит отметить, что мираж не иллюзия, а оптический эффект. Это значит, что мираж всегда показывает реальный объект, только не в том месте, где он реально находится. И эффект миража возникает из-за специфики работы нашего мозга — мы воспринимаем видимые объекты, словно они лежат на прямой, тогда как свет движется по кривой.
Из наблюдений, при экспертной оценке оценщик всегда представляет успешный и кротчайший путь решения крупной задачи, а такой путь всегда является прямой. Но неизменно при реализации крупной задачи всегда всплывают неучтённые требования, обстоятельства и прочие подводные камни. А значит, решение задачи — это извилистая кривая. И именно поэтому представляемая экспертом точка завершения задачи является миражом.
Это утверждение подтверждается моим опытом: реальные трудозатраты по крупной задаче почти никогда не попадают в оценку выполненную экспертом. И многие опытные менеджеры знают об этом, поэтому они умножают экспертную оценку на определённый коэффициент.
Такой вид оценки так и называется: экспертная оценка с коэффициентом.
Сложность этого вида оценки заключается в выборе подходящего коэффициента. Можно найти много различных методик его расчёта: от простого «Pi * оценка / 2» до сложных математических формул. Такой вид оценки даёт более лучший результат, чем обычная экспертная оценка, но всё равно частенько промахивается как в меньшую, так и в большую сторону. Поэтому эта оценка также не даёт уверенности в её точности.
Так как же сделать оценку точнее?
Парадокс точной оценки задачи
Для поиска ответа я сделал следующее:
Взял схематичное изображение экспертной оценки с коэффициентом, взял график параболы, который очень похож на кривую из оценки с коэффициентом, и наложил их друг на друга.
Важно понимать, что парабола на графике — это очень упрощённая модель кривой оценки трудозатрат по задаче, с которой просто удобно работать человеку. В реальном проекте у каждой задачи своя уникальная кривая. И уравнение такой кривой неизвестно, а выводить его классическими математическими способами необоснованно трудозатратно, если вообще возможно, т.к. количество входящих параметров невероятно велико.
Но парабола была выбрана в качестве модели не только для простоты. На собственном опыте я убедился, что ошибка в экспертной оценке резко возрастает с размером задачи, т.е. чем крупнее задача, тем сильнее ошибка в оценке. И в данном примере график параболы очень хорошо демонстрирует эту нелинейную зависимость.
Поэтому найти подходящий коэффициент — это одна из самых больших сложностей экспертной оценки с коэффициентом, т.к. простое умножение на одно число — это линейная зависимость, а ошибка оценки зависит нелинейно от размера задачи.
Подведу итог вводных в решаемую мною задачу:
-
полное уравнение кривой (путь решения задачи) неизвестно на старте задачи
-
у каждой задачи своё уникальное уравнение кривой
-
вычислить уравнение кривой необоснованно трудозатратно, если вообще возможно
-
размер ошибки оценки нелинейно зависит от размера задачи
По сложившимся условиям я сразу понял: искать формулу, применимую ко всем решаемым задачам в мире, — абсолютно бесполезное занятие. Мир слишком разнообразен, постоянно меняется и каждая задача уникальна со своим контекстом и набором переменных. Поэтому нужен какой-то инструмент, который не зависел бы от контекста решаемой задачи. И подсказку я нашёл в своём же графике: из школьного курса алгебры мне вспомнился инструмент, который умеет определять скорость изменения функции, — это производная.
Как уже было сказано, полное уравнение кривой (путь решения задачи) неизвестно на старте задачи, поэтому нет возможности взять производную. Но я вспомнил, что у производной есть геометрический смысл, и отобразил его на графике. Перпендикуляр, выходящий из реального конца задачи на пересечении с касательной, образует точку, тот самый видимый конец задачи — мираж, который видит в оценке инженер.
При оценке эксперт видит успешный путь решения задачи. А это — прямая. Эксперту кажется, что он видит весь объём работы, а значит, видимый им конец задачи — реальный. Но это заблуждение, мысленный оптический обман, на самом деле он видит мираж реального завершения задачи.
Это заключение согласуется с теми знаниями, которые известны из школьного курса алгебры:
касательная делит перпендикуляр на два отрезка
-
линейное приращение аргумента
-
нелинейное приращение аргумента (иногда его называют ошибкой)
Линейное приращение (отрезок с цифрой 1 на графике) — это тот объём, который видит эксперт при оценке. А все неучтённые требования, обстоятельства и прочие подводные камни скрываются в нелинейном приращении (отрезок с цифрой 2 на графике). Именно нелинейное приращение олицетворяет собой ошибку в экспертной оценке.
Обратите внимание, насколько нелинейное приращение больше линейного, если мы находимся на старте решения крупной задачи. Но из своего опыта я знаю, что стоит начать решать задачу, как сразу начинают проявляться детали решения (те самые подводные камни и неучтённые нюансы), которые были не видны с самого начала.
И если попытаться переоценить задачу после того как над ней немного поработал исполнитель, то ошибка в оценке уменьшается, а видимый конец задачи начинает приближаться к реальному:
И чем больше исполнитель работает над задачей, тем яснее становится оставшийся объём работы, а значит, уменьшается ошибка в оценке:
В какой-то момент видимый и реальный концы задачи совпадут друг с другом. Как правило, это получается уже перед самой финишной ленточкой.
И теперь на основе графика экспертной оценки я могу дать ответ на поставленный вопрос: как же сделать оценку точнее?
Чтобы понять реальный объём работы, мне нужно реально пройти все шаги реализации задачи.
Получился парадокс: чтобы точно оценить задачу, нужно её выполнить.
Искусство оценки задачи
Как разрешить парадокс?
Известно: если возникает парадокс, это значит, что как минимум одно из условий ложно. Я перепроверил условия задачи, ход своих рассуждений, формулировки парадокса и, к сожалению, не смог обнаружить ложное условие.
Помощь в решении парадокса пришла от людей, которые зачастую с ИТ имеют мало общего. Удивительно, но оказалось, что поставленную мной задачу оценки довольно давно и весьма успешно решают в другой области — в области ориентирования на местности. Во время походов туристы постоянно ставят перед собой задачу оценки времени пути из пункта А в пункт Б. Иногда такие маршруты неизведаны человеком, но чаще всего это уже кем-то ранее пройденные маршруты. Но тем не менее каждый такой поход представляет собой абсолютно уникальный набор параметров: погодные условия, участники маршрута, их опыт, снаряжение и т.п. А это всё очень похоже на решение задачи в любом ИТ-проекте.
Как же оценивается время прохождения маршрута? Ведь я точно знаю, что оценщик реально не проходит весь маршрут перед тем, как определить места ночёвки, сколько провизии взять и сколько дней займёт весь подход. Прохождение маршрута выполняется мысленно по карте местности, основываясь на предыдущем опыте и своих возможностях.
И здесь я осознал ложное условие в парадоксе: нужно реально пройти все шаги реализации. Слово «реально» наталкивало меня на то, что нужно уже решить задачу. А это ложное утверждение. Чтобы дать точную оценку, необязательно реально решить задачу, можно это сделать мысленно, составив дорожную карту решения.

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

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

Проверка экспериментом
Когда я готовил материал, то решил провести целенаправленный эксперимент, чтобы ещё раз проверить точность оценки по методу дорожной карты.
На своём текущем проекте я выбрал такую задачу:
Перевести микросервис ABC со Spring Framework на Jakarta EE и Libercat
Функции микросервиса:
-
вычитать сообщение из очереди и отправить его в ES
-
сохранить в БД информацию о выполненном действии
Экспертная оценка по этой задаче составила: 24ч.
Затем была составлена дорожная карта будущего решения задачи. Другими словами: выполнено моделирование будущего решения.
Вот дорожная карта:
-
Заменить Spring Data ES на Jakarta EE реализацию
-
Перевести текущую Spring Camel на Jakarta EE реализацию
-
Заменить Oracle JDBC драйвер на Postgresql драйвер
-
Заменить Spring Data JPA на Jakarta EE JPA
-
Заменить Spring Web на Jax-RS
-
Заменить Spring Core на Jakarta EE и Libercat
-
Настроить запуск приложения в docker контейнере
Затем была выполнена экспертная оценка каждого шага в отдельности, а полученные оценки просуммированы. Таким образом, была получена оценка по методу дорожной карты: 77 ч.
Далее список подзадач, полученный во время оценки методом дорожной карты, был передан исполнителю, который не участвовал в оценке, не знал о проводящем эксперименте и не знал оценок задач. Исполнителю не ставились никакие ограничения по времени (deadline’ы) решения задач. Всё что ему требовалось сделать:
-
брать подзадачи по списку
-
решить задачу, как исполнитель считает нужным
-
залогировать время работы над задачей
После реализации всех подзадач, было просуммировано время залогированное на решение каждой из них. Реальное время решения задачи составило: 80ч.
Итого получилось:
|
Экспертная оценка |
Оценка по методу |
Реальные трудозатраты |
|
24ч. |
77ч. |
82ч. |
|
Точность оценки |
||
|
24 / 82 = 0,2926 * 100% = |
77 / 82 = 0,9390 * 100% = |
|
И добавлю для дополнительного примера экспертную оценку с коэффициентом, хотя в эксперименте такая оценка не проводилась:
Точность оценки методом экспертной оценки с коэффициентом Pi*оценка/2:
(3,14* 24 / 2) / 82 = 37,68 / 82 = 0,4595 *100% = 45,95%
-
в 3,2 раза оценка по методу дорожной карты оказалась точнее экспертной оценки задачи в целом
-
в 2,04 раза оценка по методу дорожной карты оказалась точнее экспертной оценки задачи в целом с коэффициентом
Оценка по методу дорожной карты в этом эксперименте оказалась не просто самой высокой, она получилась очень близкой к реальным трудозатратам. И аналогичные результаты я получал во всех проектах, где пользовался оценкой по методу дорожной карты.
Но хочу обратить внимание, что ошибка в оценке всё-равно присутствует. Т.к. искусство оценки задачи — это моделирование её будущего решения, и чем точнее нужна модель, тем больше трудозатрат нужно на её составление.
Заключение
Читая статью, кто-то может подумать, что я просто рассказал про декомпозицию задачи и оценке её маленьких частей. И отчасти будет прав. Но слово «декомпозиция» довольно абстрактное и обобщённое. И интуитивно не очень понятно, как делить задачу, откуда начинать.
Возможно, кто-то ещё вспомнит аналогию про слона, которую используют для объяснения декомпозиции. И снова этот человек отчасти будет прав. Но метафора «разрезания слона», как и «декомпозиция», интуитивно не подсказывает, как делить задачу и откуда начинать: где у слона находиться начало, а где конец? Более того, разрезание живого существа, пусть и фигурально, лично у меня не вызывает симпатии и отбивает желание пользоваться этой аналогией.
А вот составление дорожной карты — это составление маршрута. У любого маршрута есть начальная и конечная точки, как и у любой задачи. У маршрута есть траектория движения, а из школьного курса математики известно, что любую кривую можно разбить на отрезки. Таким образом, получить ключевые точки маршрута, но чаще всего используют слово milestones или вехи. И эти понятия они все взяты из нашей реальной жизни и более интуитивно понятны для человека.
И самое интересное, составляя дорожную карту, ты неявно делаешь декомпозицию задачи. Другими словами, декомпозиция задачи — это не цель дорожной карты, а следствие, т.е. дополнительный результат полученный после составления дорожной карты. Цель любой дорожной карты — это построение маршрута, чтобы понять, как из начальной точки попасть в конечную.
После построения маршрута на дорожной карте появляются ключевые точки. Если переложить терминологию дорожной карты в плоскость решения задачи, то ключевые точки маршрута превращаются в этапы решения задачи — шаги, которые нужно сделать, чтобы завершить задачу. Шаги решения дают более чёткое понимание объёма задачи, это делает процесс оценки и работы над задачей более прозрачным. И когда менеджер видит большое количество шагов в задаче и большую оценку, то он интуитивно охотнее в неё верит, чем если бы эксперт просто назвал большую оценку.
Поэтому искусство оценки задачи — это составление модели её решения. Модель решения задачи представляет собой этапы решения задачи. И чем точнее будет ваша модель, тем более точную оценку вы сможете дать по задаче.
Бонус: плюсы и минусы оценок
В качестве дополнения распишу плюсы и минусы оценок, перечисленных в статье, а также допишу те виды оценки, которые не были озвучены в статье, но сейчас популярны.
Экспертная оценка
Оценка задачи экспертом в области её решения.
Плюсы:
-
эксперт в проф. области задачи ближе всего стоит к решению задачи, поэтому зачастую видит больший объём работ, чем другие участники проекта
Минусы:
-
метод оценки для окружающих — чёрный ящик, непонятно каким способом вычислена оценка
-
чем крупнее задача, тем больше ошибка в оценке
-
нет гарантии, что учтены все детали решения, т.к. нет способа верифицировать, что эксперт полностью вник в задачу и контекст вокруг неё
-
точность оценки сильно зависит от опыта эксперта и знания проекта
-
обычно эксперт не учитывает риски, например, связанные с человеческими ресурсами
-
все эксперты оценивают по-разному: кто-то берёт оценку из опыта решения похожей задачи, кто-то в голове прикидывает «что нужно сделать по задаче», кто-то просто рисует цифру по принципу «непонятно, что там делать, но в этот срок точно должны успеть» и т.п.
-
оценка обычно не учитывает исполнителя, который будет выполнять работу
Экспертная оценка с коэффициентом
Оценка задачи экспертом в области её решения, умноженная на коэффициент. Коэффициент к оценке обычно добавляет менеджер.
Плюсы:
-
все плюсы экспертной оценки
-
величина коэффициента может учитывать риски по задаче (например, непредвиденные ситуации, болезнь сотрудника и т.п.)
Минусы:
-
все минусы экспертной оценки, кроме рисков.
-
сложность в вычислении подходящего коэффициента для каждой задачи
-
чаще всего (из виденного мной на проектах) менеджеры применяют один и тот же коэффициент ко всем задачам, не вычисляя коэффициент под конкретную задачу
Составление дорожной карты задачи и оценка каждого этапа
Составление дорожной карты решения задачи, оценка каждого этапа задачи и суммирование оценок.
Плюсы:
-
можно получить оценку очень близкую к реальным трудозатратам
-
по ключевым точкам решения можно верифицировать какие детали решения учтены, а какие — нет
-
точность оценки мало зависит от опыта эксперта и знания проекта, т.к. дорожная карта — это артефакт, который может быть дополнен, скорректирован другими участниками проекта
-
составление дорожной карты можно делегировать другому участнику команды, а оценку, например, провести более опытному эксперту на проекте
-
декомпозиция задачи как побочный продукт составления дорожной карты
-
шаги решения дают чёткое понимание объёма задачи, это делает процесс оценки и работы над задачей более прозрачным
Минусы:
-
чем крупнее задача и / или чем точнее нужно получить оценку, тем больше требуется трудозатрат на составление дорожной карты
-
оценка обычно не учитывает исполнителя, который будет выполнять работу
-
если руководствоваться принципом единственной ответственности, то, строго говоря, составление дорожной карты и декомпозиция задачи не входит в понятие «оценка»
Оценка путём сравнения с ранее решённой задачей
Сравнить насколько ранее решённая задача по объёму работ меньшебольше оцениваемой задачи.
Плюсы:
(не выявлены)
Минусы:
-
сложный выбор задачи для сравнения
-
часто оценщик плохо представляет объём работ ранее решённой задачи, т.к. обычно не является её исполнителем
-
сложность определения объёма задачи по оцениваемой задачи
-
сложность сравнения двух абстрактных объёмов работ
-
включает все минусы экспертной оценки
Покер планирования (Planning poker, Scrum poker)
Возможно, не стоило сюда включать этот вид оценки, т.к. он чаще всего используется для оценки сложности задачи, а не объёма работы в часах. Но он сейчас довольно популярен и, на мой взгляд, можно использовать его и для оценки количества часов, т.к. концептуально методу всё-равно в каких единицах измерения проводится оценка.
Опишу принцип работы, т.к. из него будут вытекать плюсы и минусы такого метода оценки.
Принцип работы (авторское видение):
В основе работы покера планирования лежит Центральные предельные теоремы (ЦПТ) из теории вероятности. Вкратце:
Сумма достаточно большого количества слабо зависимых случайных величин, имеющих примерно одинаковые масштабы (ни одно из слагаемых не доминирует, не вносит в сумму определяющего вклада), имеет распределение, близкое к нормальному (цит. — wikipedia).
По этой причине в покере планирования важно закрытое голосование и одновременная публикация результатов голосования. Формула, по которой считается сумма слабо зависимых случайных величин (оценок членов команды, участвующих в покере планирования), определяется командой или ведущим покера планирования.
Дальше могут быть разновидности проведения покера планирования, например: комментарии людей, чьи оценки имеют наибольший выброс от общего распределения оценок, высказывания экспертов и дальнейшее переголосование, что может повлиять на оценку за счёт появления доминирующих слагаемых.
Плюсы:
-
в основе приниципа работы заложен математический аппарат
-
оценка привязана к производительности команды, в целом основывается на её опыте
-
в оценке участвует больше одного человека (как эксперты, так могут привлекаться и не эксперты внутри команды)
-
минусы экспертной оценки нивелируются за счёт того, что их оценка рассматривается как случайная величина (справедливо только при первом голосовании, при повторном голосовании это утверждение несправедливо)
Минусы:
-
требуется определённое количество итераций покера планирования, чтобы получить нормальное распределение «оценка — производительность команды»
-
скорость стремления к нормальному распределению зависит от постоянства состава команды. Если в команде часто ротируются люди (нет костяка, который прошёл вместе много итераций покера планирования), то это негативно влияет на точность оценки и скорости стремления к нормальному распределению
-
как правило не учитывается контекст задачи, этапы решения задачи
-
плюсы экспертной оценки нивелируются за счёт того, что они рассматриваются как случайные величины (справедливо только при первом голосовании, при повторном голосовании это утверждение не справедливо)
-
проработка этапов решения задачи, как например, в оценке с применением составления дорожной карты, не предполагается, она должна быть выполнена либо до оценки, либо уже после
-
оценка не учитывает исполнителя, который будет выполнять работу, вместо этого берётся производительность команды в целом
Автор: VladimirPolukeev

