Содержание
- Подробно о том, что такое декомпозиция
- Атомарность
- Зависимость
- Контроль времени и ресурсов
- Назначение ответственных
- Мониторинг прогресса
- Простота коммуникации
- Какие виды декомпозиции бывают?
- Декомпозируем поэтапно
- Этап 1. Определение целей и требований
- Этап 2. Разбиение на подзадачи
- Этап 3. Определение зависимости
- Этап 4. Определение времени и ресурсов
- Этап 5. Порядок реализации
- Этап 6. Распределение ответственности
- Этап 7. Отслеживание и обновление
- Пример декомпозиции
- Как нужно описывать задачи?
- Epic (Эпик)
- User Story (Пользовательская история)
- Task (Задача)
- Вместо вывода
Подробно о том, что такое декомпозиция
Декомпозиция — это разбиение большого задания на несколько составляющих, которые легче выполнять и контролировать. Она позволяет:
- Сделать цели проекта более понятными для сотрудников.
- Повысить качество менеджмента.
- Оценивать время, затраченное на реализацию программы, более точно.
Значимый плюс декомпозиции в том, что она делает работу упорядоченной и ясной. Сотрудникам очевидно, кто и за какую задачу отвечает. Им становится проще отслеживать результат, находить возможные ошибки и планировать дальнейшие действия.
Приведем наглядный пример того, как работает декомпозиция в обыденной жизни. Представьте, что вам нужно купить продукты. Сначала вы определяетесь, каким образом вы это сделаете: закажете доставку или пойдете в магазин сами. Допустим, вы выбрали второй вариант. Вы находите торговую точку, в которую хотите отправиться, узнаете, работает ли она в нужное время. Далее обращаете внимание на погоду, чтобы правильно подобрать одежду и обувь. После этого, вероятно, составляете список покупок. Таким образом весь процесс приобретения продуктов вплоть до вашего возвращения с ними домой разбивается на мелкие подзадачи.
В рамках реализации ИТ-проектов стоит учесть несколько аспектов, которые ассоциированы с декомпозицией:
Атомарность
Задача делится на несколько атомарных заданий, которые легче решить. Реализовывать такие составляющие можно в разное время, отдельно одну от другой. Атомарная задача из повседневной жизни — вождение машины. Оно предполагает руление и переключение передач — два тесно связанных друг с другом неавтономных процесса.
Зависимость
В ходе определения подзадач нужно выявить существующие между ними зависимости. Это позволит понять, в какой последовательности выполнять работу. Как результат, не будет задержек процесса. Снова приведем автомобильный пример. Перед тем как управлять автомобилем, нужно сдать на права, убедиться в том, что машина заправлена и технически исправна.
Контроль времени и ресурсов
Подзадачи на основании уже описанной их атомарности можно проанализировать отдельно друг от друга — для каждой их них определить ресурсы, нужные для выполнения, в том числе временные. Это позволяет более эффективно управлять проектами и формировать бюджеты. Продолжим приводить примеры, связанные с автомобильной темой. Чтобы водить транспортное средство, нужно выучиться в автошколе, потратив на это несколько месяцев и некоторую сумму денег, сдать экзамен, который продолжается примерно полтора часа, заплатить госпошлину за оформление водительского удостоверения.
Назначение ответственных
Каждое атомарное задание выполняет отдельный специалист или команда, отвечающая за качество результата и своевременность сдачи. Так, перед вождением нужно произвести техобслуживание машины, для чего лучше привлечь соответствующего профессионала, и планирование маршрута, которым может заняться сам водитель.
Мониторинг прогресса
Так как все задачи являются конкретными шагами, их реализация может быть эффективно проконтролирована с целью обеспечения исполнения проекта в надлежащий срок. Передав транспортное средство на техническое обслуживание, вы, несомненно, уточните, какое количество времени необходимо специалисту для выполнения работы, а по истечении обозначенного отрезка возвратитесь в автосервис, чтобы получить свою машину и проверить результаты оказанной услуги.
Простота коммуникации
Разбиение проекта на подзадачи упрощает общение между коллегами, потому что каждый участник команды понимает свой объем работ и знает, что конкретно от него зависит.
При Agile-подходе стоит учитывать еще и принцип равномерности. Последние в декомпозиции задачи должны быть максимально схожи по необходимым ресурсам и времени. Это упрощает планирование и повышает продуктивность коллектива.
Какие виды декомпозиции бывают?
Тип декомпозиции подбирается с учетом особенностей проекта. Выделяют такие ее разновидности, как:
- Функциональная. Предполагает разбивку проекта на функциональные части. К примеру, создание веб-приложения состоит из разработки интерфейса, настройки базы данных и серверной логики, тестирования и деплоя, то есть процессов, которые реализуют специалисты из разных областей — дизайнеры, разработчики, тестировщики и системные администраторы.
- Иерархическая. Решение общей задачи разделяется на уровни и подуровни. Главная характеристика этого типа декомпозиции — в процессе заняты специалисты из одной сферы. Например, создается страница входа в приложение, для которой необходимо разработать формы регистрации, авторизации и восстановления забытого пароля. Все эти подзадачи в любой последовательности могут осуществить люди, имеющие одну специальность.
- Последовательная. Выполнение задачи делится на стадии, для каждой из которых выделяются определенные ресурсы. Например, сначала проектируется база данных, потом она разрабатывается, а после этого заполняется информацией. Эти действия реализует один профессионал шаг за шагом.
- Процессная. Широкий подход, который предполагает выделение отдельных шагов, помогающих реализовать проект. Например, создание ПО включает в себя анализ, проектирование, разработку и прочее. Состав таких шагов зависит от специфики проекта.
Решая различные задачи, нужно правильно их оценивать и подбирать ту декомпозицию, которая подходит для конкретного проекта.
Декомпозируем поэтапно
Чтобы сполна использовать преимущества декомпозиции, рекомендуем организовывать работу поэтапно.
Этап 1. Определение целей и требований
Четкое понимание того, для чего нужно реализовать проект, дает возможность определить то, что для этого нужно предпринять. Этот шаг помогает сформировать правильную декомпозицию.
Этап 2. Разбиение на подзадачи
Одну большую задачу решать сложно, можно допустить массу ошибок. Поэтому лучше разбить ее на несколько простых и понятных подзаданий, выполнение которых занимает меньше времени.
Этап 3. Определение зависимости
Нужно понять, в какой последовательности будут выполняться подзадачи. Это важно, потому что осуществление некоторых шагов прямо зависит от предыдущих. Так легче планировать и распределять работу.
Этап 4. Определение времени и ресурсов
Важно узнать, сколько времени и ресурсов нужно для решения каждой подзадачи. Это поможет сформировать общие трудозатраты проекта.
Этап 5. Порядок реализации
Нужно на начальном этапе определить, в какой последовательности будут выполняться подзадачи. Следует учесть дедлайны, требования к бизнесу и прочие характеристики, которые влияют на проект.
Этап 6. Распределение ответственности
Для каждой подзадачи назначаются свои исполнители, которые несут ответственность за качество и своевременность ее выполнения. Сотрудникам так проще понять зону своих и чужих обязанностей.
Этап 7. Отслеживание и обновление
Важно следить за статусом каждой подзадачи и обновлять его по мере реализации. Это позволяет своевременно обнаружить проблемы и исправить их.
Данные этапы помогут разделить крупное задание на составные части и выполнить его более быстро и качественно.
Пример декомпозиции
Подробно разберем пример функциональной декомпозиции задачи «Разработка функции добавления комментариев к постам в социальной сети».
- Исследование и анализ требований
- Проанализировать ожидания пользователей относительно функции оставления комментариев.
- Оценить аналогичную функцию в других социальных сетях.
- Определить ключевые функциональные и нефункциональные требования к процессу комментирования.
- Дизайн интерфейса
- Разработать макеты и прототипы интерфейса для публикации комментариев.
- Создать внешнее отображение и правила взаимодействия частей интерфейса в процессе написания, редактирования и публикации комментариев.
- Создать бэкэнд
- Разработать API для комплексного управления и добавления комментариев.
- Создать базу данных для хранения комментариев и их привязки к конкретным постам и людям.
- Составить бэкэнд-логику для анализа запросов на работу с комментариями.
- Создать фронтенд
- Разработать элементы пользовательского интерфейса для публикации комментариев.
- Сформировать последовательность действий для добавления комментариев через интерфейс.
- Создать функции управления комментариями.
- Тестирование
- Составить и запустить модульные и интеграционные тесты для бэкенда и фронтенда.
- Вручную протестировать процесс комментирования на разных устройствах и в браузерах.
- Протестировать безопасность, чтобы обнаружить слабые места в системе.
- Документы
- Составить документы для созданных API и интерфейсов.
- Составить пользовательские инструкции по оставлению комментариев.
- Разработать технические документы для разработчиков.
Любую из перечисленных подзадач можно разбить на более мелкие задания при необходимости.
Покажем наглядно, как можно разделить крупную задачу на Epic, User Story и Task.
- Epic
- Название: Разработка функционала для добавления комментариев к постам в социальной сети.
- Описание: Разработка возможности для пользователей комментировать посты в социальной сети.
- User Story
- Название: Пользуюсь соцсетями и хочу писать комментарии, чтобы высказать свое мнение под постом или наладить общение с другими людьми.
- Критерии приемки:
- пользователь видит чужие комментарии,
- пользователь может оставить комментарий,
- пользователь может удалить или изменить свой комментарий.
- Task
- Название: Оценка требований, выдвигаемых к процессу оставления комментариев.
- Описание: Анализ пожеланий юзеров и схожих функций на других платформах с целью выявить ключевые требования.
- Ответственный: Николай.
- Допустимые сроки: 2 дня.
- Критерии завершения:
- Четко обозначены ключевые пользовательские требования к функции комментирования.
- Проанализированы подобные решения в других социальных сетях.
- Task
- Название: Создание API для менеджмента комментариев.
- Описание: Разработка API для комплексной работы с комментариями.
- Ответственный: Никита.
- Допустимые сроки: 3 дня.
- Критерии завершения:
- Созданы эндпоинты для комплексной работы с комментариями.
- API протестирован.
- Task
- Название: Разработка элементов пользовательского интерфейса для комментариев.
- Описание: Создание таких элементов страницы, которые помогут выводить комментарии под постом и оставлять новые комментарии.
- Ответственный: Анна.
- Допустимые сроки: 3 дня.
- Критерии завершения:
- Создан механизм оставления комментариев.
- Реализован механизм для отображения комментариев.
Так, мы разбили основную задачу на несколько подзадач и дали необходимые вводные с точки зрения пользователя. В результате общее задание стало более понятным и управляемым.
Как нужно описывать задачи?
Epic (Эпик)
Рекомендуем учесть следующие аспекты:
- Название эпика. Оно должно быть коротким, содержательным и полностью отражающим суть задачи.
- Описание эпика. Нужно емко и понятно для всех сотрудников сформулировать главную цель, которую следует достичь в ходе работы.
- Цель эпика. Важно уточнить, какую проблему удастся решить при помощи эпика. Это позволит коллективу понять, как задача вписывается в общую концепцию проекта.
- Ожидаемые результаты. Они должны быть измеримыми и понятными. Например, снижение времени обработки запросов на 20%.
- Сроки и бюджет. Уточните, какое количество времени и финансов допускается потратить на реализацию эпика. Это задаст определенные рамки работы для коллектива.
- Стейкхолдеры. Упомяните всех заинтересованных лиц и их пожелания в рамках проекта. Это поможет сотрудникам учитывать интересы всех сторон во время работы.
- Приоритеты. Обозначьте, какова срочность выполнения эпика, чтобы команда могла планировать работу.
Эпик должен быть актуальным и содержать только точную информацию, поэтому его нужно периодически обновлять. Особенно это важно делать, когда поступают новые вводные.
User Story (Пользовательская история)
User Story должна в полной мере отражать основные требования пользователя. Чтобы описать их верно, возьмите во внимание следующее:
- Название. Оно должно содержать основное пользовательское требование.
- Описание. В нем важно отразить, что именно человек хочет получить от системы. Укажите ситуацию, при которой будет происходить оценка функциональности.
- Критерии приемки. Опишите, по каким признакам можно будет понять, что требования пользователя к работе объекта соблюдены, а желаемые результаты — достигнуты.
- Бизнес-значение. Стоит понять, почему пользовательская история важна. Это позволит правильно установить приоритетность задач.
- Стейкхолдеры. Нужно назвать заинтересованных лиц, которые имеют отношение к пользовательской истории, и суть их вовлеченности. Коллектив будет лучше понимать, чьи ожидания важно учесть в работе.
- Приоритет. Укажите важность конкретной пользовательской истории, чтобы сотрудники понимали, как быстро ее нужно решить.
Пример: Название: добавление кнопки «Лайк» под постом.
Описание: я активно пользуюсь социальными сетями и хочу иметь возможность выразить свое одобрение контента при помощи лайка.
Критерии приемки:
- Нажатие кнопки «Лайк» под постом увеличивает общее число лайков.
- Поставить лайк под постом можно только один раз.
- Изменение количества лайков при нажатии на кнопку отображается без перезагрузки страницы.
Бизнес-значение: кнопка «Лайк» дает возможность людям быстро и удобно выражать свое позитивное отношение к увиденному, в результате чего они остаются довольны социальной сетью.
Стейкхолдеры: юзеры, разработчики, владельцы бизнеса.
Приоритет: средний.
Task (Задача)
Задача помогает специалистам понимать, что конкретно им нужно сделать для выполнения общего задания. При создании таска нужно учесть следующее:
- Название задачи. Включает в себя краткое и содержательное обозначение того, что нужно будет сделать.
- Описание задачи. Важно детально изложить, что должен сделать специалист, и какие результаты нужно получить.
- Критерии завершения. Уточните, каким образом можно будет понять, что задание выполнено. Например, обозначьте измеримый результат.
- Зависимости. Нужно уточнить, влияет ли выполнение этой задачи на другие этапы.
- Срок. Укажите, какой временной период отводится на решение этой задачи. Так персоналу будет легче планировать работу.
- Ответственный. Обозначьте, кто курирует выполнение задания, чтобы сотрудники понимали зоны ответственности.
- Приоритет. Укажите степень важности задачи, чтобы сотрудник знал, как быстро он ее должен выполнить.
Пример: Название задачи: запустить в работу кнопку «Заказать звонок» в форме для обратной связи.
Описание задачи: нужно добавить в форму обратной связи кнопку «Заказать звонок», нажав на которую, пользователь сможет передать свои контактные данные менеджеру сайта.
Критерии завершения:
- Кнопка «Заказать звонок» присутствует в форме обратной связи.
- Пользователь может отправить свои данные менеджеру сайта при помощи кнопки.
- Менеджер сайта получил запрос на звонок.
Зависимости: нет.
Сроки: 5 дней.
Ответственный: Илья.
Приоритет: низкий.
Вместо вывода
Эта статья призвана помочь вам понять, что такое декомпозиция, и для чего она нужна. Применяя наши советы, вы сможете наладить эффективную и управляемую работу всего коллектива.
Другие примеры декомпозиции доступны в демонстрационных проектах METEOR.
Регистрируйтесь и осваивайте новые знания для улучшения работы. Удачи!