DEV Community

Cover image for I built an analytics tool that tells you what's broken instead of showing more charts
Alex Koval
Alex Koval

Posted on

I built an analytics tool that tells you what's broken instead of showing more charts

Six months ago I had a Mixpanel setup with 140+ custom events. Nobody on the team knew what half of them tracked. The engineer who set them up had left. The PM spent two weeks building dashboards before making any decision.

And after all that work, the dashboards told us what happened. Never why. Never what to do next.

So I started building something different.

The problem I kept running into

Every analytics tool I've used follows the same pattern: you track events, you build funnels, you stare at charts, you try to figure out what they mean.

The interpretation part — the "so what?" — is always left to you. And if you're a small team shipping fast, you don't have time to be a data analyst on top of everything else.

I wanted a tool that skips the dashboard phase entirely and just says: "Feature X has a drop-off problem at step 3. Here's what's likely causing it."

How it works under the hood

The core idea is simple. Instead of tracking hundreds of discrete events and hoping someone connects the dots, we track behavioral sequences and look for pattern changes over time.

Here's the basic mental model:

// Traditional analytics: track everything, interpret later
track('button_clicked', { button: 'signup' });
track('page_viewed', { page: '/onboarding' });
track('feature_used', { feature: 'import' });
// ...140 more of these

// What we do: drop in one script, auto-tracking handles the rest
// <script src="https://xora.es/sdk.js"></script>
xora.init({
  projectId: 'YOUR_PROJECT_ID',
  apiKey: 'YOUR_API_KEY'
});
// Auto-tracking enabled: pageviews, clicks, forms
// The system builds behavioral sequences from there
Enter fullscreen mode Exit fullscreen mode

The SDK auto-captures session-level behavioral data — pageviews, clicks, form interactions — out of the box. On the backend, we build per-user behavioral profiles and track three things:

1. Time-to-value trends

Not just "how long until first action" but how that time changes over weeks. If a user's path to value is getting longer, that's friction building up — and it usually predicts churn 3-6 weeks before it happens.

2. Feature breadth per session

Healthy users explore. They touch multiple features, check settings, try integrations. Users who are about to leave narrow down to single-feature, in-and-out sessions. We track this as a rolling average and flag anomalies.

3. Post-support behavioral change

When a user contacts support and then doesn't change their behavior afterward, that's a strong signal they've mentally checked out. We track behavior deltas within 48 hours of support interactions.

The architecture (simplified)

┌─────────────┐ ┌──────────────┐ ┌─────────────────┐
│ JS SDK │────▶│ Event │────▶│ Sequence │
│ (auto-track)│ │ Pipeline │ │ Builder │
└─────────────┘ └──────────────┘ └────────┬────────┘


┌─────────────────┐
│ Pattern │
│ Analyzer │
└────────┬────────┘


┌─────────────────┐
│ Recommendations │
│ Engine │
└─────────────────┘

The Sequence Builder turns raw events into behavioral flows per user. The Pattern Analyzer compares current patterns against that user's historical baseline. When something shifts beyond a threshold, the Recommendations Engine generates a plain-English explanation of what changed and what likely caused it.

No dashboards. No funnels to build. Just alerts that say "here's what's broken and here's what to fix first."

What I learned building this

Devs don't want more dashboards. Every founder and dev I talked to during early user research said the same thing: "I don't have time to interpret charts." They wanted answers, not data.

Auto-tracking beats manual event setup. We started with a manual event tracking approach like everyone else. Adoption was terrible. Nobody wants to instrument 50 events. The moment we switched to auto-capture with a lightweight script tag, onboarding time dropped from days to minutes.

Behavioral sequences > individual events. A single event tells you almost nothing. The order and timing of events tells you everything. This was the biggest insight that shaped the product.

Current state

We're in early beta with a handful of teams. Still rough around the edges. The SDK is lightweight, drops into any site with a single script tag. Integration is copy-paste:

<!-- Add before </head> -->
<script src="https://xora.es/sdk.js"></script>
<script>
  xora.init({
    projectId: 'YOUR_PROJECT_ID',
    apiKey: 'YOUR_API_KEY'
  });
</script>

<!-- Identify logged-in users -->
<script>
  xora.identify('user_123', {
    $email: 'user@example.com',
    plan: 'pro'
  });

  // Track custom events on top of auto-tracking
  xora.track('feature_used', { name: 'export' });
</script>
Enter fullscreen mode Exit fullscreen mode

Auto-tracking covers pageviews, clicks, and forms out of the box. You only need identify and track if you want to layer on user identity and custom events.

If you're building a SaaS product and tired of staring at Mixpanel dashboards without knowing what to actually do — I'd love to hear what you think. Still figuring out a lot of this in public.

What's your current analytics setup look like? And honestly — do you actually look at your dashboards?

Top comments (0)