SiebenApp: мой персональный проект
Вот уже больше года я потихоньку развиваю свой pet project. Свободного времени на него находится не так уж много, но постепенно проект всё же почти дозрел до уровня бета-версии.
Это персональный десктопный менеджер задач, написанный на Python+Qt. В наши дни менеджеров задач для GTD можно найти в интернете сколько угодно, но у моего есть свои киллер-фичи. Ради них я и взялся за разработку, хотя на это раскачивался очень долго, стараясь использовать существующие решения. В чём же его главная особенность?
Работая программистом, я постоянно сталкиваюсь с сложными задачами. Эта сложность складывается из разных факторов:
- Большое количество подзадач: написать кусок функциональности, провести некоторый рефакторинг, проверить гипотезу, обсудить с кем-то вопрос, и так далее.
- Непредсказуемая глубина задач. Не так уж редко оказывается, что простой, на первый взгляд, этап оборачивается отдельной крупной задачей с десятками подзадач.
- Нетривиальные зависимости между этими подзадачами. Не все из них можно выполнять в произвольном порядке. Часто бывает так, что один шаг блокирует несколько других. Типичный пример -
TODO
-решение в коде, когда вместо “правильного” решения ставится “костыль” (потому что для “правильного” решения не хватает времени или информации). В этом случае мы не планируем вводить “правильное” решение, пока не получим нужную информацию, или пока не завершим более приоритетные шаги текущей задачи. - Исследовательский характер многих задач. Заранее неизвестно, какой путь к цели является правильным. Приходится пробовать несколько вариантов решения, прежде чем найдётся подходящий.
За фасадом типичных современных таск-менеджеров (по крайней мере, тех, что попадались мне) прячется простая абстракция: плоский список задач. Чтобы немного облегчить жизнь, эти списки можно некоторым образом группировать. Например, карточка в Trello может служить контейнером для нескольких списков. Это достаточно неплохо работает для небольших задач, но и только.
Как, например, работать в том же Trello с задачей, которая из нескольких начальных шагов разрастается до нескольких десятков и длится несколько недель (да пусть даже несколько дней)? Я пробовал применять разные подходы. Если держать всё в одной карточке, то она надолго застревает в списках “Делается”, чем сильно демотивирует. Плюс, становится неудобно работать с подзадачами. Если разбивать задачу на несколько карточек, то теряется связь между ними. Сложнее становится понимать, сколько сделано, а сколько осталось.
В какой-то момент я решил перестать обманывать себя и не пытаться превращать граф подзадач в список. А вместо этого стал работать с ним именно как с графом.
Вдохновением для этого послужила книжка про Mikado Method, который я пробовал применять для рефакторинга. Хорошее описание на русском есть, к примеру, здесь. А начальным инструментом для рисования графа задач стал прекрасный graphviz. Собственно говоря, сам SiebenApp в режиме работы по-умолчанию до сих пор использует graphviz для рендеринга. Хотя это уже скоро изменится.
Мои главные успехи последней недели - это появление более-менее приемлемого “нативного” рендеринга (т.е., средствами Python+Qt, без использования сторонних программ). Для этого пришлось продраться через пару книг по отрисовке графов и как следует поломать голову на практике. Математика там не самая тривиальная, шаг влево или вправо - и ты уже будешь решать NP-полную задачу. Поэтому приходится пробовать разные варианты, опытным путём находить правильный порядок решения задачи, закрывать десятки плодящихся мелких подзадач, а что-то откладывать на потом.
В общем, делать именно то, для чего мне был нужен SiebenApp. Не лишним будет добавить, что управление его развитием я вёл в нём же буквально с первой недели, как взялся за работу. Dog fooding - это реально полезная вещь! Позволяет лучше понимать, в какую сторону следует развивать проект.
Думаю, в ближайшие несколько недель я улучшу нативный рендеринг, и тогда можно будет окончательно отказаться от использования graphviz. Ещё пара улучшений - и приложение можно будет считать готовым для комфортного бета-тестирования. Хотя, по факту, смельчаки могут пробовать его уже сейчас!
Подробная инструкция по запуску и использованию есть в README на странице проекта. Плюс, я начал потихоньку вести англоязычный блог проекта. Буду рад услышать любой фидбек по этому проекту!
Надеюсь, он окажется полезным не только мне :)