Use tags for membership. Use headings for hierarchy. Use properties when a field has a value.
Pick the cheapest primitive that is still true
Tags are lightweight categories placed on headings. File tags and parent tags can be inherited. Configure controlled vocabularies and groups. A group can make locations mutually exclusive.
Use tags for membership and cross-cutting context. Use headings for hierarchy. Use properties when a field has a value: who owns this, what is the estimate, which service is affected.
Properties can inherit when org-use-property-inheritance permits it, but global inheritance adds parsing cost and can make values surprising. Prefer explicit, selective inheritance. C-c C-x p sets a property; C-c C-c on a property line refreshes it.
Column View turns heading properties into a temporary table-like summary. Run M-x org-columns on a scope. This is excellent for a lightweight project dashboard. It is not a relational database: constraints, concurrent transactions, and complex joins belong elsewhere.
Summary. Tags answer membership. Properties answer field-like questions. Headings answer containment. Files answer operational boundaries.
Exercises
- Basic: Add two tags and one OWNER property.
- Practical: Search Agenda for tasks owned by one person.
- Advanced: Define a Column View that sums effort and clock time for a project.