Приоритизация задач. Высшая математика или легкая разминка перед завтраком?

8 ноября
Сергей Бережной
Приоритизация задач. Высшая математика или легкая разминка перед завтраком?
Это первая статья из цикла об основах, методиках и ошибках приоритизации. Сейчас поговорим о сложностях приоритизации. А в следующей статье разберем, какие ошибки подкидывает нам наш мозг, когда дело касается сложного выбора.

Мы создаем ПО. Очень часто наши идеи сильно превышают возможности команды и бюджета. Совсем не сложно собраться «в кругу друзей» и методом анализа, опроса пользователей и заинтересованных лиц, мозгового штурма, потолочного озарения и других методик получить очень длинный список требований, пожеланий, рекомендаций и фич к вашему продукту.

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

Что же такое приоритизация?

Определение, которое дает Wikipedia: «Приоритизация — понятие, показывающее важность, первенство. Например, приоритет действий определяет порядок их выполнения во времени». Если пойти еще дальше в этимологию слова, увидим слово “priority” («предшествующий»), еще дальше — “prior” («передний», «прошлый», «старший»).

Из определения становится понятно, что основная цель приоритизации — понять, «что важнее чего». После того как мы каким-то образом это поняли, результаты приоритизации нужно как-то закрепить или задокументировать: расставить в порядке приоритета или наделить особыми свойствами (номер, вес, важность, срочность и т. д.).

Сложности приоритизации

Выбор измерения

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

Даже на простом примере можно проиллюстрировать сложность выбора измерения.

Вот представьте: вы проводите семинар для группы участников, и вас до начала занятий просят провести ранжирование (это синоним приоритизации) в группе. У вас очень немного параметров, чтобы сделать это качественно, и все они, так или иначе, связаны с внешними атрибутами: алфавитный порядок фамилий, возраст, рост. По этим измерениям мы сможем легко расставить приоритет. И даже повторения будут не страшны, т. к. их не должно быть много.

А вот уже «пол» и «цвет глаз» будут плохой шкалой приоритизации. Слишком много повторений, и непонятно, что важнее — синие или темно-серые глаза. Скорее, это параметры группировки, а не приоритизации.

По внешним признакам легко провести ранжирование. Но, когда вас попросят оценить их знания и потенциал в теме семинара, ваша предыдущая приоритизация уже не имеет смысла, и нужно выбирать новые параметры и новые способы их проверить.

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

  • Сравнимость. Получив два значения на шкале мы должны точно знать, что лучше и что хуже. Прибыль в 20 у.е. лучше прибыли в семь.
  • Генеральность. Все объекты сравнения должны иметь свойство этой шкалы. Работу землекопа и программиста мы можем оценить только через шкалы время, стоимость и т. д. Нет смысла сравнивать их производительность по «количеству операций в час».

К сожалению, для многих процессов, действий или даже предметов, сравнение через единую шкалу — очень малоценно. Вспомните войну фанатов устройств от Apple и Google! Там в ход идут десятки и может даже сотни измерений, которые выходят за рамки физических и технических характеристик.

Комбинирование измерений

Да, многие вещи в нашей жизни достаточно сложны. Поэтому выбор по одной шкале практически невозможен. И нам приходится выбирать сразу несколько измерений и делать достаточно сложные операции, которые в математике называют «факторным анализом».

Признаться, я тоже не думал, что этот раздел математики мне когда-то пригодится, а тут, оказывается, мы делаем это каждый день!

Пример. Как бы мы выбирали автомобиль? Он достаточно сложный продукт и, обычно (кроме случая, когда «очень хочется красненький», выбирают по нескольким шкалам:

  1. Мощность.
  2. Внешний вид.
  3. Удобство салона.
  4. Вместительность.
  5. Комфорт вождения.
  6. Безопасность.
  7. Цена.
  8. И т. д.

Тут то и начинается «ад комбинаторики». Во-первых, надо понять, какое измерение нам важнее всего («OMG, это же приоритизация для измерений! Это рекурсия какая-то»). Во-вторых, многие шкалы очень относительны. Как измерить удобство салона или комфорт вождения? В-третьих, неясен подход к сравнению всех показателей: лучше мощность с убогим внешним видом и высокой безопасностью или хорошая цена при средних параметрах?

Чтобы приоритизация по нескольким измерениям была успешна, нам опять нужны несколько условий:

  • «Вес» или приоритет каждой шкалы в общем списке измерений. Что важнее: «цена производства» или «интеграция с новой системой»?
  • «Вес» каждого значения внутри шкалы. «Низкая цена» побьет «плохой внешний вид» или нет?
  • Единая «формула», которая позволит собрать эти параметры и отобразить в одномерном пространстве (опять привет «факторному анализу»). Да, именно в одномерном, т. к. приоритет — ответ на вопрос «это важнее этого» по одной шкале :).

