Development

Учитесь оценивать

(В оригинале – Learn to Estimate)

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

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

Часто можно услышать вот такой диалог между менеджером (ПМ) и программистом:

ПМ: Ты мог бы сделать оценку, за сколько времени ты сделаешь такую-то функциональность?

Программист: За месяц.

ПМ: Это слишком долго! Функциональность должна быть готова через неделю!

Программист: Меньше чем за три никак не получится!

ПМ: Больше двух я никак не могу выделить!

Программист: Хорошо, договорились.

Чтобы понять, что здесь не так, надо дать определения для трех вещей: оценки, цели и обязательства.

Оценка – это примерный подсчет или суждение о количестве чего-либо, будь то стоимость, количество, объем или что-нибудь еще. Это определение предполагает, что оценка – это измерение, основанное на фактах: исходных данных и предыдущем опыте. Желания и хотения не должны влиять на оценку. Из определения также следует, что оценка не может быть точной. Разработчик не может оценить время выполнения задачи в 234.14 дня.

Цель – это выражение желаемого на языке предметной области, например «Система должна поддерживать не менее 400 пользователей одновременно».

Обязательство – это обещание доставить определенную функциональность определенного качества к определенному сроку или событию. Например, «Мы добавим поиск в следующем релизе продукта».

Оценки, цели и обязательства друг с другом не связаны, но при этом цели и обязательства должны быть основаны на озвученных оценках. Как заметил Steve McConnell, «Основная цель оценок в разработке – не предсказать дату завершения проекта, а определить, являются ли цели проекта достаточно реалистичными, чтобы проект мог их достигнуть». Таким образом, цель оценок – сделать возможным планирование и адекватное управление проектом, позволяя в результате давать конкретные обязательства всем вовлеченным сторонам.

В вышеупомянутом диалоге менеджер на самом деле спрашивал об обязательствах, основанных к тому же на несформулированных целях, существующих лишь в его голове, а вовсе не об оценках. Когда вас в следующий раз попросят предоставить оценку, убедитесь, что все понимают, о чем на самом деле идет разговор – и у вашего проекта повысятся шансы на успех. А теперь пришло время поговорить о методиках…

Автор оригинала – Giovanni Asproni