How to measure whether anyone uses a feature.

•

•

Half Your Features Have No Users

I spent three weeks of my life at a logistics startup building a sophisticated telemetry pipeline, all so we could track every single click, hover, and scroll depth in a beautiful, real-time dashboard. We had the most expensive observability stack money could buy, but it didn’t actually tell us anything useful. When the product manager asked me how to measure whether anyone uses a feature, I realized we were just staring at a mountain of expensive noise while the actual signal was buried under a pile of useless vanity metrics. We weren’t measuring utility; we were just measuring activity, and there is a massive, expensive difference between the two.

I’m not here to pitch you a new suite of enterprise analytics tools or a complex framework that requires a dedicated data science team to interpret. Instead, I want to talk about the boring, practical ways to find out if your code is actually providing value or just sitting there consuming CPU cycles. I’ll share the specific, lightweight patterns I’ve used to distinguish between a feature that is being used and a feature that is just cluttering the UI. No hype, just the stuff that actually works when you’re trying to decide what to delete next.

Table of Contents

The Difference Between Vanity Metrics and Actual Feature Adoption Rate

The Difference Between Vanity Metrics and Actual Feature Adoption Rate

The difference between vanity metrics and actual feature adoption rate

I’ve spent too many late nights staring at dashboards that looked great on paper but meant absolutely nothing for the stability or utility of the system. Most of the time, you’ll see people celebrating “total clicks” or “page views” as if they’re a proxy for success. That’s a trap. You can have ten thousand clicks on a new button, but if those clicks are just users frantically clicking because the UI is unresponsive, your product analytics metrics are lying to you. High numbers don’t equal value; they often just equal noise.

To actually understand if a feature is sticking, you have to look past the surface-level fluff. I don’t care how many people saw the new API endpoint; I want to know how many are actually integrating it into their daily workflows without triggering a spike in error rates. Real feature adoption rate is about depth, not just breadth. It’s the difference between someone accidentally stumbling into a tool and someone actually relying on it to get their job done. If you aren’t looking at the retention of that specific action, you aren’t measuring adoption—you’re just counting accidents.

Why Your Product Analytics Metrics Are Lying to You

Why Your Product Analytics Metrics Are Lying to You

The problem with most product analytics metrics is that they measure activity, not intent. I’ve seen teams celebrate a massive spike in “clicks” on a new button, only to realize a week later that the button was actually a confusing UI glitch that users were clicking repeatedly because it didn’t work. You aren’t seeing engagement; you’re seeing frustration disguised as data. If your event-based tracking implementation is just a blunt instrument that logs every single mouse movement, you’re going to drown in noise. You end up making data-driven product decisions based on a mountain of digital exhaust that tells you nothing about whether the feature actually solved the problem it was supposed to.

Another trap is the “zombie user” effect. This happens when you see high numbers in your dashboard, but those numbers are driven by a tiny subset of power users who would have found a way to use your system even if the feature didn’t exist. If you aren’t careful, these outliers skew your feature adoption rate so much that you think a rollout was a success, while the rest of your user base is silently struggling. We spent three months building a complex filtering tool at my last job, only to find out through actual logs that nobody was using it—they were just hitting “refresh” on the main dashboard because they thought the data hadn’t updated yet.

