Project management with org roam
Org roam is a powerful tool for knowledge management, but it's a bit tricky to figure out how to best use it for project management. There are a couple of options here, each with their own positives and downsides:
- Just use "regular" org files for projects.
- Have large per-project notes. This is a bit clunky, as it's not immediately clear where certain tasks should be placed. Moreover, this violates the general non-heirarchical principle!
- Use daily tasks + tagging. This works, but kind of breaks the agenda.
As of <2024-09-14 Sat> I've been use strategy 3, but as
noted earlier, this does not work with org-agenda. In particular, if you
place TODO items in each daily note
and carry them forwardd, then you will get duplicate entries in the
agenda.
One option is to instead spin out these items into proper tasks if they take longer than a day, rather than simply carrying them forward. This feels smarter, as we can also carry forward time-tracking information across days.
Before we try and spin tasks off, it's worth thinking about how this will work when it comes to note management. From a big picture perspective: should we treat tasks any differently than knowledge? Moreover, how should we handle tasks like "Respond to Valeria's email"?
One perspective is that if a task spans multiple days, we should take the time to flesh it out a bit, and include details so that we do not forget. Moreover, it would be smart to use FILETAGS to designate certain notes as "tasks"; this should allow us to get better agenda performance as detailed in this blogpost. This suggests that I should set up some org-capture templates for tasks.
There are some difficulties with this approach though:
- In order to have a
TODOstatus, the note must have a headline. There are some packages like org-inlinetask.el, but this is a hack IMO. - It is not immediately clear how to insert properties using an Org roam capture template.
One thing we could try is to add #+filetags: :TODO:
to the header. However, we still run into the issue where we
need a headline to get anything useful to show up.
With this in mind, perhaps the best way to handle things is to just
insert a headline; this is needed for clocking in to work
anyways.
How should I link to these tasks from my dailies then? Options
are to transclude, use links, or to use scheduling. It seems like
scheduling is more robust, so let's go with that. Moreover,
#+category: task seems better than
#+filetags, as it prints nicer in the agenda.
So our final workflow is: Use help:org-roam-capture to create tasks, and use help:org-agenda to view what we should be doing on a day. Work tracking is handled by clocking in and out of the task, not the daily note.
Tracking work
I've opted to only have TODO, OPEN, DONE,
and STOP as my possible states for
work. The rationale for this is that tasks should have a one-way
passage from TODO -> OPEN -> DONE, and any metadata
like priorities or blockers should be encoded via priorities or
tags. This is because TODO -> OPEN -> BLOCK -> OPEN does
not properly represent the lifecycle of the task: it is not just
opened, it is resumed!
Moreover, blockers with tags allows for a more granular description of why something is blocked, which is more useful in general (see Org edna for more).
I've also added a WAIT state; this
is useful for blockers that I am not in control of! For instance,
consider the following flow:
- I need to get reimbursed for something, so I send the relevant documents
- The task is still open, but there's no work for me to do. This means that there's a task that blocks the parent task, but it's someone elses TODO.
If a WAIT task ends up requiring
some work from me, then I will create a TODO that blocks the original wait.
Remaining issues
How do we handle completed tasks? We could just have them reside
as notes, but this could clutter things up. Perhaps the move is to
filter help:org-roam-node-find
to exclude files with #+category: task and completed,
but I think the better idea is to have some sort of archiving
system. Food for thought!