DevlogOctober 24, 2026 · 1 min read

Collect less, read more

Why data nobody reads is a cost, and how we sort what we collect into consumed, pending and not needed.

A glass funnel filtering particles down to one orange sphere

Collecting an event is easy. Reading it is the part that takes discipline.

Three states, not two

We used to ask a single question: "do we collect this?" Now we ask where each piece of data is read, and every one falls into one of three groups:

  • Consumed: something reads it today: a report, a dashboard, a decision.
  • Pending: we collect it because we intend to use it, and a reader is planned.
  • Not needed: nobody needs it and nobody should.

The third group matters. "Nothing reads it" and "nothing should read it" sound alike but lead to opposite actions. Collapse them and you either delete data you will want, or keep data you never will.

Cost lives in the writes

Storage is cheap. The cost is in what a signal does to the game and the pipeline each time it fires. So we look first at high-volume events with no reader. They are the first candidates to trim, and trimming them makes builds lighter and reports clearer.

A habit, not a project

Every new event has to name its reader before it ships. If it cannot, it waits. The list is reviewed regularly, and "pending" is not allowed to become a permanent home for things we will never get to.

The result is a smaller, more honest set of signals, and a team that trusts the ones it keeps.