Учитесь оценивать
(В оригинале - Learn to Estimate)
Будучи программистами, вам нужно быть способными предоставлять руководству, коллегам и заказчикам оценку для выполняемых вами задач, чтобы они могли представить требуемое количество времени, средств, технологий и других ресурсов для достижения своих целей.
Чтобы делать правильные оценки, необходимо знать некоторые техники построения таких оценок. Однако прежде всего необходимо понять, что же представляет собой оценка и для чего она должна использоваться. Как бы странно это не звучало, но большинство разработчиков и менеджеров этого не понимают.
Часто можно услышать вот такой диалог между менеджером (ПМ) и программистом:
ПМ: Ты мог бы сделать оценку, за сколько времени ты сделаешь такую-то функциональность?
Программист: За месяц.
ПМ: Это слишком долго! Функциональность должна быть готова через неделю!
Программист: Меньше чем за три никак не получится!
ПМ: Больше двух я никак не могу выделить!
Программист: Хорошо, договорились.
Чтобы понять, что здесь не так, надо дать определения для трех вещей: оценки, цели и обязательства.
Оценка – это примерный подсчет или суждение о количестве чего-либо, будь то стоимость, количество, объем или что-нибудь еще. Это определение предполагает, что оценка – это измерение, основанное на фактах: исходных данных и предыдущем опыте. Желания и хотения не должны влиять на оценку. Из определения также следует, что оценка не может быть точной. Разработчик не может оценить время выполнения задачи в 234.14 дня.
Цель – это выражение желаемого на языке предметной области, например «Система должна поддерживать не менее 400 пользователей одновременно».
Обязательство – это обещание доставить определенную функциональность определенного качества к определенному сроку или событию. Например, «Мы добавим поиск в следующем релизе продукта».
Оценки, цели и обязательства друг с другом не связаны, но при этом цели и обязательства должны быть основаны на озвученных оценках. Как заметил Steve McConnell, «Основная цель оценок в разработке – не предсказать дату завершения проекта, а определить, являются ли цели проекта достаточно реалистичными, чтобы проект мог их достигнуть». Таким образом, цель оценок – сделать возможным планирование и адекватное управление проектом, позволяя в результате давать конкретные обязательства всем вовлеченным сторонам.
В вышеупомянутом диалоге менеджер на самом деле спрашивал об обязательствах, основанных к тому же на несформулированных целях, существующих лишь в его голове, а вовсе не об оценках. Когда вас в следующий раз попросят предоставить оценку, убедитесь, что все понимают, о чем на самом деле идет разговор – и у вашего проекта повысятся шансы на успех. А теперь пришло время поговорить о методиках…
Автор оригинала - Giovanni Asproni