Building a Personal Knowledge System That Resists Collapse
1. Choosing between Notion Obsidian or Coda is not the first step
This is the trap. Most people start by opening Notion and trying to recreate Tiago Forte’s PARA without realizing they don’t actually record anything consistently. I’ve done it three or four times. I had a great Obsidian vault built out with folders for Areas and Resources, daily notes, backlinks, the whole thing. Then I stopped using it because I never remembered to open Obsidian.
There’s a pattern here: the tool doesn’t matter until you’ve proven your own capture habits. If you can’t regularly log thoughts using nothing but Google Keep or a sticky note app, it does not matter what you build in Coda. Every attempt to shortcut this ends in a half-filled dashboard with three-time zone clocks, then nothing for two weeks.
The first working version of my PKM setup started in Google Docs. Just a daily bullet in a single .doc named “log.md” synced to my desktop. It stayed with me the longest. Not because it’s better. Because I actually opened it every morning.
2. Use inputs not structure to decide your knowledge system layout
The structure should come from your friction points, not your dream use case. If you’re constantly Googling the same syntax because you can’t remember JSON.parse behavior in JavaScript, build a snippet catcher. If your team keeps asking you how to set up the same Zap, build a shareable checklist or template. That’s it. Input-based architecture is the only sustainable one under pressure.
- If your meeting notes are mostly action items, bias toward task capture tools like Coda with inline buttons
- If your thoughts are half-complete phrases typed at red lights, you need a capture inbox that loads in under 1.5 sec—probably Drafts or Google Keep
- If you’re logging info during deep work, keyboard-first apps like Obsidian or Logseq will win
- If you write ad copy variations and revisit them weeks later, you need full-text search with highlight and context—Notion and Evernote both fail here
- If your team always asks for links: make everything shareable by default (Obsidian is bad at this)
The main behavior to avoid is designing a system around what “might be useful later.” Even when I did that, I never trusted the system enough to go back and find anything. It’s too slow. Inputs first. Always.
3. The real cost of tags folders and backlinks in daily workflows
I loved the idea of tags. I built a tagging system in Obsidian with prefixes (e.g. #ref-js for JavaScript reference, #log-2024-05 for logs). Looked gorgeous in the graph view. Until I realized I never used the graph view. Also, I had eight different spelling variants of the same tag, because Obsidian doesn’t validate tags unless you install a third-party plugin—and even then it only works in some contexts. Found that out an hour before a meeting.
Folders make people feel organized. But they also make you fear putting something in the wrong place. After a while I would just dump new notes into ‘📂 Inbox’ and never move them. By the time I wanted to retrieve something, I could remember what I called the document but not where it lived. Backlinks helped, until I realized they only mattered if I clicked them. Which… I didn’t. The idea that there’s a perfect note graph collapsed the first time I tested search. It failed to surface a key client call note because the word I typed was in a nested list inside a collapsed callout block.
There’s one edge case that tripped me up: if you embed a note inside another using ![[notename]]
, and then search for content in the embedded note… it won’t show up in results unless you open the original. No one told me this. That behavior cost me 27 minutes during a deliverable scramble. Indexing in some PKMs is shallow, and you find out the hard way.
4. A working capture flow with Google Assistant and Obsidian sync
Here’s one workflow that never fully broke, even after two phone resets:
- Say “Hey Google, send a message to my Obsidian inbox” (custom contact)
- Auto-forward that transcripted SMS to my Gmail with a filter
- Using Make.com, monitor that Gmail label for new messages
- On trigger, save the message body into a markdown file in Dropbox/Obsidian-vault/Capture/
- Obsidian sees the synced file and indexes it within 2–3 seconds
It’s ugly but it works. I’ve logged client comments from the car, last-minute slogan thoughts during a walk, and whole meeting ideas without even unlocking my phone. There’s no fancy UX. The magic is knowing I will find that note later in a single folder called “Capture”. Not “Ideas.” Not “Archive.” Not tagged with seven delimiters.
This entire setup broke once when Gmail changed its default parser for forwarded SMS. Suddenly the Make scenario was extracting blank bodies. I had to manually inspect the raw MIME format and realized Google added two line breaks under the text/plain
section that interfered with the tool’s extraction logic. The docs never mentioned this. I fixed it by switching text parsing from HTML to raw plaintext block, then using regex to grab everything after the contact name.
There’s also a 2–5 second race condition if the Dropbox sync hasn’t finished by the time Obsidian triggers a plugin (like Daily Notes). I learned to delay plugin execution using the Metadata Menu delay field. Dirty fix, but it stopped the double-indexing bug.
5. Using Airtable as a queryable second brain for edge cases
When folders and backlinks fall apart, and Search doesn’t help, you need somewhere that stores fragments as structured data. That’s what Airtable was doing for me: a searchable grid of half-thoughts, blog snippet drafts, reusable prompts, and template blocks. It works because you can filter and group by real patterns—like project name, character count, or last used.
The flow:
- Ifttt logs every new tweet and email draft into an Airtable base
- Each row gets a link back to its source tool (Gmail thread ID, Tweet URL)
- A separate column classifies whether it was used in a presentation, internal doc, or social post
- I built a GPT-powered field using OpenAI’s API inside a Make.com scenario to auto-summarize the tone
Weird thing I noticed: Airtable won’t always trigger webhooks when a record is updated via third-party API. I lost automation events until I added a checkbox field called ‘Needs Processing’ and toggled it manually. Then ran scheduled Make scenarios to reprocess only those.
The visible glitch was when I updated a row’s content via API and the automation ran—but the GPT-generated summary didn’t update. Turns out Airtable caches formulas per browser session and doesn’t re-trigger them unless a human touches the cell. I had to rewrite the formula field as a script block attached to a button. That re-evaluates server-side when clicked or triggered from Make.
6. Daily knowledge capture always breaks on calendar integration
I’ve tried syncing meeting notes to my knowledge base at least six different ways. None consistently worked. The basic concept: have some tool (like Notion or Obsidian) grab my calendar events, dump them into a daily note, and let me write thoughts right below the context. Sounds normal. But syncing calendar data is instantly messy once time zones, recurring events, and invite-only meetings enter the picture. Plus Google Calendar randomly drops descriptions during API fetches. That’s not just a quirk—it means when you pull the `events.list` endpoint via Make, the `description` or `attendees` array might just be null. And the bug is intermittent.
My messy-but-functional workaround was to create a hybrid calendar-text log:
- Cal.com embeds on my site for external calls
- Zapier watches for new bookings with Zap metadata
- That Zap creates a markdown file in Dropbox with a filename like “2024-05-12-call-acme”
- Obsidian’s Daily Note plugin auto-links any file with today’s date prefix
Meetings show up, and I can type right below the modals. It’s just manual enough to avoid false positives. Adds ~3 seconds per call, but I don’t lose context anymore.
7. What actually makes a PKM tool feel trustworthy under pressure
It’s not the features. It’s how fast you can get in, add your thought, and get out again—without waiting for popup transitions or mouse hover delays. When someone slacks you a question during a call (“wait what did we decide on that?”), you need to hit Ctrl+K or Cmd+P, type one word, and land in the right file. My biggest dropoff point was interface latency. Notion is fine until your database has over 500 relations and you try to scroll on mobile. Obsidian is fine until plugins throw TypeError: undefined is not iterable when you accidentally select a block too fast. I’ve rage-closed Coda tabs more than once because an automation button was disabled for no stated reason.
Once I stumbled into a working mix—Obsidian for notes, Google Voice for capture, Airtable for reuse—I mostly stopped tweaking tools. But every few weeks something breaks. Google API keys need to be rebuilt. A plugin update disables something silently. Or I forget where the call note was and realize I never captured it. I don’t fix all of it. Just enough to continue trusting the system one more day.