Frank Allan Harrison
Creating a data-driven Eisenhower Matrix in Obsidian Md
If you, like me, ever get occasionally overwhelmingly busy, with your task-list feeling unmanageable, you can use an Eisenhower Matrix to simplify and bring calm clarity to what to focus on, on what to do next.
"I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent." _Dwight D. Eisenhower _ [^1]
The matrix looks like:
โผ๏ธ urgent | ๐๏ธ not urgent | |
---|---|---|
โ ๏ธ important | Do ๐งจ |
Schedule ๐ |
๐ณ not important | Delegate ๐ซฑ๐ผโ๐ซฒ๐ฝ |
Delete ๐ฎ |
Eisenhower was himself an impressively organised person, and used the method to help him run massively complex, high-stakes, life-or-death projects like the WWII invasion of Normandy, or being president of the USA[^2]. So, it works.
How it works
In simple terms, you have two ways to describe a task: important
and/or urgent
.
These are really easy to comprehend:
- If a thing is
important
then it needs to get done, for whatever criteria. - If a thing is
urgent
then it needs to get done soon. Simple.
The problems start when you have lots of things that are important
and/or urgent
, so which do you work on, they both denote some level of stress or pressure. Well Eisenhower realised that in a world where everything is important or urgent:
- The "next" task should be the one which is both
important
andurgent
. This is probably a crisis-level item. - Tasks which are neither
important
norurgent
are not (yet?) worth considering, so we can ignore them. important
things should be done personally, and given a date, possibly, eventually, promoting them toimportant+urgent
.urgent
things can and should be, if possible delegated as they are often things like meeting, activities, interruptions
In practical terms, when facing overwhelm, we only care about crisis-tasks important+urgent
, and once they are done we can then choose to tackle any of the other tasks that might soon become crisis tasks; for example, an urgent
task that left undone is likely to become important
, like paying a bill or putting the bins out or ; or an important
task that was left too late might become urgent
. whilst we take which just gives a greater sense of clarity on those occasions that thing feel overwhelming.
Obsidian
How to create a Eisenhower Matrix in Obsidian MD, using standard Markdown and the Dataview plugin.
You can do this in one of two ways, via Tasks, or via tagging Notes/Pages. For my dashboard I prefer and overview matrix where I see Notes that I've tagged, so I can keep track of the high-level concepts I need to pay attention to. Then for projects I use tagged-tasks.
Tagging tasks and notes
In Obsidian, with it's excellent tagging system and pretty good little task-management system, all you do, simply, is apply one of two tags (or both) to your tasks or Notes.
Tags
For all tasks that are either important
or urgent
or both, find them, and add the relevant tags.
# Tags look like:
Important => #important
Urgent => #urgent
Important+Urgent => #important #urgent
Applying the tags to Tasks
To tag tasks, you just put the tag anywhere in the task entry.
For example:
# Eisenhower-ready Tagged tasks look like:
- [ ] buy mom's Birthday present #important
- [ ] pay the electricity bill #urgent
- [ ] close the deal on the campervan #important #urgent
It's out of scope to go into more details on Obsidian's task system, as I assume if you're here you're already using it, but it's well documented.
Applying the tags to Notes
You can do this in one of two ways, either in the front-matter, or anywhere in the Note.
For example:
---
tags: thisIsATag, important, urgent
---
#thisIsAnotherTag #important #urgent
some content
#anotherTag
Dataview plugin queries
First off, you need the obsidian dataview plugin installed, and the inline-query option enable.
The 4 queries are simple, with the optional 4th just pulling in
Queries for Notes (high-level)
These get the Notes with the relevant tags and sorts them by last-modified.
$=dv.list(dv.pages('#important and #urgent' ).sort(f=>f.file.mtime.ts,"desc").file.link)
$=dv.list(dv.pages('#important and (!#urgent)'' ).sort(f=>f.file.mtime.ts,"desc").file.link)
$=dv.list(dv.pages('(!#important) and #urgent' ).sort(f=>f.file.mtime.ts,"desc").file.link)
$=dv.list(dv.pages('(!#urgent) and (!#important)').sort(f=>f.file.mtime.ts,"desc").file.link)
Queries for Tags (fine-grained)
These get the Tasks with the relevant tags, only if they're not done yet. You can add sorting if you like.
$=dv.taskList(dv.pages('#important and #urgent' ).file.tasks.where(t => !t.completed), false)
$=dv.taskList(dv.pages('#important and (!#urgent)'' ).file.tasks.where(t => !t.completed), false)
$=dv.taskList(dv.pages('(!#important) and #urgent' ).file.tasks.where(t => !t.completed), false)
$=dv.taskList(dv.pages('(!#urgent) and (!#important)').file.tasks.where(t => !t.completed), false)
Putting it all together
Here are the full implementations:
By Note
Here are the Eisenhower Matrices for Notes in Obsidian with dataview queries.
Notes Matrix with empty Delete
cell
For notes, in a working and complex Obsidian setup, having a Delete cell often just doesn't make sense, so it is left empty in this version:
| | โผ๏ธ urgent | ๐๏ธ not urgent |
| ---------------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| โ ๏ธ important | Do next:<br>`$=dv.list(dv.pages('#important and #urgent').sort(f=>f.file.mtime.ts,"desc").file.link)` | Schedule:<br>`$=dv.list(dv.pages('#important and (!#urgent)').sort(f=>f.file.mtime.ts,"desc").file.link)` |
| ๐ณ not important | Delegate:<br>`$=dv.list(dv.pages('#urgent and (!#important)').sort(f=>f.file.mtime.ts,"desc").file.link)` | n/a |
Notes Matrix with Delete
query and cell
It is likely that you do not want to delete Notes, but in case it makes sense to you, here is a version of it:
| | โผ๏ธ urgent | ๐๏ธ not urgent |
| ---------------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| โ ๏ธ important | Do next:<br>`$=dv.list(dv.pages('#important and #urgent').sort(f=>f.file.mtime.ts,"desc").file.link)` | Schedule:<br>`$=dv.list(dv.pages('#important and (!#urgent)').sort(f=>f.file.mtime.ts,"desc").file.link)` |
| ๐ณ not important | Delegate:<br>`$=dv.list(dv.pages('#urgent and (!#important)').sort(f=>f.file.mtime.ts,"desc").file.link)` | Delete:<br>`$=dv.list(dv.pages('(!#important) and (!#urgent)').sort(f=>f.file.mtime.ts,"desc").file.link)` |
By Task
Here are the Eisenhower Matrices for tasks in Obsidian with dataview queries.
Tags Matrix with Delete
query and cell
In some circumstances you do want to see the deletable tasks, if only for context of the other work.
| | โผ๏ธ urgent | ๐๏ธ not urgent |
| ---------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| โ ๏ธ important | Do next: <br>`$=dv.taskList(dv.pages('#important and #urgent' ).file.tasks.where(t => !t.completed), false)` | Schedule: <br>`$=dv.taskList(dv.pages('#important and (!#urgent)'' ).file.tasks.where(t => !t.completed), false)` |
| ๐ณ not important | Delegate: <br>`$=dv.taskList(dv.pages('(!#important) and #urgent').file.tasks.where(t => !t.completed), false)` | Delete: <br>`$=dv.taskList(dv.pages('(!#urgent) and (!#important)').file.tasks.where(t => !t.completed), false)` |
Tasks Matrix with empty Delete
cell
For tasks occasionally you don't want to purge them, so here's a version without the delete query:
| | โผ๏ธ urgent | ๐๏ธ not urgent |
| ---------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| โ ๏ธ important | Do next: <br>`$=dv.taskList(dv.pages('#important and #urgent' ).file.tasks.where(t => !t.completed), false)` | Schedule: <br>`$=dv.taskList(dv.pages('#important and (!#urgent)'' ).file.tasks.where(t => !t.completed), false)` |
| ๐ณ not important | Delegate: <br>`$=dv.taskList(dv.pages('(!#important) and #urgent').file.tasks.where(t => !t.completed), false)` | n/a |
[^1]: Address at the Second Assembly of the World Council of Churches