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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор оригинала - [Giovanni Asproni](http://programmer.97things.oreilly.com/wiki/index.php/Giovanni_Asproni)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://97-things-every-x-should-know.gitbook.io/97-things-every-programmer-should-know/ru/thing_90.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
