Visual Reference · 40 Principles

Design
Done Right 40 principles. Every one demonstrated with a working visual.

A reference guide for designers and engineers who build data products. Scroll through once to learn the foundations, then continue into implementation, enterprise systems, and validation.

0
Principles
7
Clusters
4
Interactive

Visual Hierarchy

Drag the slider — watch hierarchy collapse Clear hierarchy
Clear hierarchyFlattenedEverything equal
Primary KPI — Most Important
$4.2M
Total Revenue · Q4 2024
↑ 18.4% vs last quarter
Conversion
4.7%
Active Users
18.4k
Avg Session
6m 42s

When every metric looks equally important, users can't prioritise — they freeze or skim past everything.

Size, weight, and contrast do the work before users consciously read anything. One dominant element — your primary KPI — should be unmistakably more important than everything else on the page. Everything else is supporting cast.

12-Column Grid System

1
2
3
4
5
6
7
8
9
10
11
12
Span 4 cols
12,840
Span 4 cols
$2.4M
Span 4 cols
94.2%
Span 8 cols — primary chart
Span 4 cols
Supporting metric

A layout that feels "designed" is usually just consistently aligned — the grid is doing work users never consciously notice.

12 columns divide evenly into 2, 3, 4, and 6 — one system covers every layout you'll ever need. Consistent alignment is what makes a dashboard feel intentional rather than assembled piece by piece.

Whitespace & Spacing System

The 8px Spacing Scale
4px
Icon gap, tight pairs
8px
Base unit — label to value
16px
Card inner padding
24px
Gap between cards
32px
Section padding
48px
Between major sections
64px
Page margins
✗ No breathing room
REVENUE
$4.2M
USERS
18.4k
CONV.
4.7%
✓ Generous whitespace
REVENUE
$4.2M
USERS
18.4k
CONV.
4.7%

Cramped spacing doesn't just look bad — it makes users work harder to separate signal from noise.

Adjust spacing — feel the difference 8px base unit
2px — cramped8px — standard24px — airy
Revenue
$4.2M
Users
18.4k
Conv.
4.7%
8px spacing — comfortable, systematic

Whitespace is the invisible grid that holds everything together. An 8px base unit — scaled as 4, 8, 16, 24, 32, 48, 64 — means every spacing decision relates to every other one. Random spacing looks random; systematic spacing looks inevitable.

Z-Pattern Layout

1
Logo & Primary Nav

Top-left anchor — first element the eye lands on. Brand + main navigation.

2
Global Actions

Top-right — CTAs, date pickers, user settings.

3
Secondary Content

Bottom-left — supporting info, filters, secondary KPIs.

4
Final CTA

Bottom-right — export, summary action, conversion.

Zone 1 — Top-left: brand anchor and primary navigation. The first thing every eye lands on.

Z-pattern layouts work because they match the natural scanning sequence Western readers use when they're not reading — they're surveying. Put your brand anchor top-left, primary action top-right, and conversion point bottom-right. The diagonal isn't dead space — it's where the eye travels between them.

F-Pattern Reading Behavior

Full scan — Highest attention
Left-edge scan — Medium attention
High attention zone
Low attention zone
F-Pattern Heatmap
F-ZONE

Hover each row to see its attention level

Hover each row — see how attention drops
Row 1 — Primary header / first metric 100% attention
Row 2 — Second scan line ~70% attention
Row 3 — Left edge only ~30% attention
Row 4+ — Minimal glance <15% attention

Most users will never read past the second row — design for that reality, not the ideal reader.

The F-pattern emerges because users lose commitment as they scan. The first row gets full attention; the second gets partial; everything below gets a glance at the left edge only. This is why column headers and row labels are so critical — they're the only parts of a table most users will read.

Attention Zones & Heatmaps

Attention Heatmap
🔴 Hottest
High
Medium
Low
High
Med
Low
Minimal
Med-Low
Low
Minimal
Cold
Hot
Cold
Top-left: Primary KPI — highest visibility
Top-center: Navigation & secondary metrics
Bottom-right: Detail & supporting data
Layout Aligned to Zones
🔴 HOT
Revenue
$4.2M
🟡 WARM
Users
18.4k
🟢 COOL
Trend — Last 6 Months
Click a zone to place your primary KPI — see how placement affects urgency
🔴Top-leftHottest zone
🟡Top-centerWarm zone
🟡Top-rightWarm zone
🟢Bot-leftCool zone
🔵Bot-centerCool zone
❄️Bot-rightColdest zone
← Click a zone to see placement advice

Putting low-priority content top-left doesn't make it feel important — it makes the actual important content harder to find.

Attention zones aren't suggestions — they're constraints. Users have already decided where to look before the page loads. Placing your primary KPI in a low-attention zone forces users to search for information they expected to find instantly. Every misplaced element adds a moment of confusion that compounds across every session.

60/40 Content Split

