How do you take notes?
I’ve been programming professionally since ~2008, and I’ve tried quite a few different approaches during my career.
Approach: pencil and paper
There’s something nice about low technology note-taking. I used paper for a good chunk of my time at eeGeo/WRLD3D.
- Using paper lets you (forces you!) to step away from the keyboard for a moment
- You can take your pad elsewhere and prod at your thoughts elsewhere
- There’s no real substitute for sketching diagrams quickly on paper
- You can easily draw attention to more important ideas via highlighters etc.
- Not searchable without a filing system, and even then it won’t be as good as grep
- You need to file the notes somewhere if you want to keep them around
- They take up space
- You can’t easily copy paste via your computer
- You can’t use hyperlinks or other embedded, digital resources
Approach: shared wiki
We were forced to use a wiki at Realtime Worlds to log our work notes for the day. The idea was that if we invented & patented something novel, we’d have a trail of evidence. Similarly, if somebody tried to patent-troll us, we’d also have evidence to refute the claim.
- It was actually kind of nice to have a formalised log of our work / thoughts
- It was somewhat searchable
- It was cumbersome to edit
- The search was patchy
On top of this, there were a few problems with enforced & public note-taking (kind of conflated with the wiki model):
- Having to produce one’s thoughts on demand was a burden
- You couldn’t write honestly about things
Approach: haphazard .txt files
For short-term tactical work, text files aren’t a bad choice. You can jot your thoughts down, add links to read and search through it later. I tended to just shove them in a .txt file named after the bug number, or the name of the feature I was working on. Again, this is something I did a lot of at eeGeo/WRLD3D.
It wasn’t perfect, but it did have its uses.
- You can group notes by the topic easily enough
- It’s searchable
- Doesn’t support rich media
- Without conventions & some level of care, it becomes disorganised
In my case, I tended to end up with a temp directory full of notes. I’d fish out the important-looking stuff and commit it somewhere (google doc, bug tracker, commit messages, comments, etc.) and the rest would rot.
After a while, I’d have to switch computers and lose the rest. Not great. There’s been quite a few times where I came up with a pretty smart, novel approach to solving an interesting problem. I can’t remember the details.
Approach: Using a tool (or a hybrid model)
I’ve been using Obsidian since early 2022, and I’m really, really liking it.
While I heartily recommend Obsidian, it’s not the only note-taking app in town. Org Mode is another much talked about tool, for example.
Why do I enjoy Obsidian? Well, it allows me to document anything and everything and keep to a routine.
- It has sane defaults
- Support for tagging & linking between notes
- Support for templated, daily notes
- Support for images and other media
- It has a plugin system
- The app itself (on Windows at least) is fairly lightweight
- 27MB of RAM used on my Windows machine
- Multi-platform support (I use it on Windows & MacOS)
- Mobile support
- Markdown format, so no crazy proprietary stuff
- Which means you can read/write notes however you like
- If you stop using Obsidian, your notes are in plaintext
- Closed source
- Over the ~8 months or so I’ve been using it, they’ve changed the style/layout a lot
- Not everyone will like using a dedicated GUI app
- If you use it professionally you have to pay $50 p/a
Obsidian helped me to reinforce a routine. When I open Obsidian, it presents today’s daily note, which looks like this:
# Daily Notes tags: #daily ## TODO - [ ] Daily walk - [ ] Brush teeth at lunchtime ## General
The act of checking off items definitely helps.
My 2 items are currently:
- Since COVID-19, lockdown and WFH started, I became a bit more … torpid. I always want to leave the house. Even if I’m doing other exercise, it’s important to keep moving via walking.
- When I worked in an office, I brushed my teeth after lunch. I lost that habit after the office was torpedoed. My dentist has been nagging me about it.
I now face the reality of my laziness via my daily notes; an unchecked box looks very bad. It’s just a walk. It’s literally just a 90-second brushing. Those boxes tend to get checked now.
In addition to a daily template, Obsidian comes in really handy for noting things that I’d frequently forget.
Jobs interviews & people
I had a job interview at the end of 2021 (which I failed), and another 4 or 5 at the start of 2022. A few of those were early in the process after a few phone interviews, so I dropped out because I’d received offers.
After that round of interviews concluded, pre-Obsidian me would’ve:
- Had only a few emails and details to go on
- Thrown out his notes (either because I formatted my PC, or because a notebook got binned)
- Half-heartedly addressed the weaknesses I needed to look at
- Barely remembered much about it
- Probably not followed through
Post-Obsidian me does this a lot better.
- From each company, I know every person I spoke to, their job titles etc.
- I also can remember the people who made a good impression on me and look them up in future!
- I have an overview of the interview process
- How many stages
- The questions they asked me
- The answers I gave
- My own thoughts on how I performed
- Why I didn’t get the job or why I withdrew from the process
- Or if I did get an offer, exactly what it was
It’s all tied together in a neat bundle and ready to be mined. Committing these thoughts to notes doesn’t take long, and I find writing about it provides a lot of opportunities for self-reflection.
I had been working at my previous company for 11 years, so it was important to me that I didn’t let job-hunting details wash over me.
I’ve been working for Infinity Works since March 2022, and in that time I’ve had to learn new things rapidly.
Note-taking has been useful for organising my thoughts, collecting links and writing my own take on the things I’ve learned.
Writing was a really useful way to figure out how much I’d learned and how far I still had to go. It helped with prioritisation on what to learn, too. If I forgot something or lost my place, it was written down.
Have you ever installed & configured software, but didn’t fully automate it? E.g. at work, you’d tend to have a machine image or a series of scripts to install everything just so. At home? Not so much. Too much effort for something you do once every couple of years.
Can you remember:
- Everything you need to back up before you wipe your machine?
- The irritating Windows options you need to toggle?
- All the programs you’ve got installed
- The obscure configuration changes you made?
It’s often said that the first step to automation is writing out a list. Notes are the sweet spot for infrequently performed tasks.
E.g. here’s an excerpt from my Windows install notes (automating this would be overkill because it’s complicated and rarely gets used):
1. Go to "Add or Remove Programs" and uninstall everything possible 1. Can also use `Remove-AppxPackage` to do this (see below for Cortana) 2. Go to Apps & Features -> Optional Features 1. Uninstall unneeded programs 3. Taskbar 1. Disable all taskbar integrations, like people/events/weather 2. Display all taskbar icons 3. Don't combine taskbar entries 4. Display full taskbar entries on all monitors 4. Start menu 1. Delete everything, inc. live tiles etc 2. Disable web search in the start menu (I think it was [this](https://www.bennetrichter.de/en/tutorials/windows-10-disable-web-search/)) 5. Delete Cortana and other Windows Apps nonsense
Then an embedded powershell script to remove software components that I cribbed from other sources:
Get-AppxPackage -allusers Microsoft.549981C3F5F10 | Remove-AppxPackage Get-AppxPackage -allusers Microsoft.WindowsMaps | Remove-AppxPackage Get-AppxPackage -allusers Microsoft.People | Remove-AppxPackage # etc
Finally, I have a chocolatey script to install my staple programs along with a list of software that’s not available via chocolatey.
This sort of thing is great. I would never remember many of these tips, and I’m free to mix in scripts with instructions as and when it makes sense.
I’ve written quite a few things over the last year, and keeping the notes has been very useful.
- Boiler problems / solutions, and cost/benefit tradeoffs of fixing vs. replacing
- Along with niche sites that sell parts for my 2003 boiler!
- I saved £150, and I have a list of other parts in case it fails again
- How to find a good value refurbished Aeron chair
- Laser eye surgery options
- Rooting my TV
- Setting up Open Media Vault & Plex
- Fixing my 2010 Kindle when it refused to login (Amazon support were useless, had to figure it out myself)
- How to build a Corsi-Rosenthal Cube (it was hard to find UK resources)
- De-bloating a Lenovo tablet
- Recording a few medical issues I’d been having, along with detailed timelines
- I really wish I had done this in 2020 when COVID appeared! (I got long COVID, but now I can’t remember how long I was KO’ed by it)
The only downside to doing a lot of personal note-taking is that it saps the blogging energy.
Oh, and I’ve also been using Helix to write a lot of my notes rather than Obsidian.
Why? Well, it’s very lightweight, accessible from the terminal (which is always open) and I felt like taking my mediocre vim skills a bit further.
I added the following alias to my
alias today="cd /c/work/notes && ./today.sh"
… which then calls this janky script (this is on Windows):
#!/bin/bash set -euo pipefail readonly today=./daily/$(date +%Y)/$(date +%m)/$(date +%F).md if [[ ! -f "$today" ]]; then echo "$today doesn't yet exist; creating from template..." cp "./daily/daily_template.md" "$today" fi hx "$today"
I’m quite enjoying Helix, and it’s replaced vim for my utility editor (git commit messages, etc.).
Appendix: synchronising/backing up
If you’ve got your notes on one PC, you still need to make them portable or, at the very least, back them up regularly.
There are various ways to do this, and many of them work with with whatever digitised method you choose.
Obsidian has sync as a paid feature, but there other free (or free-ish) ways of doing it:
- Store your notes in a shared directory with Dropbox, Google Drive, OneDrive etc.
- Add them to version control
I personally store my work-related notes in Google Drive directory and/or OneDrive depending on the environment.
For personal notes, I synch via a git repo. This is a little cumbersome, but I can live with it.