Molecular Notes: Practice

[ productivity ]

In this Part 2, I discuss the practical implementation of Molecular Notes in Obsidian. I explain how I organise my Second Brain (Tags, Folders, Topics) and present detailed workflows for ingesting different types of content. I also explain how one can extend Obsidian, giving the example of Polymer – a spaced repetition application that I built on top of my Second Brain.

After reading this post, if you would like to clone my setup, head over to the Molecular Notes GitHub repository and follow the instructions!

Contents

Choosing software

I split the post into Part 1 and Part 2 to emphasise the difference between philosophy and implementation. Molecular Notes (as a note-taking philosophy) is not tied to any particular software tool. The only non-negotiable constraint is strong support for bidirectional links – when you link from note A to note B, note B should be aware that it has just been linked to.

Depending on your workflows, you may have other requirements for an app. For me, some other minimum requirements are:

I use Obsidian, which nails all of these requirements and offers many other great features. Obsidian is built for linked notes and is naturally suited to Second Brains. It is hackable, offering deep customisation and flexibility. Since it is essentially just a wrapper around simple text files, I don’t have to worry about being “locked-in” to Obsidian (in fact, I often interact with my notes from other apps). Obsidian works perfectly well offline, while still providing benefits like cloud-syncing.

That said, I can completely understand that Obsidian may not be the right app for everyone. It has the same vibe as a programming environment / IDE, which is great for me, but perhaps annoying for non-programmers. In the rest of this section, I briefly comment on several other options for software (I’ve tried most of them). For readers who are already sold on Obsidian, feel free to skip ahead.

Notion

I have written extensively about Notion elsewhere. I once used Notion to implement Zettelkasten – my first iteration of a Second Brain inspired by Sonke Ahrens’ How to Take Smart Notes.

Notion is an extremely powerful tool – it’s certainly possible to implement Molecular Notes in Notion and I know several people who happily use it for their Second Brain. I am a heavy user of Notion for PKM (personal knowledge management), but I moved my Second Brain away from Notion for several reasons:

RemNote

RemNote is a note-taking app that treats spaced-repetition as a first-class citizen, while also providing strong support for bidirectional linking. I used RemNote religiously during university and the spaced-repetition functionality was a game-changer – it allowed me to memorise content in the most efficient way possible.

The main reason why I shifted to Obsidian for my Second Brain is that Obsidian is more hackable and extensible. With RemNote, there’s not much you can do to customise the interface and all the notes are stored on RemNote’s servers. Additionally, for my Second Brain, spaced repetition (at least in the way RemNote does it) isn’t terribly important.

Roam Research

Roam has a credible claim to being the app that sparked the renaissance in Second Brains. It is heavily optimised for linked thinking and would be a great app for Molecular Notes.

My main criticisms:

That said, there are several great things about Roam:

VSCode

VSCode is an IDE (interactive development environment) that I use for most of my software development. I often use VSCode to interact with my Obsidian notes (e.g when I want to do special find-and-replace operations across the entire database).

However, it turns out that there are VSCode extensions (like Foam and Dendron) that essentially turn VSCode into an Obsidian clone. I use Dendron at work because I don’t have access to Obsidian behind the company firewall.

These apps are quite similar to Obsidian but the UX is slightly less polished because of the IDE’s constraints. The learning curve was a lot steeper since the target audience for these apps are software developers (not many “normies” have VSCode installed!). Unless you are obsessed with VSCode (not unreasonable!), I think Obsidian offers a better note-taking experience.

OneNote/Evernote

Avoid! The difficulty of linking internal notes means that these apps cannot be used as effective Second Brains. I don’t think they even support bi-directional links!

Evernote was the first note-taking app I used (from 2015-2019), so I did have some sentimental attachment to it. But ultimately they failed to innovate and were left in the dust by competitors like Notion (there are many great articles on the failure of Evernote).

OneNote is actually rather good for general note-taking but not for Second Brains. Microsoft seems to be aware of this and is launching a product called Loop, which looks like a Notion clone and should therefore work as a Second Brain (presumably with all the problems of Notion).

Summary – Choosing Software

Broke: Notion
Woke: Roam
Bespoke: Obsidian
Baroque: Evernote/OneNote

All told, you need to pick a note-taking app that gels with your philosophy. The core tenets outlined on Obsidian’s website are exactly what I want:

