In academia there is a tendency to get lost in the process, so much so that academics (especially the early career kind like myself) rarely look back on the breadcrumbs we leave behind. Between teaching, research, the endless stream of leadership and service duties, and the occasional playful endeavours, there comes a time when a sanity check becomes necessary. The problem is clear, we don’t keep track of what we should. As academics, again looking at the early career kind like myself, we often suffer from impostor syndrome because of that and feeling like we haven’t done enough or worse, we haven’t been doing what we expected to do.

In the process of doing academic things we don’t realise the value of this invisible labour we engage. It should matter to us and too often we are blind to it. It matters to the process, to the chain of progression, to your career if you need a further label.

Keeping track of that invisible labour is complicated with some things easier to observe than others. For instance, for each class that is taught there is a student survey or grading metric, a data point that can be used to calibrate the grand collection of actions we engage with. But what about the actions we don’t realise need to be logged? The mentoring, the basketball games with colleagues, the failed attempts at grants, and showing care to that casual who taught your course. These invisible labours are what keep us sane in the day to day yet when it comes to identifying them to support ourselves, we can’t remember half of them.

I’ve recently experienced the sheer horror of the academic promotions process. While working on my application from Lecturer to Senior Lecturer I realised how utterly complicated and stressful this process is. Academia expects you to follow a collection of engagements that in some assemblage or the other map out just how much you have progressed over the years. Whether through measurable metrics like student surveys, slightly vague observations of how many social media engagements you have had, to the absolute obscurity of measuring peer support, the impostor syndrome finds a way to creep in and the complexities in promotion processes do not help. It is eye opening, yes, but when I found myself digging through lost emails, chat records, and crafting pivot tables to make sense of student metrics I couldn’t help but think: there has to be a better way.

Obsidian as a data entry system

By now Obsidian has become a permanent fixture in my academic workflow, and while I haven’t perfected it I have come to realise I don’t have to. I find that a refreshing epiphany to accept that this second brain is meant to be as chaotic as my own just in a slightly programmed way. At first I thought what I need is an assistant to keep track of all my academic happenings, and while I’m sure older generations of scholars probably functioned that way our contemporary sensitivities don’t allow for that anymore. Then I figured, what about AI? Major caveat, it turns out Universities are not big fans of giving corporate entities that house AI capabilities access to their data and internal systems. So, while I did have an idea for a less than elegant way of engineering a situation where an LLM could act as an assistant of mine to parse my invisible academic labour, I decided not to venture down what seemed to potentially be breaking the law! Thus bringing me full circle back to Obsidian, it’s already acting as my semi autonomous assistant of sorts so why not approach my predicament in a programmatic way.

This long winded introduction was essentially to walk any other struggling academic through the process of how I made an action logging system in Obsidian for my invisible academic labour. I’m calling it action logging for a lack of a better phrase here though maybe this evolves as well.

I’m surprised I’ve managed to maintain this system so far and for that shows some promise for ahead. Mind you this method requires some discipline but that is expected of any knowledge management approach. For me I’ve setup up some recurring weekly task reminders and it’s been sufficient, your mileage may vary. Below is a quick demo of how this plays out in my Obsidian workflow. At an arbitrary point in the week I click a button in my vault UI to trigger a Templater script. This asks me a series of questions on the kind of action I am logging, a short description, and most importantly how I can evidence this for later. This is the key element here, being able to later evidence this for promotion applications or whenever needed say during a career catch-up meeting, etc.

Academic action logger in action

But the system doesn’t simply end there with collecting data, it needs to be observable. This is where having an overview of actions becomes useful. Of course eventually how one uses this depends on where you want to use it. But the value I see is in, a) being able to at capture invisible labour that is valuable, and b) at a glance remind yourself that what you have done is valuable. So far I’ve been finding the second aspect most fulfilling.

The setup

For this system we need to first install the necessary plugins. Most of the work relies on Dataview which for most may be sufficient to show your work. To replicate the approach I’ve made requires the QuickAdd plugin by chhoumann which really elevates what you can do with Dataview or just general everyday actions in Obsidian. Between these two we now just need structure and discipline. Starting with structure, Dataview needs data points which we typically can capture as properties or tags, but we can also capture elements across our entires by reading the page with DataviewJS. The clever bit is when we can compartmentalise these datapoints into arrays.

1
2
3
4
5
- Description of action
  [category:: CATEGORY]
  [type:: TYPE]
  [impact:: LEVEL]
  [evidence:: DESCRIPTION OF EVIDENCE]

All of that goes into a single entry and that’s the beauty here, this one entry now has specific datapoints that define it and more importantly can be fetched and manipulated in Dataview. With that core structure in mind we can now map our how this structure fits into a disciplined workflow. For my purposes I need to observe actions across key areas of my development as an academic: teaching, research, and leadership. But from the introduction I’ve already discussed how it’s more than these areas so I’m including invisible labour as a fourth rather key observation to measure. To top it off why not also measure something that I feel deserves being highlighted. I landed on this structure for my purposes, but you may tweak as you like.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 📅 YYYY-WW Academic Log

date:: YYYY-MM-DD
period:: YYYY-MM-DD → YYYY-MM-DD
type:: academic-log

## 🎓 Teaching

- Description of action
  [category:: teaching] [type:: "curriculum development", "course delivery", "student supervision", "assessment", "other"] [impact:: low/high/medium/future-focused] [evidence:: null]

## 🔬 Research

- Description of action
  [category:: research] [type:: publication/review/grant/collaboration/project related/other] [impact:: low/high/medium/future-focused] [evidence:: null]

## 🏛️ Leadership & Service

- Description of action
  [category:: service] [type:: committee/governance/leadership/other] [impact:: low/high/medium/future-focused] [evidence:: null]

