Spaced Repetition
A short (preliminary) guide to Spaced Repetition in Roam Research
How to use Roam Research's new Delta feature to do Spaced Repetition and never forget anything again.
Note: This workflow builds on a very new feature of Roam that's still quite rough around the edges. But it's very powerful already, and I'll link to updated workflows as this feature develops.
Roam Research just released a new feature that - while still the absolute MVP and rough around the edges - already offers a fantastic way of doing Spaced Repetition in Roam. For very thorough primers on what Spaced Repetition is and why you should absolutely do it, check these essays by Gwern and Michael Nielsen.
For this guide I'm going to assume you know the basics of Roam Research, and I'm not going to explain how exactly the feature works under the hood. Instead, I'm going to walk you through a simple example, step by step.
As I write this, there's multiple ways to invoke this feature:
- right-click on a bullet and use the ∆ icon.
If the block has children, this is going to move only the top-level bullet. To see the child-blocks in the future as well, choose the
∆...
option - hit Option/Alt-Enter to immediately move the block to the future (1 day by default)
- hit Shift-Option/Alt-Enter to immediately move the block and its children to the future (1 day by default)
- manuall enter
{{[[∆]]}}
in a block
For building flashcards, I suggest you use the manual way for now. This will allow you to modify when you'll see the card next by adjusting the scheduling. {{!1!}}
is the default, meaning you see the card tomorrow, and then three days after that. But understanding how this works is quite complicated when you're reading about it, so let's jump straight into a demo.
Spaced Repetition in Roam Research
Let's say you started on September 2nd and entered a "flashcard" to learn the word "Bear" in Spanish.
This is what it might look like:
To see the card again in the future, you shift-click the Δ icon. It's important to shift-click, so that the "backside" of the card, the translation, gets moved as well. How far in the future depends on the settings of the Δ-icon. Have a look at this:
The default is to move the card to the next day, and then add two more days to the next interval: that's what 1+2
means.
In this case, this card gets moved to September 3rd, as you can see here:
If you look into the block, you see that the next inverval is now 3+2
. That makes sense: On September 2nd, the interval was "next day, then add two". So on September 3rd we see "next time in three days, and then plus two". Can you guess when the card is shown the next time?
That's right, September 6th! And now the interval is 5+2
:
That means we'll see the card in the future the next time (as I'm writing this, it's September 7th) on September 11th.
As you can see, the Delta-icon is greyed-out. If you click it, Roam is going to warn you that you're moving something further into the future that's already in the future. You can do it, but you don't generally want to "pre-punt" things.
Now let's say you're studying multiple languages or topics at once. Maybe in addition to Spanish you also want to learn German (good choice!) Today, you add a new word to your Spanish vocabulary, and you want to learn the same word in German as well. Here's how that could look like:
You can add the {{[[∆]]:1+2}}
manually too. This allows you to set the scheduling a bit different and not immediately move the card to tomorrow, compared to hitting shift-alt-enter.
Now, what do you do if you don't want to look at potentially hundreds of flashcards on your daily page every day? By filtering the tag [[srs]]
from your Daily Page, you won't see flashcards there - but if you scheduled a task for the day using ∆, you'll still see it.
But then how do you get to your flashcards? I suggest you create a page called [[SRS Decks]]
and use Roam's Query feature to build decks:
In the picture above, I've used the following query, ready for you to paste:
{{[[query]]: {and: [[srs]] [[espanol]] [[∆]] {not: [[r/moved]]} {between: [[September 8th, 2020]] [[January 1st, 2020]]}}}}
Let me talk you through it:
- [[srs]] gets you all your flashcards
- [[espanol]] means you only want those that deal with Spanish
- [[∆]] means you only want those that are scheduled
- {not: [[r/moved]]} means you don't want the previous times you've looked at the card
- {between: TOMORROW [[January 1st, 2020]]} means you get all cards that were due today or before.
The between
clause is where a lot of magic happens. It excludes cards that are scheduled for the future, and it allows you to not worry about skipping days and then missing the review. So if you don't use Roam for a day or so, no worries. Your cards will still show up for review. Do note that you need to put tomorrows date where I used TOMORROW
, so [[September 8th, 2020]] as I'm writing this on the 7th, to see the cards scheduled for today.
To build a deck for German, just substitute the relevant tag in the query, as you can see here:
If you now shift-click the ∆ in the Spanish deck, it's going to move it to the next scheduled date. Can you guess which one that is?
To find out, all you have to do is switch tomorrows date with one further in the future. I've used September 12th here:
And as you can see, "Horse" is scheduled for tomorrow, and "Bear" is scheduled for the 11th. If you want to build one big deck that includes all your flashcards, all you have to do is not include [[german]] or [[espanol]] in the query, like shown here:
And with that, you're set up for a still barebones but very useable workflow for using Roam to do Spaced Repetition. Future UI improvements will certainly make this easier and more beautiful, but you can already get a lot out of it today.
Related Topics
Join the Cortex Futura Newsletter
Subscribe below to receive free weekly emails with my best new content, or follow me on Twitter or YouTube.
Join and receive my best ideas on learning, academic workflows, and Roam Research