Analytics Built Into Your Development Workflow
Define analytics alongside your code. Version control your dashboards. Deploy insights with every release. Analytics that evolve with your application.
Complete Feature Observability
Everything you need to understand how your features perform in production.
Batch Analytics & Insights
Track feature adoption, usage patterns, and performance metrics with scheduled data updates.
Business Impact
Connect feature changes to business metrics like conversion, retention, and revenue.
Smart Alerts
Get notified about performance regressions, error spikes, or unusual usage patterns.
A/B Testing Analytics
Built-in support for experiment analysis with statistical significance testing.
User Segmentation
Understand how different user cohorts interact with your features.
Trend Analysis
Spot patterns and predict future behavior with historical trend analysis.
Analytics as Part of Your Development Process
Code & Define
Write feature code and analytics config in the same PR
Test & Review
Test analytics locally, review dashboards in staging
Deploy Together
Ship features and analytics dashboards simultaneously
Monitor & Learn
Track adoption and impact, iterate based on data
Simple Integration, Powerful Insights
Track Feature Usage
python# models.visivo.yml
models:
- name: feature_events
args:
- python
- track_features.py
table_name: feature_tracking
# track_features.py
import pandas as pd
import json
from datetime import datetime
# Collect feature usage from your application logs
events = []
with open('app_logs.json', 'r') as f:
for line in f:
log = json.loads(line)
if log.get('feature_flag'):
events.append({
'timestamp': log['timestamp'],
'feature': log['feature_flag'],
'user_id': log['user_id'],
'value': log.get('value', 0)
})
df = pd.DataFrame(events)
df.to_csv('output.csv', index=False)Auto-Generated Dashboards
yaml# project.visivo.yml
# Reusable business logic lives in the semantic layer
models:
- name: feature_events
sql: SELECT * FROM ${ref(feature_events)}
metrics:
- name: active_users
expression: "COUNT(DISTINCT user_id)"
description: "Distinct users touching the feature"
dimensions:
- name: event_day
expression: "DATE_TRUNC('day', timestamp)"
# Insights handle the chart + client-side filter/split/sort
insights:
- name: adoption-rate
model: ${ref(feature_events)}
props:
type: scatter
mode: lines+markers
x: ?{ ${ref(feature_events).event_day} }
y: ?{ ${ref(feature_events).active_users} }
interactions:
- split: ?{ ${ref(feature_events).feature} }
- sort: ?{ ${ref(feature_events).event_day} ASC }
- filter: ?{ ${ref(feature_events).feature} = 'new-checkout-flow' }
charts:
- name: feature-adoption
insights:
- ${ref(adoption-rate)}
dashboards:
- name: Feature Analytics
rows:
- height: medium
items:
- chart: ${ref(feature-adoption)}Smart Alerting
yaml# project.visivo.yml
# Destinations are reusable notification targets
destinations:
- name: engineering-slack
type: slack
webhook_url: ${ env.SLACK_WEBHOOK_URL }
- name: oncall-email
type: email
to: oncall@company.com
# Alerts fire after 'visivo test' when their 'if' expression is true
alerts:
- name: feature-health
if: >{ anyTestFailed() && env.ENVIRONMENT == "PRODUCTION" }
destinations:
- ${ ref(engineering-slack) }
- ${ ref(oncall-email) }Built for Modern Engineering Teams
Feature Flags & Rollouts
Monitor adoption rates during gradual rollouts
Compare performance between control and treatment groups
Automatically detect and alert on rollout issues
Make rollback decisions based on real data
Product Development
Validate product hypotheses with real usage data
Identify which features drive engagement
Prioritize development based on impact
Share insights across product and engineering
Start Shipping Features with Confidence
Join engineering teams using Visivo to track and visualize feature performance.
$ curl -fsSL https://visivo.sh | bash