How to decide what to build next from usage.

•

•

Let the Logs Choose the Roadmap

I spent three months at a logistics startup building a highly sophisticated analytics dashboard because the product manager had a “hunch” based on a single, anecdotal customer call. We poured hundreds of engineering hours into beautiful charts and real-time telemetry, only to realize a week after launch that nobody actually used it—they just wanted a CSV export that worked. Most companies try to solve the problem of how to decide what to build next from usage by buying expensive BI tools or hiring consultants to run “engagement workshops,” but they end up just creating more noise to mask the fact that they aren’t actually looking at the raw reality of how the system is being stressed.

I’m not here to give you a lecture on product-led growth frameworks or how to color-code your user cohorts. Instead, I want to talk about the uncomfortable data—the patterns in the logs, the specific API endpoints that are being hammered in ways you didn’t intend, and the silent failures that happen when a user tries to force your tool to do something it wasn’t designed for. I’ll show you how to look past the vanity metrics and find the actual signal in the noise, so you can stop guessing and start building things that actually survive the first week in production.

Table of Contents

Ignoring Vanity Metrics for Real Product Usage Analytics

Ignoring Vanity Metrics for Real Product Usage Analytics

Most people start by looking at total active users or session counts, thinking they’ve found a goldmine of insight. They haven’t. I’ve spent too many nights staring at dashboards where “engagement” was up, yet the actual system load was flat and the error rates were climbing. High-level numbers are often just noise that masks the reality of how people actually interact with your code. If you want a data-driven product roadmap that actually works, you have to stop looking at how many people logged in and start looking at what they did once they got there—and more importantly, where they stopped.

I prefer to dig into the messy details of user behavior analysis rather than chasing vanity numbers. Instead of celebrating a 20% increase in daily logins, I want to see the specific drop-off points in a multi-step workflow. Are they hitting a specific API endpoint and then immediately idling? That’s not engagement; that’s a bottleneck. By identifying friction points in UX through actual event logs rather than aggregated percentages, you stop building features based on what looks good in a slide deck and start building them to solve the actual friction that’s slowing your users down.

Quantifying User Needs Instead of Following Gut Feelings

Quantifying User Needs Instead of Following Gut Feelings

I’ve sat in too many sprint planning meetings where a stakeholder says, “I have a feeling users want a dashboard for X,” only to have us spend three weeks building it, only to see the logs show zero hits. Gut feelings are expensive. They are the most common cause of technical debt because we end up building and maintaining code that nobody actually touches. Instead of playing guessing games, I prefer to look at user behavior analysis to see where people are actually struggling. If they are clicking a button three times before finally succeeding, or if they are constantly hitting an error state and then immediately navigating away, that is a signal. That isn’t just a bug; it’s a requirement disguised as a failure.

When I look at a backlog, I don’t care about how “cool” a feature sounds. I want to see the identifying friction points in UX that are currently costing us time or causing churn. If the data shows that users are consistently bypassing a specific workflow to perform a manual workaround, that’s a much stronger signal than any brainstorm session. It’s about moving away from “what would be nice” and moving toward quantifying user needs through what they actually do when no one is watching. It’s less glamorous than a whiteboard session, but it’s the only way to ensure we aren’t just shipping more noise.

Five ways to actually use your data without drowning in it

  • Look for the friction points, not the peaks. Everyone loves looking at the “active users” graph going up, but I want to see where the user journey hits a wall. If 40% of people start a workflow but never hit the “complete” endpoint, that’s not a feature request; that’s a broken process that needs fixing before we add anything new.
  • Watch the “workarounds.” When you see users performing a series of strange, repetitive actions that don’t follow the intended path, they aren’t being creative—they’re trying to force the system to do something it wasn’t built for. That’s your roadmap right there.
  • Correlate feature usage with retention, not just clicks. It doesn’t matter if a new button gets a million clicks if the users who click it churn three weeks later. I only care about the features used by the people who actually stick around and keep our service running.
  • Stop treating every support ticket as a feature request. A spike in tickets usually means something is confusing or broken, not that we need a new module. Distinguish between “I want this to do X” and “I can’t figure out how to do Y.” One is an evolution; the other is a bug.
  • Check the “silent” failures. Sometimes the usage data looks fine because the users are simply giving up and leaving. If a specific segment of your user base just stops interacting with a certain part of the API or UI, don’t assume they’re satisfied—assume they’ve hit a wall that didn’t trigger an explicit error log.

