The Problem with To-Do Lists

xle

I spend a lot of my life trying (and often failing) to direct my attention. This is a different problem to not being able to concentrate: I have no problem at all concentrating; I simply struggle to choose what it is that I am concentrating on, and trying to concentrate on something that isn't the-thing-du-jour is difficult at best and causes extreme distress at worst.

In an effort to combat this issue, I have tried many different solutions in the genre of to-do lists. From pieces of paper to bullet journals; from text files to synchronsed apps - I have tried them all and I have come to the conclusion that many of the more technical solutions simply miss the point.

To-do lists and associated productivity apps exist to solve a problem. In my case, the problem is:

  1. Attention: I am easily distracted and need something to remind me what it is that I am intending to do right now. Without an aid, my mind operates like a computer stack with a memory leak: always focussing on the most recent thing while rapidly forgetting the things that came before.
  2. Retention: People ask me to do things or tell me information that I need to know (one of the worst parts about being employed for sure) and I need to be able to record these things, specifically so that I can act on them later and not now.
  3. Retrieval I need to be able to retrieve information that I wrote down some time ago (potentially months or years) that is suddenly relevant again.

In order to solve this problem, my to-do list needs to be:

  1. Visible: in order to retain my attention, it has to be right in front of me all the time.
  2. Flexibility: in order that I can simply splurge information into it, the process of entering information has to be as close as possible to "just write it down." If entering information is not easy enough, I will tend not to do so, and information will be lost. Further, in order that the information I'm writing down isn't completely un-intelligible, I need to be able to edit the information that's already there. This includes everything from re-ordering lists to adding new items to meeting minutes.
  3. Searchable: in order to retrieve information, I need a system to search for information.

Some candidate solutions and why they don't work:

Just a piece of paper

Write things down on any old scrap of paper you find lying around.

Visibility: 4/5

The piece of paper can be on my desk right in front of me, which is pretty great. However, if I'm looking at my computer (which has flashing lights and colours which is really attention-grabbing when compared to the back of an envelope) then I can easily ignore the paper.

Flexibility: 3/5

I can write anything down with extreme ease! I can even draw pictures. Wonderful.

However! If I write, e.g.

- Project X meeting at 10:30
- [ ] Update new colleague on-boarding wiki page
- [ ] Order new printer toner

Then I go ahead and attend the meeting at 10:30, where do I put my notes from this meeting? Ideally I'd enter them as sub-items under the meeting item in the list, but on a piece of paper, this requires either: crossing out the original point to make a new point with space for notes (annoying); leaving space for notes when I first write the list (how do I know how much space to leave?); or having some separate piece of paper for each thing that might require later expansion (extremely annoying).

Searchability: 0/5

Searching involves keeping track of lots of scraps of paper. Difficult enough if you always work from the same desk; impossible if you work hybrid, even a little bit.

Total: 7/15

A Logbook

The logical successor to a pile of paper-scraps - a specific book for writing things down in.

Visibility: 4/5

Very similar to the paper approach.

Flexibility: 3/5

Same problems as the paper approach.

Searchability: 2/5

Things are in generally chronological order and all in the same place. Easier to search but still not easy.

Total: 9/15

CalDAV-based To-Do List

Most CalDAV-based calendars have some to-do list functionality.

Visibility: 4/5

Visible as long as I have the window open on my computer. Invisible if I'm away from my computer. Also synchronises between machines!

Flexibility: 2/5

Can pretty much only be used for tasks (and some implementations support sub-tasks). Very little support for free-form notes about stuff and things and nonsense.

Adding new tasks puts you in data-entry hell where you will be prompted for due dates, repeat options, etc.

Old uncompleted tasks will hang around and build up to the point of overwhelming; requires an annoying amount of maintenance to remove cruft.

Searchability: 3/5

Any decent calendar client will let you search tasks for keywords, but the implementation is often clunky and the results lack context.

Total: 9/15

Just use Text Files

What about just using some good-old computer files in a nice format like markdown?

Visibility: 4/5

Visible as long as the files are open. Can be syncrhonised in any number of ways, including git, Syncthing, or DropBox.

Flexibility: 3/5

I can write anything I like in any order as long as it's not a picture. However, I must take the initiative to organise the notes in a sensible way, otherwise the corpus of data will start to rot into disarray.

Searchability: 3/5

Again, files are easy to search using tools like grep, but filtering through the results to acquire context is tedious and clunky.

Total: 10/15


So there is a clear winner, in my eyes, and I'm not alone: just look at the popularity of tools like Org-mode and Obsidian.

However, there are still issues with these offerings: primarily, I find issue with the way that these tools rely on the user to do all the hard work of organising the information - at best they provide (admittedly powerful) linking facilities.

A computer program designed to aid note-taking should allow me to simply gush information directly from my head onto the screen and then be able to organise and retrieve that information in an intelligent way.

Introducing: mdq - "Markdown Query".

This tool is very simple: it allows you to search some markdown-formatted text but rather than simply returning the matching line, it returns the context of the matching line.

This means that if your file looks like this:

# Monday 2025-08-18

- [ ] Order new printer toner

## Project X

- Meeting 10:30
    - Bob thinks we are behind schedule; Alice disagrees
    - [x] Update CAD files with new enclosure design from Paul

## Project Y

- [ ] Implement new CI/CD pipeline
    - Gitea actions use the same syntax as github actions

You can run

$ cat file.md | mdq "Project X"
# Monday 2025-08-18
## Project X
- Meeting 10:30
    - Bob thinks we are behind schedule; Alice disagrees
    - [x] Update CAD files with new enclosure design from Paul

or

$ cat file.md | mdq "Bob"
# Monday 2025-08-18
## Project X
- Meeting 10:30
    - Bob thinks we are behind schedule; Alice disagrees

or

$ cat file.md | mdq "toner"
# Monday 2025-08-18
- [ ] Order new printer toner

The project needs work - currently it operates by inefficiently iterating over the input text several times but I have plans to rework it so that it works line-by-line. This should make it both faster and more suitable to asynchronous execution.

Once this is ironed out, I intend to implement several features from nb such as auto git-synchronisation. Additionally, I will include some advanced templating features such that the new program will be aware not just of topical context, but date-time context also.

You can find this new program at lb.