It has been roughly a year since I first came across Obsidian. After careful consideration trying out Tiddly Wiki, Obsidian, Roam and TheBrain, I opted for Roam. I chose Roam because of its friction-free, browser-based user interface, its product vision and the vibrant community which I was sure will drive significant innovation - and it has! After one year, I was curious to see how Obsidian has evolved. This post will walk you through my second first-impressions comparing Obsidian to Roam.
Even though I have used Obsidian for about a month a year ago, and I have now spent the past few days diving deep into its features, my experience and understanding of Obsidian is superficial. I can only offer first impressions and early thoughts on how I have attempted to set up an efficient, friction free process, mimicking my workflows in Roam. The video above is a timelaps of Obsidian loading the markdown archive of my Roam graph.
First Impressions
Obsidian feels very mature. Every aspect I looked at had depth and refinement to it. The install experience, the UI, the settings, the themes, the plugins, the development environment, the licensing model, the community. It even has a full-blown mobile app, which I hear is excellent. Unfortunately, I wasn’t able to try the mobile app as it is still in beta and not yet available through the Playstore. Since my phone is under enterprise mobile device management, I cannot install apps from unknown sources.
Next to all the good, there are also a few things that I found frustrating. I am not a fan of the editor in Obsidian. I prefer WYSIWYG. The switch between “raw” markdown and preview is very inefficient because things jump around as you switch views - e.g. a picture expanding into view. As a result, to avoid switching, you end up looking at everything in markdown most of the time. I wasn’t able to get Grammarly and/or ProWritingAid working in the editor. I am sure I can solve this eventually, but for now, this seems to be a gap. And I miss block references... and before you jump in to say, “But Obsidian has block references!”, let me assure you, I am aware, but the process around those is light-years from the efficiency and power of block references in Roam. Even as I was writing this article in Obsidian, I felt the painful lack of block references.
Paradigm shift
Roam is the “Excel of word processing”. It is built on the concept of blocks, where a block is a single paragraph of text. Similar to Excel, where a worksheet is a matrix of cells, in Roam a document is a chain of blocks linked to each other and the page via parent/child references. Roam provides an outliner to edit your blocks. You can reference blocks, you can move them, block have versions, you can embed them, transclude them, filter them, search them, etc. Roam uses the contextual information inherent to the outline structure, plus the page links, attributes, and tags within the blocks, to make your notes searchable and filterable. Through this approach Roam lowers the barrier to taking notes. You don’t have to deal with the mental burden of deciding where to place a certain note. You simply type whatever comes to mind on the daily notes page and use search and references later to find the information when you need it. This zero barrier approach to taking notes is a very important ingredient of the low friction experience in Roam.
Obsidian is a very sophisticated markdown file editor. Its unit of information is the markdown file. There are many tools in Obsidian to help you search and link markdown files. Heading levels 1..6 (sections) offer similar contextual information as outline levels in Roam. For example, you can limit search results to sections and subsections. Obsidian also recognizes the concept of block references, though some of the functionality, such as listing all the mentions of a block requires a bit of manual work, while these come out of the box in Roam. Since the unit of information in Obsidian is the document, you need to adopt a more atomic approach to note-taking. Plugins such as Note Refactor offer an efficient way to break monolith documents into more atomic notes.
Robert Haisfield’s post, Using Daily Notes as a convert from Roam provides a very helpful perspective on the paradigm shift required when moving your workflow from Roam to Obsidian.
Meeting workflow case study
One of my key use-cases is taking notes in meetings and tracking actions. To get a better feel for Obsidian, I experimented with porting my established workflow to Obsidian.
If you are interested in my existing Roam workflow, here are two blog posts with the details:
My proof-of-concept demonstration involves a simple scenario. First, I am in a meeting with Peter. We talk about Project A and I agree to discuss something with Joe because of our conversation. In the meeting with Joe I am reminded of the topic I wanted to discuss with him, and I take notes on the result of our conversation. My notes with Joe are also accessible in the meeting minutes with Peter. The next time I meet Peter, I can easily access those notes.
I will walk you through this scenario first showing my workflow in Roam, then mimicking it in Obsidian. To give you a measure of efficiency, I will count the number of keystrokes (not counting the actual detailed notes) and mouse clicks in both cases.
May the workflow with the lower number of clicks win!
Before we dive in, I want to remind you again that I am new to Obsidian. My workflow in Roam results from months of refinement, my workflow in Obsidian is an initial concept of how I would imitate Roam in Obsidian. I am probably stuck in the Roam paradigm, which is clearly not always efficient in Obsidian.
My workflow in Roam
Create meetings on the Daily Notes page
I use the Daily Notes page to capture my agenda for the day.
62 keystrokes: 6 keystrokes to type
in ;;day
+ enter
to run my
daily notes template that will include the “Today’s meetings” block plus an
empty block nested under it. Then 29+27 keystrokes to type 08:00-08:30 [[Zsolt - Peter
+ enter
(to accept autocomplete that will
print [[meeting/Zsolt-Peter]]
)
+ enter
(for new line). The process is very similar
for the meeting with Joe, just two characters shorter (Peter vs. Joe).
Open Peter’s meeting and add an action to discuss something with Joe
For standing meetings I keep the notes for each meeting on a single page with meeting notes for each meeting nested under the relevant date. To make notes searchable, I nest discussions under links to projects. In my vocabulary, everything that requires more than a single step to achieve is a project.
#discussWith #waitingFor and #promisedTo are my tags to capture actions. I use #discussWith when I agree to follow up on a topic with another person. I use #waitingFor when the person I am speaking to has promised to deliver something to me, and I use #promisedTo when I make a promise to the individual to provide him/her with something.
Notice how, for Project A I have recorded an action to discuss something with Joe.
1 click, 39 keystrokes: click
at the last character of “Notes”
then enter
to get a new line. 6 keystrokes to
type /toda
+ enter
which will
convert into a link with today’s
date. enter
+ Tab
+ 11
keystrokes + enter
(autocomplete) to get the nested
link for [[Project A]]
. enter
for
new line. Tab
, then ctrl+Enter
to
create a nested Todo.
Type #disc
+ enter
+ space
+ [[Joe
+ enter
(autocomplete)
+ :
, to create the action item.
Open Joe’s meeting page and his personal page
When I am preparing for the meeting with Joe, I first open my page with the meeting minutes, then I shift-click on Joe’s name to open his personal page in the right-hand sidebar. Notice how on Joe’s personal page I have three queries. This is part of my template and helps me see the actions I have recorded for Joe.
2 clicks, 1 keystroke: click
on the meeting on the daily notes page to open
it. shift
+ click
to open
Joe’s page in the sidebar.
Create a block reference in Joe’s MoM for the action in Peter’s MoM
I create a block reference to the action that I recorded on Peter’s Minutes of Meeting (MoM). I will nest my notes about the discussion with Joe under this block reference. This will allow me to see the notes I took during the meeting with Joe, also while I am viewing Peter’s MoM (see last step for explanation).
3 clicks, 24 keystrokes: I assume the template is already there, i.e. this is not our first meeting
in the series. My process is very similar to the one described earlier.
I click
once, then execute 20 keystrokes to enter
today’s date and create [[Project A]]
. I
then ctrl
+click
to drag the action
from the right sidebar to the page on the left to create a block reference.
Finally, I click
at the last character of the newly
created block reference, then
press enter
and tab
to create
a nested bullet under the reference, and type my notes related to the action
item.
Read the block references in Peter’s MoM
Finally, this is how Peter’s meeting page looks after my meeting with Joe. Notice how I can easily access all the discussions about the action item by clicking on the references.
1 click: to open references.
My workflow in Obsidian
Create meetings on the Daily Notes page
In Obsidian I have a template for Daily Notes. When I open Daily Notes with alt+D, it comes pre-populated with my template, containing the text “Today’s meetings” with a bullet nested under it.
64 keystrokes: I need one additional keystroke compared to Roam, even though I don’t need
to run my daily template like I did in Roam. It takes 33+31 keystrokes to
type 08:00 - 08:30 [[Zsolt - Peter]]
(notice I have
spaces between the numbers and the dash, as without these, numbers would
look funny). I press enter
(to accept autocomplete)
+ enter
(for next line). I repeat the process for the
meeting with Joe.
Open Peter’s meeting and add an action to discuss something with Joe
1 click, 45 keystrokes: click
at the last character of
“Notes”. enter
to get a new line.
Type ##
, then alt+E
to bring
up the list of templates, then 4 keystrokes to type toda
,
then hit enter
which will insert a link with today’s
date. enter
+ 15 keystrokes
+ enter
(autocomplete) will create the nested section
with a link ### [[Project A]]
. I then
press enter
to get a new
line. -
to create a nested bullet
and ctrl+Enter
to create a to-do item. I
type #disc
+ enter
+ space
+ [[Joe
+ enter
(autocomplete)
+ :
. I can then type in the topic I want to discuss with
Joe.
Open Joe’s meeting page and his personal page
2 clicks, 2 keystrokes: ctrl
+ click
on the meeting on the
daily notes page to open
it. shift+ctrl
+ click
to open
Joe’s page in another column.
Create a block reference in Joe’s MoM for the action in Peter’s MoM
4 clicks, 44 keystrokes: click
and 26 keystrokes to link today’s date and
nest ### [[Project A]]
.
Then enter
+ -
to create a new
nested bullet under Project A. click
on the action on
Joe’s personal page to open the source location in Peter’s
MoM. ctrl+E
to switch from preview mode to edit
mode. click
at the last character of the action I
want to reference. alt+E
to bring up templates.
Type block
+ enter
to run my
block reference template. This template adds a UID block reference to the
selected line, inserts a query under the referenced block, and copies an
embed-link to the clipboard. shift+ctrl+back arrow
to
move back to Joe’s page (since I am still in Joe’s
meeting). click
on the empty bullet point we just
created on Joe’s MoM page a moment ago. ctrl+v
to
paste the embed-code from the clipboard, then back arrow
twice, followed
by space
+ enter
to select the
proper link from the autocomplete pop-up (I can probably simplify this last
part with a tweak of the template).
Finally, enter
+ tab
to start
typing my notes about the action.
Read the block references in Peter’s MoM
1 keystroke: When Peter’s MoM is open, I just need to
press ctrl+E
to toggle between preview mode and edit
mode. Query results are only visible in edit mode.
Comparing the two workflows
For sake of simplicity in the table below I will sum the clicks and keystrokes and combine them into “user actions”.
Activity | Roam user actions | Obsidian user actions |
---|---|---|
Create Meetings on the Daily Notes Page | 62 | 64 |
Open Peter’s meeting and add an action to discuss with Joe | 40 | 46 |
Open Joe’s meeting and his personal page | 3 | 4 |
Create a block reference in Joe’s MoM for the action in Peter’s MoM | 27 | 48 |
Read the block references in Peter’s MoM | 1 | 1 |
Until the point of using block references, Roam and Obsidian were similar. My implementation of block references in Obsidian technically works, but I feel it is very messy and requires about double the amount of clicking and typing compared to Roam. I feel the reason is not necessarily inherent to how Obsidian works, but to the paradigm I am trying to force onto Obsidian.
Observing the look and feel of the two sets of screenshots, I find Roam’s
outline view much easier to read. While every information is present on the
Obsidian pages as well, it is harder to read because of the markup. The issue
becomes a real blocker once block-references and image attachments come to
play. While editing my notes in Joe’s MoM, I cannot read the action, but will
only see a cryptic link.
If I hit ctrl+E
to switch to preview mode,
depending on the content of the page, things will jump around (e.g. if there
is an image or other embedded text) and I can no longer edit.
Costs and Licensing
Obsidian is very affordable. You can get away paying nothing, but even if you upgrade to catalyst ($25), supporter ($50), or VIP ($100), you can do it for the fraction of the cost of a Believer subscription in Roam. For $4 per month, Obsidian offers a secure sync service that also includes the full version history of your notes for one year back. Even without subscribing to sync, you can easily keep your data synchronized between devices by simply storing your vault on OneDrive, Google Drive, iCloud, etc.
Templates
There are multiple plugins offering templating features in Obsidian. I chose Templater because it allows me to execute shell scripts as part of the template. This practically means the ability to run PowerShell (on Windows), or Python, Perl, or any other application of your choosing.
Plugins
Obsidian comes with a very mature plugin ecosystem. They have nicely integrated plugins into the platform. Installation, settings, updates, documentation are all intuitive and easily accessible. You can develop plugins in TypeScript. There is a strong developer community and plenty of examples and boilerplates available for someone to get started at developing plugins for the missing features. The Checklist plugin for example offers an excellent starting point to solve the messy action referencing problem showed above.
Community
There are well over 2000 Obsidian users on Discord. Obsidian also hosts a forum at forum.obsidian.md.
Clinet
Obsidian comes with a thick client user interface supplemented with a mobile application. This means that on your desktop you need to download and install a binary executable.
Obsidian stores your data in markdown files. There is no central server that would handle your data. It stores your data either locally on your computer, or you may opt to host your data in the cloud using the storage service of your choice. With sync you can select which folders to sync between devices, meaning you may choose to only sync part of your vault to your mobile or tablet, or to other devices.
Obsidian vs. Roam
Overall Roam and Obsidian are similar and both powerful.
-
Roam with its data structure is definitely more innovative, but Obsidian with its tried and tested markdown approach is more mature and robust.
-
If browser based access is important, Obsidian might prove difficult. As a workaround you can probably host Obsidian for yourself on an application streaming service like AWS AppStream, but this will cost you dearly. Roam is fully web-based.
-
Obsidian offers you full control over your data. If privacy is your thing, I would definitely recommend Obsidian. Roam, on the other hand, offers you novel ways to collaborate in your research with others. If you want to collaborate in big multiplayer graphs, you’ll be definitely happier with Roam.
-
Obsidian is cheaper, you can start as low as free, and can get VIP service and sync for $100 once off and $4 per month. To compare this with Roam’s Believer plan, Obsidian in this setup would cost you $340 over five years, compared to Roam’s $500 price-tag.
-
Roam offers fantastic flexibility through Datalog queries and RoamAPI to manipulate blocks. Also Roam’s data model is clean, with everything handled as a block or a reference to a block. Obsidian’s out of the box search is also powerful, and if you want more, you can experiment with plugins like dataview to query the data in the YAML front matter of your markdown files. The untaped potential of Obsidian is more limited than Roam’s.
-
Obsidian provides some basic support for referencing at the block level, but this is far behind what Roam offers. Over the past year, I got very comfortable with block references concept in Roam, and find this the most painful gap when playing with Obsidian.
-
Obsidian requires a mindset shift, moving to more atomic notes and file based thinking as opposed to block based approach in Roam. I feel as if this puts an additional level of mental-burden on me when wanting to note something down. I really enjoy Roam’s freedom with nesting of information and the flexibility of its data structure.
Closing thoughts
Finally, I want to remind you once more that I am now reflecting on Obsidian after only a few days of experimenting with the system. My views are still premature and I haven’t yet mastered the paradigm shift from block to file. I am sure that as I continue to play with Obsidian, I will recognize different ways to achieve similar outcomes as in Roam, but more native to Obsidian.
Comments
Post a Comment