## 👁️ Invisible Labour

- Description of action
  [category:: invisible] [type:: mentoring/student support/conflict resolution/peer support/other] [impact:: low/high/medium/future-focused] [evidence:: null]

## 💥 Key Wins / Impact Highlights

- Description of action
  [category:: highlight] [impact:: low/high/medium/future-focused] [evidence:: null]

---

## 🏷️ Quick Tags
#academic-log #teaching #research #service #leadership #invisible-labour

The structure of this file doesn’t really matter since the system essentially needs a place to log actions then access them later in a cleaner view. I thought I may end up needing to sift through some of these entries over the week and decided to structure it for when I needed that but you can simplify it to make it a dumping ground for weekly actions. The headings I put in also serve a purpose in the code ahead since I can scan the file for those headings and add sort entries as they are added.

From here we need to start configuring how we want to capture this in the UI and that’s where DataviewJS comes in. The QuickAdd plugin lets us chain actions to a hotkey or command and one of those actions we can chain is run a script. Rather than run DataviewJS in Obsidian we will import it from an external script and then parse that through a QuickAdd sequence. This is the script I landed on after a fair bit of adjustments. It’s slightly different to the example above but I find it works for me. In the first version I wanted to template this through Templater since that was already in my workflow, but for whatever reasons that kept giving me strange behaviour with QuickAdd so I decided to simplify things and keep the templating in the script itself. Again, you can be as detailed with the template as you want to or keep it simple as I did above. In the end I’m left with an Academic Log file named after the week of the year with all entries of that week populated as I enter them so I can quickly refer back to it when needed. The script also double checks if there is a file made or this week to enter into otherwise it creates that in my notes folder.

The script essentially asks some cataloging questions like is teaching/research and further sub-cataloging (course design, project work, etc.), everything that would fit within the data structure we mapped earlier. Impact and evidence are the most important since this is what you need later when you sit down and sift through everything for the promotion grunt work. I won’t paste the full script here but it can be downloaded from my Script Gallery: https://play.hakmal.com/projects/script-gallery/scripts/action-logger.js

Linking everything up with QuickAdd

Now that we have a structure and core functionality scripted out, we can start linking everything with QuickAdd. As I said, QuickAdd essentially lines up actions to create macros and for now this is the only thing I’m using it for in my workflow but given how effective this has been I’m excited to see what else I can automate in this way. After downloading and enabling the plugin from the community repos, heading into the settings of the plugin shows us everything we can do.1 We essentially want to link the script with a command that triggers our chain of data entry into an Academic Log file.

Here are the steps I took to create my macro:

  1. Under Choice & Packages name the macro in the text filed and select Macro from the dropdown options. Add it as a choice. I named mine Add Academic Entry, this is what will be shown in the commands list for Obsidian so best keep it descriptive.
  2. Click the gear icon in the new macro we just made to open up it’s settings.
  3. In the new dialog that opens under the User Scripts section find your script (it should already be in your vault) and add it

That’s all it took! Now in your command list Ctrl/Cmd+P you should be able to find your script as a command. For my workflow I used Commander to make a clickable link on the UI so I can always find it but you could also just hotkey it through the settings at this stage if you prefer.

Making the Overview

The final piece of this data logging system is now being able to retrieve this information. This is as simple as pulling out some Dataview. I made an Academic Overview file that is just a string of Dataview embeds to separately show each type of content I’ve logged. You can adjust this to your liking but I’ve also included an at a glance view to quickly capture what I’ve done impact wise. I see this as the sanity check which is often needed just remind yourself that you are doing work whether you see it or not. It’s a simple thing but has a much bigger impact than any of the data I’ve collected. Substitute the from location to wherever you are filing your academic logs.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
table
  length(rows) as "Total activities (last 12 months)",
  length(filter(rows.item.impact, (x) => lower(x) = "high")) as "High",
  length(filter(rows.item.impact, (x) => lower(x) = "medium")) as "Medium",
  length(filter(rows.item.impact, (x) => lower(x) = "low")) as "Low",
  length(filter(rows.item.impact, (x) => lower(x) = "future-focused")) as "Future-focused"
from "00 Notes/Logs"
flatten file.lists as item
where item.category
and date <= date(today) - dur(12 months)
group by "Overview" as Overview

In this block I’m sifting through all notes in my Logs folder to find entries that fit the teaching category. Then it’s just a matter of cleaning it up and showing the information I need. To keep the overview file relevant to yearly career conversations I’ve restricted the entries to only show from the past year which I think is sufficiently to maintain a healthy exposure to this data without it become too cumbersome.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
table without id
  link(file.path, split(file.name, " Academic Log")[0]) as Week,
  item.impact as Impact,
  split(item.text, "\n")[0] as Action,
  item.evidence as Evidence
from "00 Notes/Logs"
flatten file.lists as item
where item.category = "teaching"
and !contains(split(item.text, "\n")[0], "Action achieved")
and date <= date(today) - dur(3 years)
sort file.name desc

From here, I simply duplicate this under different sections to capture entries for research, leadership, invisible labour and those key highlights. As an added bonus I’ve also used the Charts plugin and added a simple data visualisation in the at a glance section of my overview. It doesn’t do anything beyond that sanity check I mentioned. I occasionally find myself opening the overview file to remind myself that I was productive over the week/month. The script no more has me opening a log file to manually enter it and in the process feel held down by this data entry system. I’m still manually entering it but now in a less overpowering fashion.

Academic stress and the imposter syndrome of being in this profession is a real thing. Hopefully with a simple project like this some early career academic out there might be at peace knowing they are not alone.


  1. I really struggled with the UI here since the documentation shows an earlier version of the UI. This is for version 2.12.0, yours may differ. ↩︎