Перейти к основному содержимому

Требования и границы задачи

Разобраться, какую проблему на самом деле решает запрос, где проходят её края и что делать не нужно. Всё это происходит до первой строки кода — и определяет, стоило ли вообще его писать.

Почему это важно. Самая дорогая инженерная ошибка — хорошо сделать не то. Такой код проходит code review, выходит в релиз, а через несколько месяцев выясняется, что им никто не пользуется. Никакое качество кода этого не исправит.

Что нужно понимать

  • Какую проблему это решает, для кого и по чему будет видно, что получилось
  • О чём попросили — и что при этом имели в виду
  • Что здесь действительно необходимо, а что попало в требования как чьё-то допущение
  • Что произойдёт в случаях, о которых никто не упомянул
  • Что явно не входит в задачу — и это записано

Ключевые темы

Понять запрос

  • Проблема, которая стоит за предложенным решением
  • Кто пользователь и как он справлялся, пока этого не было
  • Успех как наблюдаемая величина, а не «пользователям понравится»
  • Настоящие ограничения и ограничения по привычке

Края

  • Пусто, первый запуск, один элемент, десять тысяч элементов
  • Сбои: нет сети, нет прав, сессия истекла
  • Параллельность: два устройства, две вкладки, два человека
  • Кому это разрешено — и что происходит, когда не разрешено
  • Миграция данных, которые уже накоплены

Границы задачи

  • Минимальная версия, которая уже приносит пользу
  • Что сознательно не делается — и об этом сказано вслух
  • Расползание задачи: заметить его по ходу, а не постфактум
  • Когда срок фиксирован, урезать объём, а не качество

Записать

  • Столько, чтобы по этому тексту сделал кто-то другой
  • Критерии приёмки, которые можно проверить, а не только оценить взглядом
  • Открытые вопросы помечены как открытые, а не закрыты догадкой
  • Либо поддерживать документ в актуальном виде, либо удалить его

Возражать

  • Назвать цену запроса в тех величинах, которые важны заказчику
  • Предложить вариант, который решает ту же проблему дешевле
  • Отличать «это сложно» от «это неправильно»

Уровни

УровеньКак это выглядит
JuniorРеализует то, что описано, и спрашивает, когда описание непонятно.
MiddleНаходит проблему за запросом, продумывает крайние случаи до начала работы и аргументированно договаривается о границах.
SeniorВлияет на то, что вообще берётся в работу, формулирует измеримый критерий успеха и умеет отказать, не испортив отношений.

Практика

Для начала

  • Спросите «зачем» ещё раз В следующей задаче найдите проблему за запросом, прежде чем писать код.

  • Перечислите края До начала работы выпишите все крайние случаи. Потом сравните с теми, что всплыли по ходу.

  • Определите, что значит «готово» Напишите критерии приёмки, которые сможет проверить кто-то другой.

Дальше

  • Сократите объём вдвое Возьмите запланированную функциональность и найдите версию, которая стоит вдвое меньше усилий и даёт большую часть пользы.

  • Опишите, чего вы не делаете Добавьте явный раздел «в задачу не входит» и посмотрите, сколько споров он снимет.

  • Предложите альтернативу Когда просят что-то дорогое, вернитесь с более дешёвым способом решить ту же исходную проблему.

Проверьте себя

  • Какую проблему решает то, чем вы заняты прямо сейчас, и для кого?
  • По чему через месяц будет видно, что получилось?
  • Какие крайние случаи вы обнаружили только в процессе работы?
  • Когда вы в последний раз сделали то, чем никто не воспользовался?
  • Как отказать запросу, не отказывая человеку?
  • Что на вашем текущем проекте явно вынесено за границы задачи?

Материалы

  • Shape Up — бесплатно доступна онлайн, сильнее всего — часть про shaping: как описать проблему с нужной степенью детализации, прежде чем она станет работой, и как фиксировать срок, а не объём.
  • Jobs to be Done — Кристенсен в HBR. Подход, который отделяет то, о чём человек попросил, от того, чего он пытается добиться.
  • User Story Mapping — Джефф Паттон о том, почему сценарий сначала нужно увидеть целиком и только потом резать на части: иначе накапливается backlog из кусков, которые никогда не складываются в целое.
  • Writing good acceptance criteria — механика проверяемых критериев, со стороны инструментов, выросших вокруг них.
  • Inspired — Марти Каган о том, как на самом деле принимаются продуктовые решения. Читать стоит, даже если такой должности у вас никогда не будет.