60% — Main Content
Primary visualization — revenue trend, main KPI chart, core table
40% — Secondary Panel
Total Revenue
$2.4M
Conversion Rate
4.7%
Active Users
18,432
Drag to change the split — feel when it breaks 60/40
30/7050/5070/30
Primary
60%
Secondary
40%
60/40 — clear dominant panel, strong visual hierarchy

50/50 splits feel like two dashboards fighting for attention. One panel needs to win.

Give 60% to your primary chart or KPI and 40% to supporting context. If the primary content is unusually data-dense, push to 70/30. If users need the filter panel constantly, pull back to 55/45. The exact ratio matters less than the principle: one side must clearly dominate so users know where to look first.

Proximity — Grouping Elements

✓ Good Grouping
Revenue Metrics
User Activity
System Health

Clear visual groups with consistent spacing between categories. Relationships are obvious at a glance.

✗ Poor Grouping
Dashboard controls
EXPORT
Revenue
Jan 2024 – Dec

SYNC
Users ▾
Filter
APPLY
SHARE
Search...
Q4 ×
Settings
CSV
Mixed sizes, shapes, and corner radii
Related actions (Export, CSV, Share) scattered apart
Filters mixed with date pickers mixed with actions
Toggle proximity — watch grouping appear and disappear
REVENUE
$4.2M
COST
$1.8M
PROFIT
$2.4M
USERS
18.4k
NEW
1.2k
CHURN
2.1%
✓ Grouped — Revenue/Cost/Profit clearly together, Users/New/Churn clearly separate

If you need a label to explain that two things are related, they're probably not close enough together.

Proximity is the most powerful grouping tool you have — and the most underused. When related elements are close and unrelated elements have breathing room between them, users understand the structure without reading a single label. Boxes, borders, and background colors are workarounds for when proximity wasn't applied first.

Color Theory for Dashboards

Semantic color roles — click any role to see it applied
Primary / Brand
Revenue
$4.2M
Users
18.4k
Active
Q4
Use for primary KPIs, action buttons, active navigation states. One accent colour maximum per dashboard — overuse makes everything feel like a call-to-action.
Categorical palette — chart series
Direct — blue
Organic — green
Paid — orange
Social — amber
Referral — purple
Email — teal
Max 6 distinct hues. For 7+ categories, switch to sequential shades of one hue.
Sequential palette — magnitude / intensity
Low intensityHigh intensity
Use for heatmaps, choropleth maps, and anywhere you're encoding magnitude. One hue, 5–7 lightness steps. Never use a rainbow (red→yellow→green) — it implies categorical meaning where there is none.
Diverging palette — above / below target
Below targetOn targetAbove target
Use for profit/loss, performance vs target, temperature anomalies. Two hues meeting at a neutral midpoint — purple for below, red for above. Always keep the midpoint visually quiet.
✗ Too many colors — no meaning
REVENUE
$4.2M
USERS
18.4k
CONV.
4.7%
SESSION
6m 42s
Red implies critical, green implies positive — but these are just neutral metrics. Color creates meaning the designer didn't intend.
✓ Color encodes meaning
REVENUE
$4.2M
USERS
18.4k
CONV.
4.7% ↑
ERROR
2.3% ↑
Neutral metrics get neutral styling. Color appears only where it signals something — a good trend, a problem.

Color should encode meaning, not decorate. When everything is colorful, nothing stands out.

Assign colors to roles, not to elements. Green always means positive, red always means critical — consistency across the whole dashboard is what makes color trustworthy.

Accessibility & Contrast