The Reality Check

Stop looking at “Total Users” or “Daily Active Users” as proof of success; they are vanity metrics that hide churn. I want to see the specific sequence of events that leads a user to abandon a workflow halfway through.

If you can’t map a user’s behavior to a specific error log or a latency spike, you aren’t looking at usage data—you’re looking at a graph that makes you feel good while the system actually struggles.

Use data to find the friction, not to justify your existing roadmap. The most valuable thing you can build is often the thing that fixes the bottleneck that’s been quietly killing your conversion rates for months.

Stop Building for the Idea, Start Building for the Reality

Stop Building for the Idea, Start Building for the Reality.

At the end of the day, deciding what to build isn’t about finding a magic dashboard or a clever new analytics tool; it’s about the discipline of looking at where the friction actually lives. We’ve talked about cutting through the noise of vanity metrics and moving away from that seductive, but ultimately dangerous, gut feeling that tells us a feature is a “no-brainer.” If you aren’t looking at the specific error logs, the drop-off points in your user flows, or the actual ways people are breaking your current implementation, you aren’t looking at usage—you’re just looking at a graph. The goal is to move from guessing what might be useful to verifying what is actually necessary based on the scars left in your production data.

I’ve spent enough time fixing broken deployments at 2:00 AM to know that the most expensive mistakes are the ones we thought were “obvious” before we checked the data. Building the wrong thing is a massive waste of engineering cycles, and in a small team, that waste is often fatal. Don’t let the pressure of a roadmap force you into shipping features that no one actually needs. Instead, treat your usage data like a technical specification for your product’s future. If the data doesn’t give you a clear, undeniable reason to build it, then it probably isn’t worth the deployment.

Frequently Asked Questions

How do I distinguish between a user who is actually struggling with a workflow and a user who is just exploring the system in a way that looks like high engagement?

Look at the “loop” patterns. A user exploring is clicking around, hitting different endpoints, and eventually landing on a success state. A user struggling is stuck in a cycle: they hit an error, retry the same sequence, hit another error, and then—crucially—they either abandon the session or trigger a support event. High engagement looks like a straight line to a goal; struggle looks like a frantic, repetitive circle that ends in nothing.

At what point does the cost of building a feature based on a small subset of heavy users outweigh the benefit of keeping the platform simple for everyone else?

It’s a classic trap. I’ve seen teams turn a streamlined tool into a bloated mess because three “power users” screamed loud enough. You have to ask: is this feature a core extension of the platform, or is it just a bespoke plugin for a niche? If building it increases the cognitive load for the 90% who don’t need it, you’re not building a product anymore—you’re building a custom consultancy. Build the platform, not the exception.

How do I stop my data from being skewed by "noisy" automated processes or internal testing that makes it look like certain features are getting more traction than they actually are?

I’ve spent too many late nights chasing “growth spikes” that turned out to be nothing more than a misconfigured health check or a rogue integration test hitting our endpoints. To fix this, stop treating every request as a user. You need to implement strict filtering at the ingestion layer—filter by known IP ranges, specific User-Agent strings, or internal service accounts. If your telemetry doesn’t distinguish between a customer and a cron job, your roadmap is built on ghosts.

When the usage data suggests one direction but my intuition—based on years of seeing similar patterns fail—says another, how do I decide which one to trust?

I’ve been in this exact spot. Data says “feature X is exploding,” but my gut says “this is just a novelty spike that will crash our infra.”

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.