As mentioned I try to journal frequently in plain old bash. I keep journals for my work and home projects, each of my group members, my section duties, my publications … you get the idea.
Since my code is automation-aided text editing, and my publications are automation-aided text editing, why would I use anything else for my project management?
All the code I use is wrapped up here: github.com/jodavaho/bashlog but it’s easy enough to do without that.
Basics
For managing todos, I use bullet journal. Bullet Journalling has become quite a fad lately, with frothing-at-the-mouth reviews like “It will make you a better person!” How can you argue with that simple, artistically drawn ven diagram where it lies at the center of “Why” and “What”?
Check out the basics here. Following their method, I keep track of todos as simple bullet lists, and to annotate them with one of a few “statuses”: todo, done, scheduled, dropped, and migrated.
We’ll use GitHub flavored markdown, in particular the fancy todo box to make our bullet journals.
I add a few statues, and use:
- [ ] todo
- [x] done
- [-] failed
- [v] dropped
- [>] migrated
- [^] scheduled
- [<] delegated
Intermediate use
By keeping this todo file in a known location I can easily access it with a few keystrokes. Mid-day or mid-week, it starts to look like this, with dupes, out of order items, and a mix of statuses:
- [ ] water the lawn
- [x] write up analysis for steve
- [>] complete AAS paper revisions
- [>] Add image to Keck report
- [x] take dog on a walk
- [ ] schedule a doctor appointment
- [ ] water the lawn
- [^] cross-compile scheduler
- [-] runtime reports
- [v] pick up vitamins
Well, that’s functional, but why bother? Well first, this is easy to diff with git to see what has changed lately, when items were added and so on. But my day-to-day interaction is mostly trying to mark everything off.
I use vim to edit this todo file. so :sort
comes in handy. :sort u
even removes duplicates
- [ ] schedule a doctor appointment
- [ ] water the lawn
- [-] runtime reports
- [>] Add image to Keck report
- [>] complete AAS paper revisions
- [^] cross-compile scheduler
- [v] pick up vitamins
- [x] take dog on a walk
- [x] write up analysis for steve
That’s a nice thermometer view, we’re over half done, and I can see what roughly what fraction I’m doing, delegating, dropping, failing, etc at a glance.
I often prioritize items as well, then :sort
will sort by status first, then by priority:
- [x] This was done
- [ ] Less important
- [ ] Need to do this now
Becomes:
- [ ] 1 Need to do this now
- [ ] 2 Less important
- [x] This was done
For large lists with lots remaining, bumping a few to the top with a properly placed 0
is a life saver. I can scan and downselect today’s 0
tomorrows 1
, etc very quickly.
There are many other things that :sort
can do, including sorting by just priority :sort n
or by arbitrary tokens :sort /<stuff to ignore>/
. That last one is particularly helpful if you structure todos with delimited tags.
Power use
If you follow the same basic format of status, tags, delimiters, and descriptions …
- [<status>] <tag> <tag> ... <description>
or more readable:
- [<status>] <descirption> <tag> <tag> ...
For example: - [ ] +project +priority +due date : item
. Then you can easily sort by a specific tag by ignoring the first n
occurrences of the pattern PATTERN
like this
:sort /\(.\{-}\zsPATTERN\)\{NUMBER}/
e.g., :sort /\(.\{-}\zs+\)\{0}/
# this list has 3 tags, project, priority, and due date:
- [ ] +project 2 +1 +2021-02-15 :Do stuff ...
- [x] +project 1 +1 +2021-03 Do :stuff ...
- [ ] +project 2 +1 +2021-03-15 :Always do stuff ...
- [ ] +project 2 +0 +2021-04-01 :Do stuff ...
- [x] +project 2 +1 +2022 :Do stuff ...
You can use the following commands:
" By project
:sort /\(.\{-}\zs+\)\{0}/
" By priority
:sort /\(.\{-}\zs+\)\{1}/
" By due date
:sort /\(.\{-}\zs+\)\{2}/
" By description
:sort /.*:/
Try it on the above task list for extra credit? It’s easier to use separate tag markers and more readable with descriptions up front.
- [ ] Never do stuff =project 2 +1
- [x] Always do stuff =project 1 +1 _2021-03
- [ ] Do stuff =project 2 +1 _2021-02-15
- [x] Do stuff =project 2 +1 _2022
- [ ] Do stuff =project 2 +0 _2021-04-01
" By status / description
:sort
" By project
:sort /.*=/
" By priority
:sort /.*+/
" By due date
:sort /.*_/
You can easily bind any of those sorts to custom commands as well, as discussed in the vim manual
e.g., in your ~/.vimrc
put:
" By project
comand SortProject sort /.*=/
" By priority
command SortPriority sort /.*+/
" By due date
command SortDate sort /.*_/
Conclusion
Keeping a plain text file was explored as an alternative to task management
software. The simple delimited text format for todos was borrowed from GitHub,
and expanded to include bullet journalling. I used Vim and in particular
:sort
to get all the organizational tools I needed to keep track of status.
In closing, I’ll say that the most important part, in the spirit of Bullet
Journal, is culling the done items and refreshing the todos periodically, e.g.,
every Monday. Don’t worry, they’re still in git histories if you want them
back. You won’t.
Comments
I have not configured comments for this site yet as there doesn't seem to be any good, free solutions. Please feel free to email, or reach out on social media if you have any thoughts or questions. I'd love to hear from you!