When I was a kid I used to make pretty awful notes: dirty hand-written copybooks with poor structure. Almost unusable.

Later, when I discovered MOOC video courses, I kept using the same antipatterns I used in classrooms but in a clearer way, with VimWiki and later with Jupyter.

The notes were still poorly structured. Take a look at this—I’m not even motivated to open and figure out what’s in it:


Eventually I found what works best for me and I want to share it with you.

The main idea is to projéct our mind into notes (rather than a lecturer’s mind) using computer programming principles:


I assume you are already aware of basic suggestions like expressing ideas with your own words (own vocabulary, simpler terminology) or focusing on questions, answers, conclusions and evidence.

I also assume you’re familiar with chunking technique from Learning How To Learn course or from A Mind for Numbers book.

Make It Easier to Read

We, software developers, are very serious about code quality. We don’t like when code smells.

We communicate with code and invest extra time and energy in writing elegant code, so it could be read effectively in the future by other developers. Including ourselves: in the future we literally become different persons.

I found this approach useful for personal notes as well: you can optimize notes for effective lookups and reads by applying extra effort in writing.

Raw Draft

Right down a title and sources (books, articles, papers, videos, whatever you use) in a particular chunk of information. Start analysis of the first source, add some key points during the analysis.


So far, so good. Outline key words, split long sentences, use more complex bullet hierarchy, add subtitles. Use Occam’s razor: reduce your notes several times without losing the original meaning.

Keep studying other sources and update corresponding notes: add new information and clarify the old one.

As the note becomes bigger—separate it into files or even a directory structure:

How do I choose the structure? Make it the way you feel comfortable: imagine you’re looking for something in your own notes. How exactly would you make a lookup? What would be the shortest path to the note you need?

Add Hints for Future Changes

Are you bored of learning stuff and want to start doing things? It’s good to be pragmatic. Add assumptions you might want to investigate in the future with TODO comment.

Did you find a cool resource about the topic you’ve already held over? Find the corresponding note, add a source and keep doing your current work.

TODO comments are considered as antipattern by some developers, though I still find them useful for personal projects and notes.

You don’t have to continue your research in the future note review, TODO comment is just a sign there’s something you don’t know well and you might would like to improve knowledge in a particular area, if you encounter it in practice.

Review and Improve

Suppose that some time has passed and you decided to use your notes. You’re solving a particular problem and you want to find something specific quickly. Ability to find information quickly is important: it decreases probability to lose focus on a problem you’re trying to solve.

Try to search in files:

Couldn’t find anything? Possible reasons:

  • a typo in the search input—check the spelling of your input first
  • wrong keyword—a synonym was used to describe the same idea
  • there’s a typo in your note

Now it’s time to improve. Find your note manually and fix the problem by

  • fixing the typo
  • adding a keyword

So next time you’ll find the same note quickly.

In some weird cases you’ll fail to find the note again. For instance, recently I tried to find some stuff about statistics:

Not found. A spelling issue?

Nope. I Googled something but WTF did I find?

As I’m not a native English speaker, it took extra time to figure it out: that was an input typo after all.

Misspelling of rarely used words is normal, even if you are a native speaker. Possible solution is to add misspelled words as keywords so next time you’ll find the note quickly.

Another approach could be a use of some tricky fuzzy search engine.

UPDATE: Actually the problem was my confusion about the terminology. So in this case the right solution is to add «quantile» keyword.

Update Structure According to Your Mind Image

Suppose you ain’t able to find your note quickly, even manually. Possible reasons:

  • the note is in the wrong place
  • the right place is not well defined
    • where would you put notes about Big-O notation: into Calculus or Algorithms?

How to fix it?

  • move a section or a file to a proper place
  • add a link from one note to another

Refactor Again

Suppose you’ve found what you’ve been looking for but your brain struggles to understand something you’ve written in the past—just simplify it once again.

Another typical issue is finding several notes that actually should be a single one. Just merge such fragments together and put in a proper place.

Find a Balance

How to not overdo this? If you catch yourself wasting time on finding notes in a wrong place—that’s a sign it still has a poor structure. Just improve it every time you run into this issue.

If it feels hard for you or too time-consuming—use something similar to “the rule of three”: if you’ve been looking for this particular note two times in the wrong place—leave it untouched. For the third time—refactor.

What’s the Point?

You may say I didn’t convince you that investing extra time in writing quality notes is so important: doing that way is too boring, or it’s not applicable to an area of your work/study. This might be true, might be not.

Remember the time you’ve been doing a creative work, being “in the zone”. Sometimes you need to grab some information and continue your work, without losing a focus. You may grab this information via Google but sometimes it’s very specific, like your own conclusions about a particular topic or maybe project-specific stuff.

As you can’t find it in the Web—you use your notes. Now it’s a defining moment: if you are able to find the note quickly—you won’t lose a focus on your work. If you can’t—you will interrupt and waste your time on finding this thing anyway. Technically it’s the same issue as being interrupted by somebody.

After that you need to restore your creative state of mind again and continue your work. Just think how much energy it takes from you.

Still feels taking notes that way is too time-consuming? But you have time for practice, right? Think twice. Interruptions usually steal our practice time a lot.

Anyway it’s just a strategy: that’s true it could be inapplicable for some areas of work, so use it wisely.


  • Write a raw draft with sources and poor structure
  • Refactor your note once in a while:
    • Outline key words
    • Split long sentences
    • Improve bullet hierarchy
    • Use subtitles
    • Simplify text, reduce it
    • Too long documents?—Make separate files
    • Too many files?—Improve directory structure
  • Add TODO hints
  • Enjoy your creative work without losing a focus! Grab notes when you need them:
    • Can’t find a note quickly?
      • Fix typos
      • Add keywords (sometimes misspelled keywords)
      • Wrong place?—Move a section/file to a proper place
      • Place is ambiguous?—Add links from other places
    • Can’t understand?—Refactor again
    • Duplicates/fragments of a single note in several places?—Merge them

It’s not that hard, right?

UPDATE: Instead of git grep + copy-paste + find on page, I now use ngp + script (+ change in ngprc) that opens Jupyter files in browser and even navigates to a particular anchor. Unfortunately this project doesn’t support Unicode, but there’s a workaround for that.