Как отвечать, когда просят оценить сроки?



Программистов постоянно спрашивают: «Сколько это займёт?». Зачастую этот вопрос сопровождают следующие факторы:

Требования неясны. Никто не сделал глубокого анализа всех последствий;
Новая фича может что-нибудь сломать в существующем коде, и вы сразу начинаете думать о том, сколько всего вам возможно придётся отрефакторить;
У вас есть незаконченная работа с предыдущих проектов, и вам приходится учитывать её при расчёте;
«Когда всё будет готово?» Что значит это размытое «готово»? «Готово» в смысле «когда закончу писать код» или «когда люди уже начнут использовать софт»?
Иногда, вне зависимости от осознания всех этих вещей, «программерская гордость» заставляет нас указать или принять сроки короче тех, которые мы для себя рассчитали. Особенно часто такое бывает, когда чувствуешь давление из-за приближающегося дедлайна или завышенных ожиданий руководства.
Многие из этих организационных проблем не так просто решить, но, тем не менее, когда вас спрашивают о сроках, от вас ожидают обоснованный ответ. Это часть вашей работы. Нельзя просто ответить «я не знаю».

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

Пользователь Stack Exchange спросил у других программистов, какому процессу они следуют при оценке и какие подходы могут при этом пригодиться. Вот что рекомендуют опытные программисты:

Из книги «Программист-прагматик. Путь от подмастерья к мастеру»:

Что сказать, если вас просят оценить что-либо

Говорите «Я отвечу позже».

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

В этом разделе авторы советуют выполнять следующую процедуру:

Насколько точный должен быть ответ? Если вы скажете, что на проект вам потребуется 5–6 месяцев, то заказчик вряд ли обратит внимание на то, что вы сдали проект в начале седьмого месяца. Но если вы установили срок в 150 дней, то просрочка дедлайна до 180 или 210 дня будет восприниматься совсем иначе;
Убедитесь, что понимаете, о чём вас просят. Определите объём работы;
Постройте модель системы. Это может быть ментальная модель, диаграмма или существующие записи данных. Декомпозируйте эту модель и сделайте оценку на основе её компонентов. Каждому компоненту присвойте время на выполнение и возможное отклонение;
Сделайте оценку на основе вашей модели;
Отслеживайте сроки выполнения и срывы этих сроков. Записывайте информацию о проблеме, которую вы оцениваете, и ваш прогноз по ней;
В оценку можно включить ещё разработку и документирование требований или изменения в их спецификациях, создание и обновление проектных документов, а также проведение тестирования (модульного, интеграционного и приёмочного) и создание или обновление руководств пользователя. Если вы работаете с кем-то вместе, то много времени будет отнимать связь (телефонные звонки, электронные письма, совещания), а также слияние кода. Если вам хотят поручить объёмное задание, то при подсчёте сроков учитывайте другую работу, время на отдых (праздники, выходные, больничные), встречи и всё остальное, что может на них повлиять.