Organising my Second Brain

People who have tried to get started with note-taking (either digitally or with pen and paper) will quickly appreciate the pain of “organisation paralysis”: it can be hard to decide how to use tags, folders, categories etc, and you often end up with a convoluted system that is impossible to maintain.

As I argued in Part 1, this doesn’t mean that we should avoid categorisation! It just means that we should focus on a simple and flexible structure.

Tags

I use tags to encode the type of a note. That is, a tag should represent “is-a” relationships: this note “is a” book note, this “is a“ Molecul e etc.

Here is a list of my most commonly used tags:

Obviously, we have the main Molecular Notes primitives: Atom, Molecule, Topic, and Sources (please refer back to Part 1 for a refresher).

All of my Source notes have an additional tag denoting what type of Source it is, e.g a book or an article. Most of my Atoms have an additional tag denoting the type of Atom, for example it could be a tool, historical event, formula, etc. In the list above you may be surprised to see “cognitive-bias” as a tag – arguably this should be a Topic instead. But so many of my Atoms are cognitive biases that I think it is a suitable tag. I bring this up to remind the reader that “practicality beats purity” – feel free to modify the system to suit your needs!

Tags make it very easy to search through notes. For example, I can quickly find all books that mention Kelly Betting using ⌘⇧F.

Additionally, Obsidian has a cool feature that allows you to colour graph nodes by tag:

Folders

Within my main Obsidian vault, I use a simple folder structure (there is no further nesting):

The folders with an underscore in front of them are “system” folders that are used by Obsidian – they don’t contain my notes.

All Atoms go in the main Obsidian vault, not in subfolders. This decision was based on the observation that opening Atoms is probably the action I do most often, so I should reduce the number of clicks as much as possible.

I use folders to house specific types of notes: Authors, Molecules, Sources, and Topics. A reasonable question: doesn’t this create duplication between folders and tags? Why bother creating a folder where everything inside it is tagged a certain way? The answer is that folders speed up navigation; they are great for “skimming” your Second Brain. For example, I often want to skim through a list of my Molecules. While I could do this using a search for “tag:#molecule”, this is such a common task that it’s more efficient to be able to simply click “Molecules” in Obsidian’s file explorer and be able to quickly look through:

