Кто оценивает задачу?

Ответ

Оценку задачи (определение её сложности и требуемого времени) обычно проводит разработчик или группа разработчиков, которым предстоит её выполнять. Это делается совместно с тимлидом/менеджером проекта для учета общих зависимостей и рисков.

Процесс и методы:

  • Planning Poker: Командная техника, где каждый участник анонимно дает свою оценку в условных единицах (story points, идеальных днях), после чего обсуждаются расхождения.
  • Обсуждение «за» и «против»: Перед оценкой задача разбивается на подзадачи, обсуждаются технические детали, риски и зависимости от других команд или систем.

Что входит в оценку? Оценивается не только время на написание кода, но и:

  1. Анализ требований и проектирование.
  2. Непосредственная разработка.
  3. Написание и проведение тестов (unit, integration).
  4. Рефакторинг и код-ревью.
  5. Исправление багов, выявленных на этапе тестирования.
  6. Документирование изменений.

Пример подхода к оценке в коде (как метафора планирования):

// Задача: Реализовать многоуровневое кэширование (In-Memory + Distributed)
public class TaskEstimation
{
    // Story Points часто используют последовательность Фибоначчи
    public enum StoryPoints { SP1 = 1, SP2 = 2, SP3 = 3, SP5 = 5, SP8 = 8, SP13 = 13 }

    public StoryPoints EstimateCachingTask()
    {
        // Факторы, увеличивающие сложность:
        bool hasExternalDependency = true; // Зависит от Redis/Azure Cache
        bool requiresEvictionPolicy = true; // Нужна политика вытеснения
        bool isPerformanceCritical = true; // Критично для производительности

        // Совместное обсуждение приводит к консенсусу
        if (hasExternalDependency && requiresEvictionPolicy && isPerformanceCritical)
        {
            return StoryPoints.SP8; // Высокая сложность и риск
        }
        return StoryPoints.SP3; // Средняя сложность
    }
}

Нюансы: Оценка — это не обещание, а прогноз, основанный на текущем понимании. Она должна регулярно пересматриваться по мере прояснения деталей.

Ответ 18+ 🔞

Давай я тебе на пальцах объясню, как эти оценки на самом деле происходят, а то в статьях пишут одно, а в жизни — пиздец какой-то.

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

Как это выглядит в реале:

  • Planning Poker: Все достают карточки с цифрами, типа анонимно. Один выкинул 3, другой — 13. Начинается: «Вася, ты че, еблан, тут на полчаса работы!». А Вася: «Да ты, Петя, сам охуел? Тут же надо с легаси-кодом ебаться, который писал тот уволившийся чувак!». И понеслась.
  • Разбор полётов: Перед тем как цифру назвать, начинают ковырять задачу. «А это точно так надо? А если вот эдак? А кто-нибудь с этим АПИ уже работал? Оно не разъёбывается каждую пятницу?». Обсуждают все подводные камни, пока не станет страшно браться вообще.

А оценивают-то нихуя не одно только писание кода! Туда входит:

  1. Понять, чего от тебя хотят, и спроектировать, как это сделать, не сломав всё к хуям.
  2. Непосредственно самому поколбасить код.
  3. Написать тесты, чтобы потом тебя же не обвинили, что ты всё развалил.
  4. Переписать это три раза после ревью, потому что коллеге не нравится название переменной.
  5. Пофиксить баги, которые вылезут, когда тестировщик начнёт тыкать в интерфейс вилкой.
  6. Написать, что ты вообще сделал, чтобы через полгода самому не охуеть от своего же кода.

Вот, смотри, как это в коде могло бы выглядеть, чисто для прикола:

// Задача: Сделать многоуровневое кэширование (В памяти + Distributed)
public class TaskEstimation
{
    // Story Points — это обычно числа Фибоначчи, типа 1, 2, 3, 5, 8, 13...
    public enum StoryPoints { SP1 = 1, SP2 = 2, SP3 = 3, SP5 = 5, SP8 = 8, SP13 = 13 }

    public StoryPoints EstimateCachingTask()
    {
        // Факторы, от которых хочется плакать:
        bool hasExternalDependency = true; // Зависит от Redis/Azure Cache, который может лежать
        bool requiresEvictionPolicy = true; // Нужно придумать, что выкидывать из кэша
        bool isPerformanceCritical = true; // Если сломается — всем пизда, тебя же и будут гнобить

        // После долгих споров и матов приходим к выводу:
        if (hasExternalDependency && requiresEvictionPolicy && isPerformanceCritical)
        {
            return StoryPoints.SP8; // Задача — жесть, рисков дохуя.
        }
        return StoryPoints.SP3; // Ну, более-менее.
    }
}

Главный нюанс, который все забывают: Оценка — это не клятва кровью. Это хуйня, которую ты сказал, исходя из того, что знал сейчас. Как только начнёшь копать, вылезет столько неожиданного, что первоначальную цифру можно смело умножать на два. Поэтому её нужно постоянно пересматривать, а не тыкать ею всем в лицо как обещанием.