My Solution Log History
As a software engineer, I have been a believer in a solutions log -- a place where you record the solution to a really sticky problem you had ,or a surprise that you didn't expect. My solution log started in Evernote, became a bunch of OrgMode files, then got filtered down and I started writing them into large OrgMode files based on subject, and then I discovered the idea of a Zettelkasten and put everything in org-roam. More recently I discovered Obsidian and converted all my files from org to Markdown and moved them into an Obsidian folder.
Note that these files are used a bit differently than a "normal" Zettelkasten note. Most of the time a Zettelkasten system is used as an insight for research and putting a paper or article together. Most of my notes are used for reference -- like dealing with the BOM character when parsing CSV files in Python! I have it written down so I don't have to memorize it. I.e. use my internal brain space for something else.
Regardless my Knowledge Base (what I call my personal solutions log) was mixed in with my other Zettelkasten notes all in one folder. It got really unwieldy. To me, the Knowledge Base was a different -- it was mostly reference material and, sure, things linked to each other were mixed up with insights I was documenting. I needed a folder structure and felt that I wasn't going to come up with a good one on my so I started searching. And I found Nick Milo's LYT Kit which gave me some new things to think about and a workable arrangement.
Linking Your Thinking (LYT) is Nick Milo's paradigm for Zettelkasten and has some great videos to show you his ideas. Anyway I decided go from my "everything in my folder" idea to something more rigid like "LYT".
My Setup
I won't go into too much detail on the set up of LYT, but I will say that I created a folder under "Spaces" called "Knowledge Base" and started to copy all the files from my old vault into my LYT vault and then tweak them. After a bit of doing that I decided to stop and instead I made a new space called 'Unruly Forest', copied all the remaining Knowledge Base files in there. And then, when I read one again, I can take a minute to move it to the Knowledge Base space. This makes things a lot easier and I still can find the note that I need when I need it.
One concept that really drew me into LYT was the Map of Content, or MOC in LYT-speak. Basically it's a common file that all you link to move up. But really they are so much more than that. Bob Doto describes it well:
MOCs behave as work stations, places to examine how notes interact. They're far more than records of already established connections. Instead, MOCs are places to challenge notes, to see whether notes need to change, cleave, or resolve. Rather than being a representation of previously made connections, MOCs are where connections are made anew.
My Knowledge Base folder has a file called "Knowledge Base MOC" that all my knowledge base files link to in the top as an "UP" category. This makes navigation easy -- I can click 'up' to navigate to the MOC. What do you put in that MOC file? Anything you want! I'm not to the "change, cleave, or resolve" in my Knowledge Base yet -- I simply put in a DataView table in my Knowledge Base MOC that displays my post used tags in my Knowledge Base and displays the count of each one. It looks like:
TABLE length(rows.file.name) as numfiles FROM "Spaces/Knowledge Base"
flatten file.tags as tag group by tag
sort length(rows.file.name) desc limit 10
As I started using my setup, I found a lot of notes still in the large files that I originally wrote in Org in Emacs. Again — instead of breaking those big files up, I instead use those file as kinda Subject MOC. For example all the Django notes I make link back to the main Django note. That helps keeps things “linked” together. In that file, I have a DataView table created with a tag, like so:
table file.mtime as Updated from #django sort file.mtime desc
I haven't refactored my "large" files yet.. and that's ok! I will when I get to them.
The next issue was search... I mean this is a Knowledge Base so I need to search the contents of the files to find what I need. I was struggling with search for a long time but recently discovered the Omnisearch plugin which happens to work really great for finding the right file.
Actually writing the note
I used to write really short snippets and then try to link to notes that this item reminded me of. But I stopped that and tried to make things more conversational - like explaining the situation, or if I think this solution could be better. The guideline I follow is "write" a blog post to yourself". So I kinda write my note like I would have liked to find in a blog post but I'm coming at it assuming that someone knows the context. I got this idea from Andy Matuschak. He didn't' state it like I do but perhaps better
When it’s a topic I understand well, I can write notes for both myself and an audience simultaneously. But that sometimes produces the false impression that I can pull this off all the time! To avoid that false impression, I’ll write notes for myself “by default,” and only “opt into” writing notes for an audience explicitly.
Even though I don't necessarily write these notes for connectedness and find-by-exploring, I do try to make it so I could. I make sure that I do these things:
- tag with the tag of the project I'm working on when I get stuck
- Link it to the Project MOC of what I am working on
- Otherwise link heavily -- for example, make a link to Python if the note is anything to do with Python. Link it to JavaScript if is it javascript related. Both of these are really Subject MOCs
- Add thoughts to the note. I.e don't copy straight out of StackOverflow
This seems like a lot of rules but really they are very simple to follow. Why? Because my note is conversational but having a conversation with myself. I avoid the easy method simply of linking to and pasting from the Internet and walking away. I mean, I do that but I wrap some context and opinions to it -- and link to them freely. I feel that I can have a deeper understanding of what I just did as well as having methods to find it when I need it -- even if it's not the exact solution I'm working for! Sometimes I find something similar enough in my knowledge base to a solution to a problem I didn't think was similar.
Like most of my Zettelkasten workflows, this is always a work in progress. Always more tweaks or perhaps removing some layers. But now I have something that works for me, even after carrying files from one place to another. I do plan on keeping Obsidian for a long, long while however.