The downside of this approach is that I have to remember to move a new note to the correct folder. I wrote a python script to do this for me (i.e move all notes tagged “#molecule” to the Molecules folder), but even without that, it can be done quickly using the command palette (⌘P “move” ⏎) or you can set a custom shortcut.

Topics

Topics are the main “semantic” source of structure (tags and folders are more organisational). They are a powerful tool in helping me to identify connections across domains:

I don’t have a set procedure to decide when something should be given an explicit Topic. As a very rough rule of thumb, I make something a Topic if I think more than ~5-10 notes will link to it. Some of my most-used Topics are Finance, Statistics, Philosophy, Volatility (in the financial sense), and Management (notes related to running businesses).

Volatility is an interesting example because it is actually a Subtopic of Finance, in the sense that any note related to the Volatility Topic should also be related to the Finance Topic conceptually. But in these cases, I will only link to the Subtopic. Hence if I am writing a new Atom about volatility (e.g some new options concept), even though it is indeed related to Finance, given that it is only related to Finance via its relation to Volatility, I will only link it to the Volatility Subtopic. This results in a clearer graph structure.

Don’t worry too much about deciding the best Topics. I often restructure and rename the Topics – this iterative procedure helps me remain abreast of the contents of my Second Brain.

Authors

At the top of all my Source notes, I write down the author. But rather than doing this as plain text, I make an empty Author note (containing only Type: #author) and link to that.

The advantages of this approach are threefold:

However, these advantages only materialise when there are several Sources from the same Author in your Second Brain (or you reference the Author in Atoms/Molecules). If this is unlikely to be the case, e.g if I’ve read a one-off blog post from some random author, I will leave the author as plain text.

One downside of making placeholder Author notes is that one ends up having to create a lot of notes which then need to be filed away into folders (at least according to my organisation principles). I have written a python script that does this all for me – all I have to do is make an unlinked reference e.g author: [[Firstname Lastname]] then my helper script will create a Firstname Lastname.md note and move it to Authors/.

Learning from different sources

As I explained in Part 1, a key goal of Molecular Notes is to help me learn from a variety of resources: books, textbooks, podcasts, YouTube videos etc. In this section, I explain how I make Source notes for different media types.

Before that, let me review some key principles:

Books

I have discussed at length how I consume books in a previous post. For completeness, here is a summary:

Textbooks and online courses

As discussed in Part 1, Sources are composed of concepts, context, and a thesis. The key distinction between books and textbooks (one can find/replace “textbook” with “online course” in this section since the principles are identical) is that textbooks focus far more on concepts and facts, whereas non-fiction books contain a core thesis. Thus I expect a textbook to result in far more Atoms than a non-fiction book.

Here are some guidelines when making notes on textbooks:

Probably the most differentiated aspect of my textbook workflow (compared to typical textbook note-taking) is that only 70% of the time spent making textbook notes is spent on that particular textbook. The other 30% is spent extracting relevant Atoms from other textbooks. For example, I was recently making notes on Ben Lambert’s excellent course on undergraduate econometrics. I had previously read a textbook called Forecasting – Principles and Practice that had a lot of overlap, especially on the subject of time series. So I kept this open in the right pane, and whenever there was a concept that was discussed both by Lambert and Forecasting, I would extract it into an Atom.

Previously my notes on Chapter 9 – ARIMA models looked quite similar to Chapter 10: lots of text with few links. While making notes on Lambert’s course, I progressively extracted Atoms like “AR model”, “MA model”, “ARMA model” – though note that there is still some Source-specific commentary under “Stationary time series”.

This process leaves me with a far better understanding of the concepts because I have to:

Information media

I generalise blog posts, YouTube videos, Twitter threads etc to “information media” (infomedia).

The main difference between these types of infomedia and books/textbooks is that they typically focus on a much narrower range of concepts – often just one!

In these cases, I will often directly create an Atom to explain the concept (in my own words of course) then link to the infomedia directly (not to a Source note of it). In the example below, I read a Farnam Street post about Chesterton’s fence and made an Atom for it. I didn’t create a Source note for the blog post.

Podcasts

Podcasts have been an incredibly important learning vector for me. They are an excellent way to add incremental learning to my day – as a rule of thumb, I listen to podcasts any time my body is in use but my brain is not: when I’m at the gym, walking from A to B during a commute, cooking and cleaning, etc.

There are several types of podcasts, each of which I treat differently (a list of the podcasts I consume can be found here).

I use an app called Airr that allows me to make audio highlights; when I hear something interesting, I press a button to record an AirrQuote and if convenient I make a text note (these are optional).

At certain intervals (e.g every few episodes, or every season if I’ve gotten lazy) I compile all the highlights into Source notes – either one note per podcast or one note per podcast season depending on the information density.

Journal articles

I first want to caveat by saying that I am not an academic, so my workflow for journal articles is primarily from the perspective of a “keen amateur” – I generally care more about learning techniques from the articles, as opposed to citing and building on top of them.

My Source notes for journal articles are most similar to my Source notes for books: they are often very short, highlighting just the key ideas that are relevant to my thinking.

I name the note whatever feels right – sometimes that’s the formal citation, sometimes it’s the name of the paper (if it’s particularly memorable). In the front matter for the note, I give the formal citation as a link to Zotero, which I use to store and arrange the PDFs of the papers.

Synthesis

Synthesis is one of the important parts of a Second Brain, but it is also the aspect I am least able to convey in a blog post. While I’ve built a system that aids synthesis, the truth is that it’s a process that must occur in one’s (primary) brain.

My approach isn’t to sit down and say “right, it’s time to be creative”. Most often, the process starts while I’m making notes on a particular Source: perhaps the author discusses a concept that feels vaguely familiar or has a similar flavour to something I’ve come across before. I then gently poke around my Second Brain to try and see if there’s a deeper link.

The local graph is useful here because I have configured it to show both first-degree and second-degree neighbours. The second-degree neighbours are often a fertile hunting ground for connections. In the example below, the “Goal preservation” Atom links to the AI Topic. The local graph shows not just the neighbours of “Goal preservation”, but the neighbours of “AI” too. I can then skim these to see if there are additional links to “Goal preservation”

Occasionally, I do put on my “linking cap” – I set aside some time to go through my Second Brain to remind myself what’s in there and to specifically try and make connections between Atoms via new Molecules.

Hacking Obsidian

In this section, I discuss how one can “hack” Obsidian. This section is entirely optional; it is mainly here for the benefit of the advanced users and geeks (you know who you are!) who want to push the boundaries of Obsidian.

In essence, because Obsidian is made of plain markdown files and a simple folder structure all stored locally, it’s very easy to interact with your Obsidian notes via a different interface. Here are some examples.

Third-party extensions

There are a tonne of third-party extensions available for Obsidian which require very little effort to set up. For example, the Mind Map extension lets you view your notes as a mindmap (provided you have structured them properly, using nested bullets):

Viewing notes from a text editor

Notes are just plain text in folders, which means you can interact with them via your file system. For example, on macOS, this means that your Obsidian notes show up in Spotlight search, which can be quite useful. It also means that you can reorganise your notes in Finder or File Explorer.

Slightly more advanced: I often interact with my Obsidian vault via VSCode, a programming environment.

Backlinks don’t work here, but there are several reasons why this is useful:

  1. You can use VSCode’s powerful text editing functionality. For instance, in Obsidian there isn’t an easy way to do a global find and replace across all notes, but this is trivial in VSCode (plus you can do regex find/replace rather than just plaintext).
  2. Better support for git backups. Obsidian does have a git extension, but in VSCode you can look at diffs and see exactly what is being changed.
  3. More convenient to write python scripts that interact with my Second Brain (see below).

Python helper script

As I’ve mentioned several times in this post, there are a couple of “routine tasks” that I’ve decided to automate using python. My helper script does the following:

I then set up an alias where if I run obsidian in terminal, it cleans up my library and gives me a report:

The code to do all this is remarkably simple – check out the Molecular Notes GitHub repo.

Polymer

One can also build more advanced applications. I built a spaced repetition (flashcard) tool called Polymer to help me review my notes in a different way.

Like other flashcard tools, Polymer flashes the title of an Atom or Molecule and I try to recall the contents. I then press “Show” to check my understanding, before clicking one of the Difficulty buttons to tell Polymer how hard I found it to recall the note. It then uses a dumb spaced repetition algorithm to decide when it should next show me the note.

At a high level, the tool is structured as follows:

Areas of improvement

As we reach the end of the post, I want to briefly discuss some areas where I am currently improving my workflows.

Maps of Content

I currently don’t have good entry points into most of my Topics. For example, if I want to refresh myself on concepts related to Management, I tend to wander around the local graph.

In future, I would like to have better indexing via “Maps of Contents” (MOCs). A MOC is simply a semi-structured way to explore a particular Topic. Rather than leaving the Topic note empty, I should use it to organise notes. Here is an example of a MOC I have for the Volatility Topic.

I need to eventually make MOCs for other Topics too!

Integration with PDF highlights

I’m still trying to figure out if there’s a better workflow for integrating PDF highlights with my system. This could be useful when taking notes on journal articles and textbooks.

Currently, I do all of my highlights on the first pass, then manually type notes into my Second Brain on the second pass. This has some advantages (avoiding completionism, filtering for importance) but also requires a bit more effort.

MarginNote looks promising (thanks to Lyra for the suggestion) and there are some workflows which connect Obsidian to Zotero (see this video by Artem Kirsanov).

Ongoing events

Obsidian is very well suited to creating a garden of permanent notes. But in fields like finance, one must also track ongoing events and examine how certain narratives play out over time. This is a task that traditional systems like OneNote, MS Word, or even email threads are actually quite good at because by its nature, event-tracking is more “linear” with the flow of time.

One of my exploration areas: can we design a system that combines linear event tracking with an interlinked Second Brain? I have been exploring some workflows based on Daily Notes (a popular concept in Second Brain circles), but haven’t settled on anything concrete yet.

Conclusion

Having published these posts on Molecular Notes, along with my two previous posts on How I Use Notion and How I Read Books, I think I’ve said all that I want to say about productivity tools for the time being. Writing about personal productivity always feels somewhat self-indulgent; it inevitably comes down to “this is how I do things – you should do it too!”.

Thanks to Niamh Q, Callum M, Shiv G, Lyra G, Cedric C, Joseph C for the discussions and inspiration. Writing these posts has given me a great excuse to nerd out about productivity tools and human-computer interaction with you clever people!