---
name: analytical-design
description: "Use when someone asks how a dashboard, report, or monitoring view should help a user understand data and act. Produces domain-model-first information architecture and a widget hierarchy for the analytical surface, not individual chart implementations. Use `interaction-design` for component behavior, `conversion-design` for marketing surfaces, and `workspace-design` for sustained-work tools. Metric and outcome strategy belongs upstream; shaping the analytics product belongs to `frame-intent`; implementing charts and data bindings belongs to frontend engineering."
---

# Skill: analytical-design

Converts business questions and the domain model into a **structural specification for an analytical surface** — the widget hierarchy, the spatial layout grammar, and the role-based view architecture that lets a user move from a status signal to a diagnostic to a corrective action without losing their place. This skill is dashboard IA; it does not design individual chart encodings (that is `interaction-design`'s widget state machine) and does not derive tokens or color (that is `design-system` and `creative-direction`).

## Output rendering

Table — When presenting several items that share the same fields, render a Markdown table. Cap at ~5 columns; beyond that, switch to a per-item detail list. Right-align numeric columns.

## When to invoke

Confirm all three before specifying:

1. **The surface goal is comprehension and action** — the primary measure is whether a user can answer a specific business question and take a next action from the screen. If the primary goal is conversion, use `conversion-design`; if it is task management, use `workspace-design`.
2. **The domain model can be articulated** — objects, attributes, relationships, and actions define what data exists and what a user can do with it. Without a domain model, widget placement is decoration.
3. **Business questions are named** — "give me insights" is not a design brief. The 3–5 explicit questions this screen must answer are the design constraints.

## Domain-model-first

Before placing any widget, name the domain model. This is not a data schema — it is the conceptual model a user already carries:

- **Objects:** what are the entities the user thinks about? (Orders, customers, pipeline stages, deployments, incidents)
- **Attributes:** for each object, what properties matter for the business questions this screen answers?
- **Relationships:** how do objects relate to each other in a way that creates analytical questions? (A customer has many orders; an incident affects multiple services)
- **Actions:** what can a user DO with data on this screen? (Drill into an order, assign an incident, filter by date range, export a report)

Widget placement follows from the domain model. A KPI widget placed on a screen because "it looks good" will fight the user's mental model.

## Business-question anchoring

Name exactly 3–5 questions this screen must answer. These are the design constraints; every widget and layout decision should be traceable to at least one of them:

**Question format:** "[Role] needs to know [fact] so they can [action]."

Examples:
- "The on-call engineer needs to know which services are currently degraded so they can prioritize which runbook to open."
- "The VP of Sales needs to know whether the pipeline is trending toward the quarterly target so they can decide whether to intervene."
- "The support manager needs to know where ticket volume is highest by category this week so they can decide where to add capacity."

A widget that does not answer any of the 3–5 named questions is a candidate for removal.

## 3-tier widget hierarchy

Organize widgets into three tiers based on their role in answering the business questions:

**Tier 1 — Primary KPIs (≤9 widgets)**
The state signals a user checks first to know if anything requires attention. Each answers a binary: "Is this good or not?" Limit to 9 (Miller's Law — cognitive chunking boundary for at-a-glance processing). More than 9 primary KPIs means the screen has no primary signals; everything is equally important, which means nothing is.

**Tier 2 — Secondary diagnostics**
The widgets a user consults after a Tier 1 signal raises a question. These answer "why?" or "where?" — trend lines, breakdowns, distributions. Positioned after Tier 1 in the visual hierarchy.

**Tier 3 — Tertiary details**
The data tables, raw logs, or drill-down panels a user accesses after Tier 2 narrows the question. These are not on the default view; they appear on demand (expandable section, detail panel, drill-down navigation).

## Shneiderman's mantra — applied to layout

Overview first, zoom and filter, then details on demand. Apply at the layout level:

- The **overview** (Tier 1 KPIs) is above the fold without scrolling.
- **Zoom and filter** controls (date range, role filter, service selector) are adjacent to the data they filter — not buried in a sidebar divorced from the widgets.
- **Details on demand** (Tier 3) are accessible from any widget via a consistent affordance (click to expand, click to drill through).

## Role-based views

If the same data serves multiple roles with different business questions, design role-based views rather than a single view that tries to serve everyone:

- Name the roles and their questions before designing any view.
- Define which Tier 1 KPIs differ by role; shared KPIs appear in a shared overview; role-specific KPIs appear in role-specific sections or views.
- Design a view-switching affordance that is visible and immediate — a role selector in a tab or header, not a settings page.

A single screen designed to serve all roles equally serves none of them well.

## Spatial layout grammar

Assign spatial zones to function before placing widgets:

| Zone | Function |
|------|---------|
| **Top** | State signals — the Tier 1 KPI row; status indicators; time-range selector |
| **Left** | Worklist — the enumeration of objects requiring attention (incident list, task queue, open tickets) |
| **Centre** | Primary diagnostic — the Tier 2 widget that answers "why?" for the selected item from the left |
| **Right** | Context and filter — date range, filter controls, metadata about the selected object |

This grammar is not a requirement — it is a starting point. Override it only when the domain model's object relationships make a different layout more legible. Document the override and the reason.

## Per-widget state handling

Each widget must specify its state set before it is designed:

| State | What to show |
|-------|-------------|
| **Loading** | A skeleton that matches the loaded widget's layout — not a spinner that collapses the zone |
| **Empty** | Why there is no data (no data for this date range? no permissions? no activity?) + the next action |
| **Error** | The error in user terms + a recovery action (retry, check filter, contact support) |
| **Populated** | The normal data state — the "happy path" |
| **Stale** | When data is cached and the freshness timestamp matters, show the staleness signal adjacent to the data |

A widget designed only in its "populated" state will surprise users when it loads, fails, or empties.

## Canonical aesthetic reference tier (study subjects, not prescriptive tools)

For grounding creative-direction on an analytical surface, study how these products handle data density and information hierarchy: Linear (high-density status layout), Retool (flexible widget hierarchy clarity), Metabase (progressive disclosure in data exploration). Internalize the structural philosophy — signal vs. noise hierarchy, spatial grammar, progressive disclosure — not the surface treatment.

## Anti-patterns to refuse

- **Widget-first design.** Choosing charts before naming the business questions inverts the design process. The chart type is a downstream decision; the question it answers is the upstream constraint.
- **More than 9 Tier 1 KPIs.** Every signal at the same visual weight means no signal. Limit or collapse into a status row.
- **Filter controls separated from data.** A date range filter in a sidebar while the charts it affects are in the center creates a spatial mismatch that obscures the relationship. Filters live adjacent to the data they filter.
- **Missing empty and error states for widgets.** A dashboard widget with no empty state looks broken when it loads with no data. Specify all states.
- **Role mixing without view separation.** A dashboard designed for both an executive overview and operational triage will satisfy neither. Separate by role or clearly layer the hierarchy.
