вторник, 14 октября 2014 г.

Mindmap++: как я собираю мысли в кучу

В этой заметке я хочу поделиться одним из методов, применяемым мною в ходе планирования работ, как лично, так и с командой.

При составлении плана работ одной из больших проблем является неполнота WBS. При декомпозиции задачи с большим количеством неопределённости (нечёткое поставленное требование, новизна технологий или проекта и т.п.) есть риск упустить что-то важное, какую-то необходимую работу. В таком случае она не будет занесена в план и останется "скрытой" до момента, когда это упущение не проявит себя в виде полновесной и актуальной проблемы. Обычно это тот самый момент, когда мы считаем, что всё уже сделано :)

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

Сейчас достаточно широко известны методы визуализации конечного результата. Например, UML предлагает множество видов диаграмм, описывающих разные аспекты разрабатываемой системы. Так же известны методы рисования наших мыслей: разного рода mind maps, семантические сети и тому подобное. Следующий шаг визуализации - объединить несколько видов разнотипной информации на одной диаграмме, чтобы наглядно представить связи между разрабатываемой системой, планом её реализации и процессом планирования.

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

Изначальный набросок разрабатываемой системы

После этого, к полученному наброску ставится ряд вопросов, проясняющих конкретный физический смысл каждого элемента картины и способ его реализации. Все вопросы, на которые не находятся удовлетворительного ответа, выписываются на диаграмму, соединяясь линиями с соответствующими элементами. Все известные работы так же наносятся на диаграмму, соединяясь с соответствующими элементами.
Набросок системы, "нагруженный" mind map`ом

Здесь голубым помечены запланированные задачи, желтым - вопросы для прояснения, красным - известные риски и проблемы. Из голубых заметок формируется бэклог работ по реализации. Из желтых и красных - бэклог работ по составлению бэклога реализации (чувствуете рекурсию? :)). Первый идёт в task tracker, второй - в личные списки дел. После того, как некоторые работы выполнены, диаграмма обновляется: какие-то вопросы и задачи уходят, новая информация добавляется. Например, были сняты некоторые вопросы по разрабатываемому приложению:
Диаграмма после первой итерации работ по уточнению

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

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

Главным недостатком метода является ограниченность масштаба. По достижении некоторого количества визуальных элементов диаграмма перестаёт читаться. Из-за этого я применяю этот метод для планирования "в малом". Целый проект в подробностях так не нарисуешь, а отдельную пользовательскую историю (пусть и крупную) - вполне. Отсюда и короткий жизненный цикл этого артефакта в реальном применении.

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