The problem with tags is the same problem with search. I could tag this post “stuff-that-sucks”, and another post. And then, to find posts or other things marked “stuff-that-sucks” we get a list of database search results based upon the text of the desired tag name. But… I don’t want search results. I hate searching. I like finding.
While it doesn’t seem all that different on the surface, the reverse way of doing this I like much better. “stuff-that-sucks” should be an independent entity within this system, and things like posts that are considered to related to the idea of “stuff-that-sucks” are linked to the stuff-that-sucks object. stuff-that-sucks is now embodied by an object in the system and within it is a set of references to these other objects.
Doing this allows several things to happen: first, there is less reliance on search: the data is already there. Second, there is no misspelling confusion. Third, and most interestingly, objects have a chance to specify in more detail their relationship to this notion. How much does it suck, for instance? oh, lots. Lots.