How I conduct weekly reviews with Obsidian

19 February, 2023 | 12 min read


The unexamined life is not worth living.
ā€” Socrates

Periodic review and reflection has been a stable in my life for a long time. The idea is simple: take a moment to reflect on the past week, and plan for the next one.

This has helped me to stay on track, and to keep my goals in mind. Taking the time to review one's week is a fantastic approach to improvement in life. It's a way to keep track of what's working, what's not, and improve on the latter.

I have found Obsidian to be a great tool for conducting reviews, and I've automated much of the process to make it as frictionless as possible.

The reviews are predicated on me writing my daily notes in Obsidian, as it draws information from those notes for easy review. Writing daily notes is not as time consuming as you may think.

  • šŸŒ… In the morning, I log my weight & how many hours I've slept.
  • ā˜€ļø As I go about my day, I note down what I've done and some thoughts regarding it. When I work on any of my projects, I link to the relevant notes.
  • šŸŒ™ In the evening, I write a summary, and what I plan to do the next day.

I've been doing this for a while now, and it's become a habit. I don't even think about it anymore, I just do it.

What I really like about this approach is that it's not a chore. I don't have to write my daily notes. Skipping a day doesn't break anything. And it shouldn't. It's just a tool to help me reflect on my life. I can do that with or without the tool, but it does help. So no stress if you decide to take a vacation.

This post is a continuation of my previous post on how I use Obsidian for managing my projects and goals. I highly recommend reading that post first, as projects & goals are the centerpoint in the weekly review notes.

Plugins used

I use quite a few plugins to make this process as frictionless as possible. Here's a list of the ones I use:

Calendar is used to display my daily notes in a calendar view. This is useful for quickly jumping to a specific day. I also use it to create notes sometimes, but that is usually done with QuickAdd. Calendar and Periodic Notes are used together to create the weekly review notes, and occasionally daily notes.

Templater is used because notes Periodic Notes / Calendar don't support very powerful templating by default. Therefore, I use Templaters Trigger Templater on file creation command to support some more advanced templating. After creating a new note, Templater will run on the file, and replace the contents with the result.

Dataview is used to extract information from my daily notes, and display it in the weekly review notes. Likewise with the core Obsidian feature for creaing queries in your notes.

Toggl Track Integration is used to extract information from my Toggl time tracking, and display it in the weekly review notes.

QuickAdd is used to quickly jot down notes on what I've done to my daily notes. It can also create the daily notes, in case I make a log entry before I've created the note for the day.

Daily notes

Let's go through the process of creating a new daily note, and how it's used in the weekly review notes.

You'll see Dataview properties be used in the template (e.g. Sleep::). This is because Dataview is used to extract information from the daily notes, and display it in the weekly review notes.

In QuickAdd, I have a capture command that captures to the daily note for the current day. This is what I use to quickly jot down notes on what I've done. It captures to ## What did I do today? in the format - {{DATE:HH:mm}} {{VALUE}}\n, which looks like - 09:34 Daily QT.. As mentioned previously, I also link to my projects here. Say I'm working on a project called My Project, I would link to it like this: - 11:30 Worked on [[My Project]]. Made progress on X and finished Y.. Each such entry is aggregated into the weekly review, as we'll see later.

You can add this note to your vault as a template, and then configure Periodic Notes to create a new note for each day. I personally have the notes created in the bins/daily folder with the format yyyy-MM-DD - ddd MMM D, which looks like 2023-02-19 - Sun Feb 19. This is important. The weekly review notes will use this format to link to the daily notes, which is how it gathers data from them.

Daily Journal Template

This is my daily note template. I'm including it here for reference. The workflow works with any template, as you can simply remove the parts in both templates you don't need.

---
aliases: [{{DATE:ddd MMM D YYYY}}]
Tags: šŸ¤µ/journal
---
<< [[<% tp.date.now("gggg-MM-DD - ddd MMM D", -1) %>]] | [[<% tp.date.now("gggg-MM-DD - ddd MMM D", 1) %>]] >>
# {{DATE:dddd MMMM D, YYYY}}
---
## Tracking
Weight:: 
Sleep:: 
Energy:: 
Day Rating:: 
Diet Rating:: 
Daily Summary:: 

---
## What did I do today?


### What are today's 3 objectives?
Follow process for daily planning and plan your day.
Note any thought here, or delete the section.

#### How are you challenging yourself to grow today?
- 

## Journal
### Thoughts


---
## Files Created Today
```dataview
list file.ctime
where file.ctime > this.file.day and file.ctime < (this.file.day + dur(1 day))
```
## Files Modified Today
```dataview
list file.mtime
where file.mtime > this.file.day and file.mtime < (this.file.day + dur(1 day))
```

Weekly review

Below, I've attached my weekly review template. I'll walk you through it, section by section.

The first thing you'll see is the header. It's simply the week number for aesthetics.

Summarizing the week

