# TaskWarrior


I haven't been writing much recently (_sound of crickets coming from this year's
blog archive_), but this is such an OnBrand™ post that I couldn't not write it.
At work, I've been shifting into more of a TL role, and as such I've been
tracking an increasingly large number of streams of information. We use JIRA for
bug/feature level work, but a lot of the stuff that I need to track is more
micro-level: Slack threads to respond to, docs to review, reminders to ping
people, etc.

While I was at Google, and for the first ~year at Databricks, I used my Gmail
inbox primarily as a todo list for micro tasks. I would keep emails as unread as
a reminder to respond to them, and would use the snooze feature as a reminder
system. This worked well when my primary interrupts were code reviews and doc
comments. But this system didn't work with Slack, and the toil of maintaining a
sane inbox front-page was taking too much effort.

Fast forward to a year ago, and I transitioned mostly to using Slack reminders
as my todo list. Slack has a "remind me about this" feature that was (and still
is) super useful. In retrospect, I think of this now less as a "wow, this is a
great feature for productivity" and more as a "wow, Slack is so poor at
resurfacing old threads that I need to use a reminder system to keep track of
things". But it worked well enough for a while.

As I started needing to keep track of more, Slack and Gmail both fell over for
me. I fell back to more manual approaches for tracking: first, Apple Notes, then
a Google Doc. Both Apple Notes and Google Docs have native checkboxes, which
made reasonably nice to use as a todo list. I know some people swear by a
long-running doc/note for tracking work, but I ultimately found it too manual to
keep up with. I'd try to have a new section per day, and move uncompleted tasks
to the new day as time went on. But it was too easy to forget to clean up
old/irrelevant tasks, and I'd end up with a bunch of stale tasks that I
realistically would never get around to.

I also made a basic Eisenhower Matrix emoji prefix system for tasks, which was
helpful for prioritizing tasks, but ultimately didn't help as I had to manually
rearrange/filter things to keep what was most important at the top of the list.

> Urgent and Important: 🔥
>
> Not Urgent but Important: 🌟
>
> Urgent but Not Important: ⚡️
>
> Not Urgent and Not Important: 💤
>
> Won't do: ❌
>
> Top Priority Task: 🥇
>
> Randomization: 🫨

And so recently, I switched to a system that I intuitively feel will be
stickier: [Taskwarrior](https://taskwarrior.org/) (though, TBD since each of
these systems seems to have a 2-6 month lifecycle before falling over).
Taskwarrior is a CLI-based task tracker that has a lot of features that I've
been missing in my previous systems:

**Prioritization**: It has a built-in prioritization system, and automatically
sorts tasks by priority. It's more sophisticated than a "Low/Medium/High"
priority system as well, as the priority is calculated based on a number of
factors (due date, urgency, importance, dependencies, etc). I really appreciate
that I can enter a bunch of tasks, and I get a sanely sorted list with the most
important tasks at the top. I also appreciate that if I work-crastinate on a
non-urgent task, TastWarrior tells me "You have more urgent tasks".

**Ease of task creation**: It's super easy to add tasks. I've aliased `task` to
`t`, so I can add a task with `t add <task>`. I can also add tags, due dates,
etc. inline when creating a task. I always have a terminal window open on my
work laptop, so this ends up (surprisingly) being a lot faster than inputting
something into Google Docs or Apple Notes.

**Dependency Tracking**: It has a built-in dependency and "waiting" system. I
can mark a task as "waiting" until a particular time, and it won't show up in my
list until that time. Similarly I can mark a task as dependent on another task,
and it won't show up in my list until the dependent task is completed. -- Tasks
that have dependencies automatically also get a bump in priority, which is nice.
Tracking all of this manually would be a huge pain.

There are a bunch of other features that I've only dabbled in so far that are
also appealing:

-   Recurring tasks
-   Projects / Tags / User-defined attributes
-   Ecosystem of related tools.
    [Bugwarrior](https://bugwarrior.readthedocs.io/en/latest/index.html) looks
    particularly interesting, as it can pull in tasks from JIRA, etc.

All this makes me think that Taskwarrior is a good fit for me, at least for
work-related tasks. ~All my non-tirival work is currently done on my work
laptop, so I don't worry about cross-device syncing. (The lack of a friendly
mobile app would be a dealbreaker for using this for personal tasks, though.)

Ok, enough bikeshedding for now. :)

