Most B2B SaaS products carry features that nobody actually uses. They’re not malicious — they were once worth shipping. But they cost engineering time to maintain, they clutter the UI, they bloat onboarding, and they distort roadmap discussions because nobody can prove either way whether anyone cares. Below is a practical, five-step playbook for finding those features and deciding what to do about them.
This isn’t a theoretical guide. It’s the playbook we use ourselves, and the one our customers use UsageLens to run.
The most common mistake when teams set out to measure unused features is to start from existing event analytics. The events are usually too granular, inconsistently named, or skewed by funnels that don’t reflect actual feature use.
Start fresh, at the feature level. Make a list — yes, a literal list — of every feature in your product that a user can invoke. Aim for the level of granularity where each item is something you could deprecate as a unit. A button that opens a panel is part of a feature; the panel itself is the feature. A keyboard shortcut is part of a feature; not its own feature.
Then instrument each one with a single signal: this feature was used, by this anonymized user, in this context, at this time. That’s it. One API call per feature, fired wherever the feature is invoked — including background features like scheduled jobs, API-driven workflows, and auto-running tasks. Those are exactly the features click-based analytics tools miss, and they’re often doing the most work. With UsageLens, the same API call works from a click handler or a server-side job, so instrument both.
If you’re using UsageLens, this is the data collection step. If you’re not, you can build the same model on top of an event analytics tool — just be disciplined about the naming convention from day one.
Raw usage counts are deceptive. A feature used 10,000 times last month might be used by three superusers in one enterprise account. A feature used 50 times might be used by 50 different customers — far more strategically important.
For each feature, look at:
The goal here is to avoid two opposite mistakes: killing a feature that’s quietly load-bearing for a key segment, and protecting a feature that has flashy total numbers but no real reach.
A snapshot of feature usage isn’t enough. You also want the shape of adoption — is it growing, flat, or declining?
For each feature, plot weekly active users since launch. You’ll typically see one of four patterns:
The pattern matters more than the absolute number. A small but growing curve is more interesting than a large but flat one.
For B2B products, the next step is asking which customers depend on a feature. A feature with 200 monthly active users sounds healthy until you discover those 200 users all belong to two enterprise accounts.
Run this analysis for every feature with non-trivial usage:
A feature concentrated in two enterprise accounts isn’t necessarily worth keeping (depends on those contracts), but you need to know before you deprecate. A feature used broadly but shallowly may have a different fate than one used deeply by a few.
Once you have the data, run each feature through a three-way decision:
Don’t skip the communication step. Even a feature used by 10 customers will have one of those customers email support if you remove it silently.
The five-step playbook above is intentionally tool-agnostic. If you’re using UsageLens specifically, the practical workflow is:
POST /track) wherever each feature is invoked, with the anonymized user ID, customer ID, and role.There’s no SQL, no dashboard-building, and no event taxonomy maintenance — that’s the whole point of building UsageLens around features rather than events.
A few patterns we’d recommend against: