Skip to main content
Tech Talk

The conceptual design of Todoist

By May 3, 2021September 4th, 20212 Comments

And why I think the Todoist team should re-write their Help page.

My confusion with Todoist

I had a really hard time learning how to use Todoist at the beginning.

This is not something I would expect for a tool that has reached more than 5 million users, especially when I have had years of experience with todo list apps (in chronological order: Google Keep, Tick Tick, Things 3 and lots of other names in between)

There are just too many similar concepts when I first get started. Here are some of the burning questions:

  • What is the difference between “Inbox”, “Projects”, “Labels”, “Filters”?
  • When should I use which? Can I use “Labels” for “Projects”?
  • What happens if I remove/delete a Project/Label/Filter?

As you can guess, I didn’t let my uneasy feeling win. I set out on learning about a to-do list which, paradoxically, should have saved my time instead.

It turns out: I’m not alone.

There are many threads on r/todoist asking the same questions

Zooming in a little bit…

If there are 9,840 results about the difference between projects and labels, I’m fairly sure that I’m not nit-picky here.

Todoist Conceptual Design

The first thing that any sensible user in my situation would do is to look at Todoist documentation.

Sadly, it just makes the confusion fog thicker:

Todoist’s description of Labels. So confusing… what does “make sense” even mean?
Todoist’s description of Filters. Wait, so in Filters we have Labels???

I understand that Todoist writers want to keep it simple and down-to-earth for the mass audience, hence their use of mere examples to describe a feature. However, the examples are just some use-cases, not all, that a feature can be used to solve. This method doesn’t give me a high-level, abstractive understanding of each feature, and of the product as a whole.

So I turned to Reddit, where all the smart minds of the Internet gathers, looking for the answer. Ironically, what I found was exactly what Todoist provided. People explained the difference between, say, Project and Label using their own examples.

Since I’m not in their shoes (and will never be), my natural reaction to such an explanation would be: “can you switch the concept for one another?”. For example, can I use Labels for the purpose of Projects, instead?

And the answer to that question is nowhere to be found.

Therefore I decided to apply Conceptual Design to break down Todoist’s system to truly understand the product. I love the idea behind Conceptual Design because it breaks complicated matters into the most atomic level.

Here are my steps:

  1. List all the terms that confuse me (hereby called concept) in Todoist
  2. Describe the function of each concept
  3. Describe the action we can take with each concept
  4. Generalizing

1. List all the terms

I will only list out the terms that confuse me. The ones I intentionally exclude are either self-explanatory or too minor to mention.

Let’s go through the troublesome concepts that jump-scared me since my first day:

  • Projects
  • Labels
  • Filters
  • Today (similar to Upcoming)
  • Inbox

2. Describe the function of each concept

Each object in conceptual design is defined by 2 things: function and action.

The function is the mission that this concept is “born” to solve. For example, if we want to contain water (function), we invent “kettle”, “cup”, “bowl” (concepts).

The action is what we can do with the concept. For example with “kettle”, we can carry, throw, smash, heat up…(actions)

To understand the functions of each concept, let’s see what happens when I click on each of them:

  • Projects: Group tasks by similar Project that I have assigned to them
  • Labels: Group tasks by similar Labels that I have assigned to them
  • Filters: Group tasks by many conditions (i.e. tasks with label = Urgent, and due date = today).
  • Today: Group tasks that have due date = today
  • Inbox: Group tasks that are not assigned any Projects

There are two things worth noting here.

1. There’s a repeated pattern in the function
All of these concepts are used to group tasks that have the same contextual meaning. It’s just different ways to group tasks. In other words, Todoist is a giant task list, and each of them is a different way to view my tasks.

In SQL terms, it’s like having a where query:

    Select tasks
    From all_tasks
    Where label = "Urgent"

2. Filters are a little bit more powerful than the rest
Another thing that catches my attention: Filters. While Projects, Labels, Today, Inbox let me view the tasks that have ONE SAME ATTRIBUTE, Filters let me view by MANY.

For example, when I click on project “Personal”, I can see all tasks that are assigned to that project. In the meantime, with Filters, I can group tasks that belong to the project “Personal” and have a due date of “Today” and are labeled “Urgent”.

3. Describe the action of each concept

I have created a table to easily compare the actions of each concept (“o” means yes and “x” means no)

From this table, I can immediately see that Today and Inbox are two unchanged components in Todoist. We cannot delete, create or archive them.

Meanwhile, we can create and delete Projects, Filters, and Labels. For Projects especially, we can archive.

Oh, wait.

Something seems to be off. What’s the difference between Projects and Labels + Filters that make it non-archive-able? On the surface, it looks completely similar.

I accidentally figured it out when I tried to assign Projects to tasks. To my great surprise, I can only assign 1 Project per task, but I can assign many Labels for it. Also, when I delete a project, all of the tasks inside it ARE DELETED. For Labels and Filters, they are not.

So if we compare Todoist to a house, then each Project is a room, each task is an appliance and each Label is its use-cases. A TV (a task) can only exist in the bedroom (a project), but it can be used for many use-cases like entertainment or study (label). If I don’t let you access the bedroom, you cannot use that TV, but you can still use other things to entertain or study.

4. Generalizing

After lots of interaction with all the concepts, I can confidently draw out the system design of Todoist.

To support my generalization, I invent three new concepts (and their functions):

  • View: A way of grouping tasks by the one or many same attributes
  • Task: Something you want to do in real life
  • Metadata: All the contextual information relating to a Task

The relationship among the concepts are below:

Today, Project, Inbox, Today, Filter are just different ways to view tasks. So they are essentially View.

Each View can display many Tasks.

One Task can have many Metadata, including Project and Labels:

The relationship among all concepts are visualized as a diagram below:

Notice that even though Project is Metadata of a Task, it also contains the tasks because if you delete a Project, you will inherently delete all the tasks inside. Also, the relationship between Project-Task is one-many, because a task can not be in more than 2 projects.

What I learn from this exercise

After the exercise, I immediately know how to structure my Todoist.

Since each task can be in one project only, I define Projects as non-overlapping aspects of my life that I want to focus on. For example, the “Holistics” project contains all the tasks I’m currently working on in my company, while “Personal” contains all the tasks related to my non-work life. I’m thinking of breaking “Personal” down into smaller projects like “Blog”, “Bodybuilding”, “Learning Python”… I think of those small projects as something temporary and will be archived when I’m done.

Labels, on the other hand, are permanent. Since they are metadata of tasks, and 1 label can be assigned to many tasks, I define Labels as evergreen/reusable contexts of a task. For example, I have “Urgent”, “Important”, “Later” labels (inspired by the Eisenhower Matrix) that help me understand which tasks I should focus on first. I can have several “Urgent” tasks in project “Holistics” and in “Personal” as well.

Of course, my definition for Project and Filter is not … definitive. You can use Labels as Project if you want. Just be mindful that once you create a Label, you can not archive it. As you have more projects in your life, Labels management will surely be a concern at some points.

I personally don’t find Filters useful, partly because the sort function in Project is powerful enough. As you can see, I am grouping the tasks by Label in each Project, which is more than enough to let me know what I should do first for each aspect of my life.

I know I’m being too nerdy going as far as drawing diagrams of a simple product to learn how to use it. But this methodology has proven useful for me when I had to convey competitive research of highly sophisticated products as a Product Manager. It strips off the UI and leaves me only concepts to work with. This is a lot easier for me to understand how a product works and how it differs from others on the market.

If you find any flaw in my method and conclusions, feel free to DM me anytime 😉


Leave a Reply