# Kpi Dashboard Design > Design effective KPI dashboards with metrics selection, visualization best practices, and real-time monitoring patterns. Use this skill when building an executive SaaS metrics dashboard tracking MRR, churn, and LTV/CAC ratios; designing an operations center with live service health and request throughput; creating a cohort retention analysis view for a product team; or debugging a dashboard where metrics contradict each other due to inconsistent calculation methodology. Source: https://skillsagentes.com/skills/wshobson/agents/kpi-dashboard-design Repository: https://github.com/wshobson/agents Author: wshobson License: MIT Updated: hace 2 meses Context cost: 119 tok installed, 1.4k tok once triggered, 5.1k tok with every bundled file Bundle: 2 files, 20 KB Permissions requested: none declared ## Install ```bash npx -y skills add wshobson/agents --skill kpi-dashboard-design --agent claude-code ``` ## What it does - Provee frameworks para elegir KPIs, estructurar jerarquías de dashboard y aplicar buenas prácticas de visualización - Da patrones SQL/Python para normalizar métricas, cohortes mensuales, agregados pre-calculados y umbrales dinámicos de alerta - Ofrece diagnóstico para dashboards con métricas contradictorias o inconsistentes entre equipos ## Use it when - Diseñar dashboards ejecutivos - Seleccionar KPIs significativos - Construir displays de monitoreo en tiempo real - Crear vistas de métricas específicas por departamento o mejorar dashboards existentes ## What triggers it - "Diseña un dashboard ejecutivo de SaaS con MRR, churn y LTV/CAC" - "Nuestro MRR no coincide con el número de finanzas, ayúdame a diagnosticarlo" - "Crea una vista de análisis de retención por cohortes" - "El dashboard en tiempo real está saturando la base de datos" ## Files - SKILL.md — 5 KB - references/details.md — 15 KB ## SKILL.md Reproduced verbatim from wshobson/agents under MIT. This section is the upstream document and is in English. # KPI Dashboard Design Comprehensive patterns for designing effective Key Performance Indicator (KPI) dashboards that drive business decisions. ## When to Use This Skill - Designing executive dashboards - Selecting meaningful KPIs - Building real-time monitoring displays - Creating department-specific metrics views - Improving existing dashboard layouts - Establishing metric governance ## Core Concepts ### 1. KPI Framework | Level | Focus | Update Frequency | Audience | | --------------- | ---------------- | ----------------- | ---------- | | **Strategic** | Long-term goals | Monthly/Quarterly | Executives | | **Tactical** | Department goals | Weekly/Monthly | Managers | | **Operational** | Day-to-day | Real-time/Daily | Teams | ### 2. SMART KPIs ``` Specific: Clear definition Measurable: Quantifiable Achievable: Realistic targets Relevant: Aligned to goals Time-bound: Defined period ``` ### 3. Dashboard Hierarchy ``` ├── Executive Summary (1 page) │ ├── 4-6 headline KPIs │ ├── Trend indicators │ └── Key alerts ├── Department Views │ ├── Sales Dashboard │ ├── Marketing Dashboard │ ├── Operations Dashboard │ └── Finance Dashboard └── Detailed Drilldowns ├── Individual metrics └── Root cause analysis ``` ## Detailed worked examples and patterns Detailed sections (starting with `## Common KPIs by Department`) live in `references/details.md`. Read that file when the navigation summary above is insufficient. ## Best Practices ### Do's - **Limit to 5-7 KPIs** - Focus on what matters - **Show context** - Comparisons, trends, targets - **Use consistent colors** - Red=bad, green=good - **Enable drilldown** - From summary to detail - **Update appropriately** - Match metric frequency ### Don'ts - **Don't show vanity metrics** - Focus on actionable data - **Don't overcrowd** - White space aids comprehension - **Don't use 3D charts** - They distort perception - **Don't hide methodology** - Document calculations - **Don't ignore mobile** - Ensure responsive design ## Troubleshooting ### MRR shown on dashboard contradicts finance's number The most common cause is inconsistent treatment of annual plans. Finance may prorate to a daily rate while the dashboard normalizes to monthly. Align on a single formula and document it directly on the dashboard card: ```sql -- Explicit formula shown in tooltip / data dictionary -- Annual plans: divide total contract value by 12 -- Quarterly plans: divide by 3 -- Monthly plans: use as-is CASE subscription_interval WHEN 'monthly' THEN amount WHEN 'quarterly' THEN amount / 3.0 WHEN 'yearly' THEN amount / 12.0 END AS normalized_mrr ``` ### Dashboard shows green but product team reports users complaining The dashboard likely tracks system uptime (a lagging indicator) but not user-facing quality metrics. Add customer-perceived metrics alongside infrastructure metrics: | Infrastructure (green) | User-perceived (add these) | |---|---| | API uptime 99.9% | P95 page load time | | Error rate 0.1% | Task completion rate | | Queue depth normal | Support ticket volume | ### Retention cohort looks flat — no variation between cohorts Check whether the cohort query is partitioning by signup month correctly. A common bug is using `created_at::date` instead of `DATE_TRUNC('month', created_at)`, which groups by day and produces cohorts too small to show trends: ```sql -- Wrong: too granular, cohorts are too small DATE_TRUNC('day', created_at) AS cohort_date -- Correct: monthly cohorts DATE_TRUNC('month', created_at) AS cohort_month ``` ### Real-time dashboard hammers the database A live dashboard refreshing every 10 seconds with complex cohort SQL will degrade production query performance. Separate OLAP workloads from OLTP by writing pre-aggregated metrics to a summary table via a scheduled job, and have the dashboard read from that: ```python # Scheduled every 5 minutes via cron/Celery def refresh_mrr_summary(): conn.execute(""" INSERT INTO kpi_snapshot (metric, value, snapshot_at) SELECT 'mrr', SUM(...), NOW() FROM subscriptions WHERE status = 'active' ON CONFLICT (metric) DO UPDATE SET value = EXCLUDED.value """) ``` ### Alert thresholds fire constantly, team ignores them Static thresholds set once and never reviewed cause alert fatigue. Use dynamic thresholds based on rolling averages so alerts fire only when the metric deviates significantly from its own baseline: ```python # Alert if current value is > 2 standard deviations from 30-day rolling mean def is_anomalous(current: float, history: list[float]) -> bool: mean = statistics.mean(history) stdev = statistics.stdev(history) return abs(current - mean) > 2 * stdev ``` ## Related Skills - `data-storytelling` - Turn dashboard findings into narratives that drive executive decisions --- Skills Agentes — https://skillsagentes.com/skills/wshobson/agents/kpi-dashboard-design