Tags, Not Taxonomies
Monday, September 8, 2025
Table of Contents
As someone who loves collecting notes, ideas, bookmarks, etc, and someone heavily reliant on to-do lists, the revelation that I can organize everything on my computer using tags has been a game changer. When it comes to organizing anything on a computer, I think you should almost always favor tags over categorization.
- A hierarchy of categories—such as folders and sub-folders, or headings and subheadings within a document—only affords one way to find things, but tags allow you to query for information in a variety of different ways. A single photo in your photo album may be at the intersection of a variety of different topics of interest for you—travel, nature, a calendar year, a certain loved-one. And any of those topics should allow you to query and retrieve the photo, along with whatever else might also be relevant at the time.
- Forcing your files/media/text into a preconceived taxonomy creates a lot of friction whenever something doesn't neatly fit. You end up re-categorizing, which, apart from being time consuming, doesn't address the root cause—there is a many-to-many relationship between information and the topics by which you may one day wish to query it.
File Management
Files can be tagged in a robust and portable way by using a naming convention which embeds tags in the file names. I use these tags to filter long lists of files down to the intersection of some topics.
This is how I organize my notes, links, and even my Emacs configuration. Manually naming all files in this manner would be tedious, but software can expedite the process. In my case, I use the Denote Emacs package, which is where I got the idea.
Filtering directories in Emacs
To filter the directories, I use the dired-narrow
emacs package.
(use-package dired-narrow :ensure t :bind ((:map dired-mode-map ("C-s" . dired-narrow))))
Project Management
I use org-mode in Emacs for project management. Most of my to-do items are fairly concrete, but some are high-level goals. Often times these high-level goals have some overlapping sub-tasks, so nesting tasks would be a poor-fit. Thankfully, org-mode supports tagging to-do items, and querying by tags. And I think it's quite nice if those high-level to-do's act as links to all the associated sub-tasks, so I built a command to create those links.
Details
You can filter org headings by tags using the org-sparse-tree
command.
(defun my/org-tags-link (tags-string link-text todo-only) "Insert org-mode link text in buffer at point matching tags defined in TAGS-STRING. Link, when visited, will produce a sparse tree of org headings matching TAGS-STRING. When called interactively, prompt the user for tags." (interactive (let* ((buffer-tags (mapcan #'identity (org-get-buffer-tags))) (tags-list-included (completing-read-multiple "With tag(s): " buffer-tags nil t nil)) (tags-list-excluded (completing-read-multiple "Excluding tag(s): " buffer-tags nil t nil))) (list ;; tags-string (concat (apply #'concat (mapcar (lambda (tag) (concat "+" tag)) tags-list-included)) (apply #'concat (mapcar (lambda (tag) (concat "-" tag)) tags-list-excluded))) ;; link-text (read-string "Description: ") ;; todo only? (intern (completing-read "Todo only? " '(t nil)))))) (insert (format "[[elisp:(org-match-sparse-tree %s \"%s\")][%s]]" todo-only tags-string link-text)))
Link Management
When I find something cool on the web that I want to save for a rainy day, I don't like to use my browser's bookmark system because a) there's no support for tags and b) I don't want my collection of links to be tied to a particular browser or computer. And most times, when I'm searching the information I have stored, I care little whether a file happens to be on my computer or someone else's. So I figured, why not treat my collected web-links as first-class citizens among the rest of my note files? In practice, this means I have a file for each link I want to save, and I configured my file browser in Emacs to treat files with the weblink tag in a special way—opening the embedded URL in my browser when I would otherwise be visiting the file. When I want to save a new link to my notes, I have a keybinding which writes a file to my notes directory based on the URL in my clipboard.
Details
To replicate my link management workflow you can install my package for it.
(use-package denote-dired-weblinks :ensure (:host github :repo "Duncan-Britt/denote-dired-weblinks") :hook (dired-mode . denote-dired-weblinks-mode) :bind (("s-b" . denote-dired-weblinks-create-bookmark)))