Every second productivity hacker's handbook says that I need to maintain a task and time management system to become a time management guru.

The main problem of all tasks and time management workflows is the effort required to maintain them.

Using a paper notebook feels warm and cozy, but unfortunately, it brings a lot of extra overhead to the process and lacks automation.

Finding a matching to-do list app is way harder than a soul mate. It's always either not flexible enough or not what I exactly wanted.

I've got a solution

What do all software engineers do in that case? Exactly! They reinvent the wheel.

Luckily I didn't implement a "proper" task management tool. Instead, I picked Notion and... yes. Implemented it there.

What I like most about "Notion" is that it allows me to create relational databases and do with them whatever I want.

Tasks overload
Photo by Mindspace Studio / Unsplash

Dashboard

My time management dashboard consists of several sections.

  • Goals
  • Tasks Kanban board
  • Task Lists
    • Scheduled
    • Outstanding
    • Done recently
  • Highload Calendar

Goals

Each goal has tags, due dates and is usually related to some project. Usually, it's something long-term but may also be a shorter one. They have predefined due dates: year, quarter, month, week, but I usually use only the first two.

I treat goals like beacons. Every time it catches my eye, it makes me remember them and probably adjust my current direction using tasks.

Task scope

Every task has the following list of properties. Most of them have predefined values to make task creation and management faster and effortless.

Project

Projects are not necessarily related to my work but can also include household, health, and any other activity.

I find it rather useful to create tasks for everything, even household stuff like "pay for utility bills" or "drive the to supermarket and buy soil for plants." Otherwise, I simply postpone those things endlessly until it becomes outdated and plants eventually die.

Estimation

Estimation is mandatory for every task. It shouldn't be super accurate, but even a ballpark estimation is useful. It allows me to prioritize tasks and understand the workload.

To speed up the task creation process, it has predefined values like in scrum poker: 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, and complex.

Actually, I'm thinking about limiting the max estimation to 4h or even to 2h.

Large task estimation usually means that it wasn't decomposed appropriately, and estimation error, in that case, is going to be unexpectedly large. Furthermore, large tasks are scary to start, so that large estimation may drive me to an extra procrastination circle.

Due date

Every task also requires a due value, which has predefined values for 1 Day, 2 Days, Week, Month, Quarter, Year.

When the due value is picked, the due date exact date is automatically calculated concerning the task creation date using the following ugly Notion formula:

if(prop("Due") == "Day", dateAdd(prop("Created"), 1, "days"),
	if(prop("Due") == "2 Days", dateAdd(prop("Created"), 2, "days"),
		if(prop("Due") == "Week", dateAdd(prop("Created"), 1, "weeks"), 
			if(prop("Due") == "Month", dateAdd(prop("Created"), 1, "months"),
				if(prop("Due") == "Quarter", dateAdd(prop("Created"), 1, "quarters"), 				
						if(prop("Due") == "Year", dateAdd(prop("Created"), 1, "years"),
							dateAdd(prop("Created"), 2, "weeks")))))))

I'm thinking about limiting the maximum due date to a week or two because a distant deadline turns the task into something more like a goal.

There is also a high chance that a small task will be overflown by other ones and won't be relevant in a couple of months.

Due date is then used for calculation "days before due date" which is later used in tasks sorting:

dateBetween(prop("Due Date"), now(), "days")

Estimated Hours

Estimated Hours is calculated based on selected estimation value with the help of the formula:

if(prop("Estimation") == "15m", 0.25, 
	if(prop("Estimation") == "30m", 0.5, 		 
		if(prop("Estimation") == "1h", 1.0,
			if(prop("Estimation") == "2h", 2.0, 			
				if(prop("Estimation") == "4h", 4.0, 
					if(prop("Estimation") == "6h", 6.0, 
						if(prop("Estimation") == "8h", 8.0, 
							if(prop("Estimation") == "12h", 12.0, 0.0))))))))

It is  later used for sorting tasks.

Priority

There are three possible values: high, low, and normal. By default, all tasks have normal priority unless something essential arises.

Due date with priority together allows building a kind of Eisenhower's matrix automatically.

Status

The most common task life cycle is backlog -> in progress -> done or archived.

The most crucial thing is to never jump to new upcoming tasks immediately. Slow down, put a new task in the backlog. Then look through the backlog and schedule it on some free time range.

When getting under a heavy rain of tasks in a volatile environment with changing contexts, keeping up with that process is vital. It is a good way to reduce anxiety, tension, and the overall level of stress.

Schedule date

All tasks have a scheduled date but don't have an exact time because my timespan is a week, not a day. That's why the accurate time doesn't matter.

In my timetable, tasks are not rigidly fixed to the scheduled date, and they may easily drift back and forth. That's how I try to keep my schedule more or less flexible.

Scheduled date and task estimation allow filling the week with tasks and control planned workload. At least try to control.

