Programming your attention with Roam Research and ∆

9 minutes reading time

In his 1987 book, the philosopher Derek Parfit posed the following thought experiment: He asks you to imagine entering a “teletransporter”, a machine that puts you to sleep, records your molecular composition, breaking you down into atoms, and relaying it to Mars at the speed of light. On Mars, another machine re-creates you (from local stores of carbon, hydrogen, and so on), each atom in precisely the same relative position. The person on Earth is then dispersed into individual particles. Is the teletransporter a method of travel? Is the person on Mars the same person as the person who entered the teletransporter on Earth? Imagine then, that the teletransporter is upgraded. Hence, the Earth machine no longer destroys the person who enters it but instead can make infinite replicas.

Leaving aside the philosophical discussion, the reason I bring this up is that this upgraded version is how I remember the way the delta (∆) feature in Roam Research works.

Delta (∆) is a teletransporter for thoughts

When you add the ∆ shortcode {{[[∆]]}} to a block and activate it, Roam does a few simple things under the hood. It duplicates the block in place and sends the original block forward to the specified point in time. It adds an #r/moved tag inside the shortcode brackets to the newly cloned block and adds an asterisk which is linked to the original block which has now be moved to the future date. Each time you click a delta button, Roam performs this teletransporter trick. There’s a lot of confusion about what ∆ enables. So what does this actually help you do?

Spaced Repetition

Most of the talk so far around the ∆ function has been around its use for Spaced Repetition (SRS). Lukas Kaweru wrote up an initial guide for spaced repetition, which I highly recommend you read. He provides an excellent overview of how to use ∆.

In this article, I want to show you several ways I have been experimenting with ∆ over the last month or so.

First, remember, the feature at the time of writing is very minimal. Hopefully, the Roam team are hard at work adding more UI affordances to make it much more accessible and easier to use.

Programmable attention

SRS is just the tip of the iceberg, Roam has far greater aspirations as a tool for thinking. The key concept is Programmable Attention; directing your attention to things you want to do, learn or master at the right time without needing to expend effort to do so. Spaced Repetition as flashcards is the defacto example. Let’s say you’re learning a new language, over time, you’ll have hundreds of flashcards. It would be overwhelming if you had to manually decide which you choose to look at on any given day. Instead, by deferring that to an SRS algorithm, you can simply choose to spend 10 minutes learning Esperanto and let the system direct your attention.

Snoozing Tasks

Let’s dive in with the more obvious use-cases surrounding tasks. ∆ gives us the basis for recurring tasks but from a Programmable Attention standpoint, you can look at it as a way of directing the attention of your future self. If you are familiar with the idea of snoozing an email to reappear on a day in the future, or even just lowly reminders, it is merely a way of deferring something for your future self to address. That is a form of Programmable Attention. So to simply snooze a task to tomorrow, or a day in the future ∆ is perfect.

When your cursor is sitting on a TODO block, just hit Alt-Enter (if you use Windows) or Option-Enter (if you’re using a Mac) and send it to tomorrow. As I use a Mac, throughout the rest of the article I’ll continue to refer to Option. On Windows, swap it out for Alt.
Snooze your tasks
If you don’t complete it the following day, you can continue to defer it by clicking the ∆ button.
Defer tasks with ∆
By default, when you click a ∆ button, Roam sends it 1 day into the future. I’ll explain a little more about this in the next section.

Recurring Tasks

I don’t use tasks heavily in Roam but ∆ does begin to address one of their most significant limitations; having them recur. A typical example might be a daily checklist.

Let’s look at how you could set one up to repeat daily. First, create a template for your TODOs. In my example, I have a Templates page and then append the Daily TODOs block with the tasks I want to repeat each day.
Tasks template
On your daily page use double parentheses (( )) to search for your Daily TODOs block and add it to the page.
Inserted on Daily Note page
Click the block and choose Apply Children -> as text. This will pull in your daily TODOs to work through. You can, of course, add anything else you need to get done that day. Then, with your cursor in the Daily TODOs block, type in the following ∆ magic incantation: {{[[∆]]:1+0}}
Setting up the repeating ∆
Here, we’re setting up ∆ manually to make sure we control exactly how it’s going to work. If you’re struggling to figure out how to type the ∆ symbol, it’s Option-J on a Mac keyboard. On Windows, it’s a little trickier with, Alt-9-1-6 (While holding Alt down, type the number 916 to generate the right character). If you use a text expansion tool, you might like to add it with a shortcut you can remember easily.

