Interesting, but I have different principles and goals. I keep hoping ai agents get good enough, but they aren't quite there yet. Because a large portion of our differences are that you want to do want I want automated or eliminated.
The core is I want the system/ tool to be invisible. It must not become a task itself. If it does then it is a distraction and time suck that I cannot afford. The guiding principle for me is one task at a time, and touch things as close to once as possible. This is where we disagree on what is optimal.
My to-do system is by far the most important system I have for keeping my life on track. It acts as a second brain, remembering things for me so I don't have to.[1] Without it, I would be completely lost,[2] and nowhere near as organized or conscientious.
100% agree.
What makes a good to-do system?
It's instructive to think about when we might use a to-do system before discussing how to build a good one. I find myself firing up my to-do system to do one of the four following activities:
- I think of some new task, and want to add it.
- I want to plan out my day or week, or figure out what to do next.
- I want to check off some task as complete.
- I want to perform maintenance: e.g. edit some tasks, delete stale tasks, etc.
1 agree.
2 I want to offload this. I loathe planning despite understanding the value of it. When I add the task, that is the last time I want to think of it until it is being done
3 no, I just want them to go away upon completion. I get no satisfaction from checking things off or reviewing them. I understand that for some people, checking things off is the actual purpose of their system. Not me, I just want things done, They should go away effortlessly when no longer needed.
4 This is exactly the biggest time suck a good system should eliminate.The task should be accurate when entered such that the terms of its removal and priority shifting are clear and automated and not require additional effort or time spent I find that my biggest problem with all existing systems is this item is assumed to be necessary and it takes more time than entering and doing tasks. The system maintenance should be minimal to non existent.
Yes you need to edit tasks occasionally. But this should be minimal. Not a core activity. Touch things as close to once as possible should be the driving principle.
Adding tasks should be low friction. If adding tasks is high friction, you will just not do it when your discipline levels are low or tiredness levels are high. Low friction in this context means "with few actions". So concretely, this means you should both be able to add the task and organize it easily. It is hard to get to a to-do system to literally zero friction, but getting any habit as close as possible to a zero-effort habit will improve the probability you stick to it immensely.
Agreed
It should be possible to add tasks as soon as you think of them, and check tasks off as complete as soon as you complete them. If you cannot, you will need to do one of the following. One option is to retain the new/completed task in working memory until some point you can access your system. This risks you either forgetting the task or cluttering your working memory. Another option is to maintain a "task cache" somewhere you do have instant access to, and then later sync said cache to the ground truth system. This is obviously risky and so will inevitably at some point break. Note that new tasks can be tasks to create tasks, e.g. "deal with X" can be quickly jot down, and then later refined.
Agreed with the principle, disagree with the discussion. Those options are all counter to your stated goal. Ideally, just have the tasks flag itself as complete and you move on and never think about it again don't make using the tool a task. Ideally unless you flag the task incomplete it should assume you did it on time, and the only time you need to manually mark something complete is if you finish early. Minimal effort, don't make the tool the task
All tasks should not be visible all of the time. In the high task regime especially, it is costly to be reminded of everything you ever need to do every time you want to add a new task, check off a task as complete, or figure out what to do next. Trust me, you do not want to be stressing or distracted by your tax return that is not due for another 8 months. Attention is your scarcest resource, so most tasks should be hidden from you until you need or choose to see them. I think of this as a form of self-context engineering, and also apply this principle in many other settings. For instance, when working on some task X, I try to close all irrelevant apps to stay maximally focussed. Using dedicated desktop apps as opposed to browser apps helps a bunch with this. For more tips, tricks and ideas for keeping focussed, see here.
One task visible at a time, just the next one that needs doing. Have the ability to look ahead, sure. But as you said attention is valuable, distraction is everywhere. It should not exist in an organization tool. The tool should not be a task.
It should be easy to surface relevant tasks when needed. I currently have 118 tasks in my to-do system. Besides it being costly be reminded of all of them every time as discussed above, it is also intractable to sift through that entire list constantly when planning out my day. In practice, this therefore means you should utilise powerful tagging and filtering tools and views. You might want a tag for each topic of task (e.g. work, finances, etc), for tasks you can do at home, tasks which are due soon, etc. Context switching is hard, so being able to aggregate and batch execution of similar tasks is useful. (Fuzzy) search is sometimes helpful, but I rarely find myself using it as I generally feel very free to forget tasks in my to-do system completely from my brain. This is only possible because after years of use, I now fully trust the protocol to surface tasks when relevant.[4]
This is an unnecessary duplicate of the above. Only one task at a time. They are only "needed" when it is their time to be done. Otherwise you are talking "wanted" not "needed" and that gets right back into the tool maintenance becoming the distraction or becoming a task.
Tasks should optionally have date, and should be able to be viewed by date. It's pretty helpful to know which tasks have deadlines, and if any of those are soon. My to-do software allows me to set both "dates" for when I plan to do a task, and "deadlines" which are hard cut offs by which some task must be completed. Often tasks are blocked until some event out of your control occurs, and it is useful to mark a task as not relevant until after some date has passed. It can also be helpful to move tasks into "due today", when planning a daily to-do list.
Again, too much the tool is the distraction. Think simpler. Yes add with a date and priority. Then become invisible until it is time to be done. The tool must not become a task itself. Why are you making a "today" list? That's a waste of time and attention. If you entered the tasks with dates and priorities, then whatever task is in front of you is all you need and it will be the correct task. Don't make the tool the task.
Tasks should be able to be prioritised as more or less important. On the one extreme, some tasks absolutely must happen. On the other, some might never be worth doing, but are still useful to jot down somewhere. It is useful to have some sort of view that filters out low priority tasks or sorts tasks by priority. Some people like using @someday and @maybe tags for this sort of thing. It can also be useful to mark tasks as "vaguely urgent" but without a specific date, using e.g. @soon.
At the time of creation/addition and very rarely things should get edited. But filtering and viewing etc are all distractions. One task at a time, touch it as close to once as possible.
Some tasks recur. Many tasks recur on a regular cadence. Paying bills, cleaning, watering your plants, etc. You should not have to make a new task for each instance of a recurring task, as this is high friction. The feature to recur a task is very helpful.
Agreed.
Regular reviews are important. Tasks go stale. It is important to regularly review everything in your to-do system and delete things that have become irrelevant, and to surface things that have changed priority. Perhaps schedule a recurring monthly task to do so, to batch this work.
Complete disagreement. Touch tasks as close to once as possible. The priority tool should suck us as little time as possible. This whole regular review principal is why I can't find a functional system. They all take up time I want to be spending completing tasks. The tool must never become a task itself.
It should interface nicely with your calendar. A calendar event in some sense is a task, but it's a special kind of task that does not need to be checked off as complete; it completes by default at the end of the allotted time. This distinction makes using a calendar as a to-do system problematic (as you risk forgetting to do a task in the allotted window, and then not being reminded of it again in future), and using a to-do system as a calendar annoying (as you need to check off things that should just get checked off by default). Calendar integration is useful though, as when planning your tasks for the day, it is useful to see what calendar events you have. If you time box tasks it can also be useful to see those on your calendar.
Agreed except for the "when planning your tasks for the day". Again my broken record says touch them once (when you enter them).
You seem to enjoy the planning and to get satisfaction from task completion. I think you might want to add those as principles or goals of your ideal system. I think far more people agree with you than me, and it might help them realize your system is valuable to them.
You have a very cool system and I enjoyed reading about it. Thanks for sharing. Someday I will find the Marie Kondo or Basho of systems, that's the one for me.
thanks for the comment!
i keep hoping ai agents get good enough
i am also keen to think through how ai can make my workflows better! i agree that they are not quite there yet for entirely automating parts of task management.
no, I just want them to go away upon completion
seems good, seems eventually possible
The core is I want the system/ tool to be invisible ... Touch tasks as close to once as possible ... Why are you making a "today" list?
i agree that that many of the best systems require literally zero cognitive overhead. but i'm skeptical that optimal task management should ever literally be zero effort.
touching each task literally only once (to add it) requires you to perfectly predict the future. the world is a complex system and out of your control. this implies that you cannot perfectly anticipate what tasks you will need to do at some point in future. something new and urgent may come up, that displaces things you initially thought you might want to do on some particular day. something may later become irrelevant reality changes and new information comes to light.
now, it does in principle seem possible to automate away the task of touching the tasks to ai. if you had an ai assistant with an incredible amount of context on your life, and could predict actions you might want to take to maintain your tasks with reasonable accuracy, you could build some system that just serves you tasks. i think there are some problems with this vision. firstly, i expect in such a world almost all of the tasks on your stack could just be done AI too. second, i have local preferences. some days i just "don't feel" like doing some task, and would rather punt it to the next day and do something else instead. AIs could in principle understand this in the limit, but i expect this to take longer than the first AIs capable of serving you reasonable tasks in a reasonable order. third, i personally would feel a bit like a robot here, if i were just executing actions that some system has told me to complete. i would rather be able to exert agency and choose what i do for myself, even if that contradicts the "most optimal" next task.
You seem to enjoy the planning and to get satisfaction from task completion.
agreed, ymmv
Your screenshot looks like a desktop or laptop, do you ever manage your to-do from your phone? I've been trying various calendar and to-do systems for months, and my biggest issue is that I want to add things quickly on my phone and then manage them and do planning on my desktop, but I haven't found a software for this that works frictionlessly enough.
Jotting down "deal with X" on the todoist mobile app and then later figuring out exactly how to deal with it on my laptop is a pretty common workflow of mine. I find it pretty frictionless. I also use the mobile app for other things (e.g. glancing at my daily to-do list while on the go).
Here are some screenshots of the app:
pretty often! i schedule a lot and time box a bit. the main reason i schedule is so that i get a reminder at the right time of day to do the task. sometimes that time is more just a proxy for some event like "when i'm at the office" or "when i get home". it would be better to specify that precisely but i havn't seen good support for it anywhere yet.
My to-do system is by far the most important system I have for keeping my life on track. It acts as a second brain, remembering things for me so I don't have to.[1] Without it, I would be completely lost,[2] and nowhere near as organized or conscientious. To-do systems done well can massively improve your productivity. They reduce cognitive load when thinking about things you need to do, making you less likely to forget tasks, more likely to choose the right next task and more efficient in doing so, and less distracted when executing on tasks. As such, I think more people should invest time into building themselves a great to-do system.[3] This post collates my (highly opinionated) advice on how to do so, from years of iteration fixing failures in my own systems.
Why should you care about having a good to-do system in the first place? A good to-do system, as I alluded to above, improves your productivity by solving three distinct problems.
It's instructive to think about when we might use a to-do system before discussing how to build a good one. I find myself firing up my to-do system to do one of the four following activities:
So, what makes a to-do system good? At minimum, it should solve problems a-c via letting you do activities 1-4 above. A further key property it should have is that of reducing cognitive load when thinking about tasks. If your system is somehow increasing it, you are doing something wrong, and should probably iterate to reduce that. The most common way systems of mine have failed historically is via insufficiently reducing cognitive load (and even sometimes increasing it!).
With that in mind, here are my concrete importance ordered principles for building a good to-do system. AIs tell me the below principles have significant overlap with ideas from David Allen's Getting Things Done and Cal Newport's Deep Work, though I've never read either.
Adding tasks should be low friction. If adding tasks is high friction, you will just not do it when your discipline levels are low or tiredness levels are high. Low friction in this context means "with few actions". So concretely, this means you should both be able to add the task and organize it easily. It is hard to get to a to-do system to literally zero friction, but getting any habit as close as possible to a zero-effort habit will improve the probability you stick to it immensely.
It should be possible to add tasks as soon as you think of them, and check tasks off as complete as soon as you complete them. If you cannot, you will need to do one of the following. One option is to retain the new/completed task in working memory until some point you can access your system. This risks you either forgetting the task or cluttering your working memory. Another option is to maintain a "task cache" somewhere you do have instant access to, and then later sync said cache to the ground truth system. This is obviously risky and so will inevitably at some point break. Note that new tasks can be tasks to create tasks, e.g. "deal with X" can be quickly jot down, and then later refined.
All tasks should not be visible all of the time. In the high task regime especially, it is costly to be reminded of everything you ever need to do every time you want to add a new task, check off a task as complete, or figure out what to do next. Trust me, you do not want to be stressing or distracted by your tax return that is not due for another 8 months. Attention is your scarcest resource, so most tasks should be hidden from you until you need or choose to see them. I think of this as a form of self-context engineering, and also apply this principle in many other settings. For instance, when working on some task X, I try to close all irrelevant apps to stay maximally focussed. Using dedicated desktop apps as opposed to browser apps helps a bunch with this. For more tips, tricks and ideas for keeping focussed, see here.
It should be easy to surface relevant tasks when needed. I currently have 118 tasks in my to-do system. Besides it being costly be reminded of all of them every time as discussed above, it is also intractable to sift through that entire list constantly when planning out my day. In practice, this therefore means you should utilise powerful tagging and filtering tools and views. You might want a tag for each topic of task (e.g. work, finances, etc), for tasks you can do at home, tasks which are due soon, etc. Context switching is hard, so being able to aggregate and batch execution of similar tasks is useful. (Fuzzy) search is sometimes helpful, but I rarely find myself using it as I generally feel very free to forget tasks in my to-do system completely from my brain. This is only possible because after years of use, I now fully trust the protocol to surface tasks when relevant.[4]
Tasks should optionally have date, and should be able to be viewed by date. It's pretty helpful to know which tasks have deadlines, and if any of those are soon. My to-do software allows me to set both "dates" for when I plan to do a task, and "deadlines" which are hard cut offs by which some task must be completed. Often tasks are blocked until some event out of your control occurs, and it is useful to mark a task as not relevant until after some date has passed. It can also be helpful to move tasks into "due today", when planning a daily to-do list.
Tasks should be able to be prioritised as more or less important. On the one extreme, some tasks absolutely must happen. On the other, some might never be worth doing, but are still useful to jot down somewhere. It is useful to have some sort of view that filters out low priority tasks or sorts tasks by priority. Some people like using @someday and @maybe tags for this sort of thing. It can also be useful to mark tasks as "vaguely urgent" but without a specific date, using e.g. @soon.
Some tasks recur. Many tasks recur on a regular cadence. Paying bills, cleaning, watering your plants, etc. You should not have to make a new task for each instance of a recurring task, as this is high friction. The feature to recur a task is very helpful.
Regular reviews are important. Tasks go stale. It is important to regularly review everything in your to-do system and delete things that have become irrelevant, and to surface things that have changed priority. Perhaps schedule a recurring monthly task to do so, to batch this work.
It should interface nicely with your calendar. A calendar event in some sense is a task, but it's a special kind of task that does not need to be checked off as complete; it completes by default at the end of the allotted time. This distinction makes using a calendar as a to-do system problematic (as you risk forgetting to do a task in the allotted window, and then not being reminded of it again in future), and using a to-do system as a calendar annoying (as you need to check off things that should just get checked off by default). Calendar integration is useful though, as when planning your tasks for the day, it is useful to see what calendar events you have. If you time box tasks it can also be useful to see those on your calendar.
I use and recommend the fantastic todoist software.[5] I've been using and have been happy with todoist for >2 years. I suspect there are also other good options.[6]
Before using todoist, I tried various other systems, in various different form factors. I've experimented with using a paper, a whiteboard, google tasks and google calendar. In my view these all have problems with sufficient scale, but can work for smaller task lists (and in fact, I do still use simpler systems for certain use cases, see the exceptions section below for details). My to-do system eventually outgrew all of the above for reasons that I already explained in the principles section.
Here's what my todoist set up looks like, for inspiration. You probably shouldn't copy it exactly. I've iterated towards this over the course of years, and in general try to only add complexity when I'm certain it will be helpful. When I just started out, the total complexity was significantly lower.
Platform. Todoist is available as a dedicated desktop app, as a mobile app, and as a web app. I can usually access todoist within seconds at all times of day. This is important for not having newly arising tasks cluttering my working memory until I can access my system.
Adding tasks. One feature I find essential for reducing friction to add tasks is being able to create tasks entirely via natural language using my keyboard, instead of needing to click through various buttons. I do so as follows, by firing up this window via hitting "q" and then typing in the literal string seen below.
Keyboard shortcuts. Todoist has great keyboard shortcuts and can be interacted with entirely without a mouse.
Below I've created a bunch of tasks in the "demo" project with various hopefully self explanatory properties.
Surfacing tasks and planning. The project view above is helpful for surfacing related tasks to get to when planning out a day. I then mostly plan my days by assigning the current date to tasks (via the natural language string "tod") and then staring at the "upcoming" view.
Tags. I use the "@soon" tag to mark things to get to soon but with no fixed date. I have a view to easily view all my "soon" tagged tasks. I should probably migrate to using only tags instead of projects, as a task can be marked with multiple tags but only one project (tags > directories in general for this reason). @soon is the only tag I currently use, and when looking for things to do it is often where I default.
Recurring tasks. I schedule recurring tasks often for things like household chores and reviews that I should do on some fixed cadence.
Calendar sync. Todoist has a two-way calendar sync, so time boxed tasks will show up on my google calendar, and calendar events will show up in my todoist interface (I discuss above what I think of as a task and what I think of as a calendar event). You can also show all of your tasks for a particular day in your calendar, including those which don't have a specific time attached, but I find this chaotic so don't. It also has the nice feature that completed time boxed tasks show up with a ✔️ in my calendar.
More complex filters and views. I have a dedicated "work" project, and two associated filter views to separate todays work tasks from personal tasks. This is helpful because I often don't want to see personal stuff while at the office, or work stuff on a sunday night.
The vast majority of my tasks make it into todoist and abide by the above principles. There are a few categories of exceptions.
One general category of exception are cases where simplicity is sufficient so wins out.
#TODO
in code is one such example.Some other exceptions:
Thanks to Hannah Erlebach for organizing a retreat where I built the first version of my current to-do system. Thanks to Cindy Wu, Chloe Li, Jeevan Fernando and Neel Nanda for helpful feedback on drafts and discussion.
I also have a third and fourth brain, namely Obsidian and my Google Calendar, but those are beyond the scope of this post, and also somewhat conceptually simpler.
Recently, a friend asked me what I was up to for the rest of the day and prohibited me from checking my to-do system. I struggled.
In general, I think people systematically neglect spending time on workflow improvements. I expect in the AI era, where the rate at which new workflows become possible is increased, you should probably be spending even more time on workflow iteration than normal. Recently, I've been spending something like a day a week on improving workflows.
AIs might make fuzzy search more efficient here, though I've not yet seen a good implementation. I'm currently building my own.
If relevant, todoist also has a good API.
Though will note I found Linear to be a bit overengineered and complex for personal use cases.