Будучи программистом, вы должны уметь предоставлять своим менеджерам, коллегам и пользователям оценки предстоящей вам работы, чтобы у них было достаточно точное представление о времени, стоимости, технологиях и других ресурсах, необходимых им для достижения своих целей.
Для проведения надежной оценки необходимо владеть некоторыми приемами. Однако сначала следует разобраться, что собой представляют оценки и для чего они могут быть использованы — как ни странно, многие разработчики и менеджеры плохо в этом разбираются.
Вот типичный диалог между менеджером проекта и программистом:
Менеджер: Можешь оценить, сколько тебе нужно времени, чтобы разработать функцию X?
Программист: Месяц.
Менеджер: Это слишком долго! У нас есть всего неделя.
Программист: Мне нужно хотя бы три.
Менеджер: Больше двух я тебе дать не могу.
Программист: По рукам!
В итоге программист предлагает «оценку», приемлемую для менеджера. Но поскольку она как бы сделана программистом, менеджер будет считать, что программист несет за нее ответственность. Для понимания того, что неправильно в этом диалоге, нам нужны три определения: оценки, цели и обязательства:
• Оценка — это приблизительный подсчет или суждение относительно значения, числа, количества или протяженности чего-либо. Это определение предполагает, что оценка является фактической мерой, основанной на надежных данных и прежнем опыте; мечты и пожелания должны быть исключены при ее расчете. Это определение предполагает также, что оценка приблизительна и не может быть дана точно, например, оценка продолжительности разработки не может составить 234,14 дня.
• Цель — это описание бизнес-задачи, которую требуется решить, например «система должна поддерживать одновременную работу не менее 400 пользователей».
• Обязательство — это обещание обеспечить указанную функциональность с определенным уровнем качества к определенному сроку или событию. Например, «функция поиска будет доступна в следующей версии продукта».
Оценки, цели и обязательства не зависят друг от друга, но цели и обязательства должны основываться на надежных оценках. Как отмечает Стив Макконнелл,[18] «главная задача оценок в программировании — не предсказание результата проекта, а определение реалистичности целей проекта и возможности их достижения при правильном управлении». Таким образом, полученные оценки должны обеспечить возможность надлежащего планирования и управления проектом, что позволит заинтересованным участникам проекта брать обязательства исходя из реалистичных целей.
В приведенном выше диалоге менеджер в действительности требовал от программиста не оценки, а принятия обязательства в отношении невысказанной цели, которая была в голове этого менеджера. Когда вам в следующий раз предложат сделать оценку, убедитесь, что все стороны хорошо представляют, о чем идет речь, и тогда шансы на успех ваших проектов вырастут. А вот теперь пора освоить несколько приемов…