The crucial part is the numbers following the colon. {{[[∆]]:1+0}} In our example here, we want daily repeating tasks. The first number, 1, is when we next want it to occur from today. It’s important to note that when you’re setting up a ∆ the numbers are calculated relative to the day you set it up. So here, it’s September 26th. 1 day in the future is September 27th. The second number is the offset for when it’ll next occur when you click the ∆ button. Setting it to zero means that it’ll always be :1+0 so it’ll repeat every day. If you wanted to repeat it weekly, it’d be :7+0, and so on.
If we describe it as :X+Y, you can remember it as it being X days from now (now being the date when you click the ∆ button) and then add Y to X each time you click ∆ in the future.
If you don’t manually set anything, it defaults to X = 1 and Y = 2. (:1+2). This means the default pattern is you’ll see it tomorrow, then three days later, then five days later, seven days later and on and on.

Back to our daily tasks, check off your TODOs as you complete them. When you’ve done the last one for the day, just click the ∆ button which will send the Daily TODOs heading onto tomorrow’s daily note.
Tomorrow when you start work, click the block, choose Apply Children -> as text again and start checking off those TODOs. At the end of the day, click the ∆ button and repeat. Simple.

Two handy things:
1. Clicking the asterisk that appears after clicking the button will jump you to the next iteration.
2. If you visit the Templates page, you’ll see the linked references next to the Daily TODOs heading, and it’ll show you your complete TODOs history.

Viewing the history trail

Unfinished tasks

Unless you’re a machine, inevitably, you’re not going to complete all your tasks every day. You can use ∆ to “snooze” your TODOs. If you have a modern email client, you may be familiar with this form of programming your attention. You’re intentionally choosing when you will give the email (or task) your attention to work on it.
The dirt-simple way to do it is with the keyboard shortcut of Option-Enter on Mac or Alt-Enter on Windows. It is a shortcut to you entering the default magic incantation and clicking the ∆ button to fire the TODO block into tomorrow. Alternatively, right-click the block and choose the ∆ item to achieve the same effect.

When the next day comes, you can drag the TODO block into your Daily TODOs list to keep things neat and tidy. Since Roam creates a new block on the future page and adds a block reference to the original block that causes a problem if you want to review incomplete TODOs later. When you check off the snoozed TODO, the one you didn’t complete the previous day will still be hanging around. You’ll need to click the reference to see the TODO from the previous day and manually check that off too.

Unfinished TODOs

Here’s one way you can deal with it. Create a block reference to it by wrapping it in brackets.

Create a block reference TODO

Then, as before, use the keyboard shortcut to send the block reference to tomorrow.

Send the block reference to the future

This time if we go on to tomorrow’s daily note page and check it off

Check off the block ref TODO

You’ll see it also checks off the two TODO references on the 26th.

All TODOs checked off

Note to my Next Day Self

The Note To my Next Day Self (NTNDS) is a straightforward but powerful journaling technique I learned from Tracy Winchell.

Incidentally, as I’m writing this, Tracy recently launched a journaling course for Roam which covers this and other techniques for self-awareness and growth.

Each evening (ok, most evenings–I’m nowhere near perfect) I write a short note to my tomorrow self. In it, I set my intentions out and provide some guidance with the wisdom I’ve learned from today with love and kindness toward myself.
Initially, I had been adding tomorrow’s date to the block so that it shows up in the linked references. It worked perfectly, but I found it was easy to miss down at the bottom as the daily note page fills up throughout the day.

Instead, with ∆, all I do now is hit Shift-Option-Enter on the NTNDS block. This sends it and the child blocks onto tomorrow’s page where it sits right at the top–it’s impossible to miss and easy to find.

The Discipline

