Оценка времени выполнения заданий [закрыто]
Я знаю, что этот вопрос был задан несколько раз здесь/программистам, и это довольно распространенный, классический вопрос:
Как вы точно оцениваете, сколько времени займет выполнение задачи?
Проблема, которая у меня есть, заключается в том, что для точечных задач в Windows я могу дать точные оценки. Для кодирования чего-то нового (например, при использовании API, с которым я не знаком) я не могу точно оценить время, чтобы спасти свою жизнь. Это случай размышления и произнесения первого числа (из дни / недели / что угодно), что приходит мне в голову. Для кода, использующего API, с которым я знаком, и приложений, которые я могу мгновенно сказать, что могу разработать (например, приложение типа блокнота), я мог бы дать точную оценку.
Любая помощь ценится.
Спасибо
4 ответа:
Сосредоточьтесь на фигурах. Когда вы пытаетесь оценить задачу на высоком уровне, она не только пугает, но вы не сможете точно рассчитать все, что будет составлять общее время.
Вместо этого даже не пытайтесь угадать общую сумму (это не только бесполезно, но и может привести к искажению ваших оценок отдельных задач), а скорее сядьте и просто попробуйте подумать обо всех подзадачах, которые составляют задачу. Если они кажутся слишком большими, разбейте их на еще меньшие субмарины. задачи.Как только вы сделаете это, дайте оценку каждой из подзадач. Если любой из них больше, чем около 4 часов, подзадача, вероятно, не была достаточно разбита. Сложите все эти подсчеты. Это ваша оценка.
Использование этого подхода заставляет вас рассудить, что на самом деле требуется для выполнения задачи, и позволит вам получить более точные оценки.
Убедитесь, что вы также думаете о неочевидных шагах, необходимых для выполнения задачи. Если вы пишете часть кода, Вы включили оценки времени для написания соответствующих модульных тестов? Для тестирования кода? Для документирования этого?
При преобразовании часов в дни используйте реалистичные ожидания относительно того, сколько времени вы на самом деле тратите на работу. Общее мнение состоит в том, что разработчик может выполнить 4-6 часов работы в любой 8-часовой рабочий день. Это примерно соответствует моему личному опыту.
Если у вас есть другие члены команды, вы можете попробовать метод под названием планирование Покер . Проще всего, идея состоит в том, чтобы заставить каждого члена команды пойти и оценить каждую из задач индивидуально. Как только это сделано, команда собирается вместе и сравнивает оценки, ища большие отклонения. Это имеет тенденцию выявляться, если задача не была достаточно ясной, если есть члены команды, которые владеют соответствующей информацией, которой нет у других, или если есть различные предположения, сделанные разными членами команды.
Делая свои оценки, будьте внимательны ваши предположения и документировать их как часть оценок. Предполагая x, y, & x, задача q должна занять n часов. Это могут быть такие вещи, как предположение о наличии инженера по контролю качества для тестирования функции, предположение о наличии среды разработки для развертывания функции для тестирования, предположение о совместимости двух сторонних платформ, которые еще не были протестированы вместе, предположение, что функция z, от которой зависит задача, готова к определенной дате... И т.д. Мы делаем тонны эти предположения все время не осознавая их. Документирование их заставляет вас осознавать их и позволяет другим сторонам подтвердить правильность ваших предположений. И если оценки окажутся неверными, у вас будет гораздо больше информации для анализа причин.
Даже следуя всем этим советам, вы все равно будете часто делать неточные оценки, но не чувствуйте себя слишком плохо, потому что наш мозг запрограммирован производить ужасные оценки для абстрактных задач. У нас их множество когнитивных предубеждений, которые влияют на нашу способность оценивать размер задачи и усилия.Я рекомендую прочитать эту статью для получения дополнительной информации и советов:
Http://blog.muonlab.com/2012/04/12/why-you-suck-at-estimating-a-lesson-in-psychology/
Я в основном работал над проектами с "меньшей" длительностью, но что-то, что хорошо работало для меня, - это разбить задачу на достаточно маленькие подзадачи, которые, я думаю, я мог бы реализовать каждый примерно за день. Для некоторых элементов это означает только две или три подзадачи, для других это может означать десятки или сотни. Добавьте некоторый процент накладных расходов, которые тратятся на непроизводительные виды деятельности, некоторые накладные расходы на изучение неправильных направлений, и, надеюсь, вы получите число, которое находится в пределах разумный диапазон конечного результата.
Что я обычно делаю, так это разбиваю задачи на мелкие задачи. самое большое задание не должно превышать 2 дней. оценить небольшие задачи не так уж сложно. каждая небольшая задача имеет свое время тестирования, включенное в оценку, поэтому я не заканчиваю с тонной непроверенного кода в конце проекта.
Разбиение задачи на мелкие части возможно только при наличии высокоуровневого дизайна, в противном случае оценка - это всего лишь приблизительная догадка, которая обычно составляет 2 недели, что является знаменитыми 2 неделями. большинство разработчиков используют;)
Добавление некоторого времени к концу проекта для интеграции-стабилизации-исправления ошибок делает его разумной оценкой.
Подобно тому, что упоминаетсарнольд , разбиение задачи является ключевым...но это может быть сложнее, чтобы свести его к мелкозернистым 1-дневным инкрементам, если вы не понимаете области / технологий, участвующих. В вашем случае я бы предложил следующее (особенно если это явно не похоже на задачу, выполнение которой займет меньше нескольких дней):
1) Во-первых, вам нужно обратиться к своей команде / коллегам, чтобы узнать, могут ли они пролить некоторый свет (и / или если они использовал те же API / технологии, что и вы). Если никто ничего не знает, вам придется признать тот факт, что у вас просто нет достаточно данных, чтобы рискнуть разумной догадкой, и вам придется потратить X дней на исследование (количество времени для исследования должно быть согласовано со сложностью API/домена, с которым вы работаете)
2) в конце времени, отведенного на исследование новой технологии, вы должны быть в состоянии сделать очень простой Привет, мир-это тип приложение, которое использует API (компилирует, связывает и работает нормально). К этому времени вы должны быть в хорошей позиции, чтобы определить, займет ли ваша задача дни, недели или месяцы.
3) главное, что нужно сделать дальше, - это как можно скорееопределить любые основные препятствия/сбои, которые могут сорвать ваши прогнозы...это ключевой момент. Самое худшее, что вы можете сделать, это постоянно идти к своему менеджеру / клиенту в установленный срок и упомянуть, что вам нужно значительное количество дополнительное время на доставку. Они нуждаются в предупреждении как можно скорее, чтобы помочь исправить ситуацию и / или придумать план Б.
И это довольно много it...it это не ракетостроение, но вы в основном предоставляете оценку, как только вы в состоянии дать ее, а затем убедитесь, что вы обновили эту оценку на основе новых, непредвиденных событий, которые оказывают значительное влияние на вашу способность делать ожидаемые даты.