My note-taking system gives me constant content ideas

Joël Quenneville

As co-host of the Bikeshed podcast, I put out a new podcast every week. I’m also a regular speaker at conferences, and a prolific author on this blog. How do I keep coming up with fresh ideas of things to write or speak about?

It’s partly because I have an introspective approach to the daily work I do. But I also have a secret weapon: a note-taking system that gives me a constant stream of new ideas.

Theory

My note-taking approach is inspired by Zettelkasten and Evergreen notes. It is built on a few core principles:

  1. Notes are atomic. Each note contains a single idea. A note consists of a title, a paragraph or two of text, and often a code sample or diagram (many modern note-taking tools will even support inline mermaid diagrams!).
  2. The title of each note is a thesis statement. For example “streams and lazy lists are conceptually the same thing” or “prefer buttons over links for destructive actions”.
  3. Notes are written in paragraphs and full sentences of prose, not bullet points.
  4. Notes are densly hyperlinked to each other.

Because notes are short and focused, it’s relatively cheap for me to add new ones and I can create them throughout the day as I encounter new ideas, heuristics, and mental models. Conversely, having to write them in prose slows me down a little, but forces me to think through my thoughts more clearly.

Mechanics

It’s easy to get lost in trying to set up the perfect system of directories, tags, and software. To get value out of a note-taking system, you need to spend most of your time writing so start simple!

I use Obsidian as my note-taking tool. Inside I have three key directories.

my_vault/
├─ atomic_notes/
├─ literature_notes/
├─ artifacts/

Most important are the permanant “atomic notes” I described above. These are the finished product. When I have a new idea I create a note in the atomic notes directory, and attempt to find one or two existing notes that I might want to link it to.

The “literature notes” directory contains thoughts I have about creative works I am consuming such as books, blog posts, or talks. I have one note per work and they are unorganized stream of consciousness thoughts I have as I’m going through that work. I might pull out a line that is particularly inspirational, write down a question I have, or note that this passage reminds me of a concept I saw elsewhere. Later on, some of these can get turned into atomic notes.

The “artifacts” directory is for creative works I have produced based on my note system such as conference talks or blog posts. These will include some metadata about the work as well as links to the atomic notes or other artifacts that provided inspiration.

Discovering ideas

Now when I need a topic for something, I can browse my “atomic notes” for inspiration. If something is interesting I can also look at similar linked ideas. I can also lean on Obsidian’s full-text search to try and find a good starting point to browse on a particular topic.

The linked nature of my notes also provides me with a powerful visual approach. Obsidian has a graph view that shows all the notes in the system. Groups of similar thoughts show up as a cluster in this view. For example I can see that I have a lot of thoughts on testing and on dependency graphs.

With a bit of tweaking, I have Obsidian highlight public works I’ve already created, linked to the notes that inspired them. This means that at a glance, I can see clusters of thoughts that don’t yet have any public artifacts. A quick look at the image below shows me that I have lots of thoughts on conditional code and have even written a public blog post or two but have not given a talk about any of these ideas yet. These are great candidates when trying to come up with ideas for a conference CFP!

obsidian graph view showing how creative works connect to clusters of ideas
Obsidian graph view of my notes. Dark nodes are atomic notes, red nodes are blog posts, and blue nodes are conference talks. I have circled some of the more prominent clusters and labeled common themes.

What to write

Writing your first notes can be challenging! Try to be mindful throughout the day and pay attention to different decisions that you make. I like to collect patterns, heuristics, and mental models. These all make great atomic notes!

Some of my notes come from observations I make while consuming other works. As mentioned earlier, I collect these in unstructured “literature notes” and later on go through them and pull out the interesting bits into more polished atomic notes.

Another way I generate notes is by interrogating an experience using a mind map. This allows me to turn vague experience into sharper insights and takeaways.

an example of a mind map used to interrogate experience
A mindmap that explores questions relating to my experience writing a lot of module/method level documentation

Public works built from notes

I can mine a series of connected notes to create a blog post or conference talk. Because notes are heavily hyperlinked, I can open a bunch of tabs for related thoughts that can help me create a larger fully fleshed work.

Not only does the cluster help me find an idea, but it also contains some ready-made content. There are some code examples just waiting to be turned into a slide and paragraphs I can just drop into a blog post (another advantage of writing notes in full prose!). I can start by copy-pasting contents from my notes to create an initial skeleton of a blog post or talk. This acts as a form of mise en place writing.

Example

Consider the article Structuring Conditionals in a Wizard (that red dot in the middle of the “conditionals” cluster in the image above). It was inspired out of a series of notes titled:

  • Wizards are best structured as flat case expressions (this became the core thesis of the blog post)
  • Conditionals should not have extraneous paths
  • Push conditional logic up the decision tree
  • Conditionals have cardinality (see this Software Unscripted episode for more on the idea)
  • Choice of data structure impacts branching

That first note looks as follows (it’s more detailed than my notes normally are, probably a good hint it wanted to be a blog post!):

# Wizards are best structured as flat case expressions

When modeling a wizard (multi-step form), programmers
often try to force everything into a linear path with
a bunch of conditions that merge back onto the main
path. While this allows actions to be shared among
the steps, it also creates code that is dramatically
more complex.

With just a few steps, each of which do a few actions,
it can be hard to tell what exactly will happen on a
given step of how many steps will be impacted by
changing a given action. This is because there has
been a combinatorial explosion of possible paths
through this logic. Ideally,
[[conditionals should not have extraneous paths]]

![[media/wizard-linear-shared.png]]

A better approach is to
[[avoid forcing logic down a single linear path]] and
instead structure the code as a flat case expression.
This dramatically simplifies the code. There are only
3 paths through the control flow diagram. I've had to
do this sort of refactor multiple times on both Rails
and Elm apps.

![[media/early-branching-with-shared-step.png]]

This refactor is an application of the
[[triangle of separation]].

Conclusion

Are you struggling to come up with ideas to blog about? Do you find yourself facing down writers block for the CFP to a conference you’re excited about? I’ve found that taking notes throughout the year supplies me with ideas and inspiration when I most need it.

Your system doesn’t have to match mine, every note-taking system is personal. Just don’t lose yourself in creating a system instead of actually writing.

All writing creates by-products. You’ll find yourself writing notes inspired by other notes, or based on content you had to cut from an article or talk. Soon you will find yourself with the same good problem I have: a backlog of ideas that grows faster than my public works.