Hierarchical names are what improved my note-taking the most. I don't even use folders much anymore, instead I keep absolutely everything in one folder (~/kb) and use a dot (.) as a delimiter for filenames. For example, I have a note detailing the chronological order for Star Wars media named "lore.sw.chron.org" (.org is the file extension for org-mode notes). As you can see, each section of the filename is a (sub)category. "lore." contains other lores, such as ATLA. "sw" contains other Star Wars notes.

Using this system, the file extension becomes part of the hierarchy; you can have many files named the same thing but with different extensions to represent different aspects of the same thing. For example, I have a lot of math notes. I also have a lot of images, and calculators for specific math things written in Lisp. There's:

- "con.pythagorean-theorem.org" (note)

- "con.pythagorean-theorem.svg" (image)

- "con.pythagorean-theorem.el" (calculator)

If I have multiple of one file type, I just append a ".01", ".02"... before the file extension. I always use a leading zero in number-based hierarchy to appease alphanumeric sorting algorithms, because if you start with single digit and then add more than 10, they will be out of order in the file manager.

Sometimes I still feel the need to put things in folders, like my (very incomplete) collection of all Star Wars comics. I follow the convention of using the ".d" extension for directories in my knowledgebase; "lit.sw.d" is the folder for the aforementioned comic collection. Notice that I used "lit." instead of "lore."; all literature is stored under "lit.", "lore." is for notes and images and things like that.

Which brings me to the next most important thing: top-level categories. I can't wrap my head around the free-form naming of notes. I need categories. So I developed a nice top-level category system that I feel can handle almost anything I can throw at it, though there's always room for improvement:

- archive: old notes. To archive a note, simply prepend "archive." to the filename

- con: concepts (this is the majority of my note-taking)

- cook: recipes

- film: films, shows, etc.

- game: games

- grp: groups, organizations, polities, movements, etc.

- home: my house

- inbox: a single-file inbox for everything, because I have ADHD and if I take too long to write things down I'll forget what I was doing.

- inv: inventory, currently single-file

- journal: my diary, single file for now, plans for a few other topic-specific journals.

- lang: languages, both programming and natural

- lit: literature, publications, etc.

- meta: about this knowledgebase

- ppl: people

- prod: products

- proj: projects

- school: school notes, each course gets a "school.institution.course.org" note, and assignments get (school.institution.course.unit.section.assignment)

- self: about me (self.resume, self.finance, self.health, etc.)

- shop: shopping list, single file

- social: social media

- soft: software

- std: standards

- sub: substances

- sys: systems documentation

- veh: vehicles notes (veh.make.model.vin)

- work: job notes, logs, timesheets, etc.

Along with this top-level categorization, I also use some naming conventions that apply to all files:

- X.agenda: my TODO lists and reminders, automatically used by org-agenda

- X.log: logs of things I've done, automatically used by org-agenda

- X.index: indexes of things, mostly used for literature categories

- X.yyyy.mm.dd.hh.mm: time-based things

- X.gpg: sensitive notes, do not publish, encrypted with GPG

All these conventions allow me to almost always know exactly what something is named or should be named. On rare occasion there are 2 places something could be. But the overwhelming majority of things have only 1 place to go. This means, for example, that I can go back and retrieve any assignment I've ever done within a few seconds, or go back and tell a customer exactly what was said in a phone conversation on June 7th 2019, without having to think about where it might be.

It also allows for sparse naming; you don't have to actually create a file for each level of each hierarchy. It's just a filename. You can have "lore.sw.chron" without having a "lore." or "lore.sw".