The Discipline is a relatively new practice I’ve picked up to be more intentional about how I use my time each day. I wrote a brief explanation in a twitter thread. Every day over a 10-day period (a decade, as it’s known) has a particular focus. Reminding myself each morning of my intent as I plan my day is beneficial. ∆ makes it simple since I spend so much time in Roam every day. I set up the focus patterns as templates in TextExpander snippets so that on the first day of a new decade, I can quickly insert my chosen focus pattern. I’ll then make any custom additions. For example, perhaps I’m using my create days to work on an article like this one, I will pre-emptively add that in to direct my attention when the day comes.

In my example below, you may be wondering why I call the section [[Public]].To keep me accountable, I also try to write a tweet about my intent for the day, so I add that to the block in the morning and tweet it out.

Setting up a new decade of The Discipline

Here’s my Standard Decade template I use in TextExpander to set up the decade.

- [[Public]] #[[Standard Decade]] {{[[∆]]:0}}
    - Today is 🔌 Connect day
- [[Public]] #[[Standard Decade]] {{[[∆]]:1}}
    - Today is 📖 Reading day
- [[Public]] #[[Standard Decade]] {{[[∆]]:2}}
    - Today is 📚 Study day
- [[Public]] #[[Standard Decade]] {{[[∆]]:3}}
    - Today is 🕹 Play day
- [[Public]] #[[Standard Decade]] {{[[∆]]:4}}
    - Today is ✍🏻 Create day
- [[Public]] #[[Standard Decade]] {{[[∆]]:5}}
    - Today is 📖 Reading day
- [[Public]] #[[Standard Decade]] {{[[∆]]:6}}
    - Today is ✍🏻 Create day
- [[Public]] #[[Standard Decade]] {{[[∆]]:7}}
    - Today is 🧠 Planning day
- [[Public]] #[[Standard Decade]] {{[[∆]]:8}}
    - Today is 📚 Study day
- [[Public]] #[[Standard Decade]] {{[[∆]]:9}}
    - Today is 📖 Reading day
    - Tomorrow is the start of a new decade

What does this do? First, the key point is that since I set up a new decade on Connect day, the first delta is :0, which means when I click the button, it’ll appear on today’s daily note page. Then, it’s a simple matter of Shift-Clicking on each button to send it off to its future page.
If you wanted to auto-repeat the same decade over and over, then you can alter the delta to {{[[∆]]:0+10}}, adding the same +10 to each entry. Remember to Shift-Click at the end of the day, unless you want to stop seeing your prompt in the future. I prefer to only set it up for a single decade because part of the practice of The Discipline is to choose the focus of the decade on Connect day.

Future Reviews

One final idea I have begun experimenting with is a more dynamic system to augment my Readwise daily review workflow. Once I have my books and article notes in Roam, I want to continue the progressive summarisation I have already started. Until now, I’ve been setting specific review dates as metadata attributes to have them show up as linked references on the daily note page. However, since it’s not essential to review that day if I don’t have time, I use a query to find past reviews I’ve missed. It’s a pain to have to go through them and pick more arbitrary future dates though.
Once again, ∆ to the rescue. On the literature note or book notes page, I will do one of two things. If I’m lazy, I’ll hit the keyboard shortcut to send the title attribute block to the next day.

Sending Book Notes into the future

Or I’ll manually add a ∆ shortcode with the next time and interval I want to see it. Usually, I want to review it in two or three days to start with, and then I’m typically pushing it 5 or 6 days on after that, {{[[∆]]:3+5}}. I actually use a TextExpander snippet to randomly select from a few choices so that I don’t necessarily know when it’ll show up next.

A daily note page will often look something like this first thing in the morning.
Daily Notes with ∆ blocks

I’m not sure how well this will work over the longer term as the notes stack up, it could be quite a busy daily notes page when I open it each day. Though, it’s easy enough to drag the blocks into the right sections in my daily note template I insert each day. If I review the page and I no longer want to see it again, I don’t need to do anything else. Otherwise, I’ll hit the ∆ button to send it on according to its schedule.

Roam’s new ∆ feature opens up a whole new way of teletransporting your notes and ideas to direct your attention and resurface them at the right time. I’m excited to see where this leads once we can customise the algorithms further and more visual affordances to control how they’re displayed and organised. I’d love to hear from you with your own use-cases.

Thanks to Alexander Hugh Sam for reading an earlier draft of this article and providing lots of excellent feedback.

Topics: , , , , , ,

Got any questions or comments? Drop me a message on Twitter (@elaptics).