The long journey of note taking

I started note taking in the middle school, first on the margins of textbooks. I switched to notebooks in college as the margins were not wide enough. In the graduate school, the notes became increasingly import because the syllabus was drawn from a variety of textbooks and journals.

I continued to take notes when I joined the work force. I kept a notepad handy to track the debugging process in Microsoft. Because long variable names might cause OOM errors for the compiler when Microsoft Word was debuted, all variables were defined in acronym with minimal hamming distance. The notebook served as bread crumbs to guide me through the labyrinth.

Into the bits

I also began to experiment with digital note-taking. OneNote positioned itself as digital reproductions of traditional notebooks: it had the notion of notebook, section, pages, and supported scribbling. OneNote was hyped within the Office team because it solved the sync problem fairly elegantly: it used CRDT data structures to sync the document at block granularity.

The MSFT bubble burst when I joined a startup, Skytap; no engineers used any Microsoft products in the startup world. They advocated vim and emacs, and sometimes argued for the choice. I maintained a markdown file, worklog to track my daily efforts in reverse chronological order. I prioritized the writing experience with my favorite editor and source control; while the reading experience is subpar due to the limited format rendering support. It was also difficult to embed images or diagrams.

I also dabbed with EverNote for a short while and quickly gave up because the lack of undo did not work well with my fat fingers.

Into the cave

I discovered Bear in 2016, a beautiful markdown app built for macOS and iOS. It was a breath of fresh air to work with WYSIWYG markdown editor. The writing experience was so great, that the missing vim binding was no longer a problem for me. Also I enjoyed the crisp font rendering and out-of-box theme.

Under the hood, as a software developer I couldn’t resist the temptation to peek, Bear saved all notes in a sqlite database, and images as attachments in a bundle. That explained why the full text search could only find the note, but not pinpoint to the sentence. I had to drop the monolithic worklog and took diaries or weekly journals. The journals trickled in and piled up, and became difficult to manage. With its database model, Bear did not support folders, the nested tags recommended officially was inadequate in my opinion.

Into the web

I encountered Notion in 2018 during an job interview. Notion was quite unique:

• The basic build block is the block, which opened door to cross-reference one single task item.
• Notion offered a variety of views to query the data stored in the table: the table view, list view, and Kanban view. It is quite powerful, and smart to divorce the data presentation from the storage.

I gave it a shot and passed. Not only it lacked the vim binding, or offline support, I was uncomfortable to leave work-related information in Notion’s database without IT’s approval.

Into the brain

With Visual Studio Code gained popularity, we may wonder why not build a note-taking experience on top of it? That was exactly how Dendron1 was pitched to its main audience. Dendron was not a standalone app, it was packaged as vscode plugins to close the gap for note-taking with a markdown editor, such as Dendron Paste Image.

I tried couple months, and just could get over the edit / preview experience, clearly I had been spoiled by Bear.

The winner

The winner, at least for now, is Obsidian:

• Offline-first, note syncing is an paid add-on feature with alternatives such as GDrive sync.
• WYSIWG
• Vim binding thanks to the CodeMirror.
• Themes to customize the look-and-feel, though I always go back to the default theme with small css tweaks.
• Plugins for extensibility. I like the idea to keep the core features generic and small, then allow extensions for specialized use cases.

I think there is still room to improve, notably:

• The full text search is a black box to the end users, we can improve the search quality by exposing the ranking algorithm to the plugin authors.
• Inadequate layout support in the markdown language limits the aesthetics. I hope the core team can develop a layout engine for multiple-column support.

I also tried to consolidate the calendar, tasks and notes into Obsidian, such as mission control dashboard; it barely worked. Unfinished tasks were either left in the dust or duplicated thanks to the Rollover Daily Todos plugin. I think the root cause is the task is NOT modeled correctly with lifespan more than a day. This cannot be easily solved without promoting task to the first-class citizen.

1. Dendron is a branched protoplasmic extension of a nerve cell that propagate the electrochemical simulation.