WCAG Contrast Requirements
$4.2M Revenue AA ✓ 8.6:1
Body text on blue tint AA ✓ 5.2:1
Muted label text FAIL ✗ 2.3:1
Warning label FAIL ✗ 2.9:1
Warning label — fixed AA ✓ 5.1:1
The three WCAG levels
4.5:1
Normal text — AA
Body copy, labels, descriptions under 18pt. Minimum for professional dashboards.
3:1
Large text + UI — AA
Text ≥18pt or bold ≥14pt. Also applies to button borders, input outlines, chart lines.
7:1
Normal text — AAA
Enhanced level — ideal for critical alert text and primary KPI values.
Common dashboard failures
Light grey muted text on white (#AAA = 2.3:1)
Yellow warning badges on white background
Chart lines thinner than 3px with low contrast
Placeholder text in inputs (typically ~3.5:1)
Disabled button state indistinguishable from active
Fix: darken muted text to #767676 minimum (4.5:1 on white)
Fix: replace yellow text with dark amber #7A5200
Fix: never rely on color alone — pair with icon or label
Live contrast checker — pick text and background colours
Text colour
Background
Dashboard Title
Body text — revenue increased 18.4% this quarter.
METADATA LABEL
21.0:1
AAA ✓
Excellent contrast — passes all WCAG levels for all text sizes.

Your muted grey label reads fine on a calibrated monitor in a dark room. It fails in sunlight, on a cheap screen, and for 1 in 12 men with colour vision deficiency.

Most dashboards fail contrast on the same two elements: muted secondary labels (grey on white rarely clears 4.5:1) and warning states (yellow text on white is almost always too light). WCAG AA requires 4.5:1 for body text and 3:1 for large text and UI components. Run a contrast checker on your colour palette before writing a line of code — it's a five-minute fix that prevents a permanent problem.

Typography Hierarchy

Dashboard Type Scale
KPI VALUE · 48px · 700
$4.2M
SECTION HEADING · 24px · 600
Revenue Overview
CARD TITLE · 14px · 600
Monthly Revenue by Channel
BODY / DESC · 13px · 400
Revenue increased by 18.4% compared to the previous quarter across all regions.
LABEL / META · 10px · 500 · UPPERCASE
Total Revenue · Last 30 Days
✗ No hierarchy — everything same weight
Monthly Revenue
$4,200,000
↑ 18.4% vs last month
Updated 2 min ago
✓ Clear typographic hierarchy
Monthly Revenue
$4.2M
↑ 18.4% vs last month
Updated 2 min ago
Typography rules for dashboards
Use 2–3 weights max: 400 body, 600 titles, 700 KPIs
Labels in UPPERCASE + tracking — never body text
KPI numbers need tabular figures so columns align
Abbreviate large numbers: $4.2M not $4,200,000
Muted color for secondary text — not a smaller font size
Collapse the scale — watch hierarchy disappear Full hierarchy
Full hierarchyCompressedNo hierarchy
$4.2M
Revenue Overview
Revenue increased by 18.4% compared to the previous quarter across all regions.
Total Revenue · Last 30 Days

A user should be able to rank every piece of text by importance before they read a single word.

Typography is hierarchy made visible. Four levels — KPI value, section heading, body text, metadata label — each needs a distinct combination of size, weight, and colour. When two levels look similar, users have to read to understand importance. When the scale is clear, they already know.

Dark Mode Design Principles

Live mode comparison — toggle to see each rule applied
Menu
Overview
Revenue
Users
Alerts
Revenue
$4.2M
↑ 18.4%
Users
18.4k
↓ 2.1%
Light mode: white surfaces, ink text, full-saturation accent, shadows for elevation.
The 5 rules
1
Never pure black
#111118 for page, #1C1C26 for surfaces, #272733 for elevated. Never #000.
2
Elevation via lightness
Higher surfaces are lighter. Shadows disappear on dark backgrounds — use surface colour instead.
3
Desaturate accents
#2D5BE3 vibrates on dark. Shift to #3D5CB8 — same hue, 30% less saturation.
4
70–90% white text
#E8E6DF primary, #9A9890 muted, #555450 faint. Never pure #FFF — it causes eye strain.
5
Tinted surfaces, not coloured
rgba(45,91,227,0.15) instead of #EEF2FC. Colour meaning preserved, surface stays dark.
Palette — light vs dark
Light backgrounds
Page #F4F3EF
Surface #FFFFFF
Text #1A1A1A
Accent #2D5BE3
Dark backgrounds
Page #111118
Surface #1C1C26
Text #E8E6DF
Accent #3D5CB8

Dark mode isn't a color inversion — it's a separate visual system. Surfaces become lighter as they rise; accents become less saturated.

The core principle: elevation through lightness, not shadow. Pure black and pure white are both wrong. Desaturate your accent colors. Tint surfaces with low-opacity color fills instead of solid light-mode backgrounds.

Cognitive Load — Good vs Bad

✗ High Cognitive Load
18%
Bounce
4.2K
Sessions
$42
ARPU
34s
Load
92%
Uptime
1.2M
Reqs
2.3%
Error
482
Alerts
8 metrics with equal visual weightNo hierarchy — everything is urgentToo many colors confuse priorityNo grouping or logical flow
✓ Low Cognitive Load
Revenue
$4.2M
Users
18.4k
2 primary metrics with clear weightSingle accent color for focusChart provides context, not noiseWhite space lets content breathe
Add metrics until it breaks — feel the cognitive cost
3 metrics
3 metrics — clear priority, fast comprehension

A dashboard that tries to show everything ends up communicating nothing — every metric at equal weight means no metric is a priority.

Every metric you add competes with every other metric for attention. Three well-chosen KPIs with clear hierarchy communicate faster and more accurately than twelve metrics with equal weight. The hard editorial decision isn't what to include — it's what to leave out. If a metric doesn't change a decision, it's decoration.

Data-to-Ink Ratio

✗ Low Data-to-Ink Ratio
45
70
55
85
60
JAN
FEB
MAR
APR
MAY
Gradient background adds no dataHeavy gridlines compete with barsThick borders are decorative onlyData labels + x-labels = redundancy
✓ High Data-to-Ink Ratio
Jan
Feb
Mar
Apr
May
White background — zero distractionNo gridlines — shape tells the storyClean bars with one colorSimple text labels only
Strip chart elements — data gets louder with each removal
Monthly Revenue (with all chart ink)
45
70
55
85
60
JAN
FEB
MAR
APR
MAY
Strip elements
0 / 6 stripped — data barely visible

Every gridline, border, and background colour you remove is a distraction you've eliminated — the data gets louder.

Tufte's data-to-ink ratio: every mark on a chart should earn its place by encoding information. Backgrounds add no data. Most gridlines add no data. Borders, shadows, and gradients add no data. Strip them out and the bars or lines that remain — the actual data — become unmistakably clearer.

Chart Type Selection

Bar Chart
Comparison
Use when: comparing discrete categories side-by-side
✓ Revenue by region, users by plan, sales by rep
Line Chart
Trend over time
Use when: showing change over a continuous time period
✓ DAU over 30 days, revenue MoM, latency over time
Donut Chart
Part of whole
Use when: showing how parts contribute to a whole (max 5 slices)
✓ Traffic source split, plan distribution, OS breakdown
Stacked Bar
Composition over time
Use when: showing both total and segment breakdown across periods
✓ Revenue by product over quarters, signups by channel
Scatter Plot
Correlation
Use when: exploring relationship between two numeric variables
✓ Session length vs conversion, ad spend vs revenue
Quick decision guide
Comparing→ Bar chart
Trend→ Line chart
Part of whole→ Donut (≤5 slices)
Composition→ Stacked bar
Correlation→ Scatter plot
Distribution→ Histogram
Single KPI→ Number + sparkline
Avoid pie charts with >5 slices. Avoid 3D charts entirely.
What do you need to show? — pick the goal
✓ Use: Bar Chart
Comparing discrete categories side-by-side. Bars make magnitude differences immediately readable — length is a pre-attentive attribute the eye processes before conscious reading.
✗ Don't use: Pie chart (hard to compare slice sizes), line chart (implies continuity)

The chart type is a design decision, not a formatting choice — wrong chart type actively misleads users.

Match the chart to what the user needs to understand. Comparison → bar. Trend → line. Part-of-whole → donut. Using the wrong type makes accurate data feel ambiguous.

Progressive Disclosure

1
Summary
2
Chart
3
Detail
1
Level 1 — Summary view
KPI Card
$4.2M
Monthly Revenue
↑ 18.4% vs last month
👆This is all most users need. Click "See trend" to reveal the next level of detail.
2
Level 2 — Trend view
Chart Expansion
Monthly Revenue — Last 6 months
Jul
Aug
Sep
Oct
Nov
Dec
📈Now users see the trend. Click "See full data" to reveal row-level breakdowns.
3
Level 3 — Detail view
Full Data Table
MonthRevenuevs PrevTargetStatus
Jul 2024$1.76M+8%$1.7MMet
Aug 2024$2.43M+38%$2.2MMet
Sep 2024$2.14M-12%$2.4MMissed
Oct 2024$3.10M+45%$3.0MMet
Nov 2024$3.68M+19%$3.5MMet
Dec 2024$4.20M+14%$4.0MMet

Answer first, evidence second, raw data last. Click through all three levels above.

Show only what users need at each stage. Most users want the number — not the table. Let them choose to go deeper.

Alert-Driven Design

🚨
Payment Service Down
Checkout flow impacted across all regions. Engineers paged.
Critical
API Latency Degraded
p95 response time at 840ms. Threshold is 500ms.
Triggered 14 min ago · Auto-resolves if < 500ms for 5 min
Warning
Rate Limit Approaching
API usage at 87% of monthly quota. Resets in 4 days.
Current: 870K / 1M calls · Projected overage: +12%
Limit
🔧
Scheduled Maintenance
Database migration window: Sun 2–4 AM UTC. Read-only mode.
In 3 days · Duration: ~2 hours
Planned
New Feature Available
Advanced filtering is now live in the Analytics module.
Released today · Affects all Pro plan users
Info
Export Completed
Q4 revenue report (2.4 MB) is ready for download.
Done
Database High CPU — Resolved
Resolved 2 hrs ago · Duration: 18 min · RCA pending
Resolved
Deployment to production succeeded — v2.14.1View logs →
Alert hierarchy
Critical — Service down, data loss, security breach
Warning — Threshold exceeded, degraded performance
Maintenance — Planned events, upcoming windows
Info — Non-urgent updates, releases, FYIs
Success — Completed jobs, exports, deployments
Resolved — Closed incidents, audit trail
Alert anatomy
Semantic color + icon
Color for speed; icon for accessibility. Never color alone.
Title + desc + meta
Title = what. Desc = impact. Meta = when / context.
Inline actions
Primary = solid. Secondary = outline. Max 2 per alert.
Severity badge
Pill label removes all ambiguity at a glance.
Sorting rules
1.Critical always at top — never buried
2.Within same severity: newest first
3.Resolved alerts collapse to summary row
4.Toasts appear top-right, auto-dismiss after 5s
5.Never show more than 5 active alerts — group rest
Click any alert card to dismiss or resolve it

Users scan alert feeds the same way they scan email subject lines — colour and label are read before the message body.

Well-designed alerts answer three questions before the user finishes reading: what severity is this, what specifically happened, and what should I do about it. Colour handles severity instantly. The title handles the what. Inline actions handle the next step. Every alert that requires a page navigation to act on is a friction point that compounds under incident pressure.

Filtering & Date Ranges

Live filter playground — add and remove filters, switch date ranges
Filters:
Date:
Revenue
$4.2M
All regions · All plans
Users
18.4k
All segments
Conversion
4.7%
Last 30 days
No filters active — showing all data.
Global vs local scope
Global filter
Header bar, affects every card. Date range, region, segment — always visible, never hidden.
Local filter
On one card only. Show as a pill badge in the card header — users must always know a card is filtered.
Never mix scopes silently
If a card ignores the global filter, it must label itself "Not filtered" — otherwise users trust incorrect data.
Filter UX rules
Chips always visible — never collapsed into "Filters applied"
"Clear all" one click away whenever any filter is active
Presets cover 90% of needs — Last 7d, 30d, quarter, YTD
Persist state in URL — filtered views must be shareable
Default date: end = today, start = 30 days ago
Never apply on every keystroke — debounce 300ms minimum
Never reset to "all data" without explicit user action

Hidden filter state is a trust violation — users think they're seeing all the data when they're not.

Active filters must always be visible as removable chips — never hidden in a collapsed panel. When a chart is filtered, the card header should say so. Persist filter state in the URL: a filtered view that can't be shared or bookmarked is effectively disposable. The hardest filter bug to debug is one the user doesn't know exists.

Loading States & Skeleton UI

Simulate loading — click any content type
Skeleton screens preserve exact layout — no reflow when content loads. Notice how cards don't jump.
Skeleton
Page load, chart data, tables, images. Preserves layout — always prefer over spinners.
Spinner
Actions under 3s with no predictable layout. Dialogs, quick saves. Not for page content.
Progress bar
Exports, report generation, uploads. Any action where duration is knowable.
Optimistic
Filters, preferences, non-destructive saves. Show result instantly, roll back on error.

A skeleton screen at 2 seconds feels faster than a spinner at 1.5 seconds — perceived performance is not the same as actual performance.

How you handle the loading state shapes users' first impression of the entire product. Skeleton screens preserve layout — users see where content will appear, which reduces the jolt of data loading in. Spinners are appropriate only for actions under 3 seconds with no predictable structure. For file exports or report generation, use a progress bar — it's the only pattern that communicates "we're working on it, here's how far along we are."

Empty States

First use — onboarding
📊
No data yet
Connect your first data source to start seeing insights here.
Connect source
Icon + title + description + CTA
No filter results
🔍
No matching results
No transactions found for "Q4 2019". Try a different date range or clear filters.
Clear filters
Explain why + offer an escape route
Permission restricted
🔒
Access restricted
You need the Analytics Admin role to view this report. Contact your workspace admin.
Request access
Never show a blank screen — always explain
The 4 rules of good empty states
Explain why
Never just say "No data". Tell users why it's empty and what would fill it.
Offer an action
Always give one next step — connect source, clear filters, request access, or go back.
Preserve layout
Keep the card/section structure visible. Don't collapse the whole panel — it confuses users about what exists.
Match the context
First-use needs encouragement. No-results needs an escape. Error needs explanation. Each needs different tone.

Empty states are the most-neglected screen in dashboards — and the most-seen by new users on day one.

Blank screens feel broken. Every empty state needs: a reason, a next step, and preserved layout. The type of empty state (first-use, no results, error, permission) determines the tone.

Table Design Patterns

Customer
Amount
Status
Date
Anatomy of a good table
Fixed header — sticky on scroll, clearly separated from rows with 2px border + background
Sort indicators — ↑↓ arrows on every sortable column; active column highlighted
Row selection — checkbox in first column; highlight the row background when checked
Right-align numbers — allows fast scanning of magnitude in a column
Status badges — never text alone; use colored pill badges for state
Row actions — show on hover only; Edit · View · Delete in the last column
Pagination vs infinite scroll
Pagination — preferred for dashboards
Users know where they are. Predictable performance. Enables "jump to page". Use numbered pages + row count.
Infinite scroll — feeds & logs only
Good for activity streams and event logs where recency matters and users don't need to navigate to a specific row.
Avoid hybrid pagination
"Load more" buttons combine the worst of both: no position context, slow performance, inaccessible.

A number in the wrong column alignment, a missing sort indicator, or a "load more" button instead of pagination — each one adds friction every single time a user uses the table.

Right-align all numbers so magnitudes align vertically. Stick headers on scroll so columns stay labelled. Show sort direction on the active column — up and down arrows on every column is clutter. Paginate rather than infinite scroll: users need to say "I'm on page 3 of 12" to know where they are in the data.

Responsive Design — Desktop, Tablet, Mobile

Mobile · <768px
Tablet · 768–1024px
Desktop · >1024px
Menu
Overview
Revenue
Users
Alerts
Reports
Settings
Revenue
$4.2M
Users
18.4k
Conversion
4.7%
Avg Session
6m 42s
Channel%
Direct38%
Organic29%
Paid21%
Referral12%
🖥
Persistent sidebar
Always visible at ≥1024px. Gives quick access to all sections without taking space from content.
📊
4-column KPI row
4 equal-width cards fit comfortably. Don't vary widths unless one KPI is primary.
📐
60/40 or 70/30 split
Main chart gets the larger column. Supporting table takes the narrower slot.
🖱
Hover states everywhere
Desktop has a cursor. Use hover for tooltips, row highlights, card elevation — not on touch.
Dashboard
Overview
Revenue
Users
More ▾
Revenue
$4.2M
Users
18.4k
ChannelSessionsRevenue
Direct6.2K$1.6M
Organic4.8K$1.2M
Paid3.4K$0.9M
📱
Sidebar → top nav
At 768–1024px, replace the persistent sidebar with a horizontal top nav. Use "More ▾" overflow for low-priority items.
2⃣
2-column KPI grid
Drop from 4 columns to 2. Prioritise the two most critical KPIs; others via drill-down.
📏
Full-width charts
Charts expand to full width. Remove side-by-side chart/table — stack them vertically.
👆
Larger touch targets
Minimum 44×44px tap targets. Increase table row height to 48px. Remove hover-only tooltips.
🚨
Revenue
$4.2M
ChannelRevenue
Direct$1.6M
Organic$1.2M
Paid$0.9M
Home
Revenue
Users
Alerts
More
Hamburger + bottom nav
Hamburger for secondary items. Bottom tab bar for primary sections. Thumb-reachable zone is bottom-center.
1⃣
One KPI, full width
Show only the #1 KPI prominently. All others behind "View all" tap. Don't compress 4 cards into a tiny grid.
✂️
Reduce table columns
Mobile tables: max 2 columns. Hide secondary data behind a row tap. Consider cards over tables.
🔔
Critical alerts in header
Surface critical alerts via a badge in the header bar — users shouldn't scroll to discover an outage.

Responsive design done wrong is just a shrunken desktop — responsive design done right is three different information architectures that happen to share data.

A desktop dashboard that's been shrunk to mobile isn't a mobile dashboard — it's a broken desktop dashboard. Each breakpoint needs its own answer to three questions: which data matters most here, how do users navigate between sections, and how much density can the screen carry. On mobile, that usually means one primary KPI, a simplified chart, and a bottom nav. Everything else is a tap away, not a scroll away.

Form Input States

State library
Default
Search account…Idle
Hover
Search account…Hover
Focus
Visible 3px outline for keyboard users.
Filled
Acme Inc · EnterpriseFilled
Error
email@companyInvalid
Enter a valid work email.
Success
API key savedVerified
All checks passed.
Disabled
Billing plan locked by adminDisabled
Rules that matter
Always-visible labels — never rely on placeholders as the only label.
Error = visual + text — pair the red border with a corrective message.
Focus is not optional — the active field must be obvious in light and dark mode.
Coverage checklist
DefaultHoverFocusFilledErrorSuccessDisabled

The user should understand whether a field is ready, active, invalid, or complete before they read the supporting copy.

Default, hover, focus, filled, error, success, and disabled form a complete feedback system. Strong form states reduce hesitation, prevent mistakes, and make accessibility visible rather than hidden.

Animation & Motion

Timing bands
Instant
<100ms
Feedback
100–300ms
Transition
300–500ms
Button feedback
Press, hover, and selection states should feel immediate.
Panels & modals
Use slightly longer easing so spatial movement stays legible.
Reduced motion
Swap movement for opacity or instant state change when users request less motion.
Motion principles
Animate intent, not decoration — motion should explain what changed and why.
Use consistent timing tokens — a design system should feel predictable across components.
Respect preferences — always support prefers-reduced-motion.

Good motion teaches where something came from, what changed, and what will happen next.

Use motion to reinforce state changes, preserve context during transitions, and prevent sudden visual jumps. Instant for direct feedback; slightly slower for layout changes; minimal or none when a user requests reduced motion.

Error Handling

Bad vs good
Raw system error
ERROR 404: USER_NOT_FOUND
No context, no next step, no reassurance.
Human message
We can’t find that email address.
Check the spelling, try another address, or create a new account.
RetryUndoGet help
Actionable always wins
State what happened in plain language.
Explain what the user can do next.
Preserve entered data whenever possible.
Avoid
All-caps machine codes, blameful language, dead ends, and disappearing toast errors that users can’t recover from.

A good error message reduces stress. A bad one transfers system confusion directly to the user.

The best error copy is specific, friendly, and recoverable. It tells people what broke, what they can do now, and whether their work is safe.

Gestalt Principles

Why grouped things feel grouped
Proximity
Small spacing means “same group”; larger gaps imply a new category.
Similarity
Shared color, shape, or typography imply relationship.
Continuation
The eye naturally follows lines, trends, and aligned edges.
Closure & common fate
Users mentally complete shapes and assume things moving together belong together.
Design implication
Gestalt is the invisible layer behind layout quality. If spacing, alignment, and similarity are inconsistent, users infer the wrong relationships before reading a single label.
Use spacing as meaning
Whitespace often communicates grouping better than borders.
Keep repeated patterns consistent
Similarity breaks fast when colors or card treatments drift.

Most layout mistakes are not aesthetic problems — they are relationship problems.

Use proximity, similarity, continuation, closure, and common fate to signal hierarchy without extra borders, icons, or words. The clearer the visual relationships, the lower the cognitive load.

Accessibility Standards

WCAG AA baseline
AreaBaselineWhat good looks like
Contrast4.5:1 for body textReadable in light and dark themes without effort.
FocusVisible on every interactive elementKeyboard users can always see where they are.
KeyboardFull feature accessNo hover-only or mouse-only flows.
SemanticsLabels, roles, ARIA when neededAssistive tech announces structure clearly.
Accessibility is design quality
Use text plus color for status.
Preserve tab order and logical reading order.
Write labels that make sense when read aloud.

Accessibility standards do not constrain design — they make the design dependable under more conditions.

Contrast, focus states, keyboard support, and semantic markup are the minimum system requirements for serious interfaces. Treat accessibility as part of the core spec, not a post-launch audit.

Component Anatomy

Three common building blocks
Button = label, padding, interactive state, and an obvious hit area.
Card title
$4.2M
Card = container, internal spacing, hierarchy, and hover behavior.
API latency degraded
p95 response time above SLA for 7 minutes.
Alert = semantic icon, title, supporting detail, and action affordance.
Anatomy rule
Every reusable component needs a clear structure: semantic purpose, predictable spacing, visual state tokens, and a content model that scales from short to long text.

Components feel “well designed” when every internal part has a job and every state is predictable.

Buttons, cards, and alerts are tiny systems. Define their anatomy explicitly so teams can extend them without breaking spacing, hierarchy, or accessibility.

Mobile-First Design

Thumb reach & touch targets
Ops dashboard44×44px min
Primary KPI
18.4k
Conversion
4.7%
Alerts
Stack cards instead of squeezing tables.
Home
Revenue
Alerts
More
Mobile-first rules
Start with one essential column, then progressively enhance for larger screens.
Use bottom navigation and thumb-reachable controls for primary tasks.
Transform dense tables into card summaries or drill-down flows.

If a dashboard only works when it has width, hover, and precision clicking, it is not responsive enough for real use.

Mobile-first design forces prioritization. It reveals what must stay visible, what can collapse, and which interactions need to become tap-friendly instead of hover-dependent.

Dashboard Types & Purpose

Choose the dashboard by decision speed
TypeBest forContent bias
OperationalLive monitoring, incident responseAlerts, queues, freshness, thresholds
AnalyticalTrends, diagnosis, explorationFilters, comparisons, drill-down, cohorts
ExecutiveWeekly or monthly business reviewFew KPIs, narrative context, strategic summaries
Purpose first
Before arranging layout, define who uses the dashboard, how often they open it, and what decision they must make after seeing it.
Operational
Fast status reading, incident visibility, and recency.
Analytical
Comparisons, filters, and exploratory depth.
Executive
Clarity, summarization, and business story.

The fastest way to design the wrong dashboard is to skip the question: “What decision is this page trying to support?”

Operational, analytical, and executive dashboards are different products with different rhythms. Good design starts by matching information density, update frequency, and interaction depth to the decision context.

Data Visualization Encoding

Most accurate channels first
Position
Best for precise comparison on a shared scale.
Length
Bars outperform decorative shapes for quantitative judgment.
Color
Good for grouping and status, weak for precision alone.
Area / angle
Use sparingly; perception becomes less accurate.
Guardrail
Never use 3D charts for dashboard work. They distort comparison and add zero decision value.
Encoding guardrails
Use one variable per visual channel before layering extras.
Avoid dual axes unless the relationship cannot be shown another way.
Check palettes for colorblind accessibility.

Visual encoding is not decoration — it is the translation layer between numbers and perception.

When accuracy matters, lead with position and length. Reserve color, area, and angle for emphasis or grouping. The more important the decision, the more conservative the encoding should be.

Real-Time Data Handling

Live operations panel
Service health
Healthy
Updated 7s ago
Event throughput
18.2k / min
Streaming window: last 60 seconds
Data latency
12s
Visible freshness builds trust.
Real-time rules
Display last-updated timestamps and expected refresh cadence.
Handle partial, delayed, or streaming data states gracefully.
Highlight changed values without creating visual noise.

Without freshness indicators, “real-time” becomes guesswork.

Live dashboards need clear refresh behavior, visible latency, and careful change highlighting. Trust comes from showing not only the metric, but also how current that metric is.

User Research & Discovery

Discovery flow
1. Stakeholder goals
Interview leaders to understand success metrics, constraints, and non-negotiables.
2. KPI definition
Translate goals into measurable indicators with clear formulas and owners.
3. User personas
Group by role, frequency of use, decision urgency, and technical fluency.
4. Workflow mapping
Map what users do before, during, and after viewing the dashboard.
Discovery output
A dashboard brief should state: target users, key decisions, top tasks, success KPIs, update cadence, and data confidence risks.
Research prevents sprawl
It aligns stakeholders, defines KPIs, and reveals where narrative context or drill-down is actually necessary.

You are not designing screens first. You are designing decisions, behaviors, and confidence.

Research prevents dashboard sprawl. It aligns stakeholders, defines KPIs, identifies role differences, and reveals where narrative context or drill-down is actually necessary.

AI & Augmented Analytics

AI features that belong in dashboards
Anomaly detection
Flag unexpected changes and explain what likely drove them.
Natural-language query
Let users ask “Why did revenue dip in EMEA?” without constructing filters manually.
Predictive views
Forecast likely outcomes with confidence ranges, not false certainty.
Personalized recommendations
Surface the next-best question or chart for the current role.
Guardrails
Show confidence and data provenance when AI generates summaries.
Offer source drill-down so users can verify the claim.
Never hide deterministic metrics behind opaque language.

AI should reduce the time from data to understanding, not make the dashboard feel less trustworthy.

Augmented analytics works best when it explains anomalies, accelerates questioning, and tailors insights by role — while still preserving clear evidence and user control.

Privacy & Security Compliance

Compliance surface area
Encryption
Protect data in transit and at rest across exports, APIs, and backups.
RBAC
Match visibility and actions to role, team, and sensitivity level.
Audit trails
Log who viewed, changed, exported, or shared sensitive data.
Regulatory support
Design for GDPR/CCPA expectations around consent, deletion, and data minimization.
Security UX principle
Users should understand why some data is hidden, why an action requires permission, and what will be logged — without reading policy documents.

Security should be explicit enough to inspire trust, but quiet enough not to distract from the task.

Enterprise dashboards need privacy and security built into the interaction model: permissions, logging, data minimization, export control, and transparent handling of sensitive information.

Customization & Personalization

Let the dashboard adapt responsibly
Role presets
Finance, ops, and product should not all start from the same layout.
Saved views
Users should return to the filters and comparisons they rely on.
Widget order
Support controlled rearrangement without breaking the information model.
Personalization constraint
Allow meaningful customization, but keep a stable default so teams can still collaborate from a shared baseline.

Personalization is valuable when it reduces repeated setup, not when it turns every dashboard into a different product.

Offer role-based variants, saved filters, and configurable widgets so users can shorten recurring workflows. Keep the system coherent by protecting core information architecture.

Performance Optimization

Performance budget mindset
Initial load
<2s
Filter response
<300ms
Table sort
<500ms
Optimization stack
Indexed queries, caching, and aggregation on the backend.
Lazy loading, virtualization, and payload reduction on the frontend.
Limit data points to what the visual can actually communicate.

Perceived quality drops fast when a dashboard feels slow, even if the visual design is excellent.

Performance is both a system concern and a UX concern. Set budgets for load, interaction response, and rendering cost; then design the information density to stay within them.

Advanced Interaction Patterns

Rich data exploration
Linked selection
Click one region in a chart and update the related table, map, and summary cards.
Brushing & linking
Drag across a time range in one chart to filter the rest of the dashboard.
Context menus
Right-click or long-press for secondary analysis actions without cluttering the main UI.
Detailed hover states
Tooltips should clarify exact values, comparisons, and change over time.
Interaction caution
Advanced patterns are powerful only when discoverable. Provide hints, visible states, and an obvious way to reset or undo.

Advanced interaction should increase analytical power without making the default experience harder to understand.

Linked filters, brushing, contextual actions, and rich tooltips allow deeper exploration. Use them to extend dashboards for power users while keeping the base path simple.

Testing & Validation

Validation stack
Usability testing
Watch real users complete high-value tasks and note where they hesitate.
A/B experiments
Compare layout variants only when the decision metric is clear.
Heatmaps & telemetry
Measure what gets attention, what gets ignored, and where users abandon flows.
Performance monitoring
Track slow queries, rendering regressions, and interaction delays continuously.
Definition of done
A dashboard is not validated because it shipped. It is validated when users can complete key tasks quickly, accurately, and confidently under real conditions.

Design quality is a hypothesis until it is tested with real users, real data, and real performance constraints.

Use usability studies, experiments, heatmaps, and benchmark monitoring to validate both comprehension and system behavior. Testing closes the loop between theory and actual product use.