This write-up and the accompanying markdown-files are from 2020, outlining my original thoughts and vision amidst my studies as a Software Engineer.
In 2022 I added Org-Files to this repository, which outline a grander picture with more refined details.
Months ago, I started my quest to refine task management. I was using Todoist at the time and wasn't satisfied. I barely trusted it anymore - it was lacking capabilities I wanted, such as a wait date as well as a difference between scheduled and due. Since it is a proprietary service, extending it would have been very challenging. I was also growing more accustomed and comfortable with the terminal and the UNIX philosophy.
So I started exploring the CLI task managers and found taskwarrior - it seemed the perfect tool at first glance, with great customizability and control. But it too turned out to have some fundamental flaws.
I believe I first heard CGP Grey using this term, but I have not found it anywhere on the Internet with this meaning.
Trusting a digital tool, such as a task manager, means you rely on it. If you don't trust a tool, you will use it less and tend towards alternatives e.g. pen and paper. To build trust with a task manager, you need to put all your tasks in it and set it up in a way that fits your workflow.
For that, a task management system needs to enable these three actions:
- quickly capture new information
- planning & reviewing
- retrieving tasks relevant to the current context
My problem is that I don't trust any of the systems I am currently using:
- head: I forget things, short-term memory limited
- paper: many slips flying around, can get lost easily
- CLIs: too verbose to use, didn't get me the information I needed in time
- web: too many clicks, too slow, not available offline, often unflexible
The most important rule: Everything is a task. There is nothing else.
Projects, Areas, Epics - they can all be mapped onto tasks, and doing so will allow you to leverage the same toolset on everything.
A project or epic is a completable task with subtasks - it can itself be a subtask.
To divide your task list into areas, simply put everything under uncompletable (see task type activity) root tasks.
With everything being a task, areas and projects can also have all kinds of tags and attributes. And then subtasks may inherit these attributes (particularly tags).
More fundamentals:
- UNIX philosophy: use plain text is possible, separate into independent modules
- Complete control: Inbuilt reports and attributes should use available configuration, so that the user can change fundamental parts of the system
There are essentially 4 types of things we do:
- tasks: things to be done once e.g. hand in an assignment, fix a bug
- activities: can't be completed e.g. browse the internet, gaming, spend time with family
- habits: repeat in a set interval, e.g. go for a run daily, pay rent - sometimes skippable
- chores: recur in regular intervals without a strict due date, e.g. do laundry, cut nails - can be postponed but not skipped
Even though they won't be clearly distinguished by a single property, they will be mapped through some default properties:
- Inspired by tasklite, habits have a
repeat
property while chores have arecur
property - both can be frozen. - Tasks and activities may be distinguished by a
size
property, where activities have a special size value of-
, marking them incompletable. Alternatively, activities may be prefixed with a star as it is done in Todoist
These basic types also incorporate other types:
- an area is simply an activity with subtasks
- a project is a task with subtasks
Since "task" is one of these types, entities of any of these types can be called "items" within the implementation to avoid confusion.
- areas
- housework projects
- GTD
- Agile
- Review active projects
- Find out tasks to batch when going out
- Find things I can do when I am (outside watching the babies e.g. cut nails | focused, wanting to do some (writing|programming) in the morning | unfocused in the afternoon e.g. check mails | taking a break from work on the computer e.g. do laundry | eating/snacking something e.g. watch a video/read a paper | listening to an audiobook e.g. digging, hang out the laundry)
I have been using taskwarrior for a few weeks now, but I am already starting to lose trust again. I don't work on most of the tasks I've entered, and if I do, I rarely remember checking them off.
- A big issue holding me back is a missing notion of subtasks. You either have to use projects, dependencies or create a complete custom hack - either a script or hook. This also makes entering tasks more verbose as I have to specify multiple tags repeatedly which could otherwise simply be inherited.
- Recurrence is a longstanding issue, but can somewhat be solved by plugins: https://github.com/tbabej/task.shift-recurrence and https://github.com/JensErat/task-relative-recur
- UDAs have a lot less options than inbuilt properties
- CLI can be too verbose: I am missing some way to set shorthands for attributes, e.g. "p" for project, dates are rather inflexible
- Keeping all reports aligned with custom attributes is a hassle, since you can't base reports off each other
- ids change whenever a task is completed, so you constantly have double-check or might complete a wrong task
- Great customizability with reports, UDAs, DOM etc
- Great extendability with hooks
- Integrates with many tools (e.g. vimwiki, powerlevel10k, timewarrior)
- https://kolaente.dev/vikunja/api/issues/1198: Thoughts on Vikunja, my new hope.
- lyz-code/pydo#73: Short discussion on a beta-level tool with convenient short ids.
- https://www.wired.com/2016/03/best-to-do-list-app/: Maybe Technology won't help, after all...
- https://codeberg.org/equilibrium/equilibrium: A Haskell project I started to connect task managers, unfortunately abandoned now.
- https://tasklite.org/related.html:
List of CLI-oriented productivity systems
Should have a look at:- org mode (agenda)
- taskell