Beyond Spaced Repetition: Δ in Roam Research

The Delta (Δ) function in Roam is probably the most powerful feature in Roam Research that most people are either not using or using incorrectly.

Δ allows you to schedule one or more blocks to periodically resurface on your today page. It is accessed by right-clicking on the bullet of any block. If you haven’t yet explored this feature, Cortex Futura has a great article explaining how it works and some workflows that it enables.

I believe that Δ, used properly, is a powerful tool for fostering creativity. On the surface, it seems similar to more traditional spaced repetition programs like Anki. You make a prompt, it reappears periodically. Simple right? Actually, there’s more than meets the eye here, in part thanks to the powerful block+backlinks paradigm that undergirds Roam.

How I think of it is that it works kind of like time travel with clones. When you click on the Δ button for a block, the original block is sent forward in time. In its place a “clone” is created. This clone is basically a copy of the original block that links back to the original. If you have used the Δ button once for a given block, the links would look like this:

Block A at time t_0 -> Block A at time t_1

click on Δ again (on Block A), and it would look like:

Block A at time t_0 -> 
                        Block A at time t_2
Block A at time t_1 ->

The interplay of these design decisions leads to a powerful emergent property of Δ: any block that has been used with Δ leaves a trail through history (via backlinks to past today pages). For instance, here is what one of my prompts looks like:

Also, notice that the actual contents of the block can be changed when they are sent forward through time!

Programmable attention, redux

I’ve previously written about the possibilities of Programmable Attention. I believe Δ represents a powerful representation of the concept which can be applied to creative thinking in just about any field.

Part of fostering creativity is thinking about problems and ideas in different contexts. Some of this comes from the external environment, and some comes from the different conscious and unconscious mental states one might happen to be in. When you use Δ to send a block forward in time, you are in effect sending a series of linked ideas forward to your future self. Your future self then has the ability to contribute to this evolving strand of thought and send it forward in time again ad infinitum.

This is a really powerful paradigm that bears repeating: when you use Δ, you in effect create a spaced repetition prompt that can evolve with time! Leveraging this well is the key between mediocre usage of Δ and virtuoso usage.

To me, the best prompts are evolving and creative in nature. They use the Δ backlinks to their maximum potential: as a history of evolving, unfinished ideas. I have just begun exploring the possibilities here, but here is my current personal “ranking” of the best uses of Δ:

  • Good
    • writing / reflection prompts for myself
    • prompts for progressive summarization that focus on syntopical thinking about concepts
  • Decent
    • Traditional static prompts
  • Bad
    • GTD Tickler
    • TODOs
    • e.g. prompts for incremental reading, or repeating tasks

The reason why this hierarchy is important right now is because of graph pollution. With Roam’s current UI, mixing great and decent/bad prompts actually makes the Δ feature and your graph worse in general. The workaround here is after you click on Δ for a block, delete the cloned block that was left in its place. As of right now, some common UI affordances (search bar, autocompletion) just don’t work well when there are too many “filler” blocks. queries still work but are more heavyweight

Some other thoughts

One idea I’m still exploring is how Δ can work with non-linear sequences of thoughts.

We know that Δ works well with

Block A at time t_0 -> 
                        Block A at time t_2
Block A at time t_1 ->

but what would make working with sequences like

Block A at time t_0 -> Block A at time t_1
                    -> Block A' at time t_2

easier? Update 2020-10-11: Found a way to do this using block refs, PM me on Twitter if you would like to discuss or see an article.