Why you don't need a tag system in 99% of cases

2 min read
Outline

tag

Situation: you are managing your own product. For a certain model you need a category.

Your developer suggests using a tagging system.

It’ll be more flexible and future-proof. Also it’s easy to include.

You know tags from twitter and are about to agree to go along with it.

But: is it really a good idea?

After reading this post you know exactly how tag systems operate, when to use them, and when to say “No” to an overly eager developer.

TL;DR

  • It’s easy to get started with a tag system
  • Tag systems make a database model harder to query
  • If you only want categories, use enums

The client wants to categorize

I’m writing this post because my team just ran into the issue with a customer project.

Situation: we have an Event and a Participation model. The client’s Product Owner wants to sort events into 4 categories. Participations should get separated into 6 different categories.

Our initial thought: it’d be great to attach a tag to each event. If we keep tags generic, we can then also attach

How do tags work?

It uses a new model with a polymorphic association. That way it can attach to any model.

Querying will be harder

event.tag_names => ['demo']

Event.tagged_with(:names => ['demo'], :match => :any)

Alternative: Why not just categories?

These are categories but they look like tags: categories, not tags

With Hotwire, this is super easy to build:

when selected

The determining factor: multiple or not? Free definition or not?

Rule of thumb: In order to use tags, you need these things to be true

  • use tags when you to attach 0 or many pieces of information to a record.
  • And be able to define them totally freely

Agile approach: quick now, upgrade later

  • We’ll upgrade once the client wants to add more information to events+participations

Till Carlos

I'm Till, a senior developer who started a software company. I explain software concepts for people in leading roles.