Where the dead feature idea came from
- buildinpublic
- saas
- analytics
- product
In the first post I described Eventra as a feature tracker: a backend and a dashboard, with features typed in by hand and usage numbers next to them. That was a solid base, but it was not a distinct product.
I did not want to build something that already exists. Usage analytics is a crowded space: many tools count events, draw funnels and show retention. A copy of them, even a good one, would miss the point of the project. The question was never "which feature should I add" but "what does nobody do".
The problem from work
The answer came from a situation I had seen at work more than once.
Someone opens a part of the product and says: "I think we can delete this." Nobody can say whether it is safe. Is anyone using it? Maybe a large customer depends on it. Maybe it has been dead for a year. The code stays, because removing it is a risk and keeping it costs nothing. After a few years the codebase is full of parts nobody dares to touch.
Standard analytics does not solve this, for a structural reason. Analytics tools show what happened. A feature nobody uses is a feature where nothing happened, so it never appears in a report. You only find it if you already know it exists and look it up by name. To find dead features you first need a complete list of features, and nobody has one.
That second problem shaped the product. The list of features should not be typed in by a person. It should come from the code, because the code is the only place that knows what is there.
How it went in git
- By mid-March the dashboard had pages for dead events and a dead-feature view, built on the manual model: events are sent, and a feature with none for a while is flagged.
- On April 10 the CLI appears in the repository, in a commit named "create cli", published the same day. It reads the TypeScript code, finds every tracking call, and builds the feature catalog from that.
- After that came a long stretch of work on exactly this part: watch mode, a universal parser, and plugins for Vue, Svelte, Astro and Angular.
The dead-feature flag came first, on top of manual tracking. Reading the code came about a month later, because without it the flag can only be correct for features someone remembered to list, which are the ones you do not need to check.
Where it stands
The technical part works: the CLI finds features in real projects, and the detector flags the right ones. The product has three signals, each answering a different question (the documentation describes how each one is calculated):
- Dead: a feature that was used before and has had no events past a threshold (14 days by default).
- Declining: still used, but at half or less of the previous period.
- Never seen: found in the code and never sent a single event.
The roadmap has a phase for the next step: customer discovery, a design partner and a priced pilot. If you have ever hesitated before deleting a feature, I would like to hear how your team decided, or you can try the live demo and see these states on real-looking data.