Next is a Dataview table over the daily notes for the week. It shows the weight, sleep, energy, day rating, and diet rating for each day. This is useful for quickly seeing how my week went. Sleep is based on hours, energy is based on a 1-10 scale, and the other ratings are based on a 1-5 scale. Ratings are very subjective, but I find them useful for getting a quick overview of how my week went.

Weekly overview table

Then there's a section for doing a quick summary of the week. This is also a Dataview property, as it's used in other notes (e.g. monthly reviews, to get a high-level overview of what I've done during the individual weeks).

Under that is another Dataview table which lists the daily notes along with their daily summaries. This helps me summarize for the week.

Then there's a section for wins. This is a query that looks for all notes with the wins tag, and displays them. I use this to quickly jot down things I've done well during the week, or anything great that happened. It's great to celebrate accomplishments, and this helps me do that.

Finally, there's a section for lessons learned. This is a query that looks for all notes with the improve tag, and displays them. I use this to quickly jot down things I've learned during the week. It helps me reflect on what I've done, and what I can do better.

Reviews

I conduct reviews of my health, projects & goals, time tracked, and finances.

The health review is quite sparse, as I mostly use other apps to track my health. Namely, Apple Health & Fitness, with metrics tracked on my Apple Watch. Getting an overview of those metrics at least weekly is useful, and I use this section to do that.

The projects & goals review is a bit more involved. I use the Dataview API to extract information on all of my projects and display them here. Then, I use the Obsidian querying feature to extract information on the projects from my daily notes. Any mention of a project in a daily note is aggregated into the weekly review right here.

This is useful for quickly seeing how my projects are going, and what I've done during the week. This overview lets me reflect on the projects & goals, so I can make adjustments as needed.

Here's a screenshot of a project and a short review. First is the header with the project name, and then a query for each daily note that week which mentions the project.

Project review

Under the query, I note down some quick points on what I've done, and what I plan to do next week.

Goals are similar to projects, but they're more high-level. I can still see any mention in the daily notes here, but I usually don't link to them, as I use projects to track the actual work.

For goals, I've taken to use principles from The 12-Week Year. I measure lag indicators, which are things that are a result of my actions, and lead indicators, which are things that I can control to get the results I want. This is usually a mix of metrics and habits performed each week. Here's an example of a goal review:

Goal review

The time tracked review is a result of my experiments with time tracking. I use Toggl to track my time, and then the Toggl Track Integration plugin to show a nice graph over the week. I use this to see how I'm spending my time, and to make adjustments as needed.

The review questions here were inspired by Indistractable.

Lastly, I do a review of my finances. I use a few apps to facilitate this, so it's really just about checking the flow of money in and out of my accounts.

Planning

Finally, I have a practice for planning my following week. Here, I ask myself the following question:

Given what I did last week, and what I need to improve, what can I do this week to get the most of my week?

And then I jump into planning the week by timeboxing my calendar.

Weekly Review Template

# Week {{date: ww - yyyy}} Review
---

```dataview
TABLE  weight as Weight, sleep as Sleep, energy as Energy, day-rating as "Day Rating", diet-rating as "Diet Rating"
from #šŸ¤µ/journal 
where contains(this.days, file.link)
sort file.day desc
```

# This week ā€” notes
Weekly Summary:: <% tp.file.cursor(0) %>

```dataview
TABLE WITHOUT ID
	file.link AS "Daily Summaries",
	daily-summary as " "
from #šŸ¤µ/journal 
where contains(this.days, file.link)
sort file.day desc
```


```query
tag:wins (file:<% tp.date.now("YYYY-MM-DD", -1) %> OR file:<% tp.date.now("YYYY-MM-DD", -2) %> OR file:<% tp.date.now("YYYY-MM-DD", -3) %> OR file:<% tp.date.now("YYYY-MM-DD", -4) %> OR file:<% tp.date.now("YYYY-MM-DD", -5) %> OR file:<% tp.date.now("YYYY-MM-DD", -6) %> OR file:<% tp.date.now("YYYY-MM-DD", -7) %>)
```

```query
tag:improve (file:<% tp.date.now("YYYY-MM-DD", -1) %> OR file:<% tp.date.now("YYYY-MM-DD", -2) %> OR file:<% tp.date.now("YYYY-MM-DD", -3) %> OR file:<% tp.date.now("YYYY-MM-DD", -4) %> OR file:<% tp.date.now("YYYY-MM-DD", -5) %> OR file:<% tp.date.now("YYYY-MM-DD", -6) %> OR file:<% tp.date.now("YYYY-MM-DD", -7) %>)
```


---
# Health Review
- [ ] Review Health app: how are the metrics?

## Metrics
```dataviewjs
dv.paragraph(`
			 This week, you slept an average of ${dv.current().days.map((d, i, a) => dv.page(d.path).sleep / a.length).filter(p => p).reduce((a, b) => a + b, 0).toFixed(2)} hours.
			 `)

dv.paragraph(`
			 This week, you rated your energy an average of ${dv.current().days.map((d, i, a) => dv.page(d.path).energy / a.length).filter(p => p).reduce((a, b) => a + b, 0).toFixed(2)}.
			 `)

dv.paragraph(`
			 This week, you rated your day an average of ${dv.current().days.map((d, i, a) => dv.page(d.path)["day-rating"] / a.length).filter(p => p).reduce((a, b) => a + b, 0).toFixed(2)}.
			 `)

dv.paragraph(`
			 This week, you rated your diet an average of ${dv.current().days.map((d, i, a) => dv.page(d.path)["diet-rating"] / a.length).filter(p => p).reduce((a, b) => a + b, 0).toFixed(2)}.
			 `)
```


---
# Review
## Project Review
> What has been accomplished? 
> What has changed in the environment? 
> What's next?
> Are there projects that you can take on, or are you at capacity?

<%*
	const dvApi = app.plugins.plugins["dataview"].api;
	const activeProjects = dvApi.pages("#project").where(p => p.status === "In Progress").values;
	let text = "";
	activeProjects.forEach(ap => text += `### ${ap.file.link}\n\`\`\`query\n "${ap.file.name}" (file: ${tp.date.now("YYYY-MM-DD", -1)} OR file: ${tp.date.now("YYYY-MM-DD", -2)} OR file: ${tp.date.now("YYYY-MM-DD", -3)} OR file: ${tp.date.now("YYYY-MM-DD", -4)} OR file: ${tp.date.now("YYYY-MM-DD", -5)} OR file: ${tp.date.now("YYYY-MM-DD", -6)} OR file: ${tp.date.now("YYYY-MM-DD", -7)})\n\`\`\`\n- \n\n`)
	tR += text;
%>

## Goal Review
> What has been accomplished? 
> How has your execution rate been?
> What's next?

- [ ] Track lag and lead indicators.
- [ ] Write down execution score.
- [ ] Analyze indicators & execution score.

<%*
	const dvApi2 = app.plugins.plugins["dataview"].api;
	const activeGoals = dvApi2.pages("#goal/ongoing").where(p => DataviewAPI.date(p.Deadline.toString()) < DataviewAPI.date(moment(DataviewAPI.date("now") + DataviewAPI.duration("6 months")).format("YYYY-MM-DD"))).values;
	let text2 = "";
	activeGoals.forEach(ag => text2 += `### ${ag.file.link}\n\`\`\`query\n "${ag.file.name}" (file: ${tp.date.now("YYYY-MM-DD", -1)} OR file: ${tp.date.now("YYYY-MM-DD", -2)} OR file: ${tp.date.now("YYYY-MM-DD", -3)} OR file: ${tp.date.now("YYYY-MM-DD", -4)} OR file: ${tp.date.now("YYYY-MM-DD", -5)} OR file: ${tp.date.now("YYYY-MM-DD", -6)} OR file: ${tp.date.now("YYYY-MM-DD", -7)})\n\`\`\`\n- [ ] Track lag and lead indicators\n- [ ] Write down execution score\n\nExecution score: \nReview and write analysis of indicators and execution score here.\n\nAnd write progress update here. What is working? What isn't working? Did you average +80% execution score? If not, how can you improve it? \n\n`)
	tR += text2;
%>

## Time Review
```toggl
SUMMARY FROM {{monday:YYYY-MM-DD}} TO {{sunday:YYYY-MM-DD}}
```
- [ ] Go to [Toggl](http://track.toggl.com) and review the previous week. Did you spend your time as you wanted?

### Improvements? Comments?


### What to focus on next week?


### Reflect
**When in my schedule did I do what I said I would do, and when did I get distracted?**

### Refine
**Are there changes I can make in my calendar that will give me the time I need to better live out my values?**


## Financial Review
- [ ] Check your account balances
- [ ] Any changes to your situation?
- [ ] Opportunities?

---
# Planning
Open your [Calendar](https://calendar.google.com) and start planning.
Follow your routine for weekly planning.

šŸ‘‰ Make sure you improve based on what you've learned this week.


---
### Files created this week
```dataview
list file.ctime
where file.ctime >= date({{monday:YYYY-MM-DD}}) and file.ctime <= (date({{sunday:YYYY-MM-DD}}) + dur(1 day))
```

---
Year: [[{{date:yyyy}}]]
Month:: [[{{monday:yyyy MM}}]]
Days:: [[{{monday:yyyy-MM-DD - ddd MMM D}}]], [[{{tuesday:yyyy-MM-DD - ddd MMM D}}]], [[{{wednesday:yyyy-MM-DD - ddd MMM D}}]], [[{{thursday:yyyy-MM-DD - ddd MMM D}}]], [[{{friday:yyyy-MM-DD - ddd MMM D}}]], [[{{saturday:yyyy-MM-DD - ddd MMM D}}]],[[{{sunday:yyyy-MM-DD - ddd MMM D}}]]

Liked this post? Join the newsletter.