I'll try to explain my view of tags. Let's see if it makes sense. :) Conceptually, properties are like a generic key-value store for headings, and tags are like a certain property. Imagine if, instead of tags being placed in headings, like this:
* Blueberries :food:fruit: ...tags were implemented as properties, like this: * Blueberries :PROPERTIES: :TAGS: food fruit :END: The meaning would be essentially the same. >From a technical perspective, putting tags on headings makes them much faster to search for, because a regexp can be used to search directly to them (local ones, anyway). In contrast, to find the next location of a certain property, a single regexp search is not enough, because even if a regexp search was done to find an entry like the previous example, like: (re-search-forward (rx bol ":TAGS:" (1+ blank) (0+ nonl) bow "food" eow) nil t) ...it would not be guaranteed that the result would actually be in a heading's property drawer, so additional checks must be done to ensure that. Some properties are special, like CATEGORY. As well, some properties are "virtual," like SCHEDULED, which is written like: * Heading SCHEDULED: <2019-12-20 Fri 11:00> ...but is accessible with org-entry-get, like a property in a drawer. So, use tags for applying simple, conceptual labels to headings, because they're faster to search for than properties and always visible. Use properties as a key-value store for details that are less likely to be used in a query and are less important to see. What do you think? :)