Perhaps I could make the whole thing much more strict and schedule tasks to a specific time.

I could do it if tasks could be estimated more or less accurately. If it were like calls or meetings, but not software development.

Is on time

In on time property is calculated for "done" tasks taking into account their due date and last edited time.  It assumes that the last update of any task is setting it into "done" state. But it also allows to mark a task as "isOnTimeManually" if for some reason it was edited later.

or(prop("isOnTimeManually"),
	or(smaller(now(), prop("Due Date")),  
   	and(prop("Status") == "Done 🙌", 
   			smaller(prop("Last Edited"),  prop("Due Date")))))

"Is on time" property can be later used for calculation statistics, like how much per cent of task were completed on time. At use this information in our estimation and scheduling of workload.

Tags

I've also added tags to the tasks, but frankly, I don't almost use them. Perhaps it could be useful when syncing up scopes of work with team members in case of multi-user usage.

Tasks Kanban Boards

I have a Kanban board with a switch for every project and a global one that includes all tasks.

I find the Kanban-like board helpful for teams when visualizing the current process state, but frankly, I don't feel much profit from it for managing personal tasks.

Seems like I just habitually use it. Although, Kanban in Notion is quite helpful when used on the tasks' creation stage as it allows to quickly add tasks right to the backlog of the selected project.

Scheduled tasks

A scheduled task is unexpectedly a list of scheduled tasks. The core feature is its sorting principle, which makes the overall task management much more effortless. It works almost by itself.

Tasks are sorted by scheduled date, priority, days before the due date, estimation size, and project.

Such sorting method works for the following reasons.

Scheduled date

Sorting relies much on scheduling dates, so it requires to be a little bit careful when scheduling.

The scheduled date does not include time, so tasks in the lists are simply batched into daily portions, sorted by date.

Priority

By default, all tasks have  "normal" priority. But if some of them have high priority, it will immediately jump to the top of the scheduled date tasks portion.

I usually create all tasks early on Monday or on Sunday, and I use either 1 week or 2 weeks deadline.

That means that tasks in the same portion have very close due dates, but if one of them is urgent, it will jump to the top of the list for the day it was scheduled for.

Estimation size.

It's much easier to get things done starting from smaller tasks.

Project

Usually, when scheduling tasks for the week, I try to avoid switching contexts by putting related tasks on the same day. Sorting by a project is the last soring key, and it works as a sanity check to reduce context switching throughout the day.

Outstanding tasks

Outstanding tasks are those that already have fucked up deadlines or scheduled dates. They are required to pay attention to.

Done recently

"Done recently" list is unexpectedly a list of tasks that were done recently. It's a dopamine reward for a good boy.

Highload calendar

I use a high load calendar to have a helicopter view of my workload. It allows me to have a short glance at my schedule and see that there is definitely no place for new projects there.

Task Management Flow

The process is pretty straightforward.

Set goals 2-4 times a year, then go on with tasks.

I always try to force myself to start the day from the dashboard, and I'm still teaching myself to always use a plan-first approach.

As I've already mentioned, I usually manage tasks once a week on early Monday or Sunday. I review outstanding tasks from the previous week and decide how to process them: cancel by moving to archive or keep them scheduled.

Usually, I don't re-schedule them for another day because they are already on my lists. But sometimes, if my priorities pivot significantly, I move tasks back to the backlog and re-schedule the week.

What I do next is creating new tasks, add estimations for them, and set deadlines.

If the task estimation is too large, I break it down. I try to have tasks with an estimation of less than 2h.

I schedule new tasks taking into account the following week's capacity. If I have a lot of things on the "outstanding tasks" list, I slow down.

If something new arises during the week, I add it as a task. If it is something urgent, I can express it with due dates and priority and then schedule. It will appear on my lists in the right place.

It also makes sense to pay attention to the statistics of tasks that were done on time. And use it to adjust the estimation and planning process.

Results

I've been using it for a year, or even more.

Although my notion board requires almost zero resources on maintenance, it still requires some effort to stick to it.

I've tried to enforce starting a day form reviewing my tasks dashboard, and I've succeeded in working out such a habit. It works like a charm until I get into a rush when approaching a deadline.

And that's the problem I'm trying to fix. I'm sure it's my reptile's part of the brain that takes over the control and forces me to run without looking back to the status and priority of tasks in my dashboard.

Next time I get into a rush, I promise to do my best to stick to my dashboard.

Again.

Actually, it's all vice-versa: cause and effect got mixed-up. It's the time and task management system that is intended to manage the tasks in such a way as to never get into a rush and do everything in time.

If our time management system leads us to a crunch, it either works wrong. Or we simply take more work than we can handle.

Anyway, it's definitely a thing to think about.

Almost forgot. Here is a link to the template. It's readonly, but you can duplicate to your workspace and use. Feel free to ping me if something goes wrong.