что значит декомпозировать задачи
Что такое декомпозиция целей и как она помогает достигать результатов
Что такое декомпозиция целей
Декомпозиция цели — это её детализация, наглядное разделение комплексной объемлющей цели на многоуровневую иерархию небольших взаимосвязанных задач.
Говоря простыми словами, любая цель подразделяется на несколько уровней задач, а те, в свою очередь, на элементарные действия.
Декомпозиция — это дедуктивный метод перехода от общего к частному. От сложного к простому. Это научная методика, эффективность которой подтверждена высокой результативностью применения в самых разных сферах — от личных спортивных достижений до масштабных индустриальных проектов.
В терминологии тайм-менеджмента принято называть «слонами» крупные цели и задачи. Как проще всего «съесть слона» — достичь большой цели, решить крупную задачу? Нужно «нарезать слона на куски» — произвести декомпозицию целей — и постепенно «съесть небольшими бифштексами», выполняя простые понятные задачи. В идеальном случае «бифштекс» должен быть «съеден» за один присест от 15 минут до 2 часов.
Визуализация декомпозиции
Для визуализации декомпозиции целей используются различные подходы — от структурированного списка в рукописном или электронном виде до сложных таблиц.
Одним из самых удобных методов для наглядной декомпозиции целей являются древовидные интеллект-карты, ментальные карты, Mind Maps. Их можно рисовать на бумаге, либо составлять в специальных редакторах:
Среди них есть простые и сложные, платные и бесплатные, для индивидуальной работы и коллективной.
Инструмент автоматизации контекстной рекламы
Скидка 25% на 3 месяца тарифа «Старт» + индивидуальный практикум по работе с инструментом
Пакет услуг «Быстрый старт email-рассылок» со скидкой 20%
Конструктор для создания чат-ботов, рассылок и автоворонок
Удвой продажи с помощью чат-ботов в мессенджерах. Бесплатно на 21 день.
Скидка 25% на первый месяц работ по SEO + аудит в подарок
Логистический партнер для бизнеса и частных лиц
Скидка 25% на перевозку и доставку от адреса
CRM для e-сommerce и ритейла
Получите до 3 месяцев профессионального тарифа в RetailCRM
Характеристики
Допускается несколько уровней вложенности в подобных структурах. В большинстве случаев оптимальной является декомпозиция до третьего уровня, на котором становится понятно, что конкретно делать.
При планировании в крупных компаниях, холдингах, государственных структурах и международных проектах может применяться декомпозиция вплоть до шестого уровня. Причём начинать следует с видения, миссии и ценностей организации. Из них формулируются стратегические цели, которые далее разделяются на тактические, а уже те, в свою очередь, на функциональные задачи.
Одна из основных задач декомпозиции — получение информации о необходимых ресурсах и требуемом объёме действий для достижения цели. Полезно чётко осознавать какие навыки, компетенции, люди и прочие ресурсы нужны для реализации каждого этапа достижения цели.
В отношении определения и расстановки приоритетов методика декомпозиции целей коррелирует с подходом Дуайта Эйзенхауэра. В первую очередь важно обращать внимание на важность этапов достижения цели, а не на срочные задачи. Когда срочность доминирует над важностью, ограничивается инициатива, сокращается пространство вариантов решения задач и, как следствие, становится меньше возможностей эффективного решения этих задач.
Основные методы декомпозиции целей
Прежде всего, важно сформулировать ключевую идею цели.
Пожалуй, самая эффективная декомпозиция цели достигается при применении методики SMART.
Как известно, по данной технологии цель должна быть:
Когда произведена декомпозиция цели, то алгоритм дальнейших действий становится предельно простым и понятным.
Определяются сроки выполнения каждого из этапов и назначаются ответственные исполнители, обладающие необходимыми знаниями, навыками, компетенциями, полномочиями и прочими ресурсами.
Затем все данные вносятся в систему управления проектами, CRM, таск-трекер или же формируется диаграмма Гантта. Команда приступает к реализации плана для достижения поставленной цели.
Может показаться парадоксальным, но совмещение методики декомпозиции с технологией целеполагания SMART, помогает планировать и в условиях неопределённости. Когда вместо чёткой цели сформулировано только намерение.
При дроблении задач стоит анализировать, возможно ли выполнить каждую из крайних подзадач ветки за короткий период времени — до 2 часов. При обнаружении задач, которые не выполняются за такой промежуток времени, рекомендуется делить их на более мелкие до тех пор, пока все конечные задачи не будут соответствовать данному условию.
Отдельного рассмотрения заслуживает использование методики декомпозиции целей для бизнеса в маркетинге и аналитике. Проще говоря, применительно к воронке продаж. Потому что зная ключевые показатели, такие как средний чек, маржинальность и конверсию каждого этапа, можно производить расчёты, исходя из целей.
Выгоды от использования декомпозиции целей в бизнесе и маркетинге очевидны. Цифр и показателей так много, что в этом легко запутаться: часто возникает хаос в постановке целей. С помощью метода декомпозиции целей легко понять, на какие метрики и характеристики обратить внимание. Например, у руководства появилась задача — увеличить продажи. И тут мы снова возвращаемся к воронке продаж.
Итак, есть конкретная цель — увеличить чистую прибыль, к примеру, на 10%. Чтобы добиться таких результатов, нужно разделить эту амбициозную задачу на подзадачи, а именно разложить на этапы воронки продаж. Как известно, воронка продаж состоит из нескольких стадий.
Возьмем за основу распространенный шаблон воронки. Обычно путь клиента начинается с рекламы, затем он попадает в отдел продаж, а потом совершает покупку. Логично предположить, что на каком-то из этих этапов надо увеличить один или несколько показателей.
К примеру, если увеличить расходы на рекламу в несколько раз, то вырастет и чистая прибыль согласно прогнозам. Однако стоит понимать, что одна и та же рекламная кампания способна выдавать разные результаты: в каком-то случае CTR может быть выше, а где-то ниже. А это, в свою очередь, влияет на количество лидов и завершенных сделок. Тем не менее, это не меняет сути декомпозиции в бизнесе и маркетинге — выяснить ключевые показатели, и на основе этих показателей выстроить эффективную маркетинговую стратегию.
Метод декомпозиции целей можно применить иначе. Предположим, в небольшом городе работает магазин бытовой техники. Его владелец решил, что в новом месяце надо увеличить средний чек : от 5 000 до 7 000 рублей, чтобы увеличить оборот. В таком случае визуализация декомпозиции цели выглядит примерно так.
Есть глобальная задача — увеличить средний чек. Чтобы в клиент покупал больше, есть смысл предложить бесплатную доставку, анонсировать акцию или внедрить гибкую скидочную систему. Таким образом, задача «дробится» на более мелкие задачи, решение которых занимает не так много времени. Так, если владелец магазина планирует бесплатную доставку, то ему следует подумать — за какую сумму чека покупатель получит право доставки до дома.
Поэтому владелец тратит время на поиски баланса: фиксированная сумма должна быть и выгодной для магазина, и привлекательной для покупателя. К этому добавляется еще одна подзадача — договориться с курьерской службой, продумать логистику и далее по списку. То же самое относится и к другим мерам. При этом целостность глобальной задачи не нарушается: она выполняется по ходу движения снизу вверх.
Декомпозиция целей и задач
Декомпозицией в называют разделение целей или задач на отдельные небольшие шаги — подзадачи. Например, задача «навести порядок на кухне» делится на следующие этапы: убрать со стола, помыть посуду, протереть газовую плиту, подмести. А чтобы достичь цели «улучшить физическую форму» нужно заняться физкультурой, сесть на диету и отказаться от вредных привычек.
В этой статье мы выясним, для чего нужна декомпозиция целей и задач, познакомимся с ее основными принципами и узнаем, как ее выполнять.
Зачем нужна декомпозиция?
Декомпозиция очень часто используется в планировании, и это не случайно. Она помогает:
Облегчить выполнение задач. Крупные задачи часто кажутся непомерно сложными, что вызывает у нас приступы прокрастинации. Декомпозиция позволяет разложить такие «страшные» задачи на простые и понятные кусочки. Например, написать большую книгу — довольно сложно, а ежедневно писать по 1000 слов — вполне осуществимая задача.
Оценить реалистичность цели. Во время декомпозиции становится понятно, насколько цель достижима и не нужно ли ее подкорректировать. Например, мы решили научиться виртуозно играть на классической гитаре за три месяца. Но если мы разделим эту цель на отдельные этапы, то увидим, что на ее достижение уйдет как минимум три года.
Составить план достижения цели. Все подзадачи, на которые мы дробим цель — это конкретные шаги по ее достижению. В результате вместо абстрактной мечты у нас появляется подробный план по воплощению этой мечты в реальность.
Оценить ресурсы. В процессе декомпозиции мы узнаем, какие нам понадобятся материалы и инструменты, сколько времени и денег уйдет на каждый этап и каких людей потребуется привлечь для работы.
На самом деле, декомпозиция — это неотъемлемая часть нашего мышления. Приступая к любому делу, мы автоматически пытаемся если и не разбить его на этапы, то хотя бы выделить из него первоочередное действие. А столкнувшись с незнакомым объектом или явлением, мы всегда стараемся мысленно разделить его на составные части.
Другое дело, что в декомпозиция применяется осознанно, а значит и более эффективно.
Основные принципы
Прежде чем углубляться в теорию, давайте немного поговорим об инструменте, которым мы будем пользоваться.
Для разделения целей и задач на подзадачи, мы с вами будем рисовать вот такую диаграмму:
Такая иерархическая структура называется деревом целей. С его помощью можно окинуть свой план одним взглядом, понять, чем его дополнить, и сразу найти его слабые места. Почти все приведенные в этой статье примеры декомпозиции будут представлять собой такие деревья.
В принципе для построения деревьев можно использовать любую программу для создания схем — Microsoft Visio или, например, бесплатный сервис draw.io. Древовидные структуры умеют создавать и некоторые современные органайзеры, например, LeaderTask.
Итак, приступим. В общем виде декомпозиция выглядит так:
Уровень детализации зависит от ваших потребностей. Если вам, например, нужен план ежедневных действий, то остановиться можно на тех задачах, которые занимают от 15 минут до 2 часов.
В процессе декомпозиции важно соблюдать следующие правила:
1. Следить, чтобы записанных подзадач было достаточно для выполнения задачи верхнего уровня. Посмотрите на список подзадач и подумайте: если все это сделать, будет ли задача выполнена? Если нет, то подзадач явно не хватает.
2. Стараться не делить задачи более чем на 7 подзадач. По правилу Джорджа Миллера мы способны за один раз удержать в памяти 7±2 объекта, и если подзадач окажется больше, нам будет труднее воспринимать свои планы. В таких случаях можно разделить задачи на группы по признаку:
Впрочем, последнее правило не является аксиомой: делайте так, как вам удобнее.
Способы декомпозиции
Универсального способа декомпозиции не существует: разные цели и задачи требуют разного подхода. Рассмотрим четыре самых популярных метода, которые могут использоваться как в чистом виде, так и в комбинации друг с другом.
1. Деление на этапы
Этот способ подойдет, если выполнение задачи или достижение цели можно представить как серию последовательных шагов. Например:
Но это очень простой случай: здесь вся работа состоит из одинаковых шагов. Давайте возьмем более сложную цель — «построить дом».
Для начала разделим процесс строительства на главные этапы. Например, на такие:
Теперь каждый из них нужно разделить на этапы поменьше. Для примера сделаем декомпозицию «Фундамента»:
Эти задачи можно детализировать более подробно. Например, для котлована: уложить подушку, смочить, утрамбовать
Декомпозицию обычно продолжают до тех пор, пока не получатся задачи, которые можно органично вписать в ежедневный план. При необходимости запишите все инструменты, материалы и услуги в отдельный список, чтобы посчитать бухгалтерию проекта.
Полученные в результате декомпозиции этапы обычно равномерно распределяют по времени — дням, неделям и месяцам. Например:
Для планирования некоторых целей и задач удобнее использовать диаграмму Гантта.
Советы:
Пометьте задачи, которые можно выполнить в любой момент. Это поможет вам рационально использовать свободное время или периоды вынужденного простоя. Например, многие материалы и инструменты для разных этапов строительства можно приобрести заранее.
Подумайте, можно ли запустить процессы параллельно основной работе. Например, внешнюю обделку дома можно совместить с работой электрика.
По возможности используйте для формулировок. Не всегда это нужно, но часто полезно сделать все промежуточные цели и задачи максимально конкретными и измеримыми.
Если привязываете этапы к определенному времени, не планируйте «впритык». Всегда может пойти не так, и тщательно расписанный план быстро развалится. Для таких непредвиденных случаев закладываете в свой график небольшой резерв времени. Если же все будет хорошо, вы сможете потратить сэкономленное время на выполнение следующих этапов.
2. Декомпозиция измеримых показателей
По сути, это просто разновидность предыдущего способа. Разница лишь в том, что этапами становятся не просто задачи, а некие числа. Такой подход уместен тогда, когда целью являются конкретные и измеримые показатели: уровень дохода, количество клиентов
Давайте рассмотрим один нарочито простой пример.
Предположим, что каждое утро мы выполняем такое упражнение, как отжимания от пола. В настоящий момент мы делаем 4 подхода по 3 отжимания. Наша же цель — выполнять 4 подхода по 20 отжиманий, и на достижение этого показателя у нас есть 2 месяца.
Что ж, цель вполне осуществимая. Допустим, мы хотим ее достичь за 20 тренировок. Откроем Excel и запишем число занятий, начальный и конечный результат:
А теперь просто воспользуемся функцией автозаполнения:
У нас получился простой план тренировок на два месяца. По такому же принципу легко запланировать подтягивания, бег или различные упражнения с весом. Причем декомпозировать можно любые показатели: дистанцию, рабочий вес или скорость.
Увы, с некоторыми целями так просто не получится. Скажем, доходы, количество подписчиков паблика или число посетителей магазина не будут увеличиваться сами по себе. Здесь для каждого значения нужно составить список мер для достижения нужных показателей. Например:
Советы:
Подумайте, с какой прогрессией вы имеете дело — с арифметической или геометрической. Например, график работы над книгой (то есть число написанных слов по дням) может быть только арифметической прогрессией. А вот, скажем, число подписчиков канала YouTube в некоторых случаях может возрастать и в геометрической прогрессии.
Учитывайте и непредвиденные трудности. Иногда удобно иметь сразу два графика: план максимум и план минимум.
3. Дерево зависимостей
Не все цели и задачи можно разложить на последовательные шаги. Иногда для достижения цели требуется комплекс мер, зачастую никак не связанных между собой. Такое обычно бывает, когда нам нужно улучшить: увеличить доходы, усовершенствовать продукт, навести порядок в доме или заняться своим здоровьем.
Предположим, что наша цель — увеличить прибыль розничного магазина. Для начала нам необходимо понять, из чего она складывается и от чего зависит. Представьте, что вам нужно вывести формулу, в которой умножаются или складываются показатели и получается результат. Например, так:
Каждый из этих показателей можно опять же разложить на составляющие. Например:
Часто подобные меры является лишь гипотезами, поскольку мы достоверно не знаем, какой эффект они окажут. Однако в совокупности они неизбежно повлияют на результат.
Советы:
Ранжируйте задачи. Обычно некоторые из них более эффективны для достижения цели, тогда как другие оказывают лишь незначительное влияние. Старайтесь выполнять задачи в порядке их предполагаемой эффективности.
Тестируйте гипотезы, прежде чем вкладывать в них большие ресурсы. Например, прежде чем рассылать коммерческое предложение по всей базе, проверьте его эффективность на небольшом количестве адресатов.
4. Одношаговая декомпозиция
Чтобы двигаться к цели в условиях нестабильности или неопределенности используйте одношаговую декомпозицию. Алгоритм работает так:
1. Думаем над своей целью и вычленяем первоочередную задачу. Обычно это небольшие шаги, продолжительностью не более получаса.
2. Записываем задачу в органайзер.
3. Выполняем задачу.
4. Возвращаемся к пункту 1.
Такая незамысловатая техника будет работать, даже тогда, когда обстоятельства постоянно меняются. И даже если мы вдруг получим новую информацию, которая заставит нас кардинально пересмотреть свои методы, мы сможем безболезненно под нее перестроиться.
Да, при таком подходе нам каждый раз придется серьезно думать над первоочередным шагом, но в этом как раз и заключается преимущество этого метода.
Советы:
Убедитесь, что вы не забудете сделать следующий шаг по проекту. Сделайте проверку выполненных шагов регулярной задачей или добавьте соответствующий пункт в ежедневного обзора.
Оформить это время можно в виде регулярной задачи.
Заключение
Например, декомпозицию в компании можно провести по исполнителям, рыночным сегментам или по видам продукции. Особые способы декомпозиции применяются и в разработке программного обеспечения, например, по платформам или пользовательским сценариям. Если в вашей работе необходимо использовать именно такие методы, обратитесь к специальной литературе.
Вопросы
В каких случаях декомпозиция не нужна?
Всегда ли декомпозиция полезна?
Нет, не всегда. В некоторых случаях она становится лишь очередным поводом для прокрастинации.
Например, человек решил заняться бегом. Но вместо того, чтобы просто начать бегать, он неделями выбирает себе спортивный костюм, кроссовки, составляет маршруты и подбирает подходящие треки для плеера.
В подобных ситуациях лучше отложить детальное планирование, определить первый шаг и начать действовать. Уже потом, если понадобится, можно внести в свои занятия улучшения.
Что делать, если я тщательно разделил цель на подзадачи, а план полностью сорвался? Например, из-за того, что я не предусмотрел какие-то важные нюансы?
Просто провести декомпозицию заново. В этом нет ничего страшного: корректировка планов — это нормальный рабочий процесс. Более того, полезно регулярно выполнять декомпозицию целей с чистого листа, с учетом полученного опыта и новых обстоятельств.
Что делать, если я распределил этапы по дням, но не уложился в сроки?
Если это единичный случай, просто сдвиньте сроки. Если такое повторяется постоянно, значит вы неверно оценили свои возможности или текущие обстоятельства. В этом случае пересмотрите свой план и выделите больше времени на прохождение этапов.
А что делать, если планы постоянно срываются?
В таких случаях лучше использовать одношаговую декомпозицию, то есть планировать лишь первоочередное действие.
Как разделить на подзадачи большую монотонную работу? Например, написание длинного текста, покраску забора, заполнение базы данных?
Такую работу удобнее делить не на подзадачи, а на различные временные отрезки. Воспользуйтесь, например, техникой Pomodoro.
Как справиться с декомпозицией задач и не перестараться
Меня зовут Виктор, я системный аналитик в компании «Спортмастер». И сегодня я хотел бы поговорить о декомпозиции задач и передачи их в разработку. Любой объект состоит из частей, будь это автомобиль или программный продукт. И чтобы собрать любой из этих объектов в единое целое из составных частей, потребуется время. Иногда — даже очень много времени. Особенно, если перед этим вы не просто разобрали основную часть, а решили докопаться до сути на атомарном уровне.
Как видно из приведенных примеров, описание каждой задачи зависит по большей части от фантазии и здравого смысла заказчика. Где-то оно больше, где-то оно меньше, но аналитикам надо как-то с этим работать. Иногда указывают еще и границы функционала, а иногда присылают просто тему. Если передать такую задачу сразу в разработку, на выходе получим что-то непонятное. Что приходится делать?
Идти к заказчику ногами и выспрашивать все требования, уточнять, что именно должно быть на выходе. Правда, бывают еще золотые заказчики, которых, на самом деле, большинство — они пишут все требования у себя в Confluence, поэтому можно в любой момент пойти и спокойно почитать, задать вопросы. И когда уже все понятно с рамками фичи, можно приступать к нарезке задачи.
Зачем нужна декомпозиция
Основная цель декомпозиции заключается в том, чтобы бизнес мог быстро реализовывать все свои хотелки, и чтобы от самой идеи до появления функционала у пользователя проходило как можно меньше времени. Для этого можно делать более мелкие задачки, от которых пусть небольшой, но все-таки рабочий функционал будет доходить до пользователя.
Помимо достижения глобальной цели удовлетворения потребностей пользователя и бизнеса, декомпозиция задач позволяет получать более быстрый фидбэк от заказчика, в правильном ли направлении копает разработка, или же получилось совсем не то, что заказчик себе представлял.
Если задача изначально большая и мы взялись за нее сразу целиком, то мы потратим на нее очень много времени и после комментариев заказчика нам придется все выбросить. Ну а если задача маленькая, день-два работы от силы, — ничего страшного. Переделка займет еще примерно столько же. Второй подход, к тому же, обойдется еще и дешевле. Не говоря уже о сэкономленных нервах с обеих сторон.
Если один функционал разбить на несколько кусочков, разработчики могут работать над ними параллельно. Таким образом мы распараллелим поток и ускорим вывод функционала в прод. Важная штука — при этом задачи должны как можно меньше зависеть друг от друга.
Плюс быстрое тестирование и исправление багов. Опять же, мелкий функционал гораздо проще и быстрее тестировать, чем монструозную махину. И если что-то пойдет не так, на «пофиксить» разработчик потратит совсем немного, и все быстрее заработает.
На этапе разбивки задач вместе с заказчиком можно сразу понять, какой функционал важен прямо здесь и сейчас, чтобы уже начать получать прибыль, что можно оставить на потом, а что, возможно, само отвалится за ненадобностью.
Бизнесу же важно знать, как быстро появится рабочий функционал. И при разбивке на задачи мы можем спрогнозировать и более точно оценить время, которое потребуется на их реализацию, чем когда у тебя один большой фронт работ. Но помимо того, что мелкие задачи легче оценить в плане времени на их проработку, разработчику также проще оценить риски, которые могут возникнуть в процессе работы.
Например, обновились фреймворки, какие-то методы вывели из эксплуатации, проблемы с кодом и прочее. Беря в работу небольшие задачи, мы минимизируем все эти риски, и даже если такая задача что-то заблокирует в потоке, это будет не так критично, как если бы это был здоровенный кусок (который бы заблокировал вообще всё). В случае необходимости можно будет сделать рабочее решение и в бэклог положить техдолг, с которым можно будет разобраться чуть позже, когда проблемы будут решены.
Основные подходы и правила декомпозиции
Существуют два основных подхода к декомпозиции задач — горизонтальный и вертикальный. При горизонтальном задачи делятся по типам работ, по уровням или по компонентам. Например, у нас каждая задача проходит через несколько стадий: фронтенд, бэкенд, базы данных. И при горизонтальном подходе одна задача идет в бэк, вторая во фронт, а третья приводит к изменениям в базе данных.
Чем плох данный подход? Мы не получаем рабочий функционал после выполнения каждой отдельной задачи. Только собрав результаты из трех источников, мы можем получить какой-то результат и фидбэк на него. По этой причине горизонтальную декомпозицию чаще всего не используют.
Гораздо удобнее вертикальный подход, при котором в каждой задаче можно сделать наглядный функционал — задача проходит по всем стадиям и на выходе есть результат, который можно проанализировать, протестировать, показать заказчику и поправить, если надо. И быстренько запустить в работу и использовать.
Если говорить про правила, здесь я выделил всего три. Во-первых, задача должна быть логически завершенной, то есть независимой сама по себе. Она не должна ломать логику вокруг себя и обязательно должна нести в себе хоть какой-нибудь бизнес-смысл, который в результате получит пользователь. При этом не стоит разбивать на части те задачи, которые не несут бизнес-смысла (в идеале их вообще не должно быть).
Во-вторых, результат выполнения одной небольшой задачи должен нести небольшие изменения. Чем меньше изменения, тем быстрее они попадают в общий код, и таким образом код не устаревает. Кроме того, маленькие задачи помогают избежать конфликта между разработчиками при мердже.
В-третьих, не стоит разбивать задачу на совсем уж микроскопические части. Если разбить слишком мелко, очень много времени уйдет на управление этими задачами. На каждом этапе их, возможно, придется переприоритезировать, заново проставлять связи зависимости и вот это всё. Таким образом, скорость разработки не увеличится, а наоборот, резко упадет. Поэтому нужно искать золотую середину.
Способы декомпозиции
В зависимости от источника, количество способов декомпозиции очень сильно варьируется: где-то их указывают всего восемь, где-то десять, где-то двадцать. Я бы хотел остановиться на тех способах, которыми мне приходится пользоваться каждый день на работе.
Несколько потребностей
Этот способ удобнее всего использовать, когда в истории присутствуют союзы «и», «или». Например, потребитель хочет сделать заказ и оплатить его картой или бонусами. Эту задачу можно разделить на три: первая, в которой пользователь делает заказ, вторая, где он оплачивает его картой, и третья, где в ход идут бонусы.
Сценарии использования
Еще один часто встречающийся способ — делить задачи в зависимости от сценария использования. В этом случае одна история представляет из себя один основной путь и несколько альтернативных. Допустим, пользователь хочет купить товар, и это будет основной сценарий. Но есть еще альтернативные пути — он может сразу положить товар в корзину и оплатить, а может захотеть перед покупкой сравнить этот товар с другими. И тогда отдельной задачей мы делаем сравнение товаров.
Возможно, он не хочет покупать прямо сейчас, а отложить куда-нибудь, добавить в избранное, чтобы позже к нему вернуться. Или пользователю понравился товар и уже готов его купить, но его нет в наличии. Значит, надо дать ему знать о том, когда товар появится. И вот таким образом получается четыре сценария.
От простого к сложному
Главная страница сайта «Спортмастер» состоит из баннеров. И самое простое, что мы можем сделать — взять одну картинку и показать ее пользователю. Это самый простой и быстрый способ донести нужную информацию. Дальше мы можем наращивать функционал и добавлять не одну картинку, а три-четыре, которые объединяются в сетку. Это уже отдельная задача.
При таком подходе с каждой последующей задачей функционал должен расти. Мы можем, например, сделать из сетки карусель, а потом добавить какие-нибудь ссылки, тексты, кнопки и остальное. В общем, сначала реализуем самый простой и быстрый в исполнении вариант, а затем движемся к более сложному.
Как раз недавно я занимался похожей задачей по реализации баннера. Баннер должен был висеть на главной управляться из CMS. Если спросить у заказчика, а чем бы именно он хотел управлять, он, не моргнув, радостно ответит — всем. Поэтому здесь было важно немного погрузиться в тему и выделить то, чем нужно управлять прямо сейчас, чем просто часто, а чем почти совсем не пользуются. И таким образом расставить приоритеты по реализации и поделить на задачи.
Операции (CRUD)
Это, наверное, самый распространенный способ декомпозиции. Здесь задачи деляться по операциям Create, Read, Update и Delete. Он подходит для задач, где нужно чем-то управлять или что-то конфигурировать. Например, задача по оформлению заказа делится на четыре более мелкие: создание заказа, его просмотр, редактирование и удаление.
Варианты интерфейса
Используется, когда надо поддержать несколько вариантов интерфейса. Например, сайт должен поддерживать несколько языков. Сначала мы делаем русскоязычную версию. Затем, при запусках в других странах, добавляем английский. Если же в стране используется язык, отличный от английского, то можем добавить и его. В этом случае проще все сделать сначала на одном языке, а потом постепенно добавлять переводы.
Совсем недавно мы завершили проект личного кабинета для юридических лиц, в котором нужна была поддержка мультиязычности. Сроки были сжатые, поэтому изначально сделали все на одном языке, но заложили основу для дальнейшего перевода. Теперь, чтобы добавить поддержку нового языка, нужна всего лишь одна небольшая задача. Если нужно добавить сразу несколько языков, на каждый из них заводится отдельная задача.
Разделение по ролям
Подходит для ситуаций, в которых функциональность подразумевает работу нескольких ролей и групп пользователей. На сайте «Спортмастера» у пользователя могут быть разные роли. Например, пользователи делятся по ролям на авторизованного пользователя, анонимного пользователя, и, допустим, пользователь колл-центра. Последняя роль также может делиться на две — это может быть как рядовой пользователь, так и администратор.
Для каждой роли мы можем сделать отдельную задачу. Начать с отображения для анонимного пользователя, а затем добавить какой-нибудь расширенный функционал в рамках задачи для авторизованного. И не забыть про технические роли операторов колл-центра и функционал для них.
Обработка ошибок
Если сроки сжатые, а минимальный функционал нужен как можно быстрее, можно вынести обработку ошибок в отдельную задачу. Здесь речь идет не о написании тестов, а об обработке ошибок пользователей и систем, с которыми интегрирован сайт. Представим, что мы обрабатываем страницу с каталогом, которая содержит плитку с товарами. В каждой карточке есть описание, фото и дополнительная информация.
Случилось так, что какая-то часть информации не приходит из баз данных.
Возможно, если речь идёт о бренде или материале, то этим можно пренебречь и просто не показать информацию. Но если не дойдет цена или название, стоит ли показывать эту карточку?
Что в такой ситуации делать? Этот вопрос можно вынести в отдельную задачку и затем обрабатывать каждое отдельное поле. То есть, если не пришла цена, то выполняем одно действие, потерялось описание товара — другое. То же самое с ошибками пользователя. Если он ввел что-то некорректно и отобразилась ошибка, например, «Страница не найдена» или ошибка 500, мы должны показать ему конкретную информацию о том, что случилось, и предложить ему сценарий, что он может сделать дальше.
Этот способ также подходит для ситуаций, когда нужно быстро получить обратную связь на функциональность, чтобы решить, оставлять ее или нет.
Статические, затем динамические
Это один из моих любимых способов. Подходит в ситуациях, когда можно реализовать функционал «на заглушках», то есть внешние системы не готовы поддержать функционал. Например, какие-то блоки на главной странице не могут управляться из CMS. Или меню, когда мы делаем его у себя в коде и отображаем пользователю, но при этом им не может управлять бизнес. И чтобы внести изменения, бизнесу надо постоянно ходить в разработку и просить это сделать.
Здесь мы выносим потребности пользователя и получение прибыли в приоритет. Пользователь получает готовый функционал сразу, пусть мы внутри можем испытывать некоторые неудобства. Поэтому мы делим задачу на несколько и сначала делаем новый блок доступным для пользователя, но бизнес им пока напрямую управлять не может. Но затем мы можем интегрироваться с какой-то системой или базой данных, где бизнес сам сможет менять пункты местами и добавлять новые самостоятельно, а мы их будем отрисовывать без участия разработки.
Мы часто используем этот способ: сначала делаем функционал на своих данных, которыми нельзя управлять со стороны, а потом уже добавляем динамику и начинаем получать данные из сторонних систем.
Производительность
Если задача в целом сложная и объемная, непонятно, с какого конца за нее взяться, то производительностью можно пренебречь. В первую задачу вынести готовый функционал, который хоть как-то, пусть медленно, но работал. А следующей задачей сделать ускорение работы. Например, это может быть медленная работа поиска товаров, применение фильтров, получение какой-либо информации
Иногда большая часть усилий вкладывается в быстрое создание функции — первоначальная реализация не так уж сложна. Но можно многому научиться из медленной реализации, плюс это имеет определенную ценность для пользователя, который иначе не смог бы выполнить какое-нибудь важное действие. Во всех этих случаях задачи разбиваются на «заставьте это работать» и «сделайте это быстрым».
Возможные трудности
Если вы решите использовать декомпозицию задач в своих проектах, то скорее всего первой сложностью, с которой вы столкнетесь, будет зависимость задач друг от друга. По моему опыту, именно эта проблема приводит к блокированию всего потока и встречается наиболее часто. Чтобы этого избежать, к декомпозиции стоит подходить ответственно и уделять ей достаточное количество времени.
Еще одна трудность — определить, насколько мелко надо декомпозировать задачу. И здесь границами выступает только здравый смысл. Например, мы берем компонент выбора города. В нем есть кнопки, какой-нибудь текст, поле ввода. Насколько мелко нужно бить эту задачу?
Мы для себя вывели правило, что задача должна проходить по всему потоку не больше, чем за одну неделю (около 40 часов). Речь идет про все стадии: стадию аналитики, разработки, тестирования. Плюс учитываются две стадии разработки бэкенда и фронтенда, включая ревью и тестирование на каждой.
Еще у нас была проблема с тем, что не всегда понятны границы эпика. Недавно нам поставили задачу с оформлением заказа. Где у нее границы? Что должно получиться на выходе? Нам было непонятно, нужно ли нам делать весь функционал до самого конца, или выбрать какую-то часть. Входит ли в этот эпик оплата, или это уже отдельный эпик.
Бывают задачи, с которыми сложно понять, как их декомпозировать и когда. Большую часть задач мы декомпозируем на стадии приема эпика, но бывают ситуации, когда это нужно сделать, например, на этапе аналитики. Мы берем задачу в работу и считаем, что все нужные данные в наших интеграционных системах уже есть, но в процессе анализа выясняется, что либо нас не устраивает формат данных, либо проблема в качестве самих данных, либо требуется доработка со стороны других систем, с которыми мы связаны. Тогда нам приходится делать задачу «на заглушках» и заводить еще один пункт в бэклог, к которому мы приступим уже после того, как решим основные проблемы.
Вот, вроде бы, и всё. Будет здорово, если поделитесь в комментариях историями о том, какой подход к декомпозиции задач используете вы и почему.