Five ways to stop guessing and start actually seeing what's happening

  • Instrument the right events, not just every click. I’ve seen dashboards flooded with “button_clicked” events that tell me nothing about whether the user actually completed the workflow. If the user clicks ‘Submit’ but the backend returns a 500, that feature isn’t being used; it’s being broken. Track the successful completion of the intent, not just the mechanical interaction.
  • Watch the error rates of the feature specifically. Sometimes “high usage” is actually just a high volume of retries because a new deployment introduced a latency spike. If your adoption numbers go up at the exact same time your error logs spike, you haven’t built a popular feature; you’ve built a magnet for support tickets.
  • Look for the “silent churn” in the feature lifecycle. A user might trigger the feature once, but if they never return to it within a meaningful window, the feature hasn’t actually integrated into their workflow. I prefer looking at the retention rate of the specific feature path rather than just the total number of unique users.
  • Correlation is not causation, especially in distributed systems. Don’t assume a spike in feature usage means your new UI is better. It could be a marketing push, a seasonal anomaly, or a bot scraping your API. Always cross-reference your feature metrics with your baseline system load to make sure you aren’t being fooled by noise.
  • Define a “success state” before you ship the code. I’ve learned the hard way that if you don’t decide what “useful” looks like during the design phase, you’ll spend three weeks staring at a Grafana dashboard trying to find meaning in a bunch of meaningless lines. Decide if success is 10% of users or 50% before you even write the first migration.

What I actually look for when I'm checking if a feature is alive

Stop looking at “total clicks” and start looking at the ratio of successful completions to attempts; if people are clicking a button but the backend is returning 400s or the user is bouncing halfway through, that isn’t adoption, it’s just noise.

Track the “time to value” instead of just the session count; I want to know if a user actually achieves the core task within their first few interactions, or if they are just wandering around the UI like they’re lost in a fog.

Define a “successful user” before you ship the code; if you don’t know exactly what a meaningful interaction looks like in your database, you’ll never be able to distinguish a power user from someone who just can’t figure out how to close a pop-up.

Stop chasing ghosts

Stop chasing ghosts with vanity metrics.

At the end of the day, measuring feature adoption isn’t about building a more complex Grafana dashboard or hunting for a specific magic number in Mixpanel. It’s about distinguishing between a user who accidentally clicked a button and a user who actually integrated the feature into their workflow. If you can’t see the difference between a spike in raw events and a sustained change in user behavior, you aren’t measuring adoption; you’re just watching noise. Stop letting vanity metrics give you a false sense of security while your actual utility is silently bleeding out in production.

I’ve spent too many nights debugging systems that were technically “active” according to the telemetry, only to realize no one was actually getting value from them. My advice is to keep your measurement strategy boring, direct, and tied to real-world outcomes. Don’t build a system that tells you how much people are clicking; build one that tells you if the feature is actually doing the job it was supposed to do. If you can answer that, you’ve already done more than most of the engineers I know.

Frequently Asked Questions

How do I distinguish between a user who actually finds value in a feature and one who is just clicking around because the UI is confusing?

You have to look at the sequence, not just the click. If a user hits a button and then immediately bounces or starts clicking everything in sight, they aren’t “using” the feature; they’re lost in the woods. I look for “completion loops”—a click followed by a meaningful state change or a return to a stable workflow. If the session ends in a frantic pattern of navigation, that’s a UI failure, not adoption.

At what point do I stop tracking a feature's usage and just accept that it's a failed experiment?

I stop tracking when the cost of maintaining the telemetry exceeds the value of the data. If I’m spending more time debugging why a specific event isn’t firing in the logs than I am actually improving the feature, it’s dead weight. Usually, it’s a sign that the feature isn’t part of the core user workflow. If the signal is flat for three months despite our best efforts, I kill the metrics and move on.

How do we set up telemetry that actually tells us why a user stopped using a feature, rather than just showing a downward trend line?

If you’re just looking at a downward slope in a dashboard, you aren’t doing telemetry; you’re doing an autopsy. To find the “why,” you need to instrument the friction points. I don’t want to see “Feature X used: 50 times.” I want to see “Feature X triggered Error 500” or “User clicked ‘Submit’ and nothing happened for 4 seconds.” You have to track the failures, the timeouts, and the abandoned flows. That’s where the truth is.

How much manual instrumentation is too much before I'm spending more time writing tracking code than actual business logic?

If you’re spending more time debugging event payloads than fixing bugs, you’ve crossed the line. I’ve seen teams turn their business logic into a house of cards just to satisfy some marketing dashboard.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.