Вот как раз выбор единой «формулы» — камень преткновения во всех подходах к приоритизации задач, фич, идей и т. д. И не существует единой шкалы или формулы, которые подходили бы к любой приоритизации.

Задача любой приоритизации — найти «достаточно подходящие» измерения и интегральную формулу, которые подходят для быстрого решения большинства вопросов расставления приоритетов. Для тех задач, которые не попали в «большинство», единственное решение — живое обсуждение.

Нашим инженерным привычкам очень сложно смириться с мыслью, что не существует универсальной формулы. Нам хочется верить, что есть единый закон, который даст нам ответ. Но (по крайней мере, пока), этот подход не найден, и предлагаются десятки методик и формул проведения приоритизации, о которых и пойдет речь ниже.

Обсуждения

Теперь самая главная мысль, которую хотелось бы раскрыть в статье. Все методики приоритизации созданы для упрощения обсуждения приоритетов со всеми заинтересованными лицами. Заметьте: не заменить обсуждения техниками или формулами, а упростить и наполнить содержательными аргументами!

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

Наша цель — не только расставить правильные коэффициенты, но и убедиться, что такая расстановка, как минимум, приемлема для других участников, а, как максимум, полностью поддерживается ими.

Вернемся к примеру с покупкой авто. Когда вы делаете взвешенный анализ по 10 параметрам, все может сложиться вполне качественно, и вы подберете вес параметра «мощность двигателя» так, чтобы точно победила машина с приемистым движком. Но попробуйте подключить к обсуждению друзей или семью. Тут вес параметров у каждого будет свой. И, если вы не выслушаете пожелания этих участников, это может привести к конфликтам, недовольствам и даже к плохому выбору. Отец может уточнить: «А как автомобиль будет вести себя зимой, особенно на бездорожье?» И окажется, что температурный режим выпал из ваших измерений. Супруга может спросить о креплениях для детских кресел и на ваше утверждение «так у нас нет детей», вполне возможно, услышать: «Так, может, пора задуматься?» И внезапно, с помощью приоритизации и выбора одного продукта вы узнаете о многом другом :).

Чтобы обсуждение было эффективным, есть несколько простых правил:

  1. Услышать всех. Каждый должен высказать комментарии и замечания по поводу приоритетов. И метод молчаливого согласия тут скорее мешает, чем помогает.
  2. Быть открытым к изменениям. Шкалы и приоритеты меняются под действием многих факторов. И цель обсуждения — понять, что пора вносить изменения.
  3. Минимизировать негативные ощущения участников группы: «меня игнорируют», «они не понимают, что это важно», «думают только о себе» и т. д. Это достигается неассертивным и неагрессивным обсуждением проблем каждого участника.

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

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

Как применяется приоритизация в проектах разработки программного обеспечения?

Переходя от теории к практике, в нашей индустрии есть множество техник проведения приоритизации.

Есть очень хорошая статься (Eng), которая дает краткое описание 20 техник приоритизации продукта. Хорошее, но далеко не полное собрание техник, которые открывают глаза на разнообразие подходов. Автор статьи идет еще дальше и пытается систематизировать и классифицировать методы по двум измерениям, что сильно упрощает понимание.

Оказывается (!), наши потуги каждый раз придумать подход к приоритизации можно очень облегчить :)

Статья не покрывает всех техник приоритизации. Она дает быстрое описание и ссылки на подробные инструкции. Однозначный must read для ознакомления! Запланируйте себе спокойные 30–40 минут на чтение, в том числе, и комментариев, которые содержат ссылки на другие техники.

В качестве упражнения, попробуйте в каждой из техник определить измерения и интегральную формулу, которую предлагают для конечной «одномерной» приоритизации.

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

Вывод

Приоритизация — сложная задача. В наших проектах мы постоянно (ежедневно, еженедельно, ежемесячно) решаем непростую задачу многофакторного анализа и структуризации. И, пока живет и развивается продукт, эта задача не заканчивается.

Правильная приоритизация построена на осознанном подходе к выбору измерений и «формул» для объединения этих измерений. Не существует ни одного универсального правила, и для каждого проекта вам придется измерения и формулы подбирать заново.

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

Стоит напомнить еще раз, что все эти методики направлены на то, чтобы структурировать ваши обсуждения и сфокусироваться на главном. Общение с командой, пользователями и заинтересованными лицами (они же stakeholders) — ключ к правильному расставлению приоритетов, которые вы никогда не получите, просто применив любую комбинацию описанных выше техник.

Общайтесь, задавайте сложные вопросы, добирайтесь до сути вопроса «Почему это важно для вас сейчас?» и тогда у вас будет прекрасно сформированы приоритеты.