Information & Data. Show the numbers so people see the answer.
Almost every product shows numbers somewhere: a word count, a streak, a balance, a chart of last month, a table of invoices. This guide teaches you how to make those numbers honest, quick to read and calm, using the best thinking on information design from Edward Tufte, Bret Victor and the researchers who measured how people actually read charts.
Explain the difference between information software and manipulation software, and why interaction is a cost in the first (understand)
Spot chartjunk, lie factors, truncated bars, misleading dual axes and needless 3D in any app or article (analyse)
Pick the right chart for a question using the perceptual ranking of visual encodings (apply)
Format numbers, tables and trend indicators so they can be compared at a glance, including Indian lakh and crore grouping (apply)
Design a small, honest stats screen or dashboard for your own product that answers "so what?" (create)
Judge when interactivity helps understanding and when it only adds work (evaluate)
Warm-up
Before you read, find out what you already believe about charts. Most people carry a few confident wrong rules (and a few right ones they can't explain).
This guide is organised in four parts. Part one is about the philosophy: software that informs, and the ink that carries information. Part two is about the eye: what people perceive accurately, and how to choose and craft a chart. Part three is about the product surfaces you will actually build: numbers in text, tables, dashboards and personal stats screens. Part four goes past charts to maps, timelines, calendars and explorable explanations.
Study it in four sittings, one per part. Do each chapter's exercise on your own product or on an app you open every day; the exercises are where the skill forms. If you only have twenty minutes, do the labs: each one is built so that playing with it teaches the idea faster than the prose.
Diagnostic 1
Your habit app shows weekly completion as a bar chart. This week's bar is 71%, last week's was 68%. The y-axis starts at 60% so the change looks big and motivating. Is that fine?
People read the length of a bar, not the tick labels. A bar starting at 60% makes 71 look almost four times 68's lead over 60 (11 versus 8 above the baseline), so the visual says "big jump" while the data says "+3 points". Bars need a zero baseline. A line or dot plot could start at 60 honestly, because position, not length, carries the value. You will play with this in chapter 3.
Diagnostic 2
Which of these will most people judge most accurately: the ratio between two values shown as
Position along a common scale is the most accurately judged encoding in Cleveland and McGill's experiments, and later replications confirmed the order: position, then length, then angle, then area, then colour shade. Chapter 5 shows the ranking and lets you test your own eye.
Diagnostic 3
A weather app asks you to type a city and press "Get forecast" every time you open it. What is the deepest problem?
This is the central argument of Bret Victor's "Magic Ink": information software should infer context from the environment and history, and show the answer. Interaction is the last resort. Chapter 1 is about this.
Try this today
Open three apps you use daily and screenshot every place that shows a number or chart. Keep the screenshots in one folder. You will use them for exercises throughout this guide.
Part one
Software that informs
Most of the software people use exists to answer questions: when is the next train, will it rain, how much did I spend, am I on track. The first two chapters set the philosophy for this kind of software. Show the data. Infer the context. Spend ink, pixels and clicks only where they carry information. Then we look at how graphics lie, and at two of Tufte's most useful inventions for small screens: small multiples and sparklines.
1
Information software and the cost of interaction
Taught by Bret Victor, with Edward Tufte
If people open your software to learn something, it is information software, and its job is to show the answer with as little interaction as possible. Every question the user has to answer is a question you failed to infer.
In 2006 Bret Victor published a long essay called "Magic Ink: Information Software and the Graphical Interface". Its argument is simple and still under-used. He splits software by what the person is trying to do. Manipulation software is for creating and changing things: a text editor, Figma, a photo editor. The user is building a model in their head of the thing they're making, and direct manipulation (drag, resize, type) is the heart of it. Information software is for learning: a weather app, a train timetable, a bank balance, a flight tracker, a search result, a reading list. The user wants to answer a question, compare options and decide. Communication software (email, chat) sits between the two.
Victor's point is that most software is information software, yet it is designed like manipulation software: full of forms, menus, filters and buttons. That is backwards. For information software, the design problem is mainly a graphic design problem. What should be on screen, at what size, in what arrangement, so the answer is visible? Interaction is what you resort to when the graphic cannot know enough.
Most software is on the left. Even a manipulation tool contains information software: the word count in a writing app, the file list, the history panel. Design each part for the job it does.
Interaction is a cost, not a feature
Victor titled one section of the essay "Interaction considered harmful". Not because interaction is bad, but because in information software every click, tap, field and menu is a toll the person pays before they see what they came for. Navigation means they have to know where the answer lives. A form means they have to phrase the question in your terms. A "Submit" button means they cannot see the effect of their choice until they commit to it. Each step also hides the comparison: if you can see only one result at a time, you have to hold the others in memory, which people are bad at (see The Human Mind on working memory).
The alternative is to infer the question from context. Victor names three sources:
Environment. What the device already knows: the time, the date, the location, the calendar, the connected network, the screen size, what's on the clipboard. A transit app that opens at 6:10 pm on a weekday near your office can guess you are going home.
History. What this person did before. If they checked the same route every weekday for a month, show that route first. If they always sort invoices by due date, remember it. History should make the software feel like it has learned, without making it unpredictable.
Interaction. Only what is left. When you do need input, make it reveal results immediately (no submit step), keep the previous answers visible for comparison, and let the input be graphical where the answer is graphical (drag a time slider, not type "18:30").
Context first, input last. The graphic answers the probable question before it is asked. A small control to change the destination still exists; it is just not the front door.
Don't
The person does the computer's work. They must type what the phone already knows (where they are, that it's now) before seeing anything.
Do
The answer is the interface. Time on a line shows how long you can wait, which a list of times makes you compute.
Weather: ask, or show?
Weather
TodayHourly10-dayRadar
Then choose a tab, then scroll to the hour you care about.
Your location · now
Light rain starting in 12 min, stopping by 3:40.
Without: a form, a button and four tabs. The person must know which tab holds their answer. The question ("should I take an umbrella now?") is never answered in words.
With: location and time are inferred, the probable question is answered in a sentence, and a small chart shows the shape of the next hour. This is the pattern Dark Sky made famous.
Key idea
For information software, design the picture first and the controls last. If you are adding a filter, ask what the screen could show so the filter isn't needed.
For the solo creator
Inferring context is cheap to build and expensive to skip. "Remember the last sort order", "open on today", "default to the user's locale and currency", "show the item they edited last" are each a few lines of code. You don't need machine learning: a time-of-day check and a stored preference beat most filter panels. Start every screen sketch by writing the one question the person opens it to answer, then design the graphic that answers it with zero taps.
Do
Name the question each information screen answers, in one sentence.
Default from environment (time, place, locale) and history (last view, last sort).
Make inputs live: results update as the person drags or types, no Submit.
Keep alternatives visible side by side so people compare by looking, not remembering.
Don't
Open an information screen on an empty form or a menu of reports.
Hide the answer behind tabs when it fits on one screen.
Ask for anything the device already knows.
Make context guesses you can't undo or explain; a wrong guess must be one tap from fixed.
In the wild
Dark Sky2012, acquired by Apple 2020
Famous for its next-hour precipitation forecast: a sentence ("Light rain starting in 10 min") plus a small minute-by-minute chart. Apple later folded the same next-hour rain chart into its Weather app. Answer the likely question in words, then show the shape.
Citymapper2011 onward
Opens on what is near you: nearby stops and live departures, and a one-tap "get me home" style shortcut to a saved place. Environment plus history removes the trip-planning form for the most common trip.
Google FlightsGoogle, 2011 onward
The date grid and price graph show prices for many date combinations at once, so you see that leaving a day earlier saves money without running new searches. Show the neighbourhood of the answer, not just the answer.
Apple Walletlaunched as Passbook, 2012
Boarding passes and tickets can surface on the lock screen when you are near the relevant place or time. Time and place are context you get for free.
Flighty2019 onward
A flight tracker that puts your flight's status, gate and timing in one glanceable card (and in iOS Live Activities), with deep detail one tap away. Summary on the surface, analysis underneath.
Common mistakes
Designing the controls first
Builders think in database queries, so the screen becomes a query builder: fields, filters, a button.
Sketch the answer first. Ask: if I could only show one graphic and no controls, what would it be? Then add the minimum controls to correct its guesses.
Over-confident inference
A guess that hides the alternatives (auto-switching to "home" when the person is going to the gym) feels creepy and wrong.
Show the guess with its reason ("Weekday evening: showing Home") and one visible way to change it. Context sets the default, never the cage.
Paging through answers
One result per screen, with Next and Previous, forces memory comparisons.
Lay comparable answers side by side or on one shared axis, even if each gets less space.
Check yourself
Your invoicing app has a Reports page with a form: pick a date range, pick a client, press Run. Most users run "this month, all clients". What does Magic Ink suggest?
Environment (today's date) and history (last choice) answer the most common question with zero input. The control still exists but updates live. Adding report types (b) adds more interaction; a modal (c) hides the same form; a tutorial (d) documents the cost instead of removing it.
Exercise 1.1 45 minutes · on your own product
The zero-tap redesign
List every screen in your product that mainly shows information (not where people create).
For each, write the question it answers in one sentence, as the user would ask it.
Count the taps and inputs needed today to get the answer for the most common case.
Pick the worst one. List what environment and history could tell you. Sketch a version that opens on the answer.
Write how a wrong guess gets corrected in one tap.
You're done when: you have a table of screens with question and tap count, and one before/after sketch where the common case needs zero input.
Beginner
Competent
Strong
Questions are vague ("see stats"); the redesign removes one field.
Questions are concrete; the sketch defaults from time or history and shows the answer first.
The sketch uses environment and history, keeps alternatives visible for comparison, explains its guess, and you have built it.
2
Data-ink, chartjunk and the case for some decoration
Taught by Edward Tufte, with Scott Bateman and Stephen Few
Every mark on a chart should earn its place by carrying information. Remove what doesn't, and the data gets louder. But "minimal" is a means, not the goal: the goal is understanding, and sometimes memory.
In The Visual Display of Quantitative Information (1983, second edition 2001), Edward Tufte defined the data-ink ratio: the share of a graphic's ink that presents data and could not be erased without losing information. Gridlines, frames, background fills, shadows, 3D sides, decorative icons and repeated labels are non-data ink. His instructions are almost mechanical: above all else show the data; maximise the data-ink ratio, within reason; erase non-data ink; erase redundant data ink; revise and edit.
Why does this work? Because of how vision works. Your eye picks out differences before you consciously look (pre-attentive processing; see The Human Mind). Every heavy gridline, frame and gradient is a difference too, and it competes with the bars for that first glance. Removing it does not just look tidier: it lowers the number of things the eye has to reject before it reaches the data. On a phone, where a chart may be 320 pixels wide, every pixel of frame is a pixel taken from the data.
Sort every mark into two piles. Red markers are non-data ink; green markers carry data. Once values are labelled directly, an axis that repeats them becomes redundant data ink and can go too.
Chartjunk
Tufte's name for the worst non-data ink is chartjunk. He described three families: vibrating patterns (cross-hatching and stripes that shimmer, a moiré effect that makes the eye work); the grid (heavy, dark gridlines that compete with the data); and the duck (a graphic whose whole structure is decoration, named after a duck-shaped building on Long Island). The software equivalents are easy to find: gradients on bars, drop shadows, glossy 3D, icons stacked to make bars, a chart inside a decorative card inside a card, and animated count-ups that make you wait for a number.
Lab: the data-ink eraser
Approximate share of ink that is data: 0%
Step through seven edits. Watch two things: how much faster you find the answer ("which month was best?"), and the moment where erasing starts to hurt (try reading values after the axis is gone but before labels arrive).
Within reason: the honest critique
Tufte's rule is a superb default and a poor religion. Researchers tested it. In 2010 Scott Bateman and colleagues at the University of Saskatchewan published "Useful Junk?" at the CHI conference. They compared plain charts with heavily illustrated versions in the style of the illustrator Nigel Holmes (think a monster whose teeth are the bars). Interpretation accuracy was about the same for both. But two to three weeks later, people remembered the embellished charts' topic and message significantly better. In 2013 Michelle Borkin and colleagues found that charts with recognisable pictures and distinctive visual features were more memorable than plain, common chart types.
So the right question is not "how minimal can I go?" but "what is this chart for?":
Situation
Goal
Decoration
A stats screen checked daily
Fast, repeated reading
Almost none. Familiarity carries the meaning; decoration becomes noise by day three.
A year-in-review, launch post, onboarding
Remembered once, shared
Some, if it relates to the data (an icon of the thing measured) and never distorts the scale.
An analysis or export
Precise comparison
None. Add faint gridlines back if people need to read exact values.
Also note where pure erasing fails. Tufte's own "range-frame" and minimal box plots strip so much that many readers no longer recognise the form. Faint gridlines, when people need to read values off the chart, are not junk: they are data-adjacent ink that carries information. Erase what is redundant, not what is quiet.
Don't
Ink fights ink. The 3D tops sit above the true values, hatching vibrates, and the legend names the only series there is.
Do
The data is the loudest thing. One baseline, direct labels, one highlight, and a title that states the finding.
Myth
"Minimal charts are always better." Minimal charts are faster to read and harder to misread, which matters most for screens people use repeatedly. For a one-off story, a relevant illustration can make the message stick. The line you never cross is distortion: decoration must not change the apparent size of anything.
For the solo creator
Charting libraries ship with junk on by default: legends, gridlines, borders, tooltips with five fields, animation on load. Make a single wrapper (one function or component) that turns all of it off and sets your defaults: faint gridlines or none, no legend, direct labels, your type, no entry animation. Then every chart in your product starts clean, and you only add back what a specific chart needs. See Systems & Platforms for building that as part of your design system.
Do
Remove frames, backgrounds, shadows and 3D first; they never carry data.
Replace legends with direct labels where you can.
Keep a baseline and faint gridlines if people need to read values.
Use decoration only when the goal is memory, it relates to the data, and it doesn't distort scale.
Don't
Accept your chart library's defaults.
Use gradients, hatching or texture to fill bars.
Erase until the chart is a riddle (no axis, no labels, no title).
Animate numbers counting up on a screen people visit daily; it's a delay dressed as delight.
In the wild
Stripe DashboardStripe
Small line charts with almost no axis furniture: a headline number, a faint comparison line for the previous period, and a few date ticks. Comparison line instead of gridlines: the context is itself data.
Plausible Analytics2019 onward
A deliberately simple one-page web analytics dashboard: a handful of top numbers, one main chart, then ranked lists with thin proportional bars behind each row. A bar behind a list row is maximum data-ink: the row is the label.
Our World in DataGrapher charts
Charts with insight-stating titles, direct line labels, faint gridlines and a source line under every chart. Faint gridlines plus sources: minimal, but not stripped of trust.
Excel and Google Sheets defaults2000s–2010s
For years, default charts came with grey backgrounds, legends for single series and 3D options one click away. Recent defaults are cleaner, but the 3D and gradient options remain. Defaults shape millions of charts; yours will shape every chart in your app.
Common mistakes
Polishing the frame instead of the data
Card shadows, rounded containers and coloured headers are easy to tweak, so effort goes there.
Spend the polish on the data marks: sort order, labels, highlight, title. The container should disappear.
Erasing context people need
"Remove gridlines" taken literally leaves people unable to read a value off the chart.
Either label values directly or keep faint gridlines (about 10–20% contrast against the background). Never neither.
Decoration that changes size
Icon stacks and pictures scaled in two dimensions exaggerate differences (doubling height also doubles width, so area quadruples).
If you use pictograms, repeat identical icons (a unit chart) instead of scaling one icon.
Check yourself
You are designing a "Your 2026 in reading" summary that people will see once and probably share. Which choice best fits the evidence?
Bateman's study found embellishment helped long-term memory without hurting accuracy, which suits a one-off, shareable summary. But 3D (b) distorts, and removing numbers (d) loses the information. Pure minimalism (a) is fine but gives up memorability where memory is the goal.
Exercise 2.1 40 minutes · on a chart you see often
The erase pass
Pick one chart from your product or your screenshot folder.
Print or trace it. Circle every mark in two colours: data ink and non-data ink.
Redraw it erasing non-data ink one category at a time (frame, background, grid, legend, redundant labels).
Stop at the version where the question is answered fastest, and add back anything you erased that hurt reading.
Write the chart's purpose (daily use, one-off story, analysis) and justify any decoration left.
You're done when: you have the original, the circled version and a final redraw, with one sentence on what you added back and why.
Beginner
Competent
Strong
Removes the obvious frame and shadow only.
Removes all non-data ink, adds direct labels, keeps the chart readable.
Also removes redundant data ink, adds a highlight and insight title, and ships it as your chart default.
3
Honest graphics: lie factor, baselines and frames
Taught by Edward Tufte, with Alberto Cairo and Dona Wong
A chart is honest when the size of an effect on screen matches the size of the effect in the data. Most dishonest charts aren't drawn by liars; they're drawn by defaults, cropped axes and convenient time windows.
Tufte gave this a number. The lie factor is the size of the effect shown in the graphic divided by the size of the effect in the data. A lie factor of 1 is honest. His famous example was a 1978 New York Times graphic of US fuel-economy standards, where a 53% increase in the data was drawn as a 783% increase in line length: a lie factor of about 14.8. Tufte suggested anything outside roughly 0.95 to 1.05 is a substantial distortion.
Same numbers, two stories. With a truncated axis, a 7.7% rise is drawn as a tripling. Labels don't fix this: people read length first and tick labels second, if at all.
When the baseline must be zero
The rule depends on the encoding, and this is where most people go wrong in both directions.
Bars, columns and areas must start at zero. Their length or area is the value. A truncated bar is a false statement about size. Dona Wong's The Wall Street Journal Guide to Information Graphics (2010) is blunt about this: bar charts start at zero.
Lines and dots don't have to. Their position encodes the value, and what people read from a line is change and shape. Body temperature charted from 0 °C would flatten a fever into nothing; a chart of 36–41 °C is honest because that is the meaningful range. Stock prices, weight, response times: zoom the axis to the range where differences matter, and label it clearly.
But "not required" doesn't mean "anything goes". Zooming a line until noise looks like a trend is the same lie by another route. Ask: would a domain expert call this change big? If not, don't draw it big. Cairo calls this showing the right amount of uncertainty and variation, not just the right numbers.
Lab: truncate the axis, watch the lie
Monthly active users (thousands)
Drag the axis start up from zero in Bars mode and watch the lie factor climb. Then switch to Line: the same zoom becomes a reasonable choice, because a line's position, not its length, carries the value. The question becomes whether the visible change is meaningful.
Don't
A 0.2-point change drawn as 3×. Common in A/B-test results and pricing pages. The title compounds the lie.
Do
Dots allow zoom; the title states the size. And the uncertainty is shown, so nobody over-reads a small change.
Other ways graphics mislead
Truncated bars are the famous one. Alberto Cairo's How Charts Lie (2019) catalogues the subtler ones you are more likely to commit by accident:
Cherry-picked window
Starting a time series at a low point makes any growth look heroic. Show a window that includes a normal period, or let people choose.
Cumulative charts
A cumulative total only goes up, so it hides that monthly sign-ups are falling. Fine for "progress towards a goal"; misleading for "how are we doing".
Missing denominators
"Most crashes on Android" may only mean most users are on Android. Show rates (per 1,000 sessions), not counts, when comparing groups of different sizes.
Unadjusted money
Revenue over ten years without inflation, or prices across countries without currency or purchasing-power context.
Aspect-ratio drama
Squash a chart horizontally and every line becomes a cliff. Chapter 8 covers choosing an aspect ratio deliberately.
Hidden uncertainty
A single forecast line implies a precision you don't have. Show a range band, or say "about".
The window is an editorial choice. The dashed box is the left chart. Neither chart has a wrong number; only one tells the truth about the year.
Watch out
You will be tempted most when the chart is about your own success: a launch post, an investor update, an app-store screenshot, a "you saved 3× more time" stat. Readers who notice a truncated bar stop trusting every other number you show. Honesty is cheap insurance for credibility.
For the solo creator
Hard-code the rule into your chart wrapper: if the chart type is bar or area, the axis minimum is 0 and cannot be overridden. For line charts, compute a padded range from the data but never let a tiny range (say, less than 2% of the mean) fill the full height; show it flat and say "steady". These two lines of code prevent most accidental lies.
Do
Start bars and areas at zero, always.
Zoom lines to a meaningful range and label the axis ends.
Show rates when comparing groups of different sizes.
State the size of the change in words in the title ("up 0.2 points").
Show uncertainty when the numbers are estimates.
Don't
Truncate a bar chart to make a change visible; use a dot plot or show the difference directly.
Crop time windows to start at a dip.
Use cumulative charts to report health.
Use a broken-axis zigzag as a licence to truncate bars.
In the wild
New York Times fuel economy chart1978, critiqued by Tufte
The textbook lie factor case: a 53% change drawn as 783%, a lie factor of about 14.8. Perspective drawings and shrinking lines distort without any wrong number.
Stock appsApple Stocks, Robinhood, broker apps
Intraday line charts zoom tightly to the day's range, so a 0.3% move fills the chart. That's a reasonable line-chart choice for traders, but the visual drama is real. The better apps show the percentage change prominently next to the line. If you zoom, state the size in numbers beside it.
Our World in DataGrapher
Many charts let you switch between linear and log axes, change the time range and switch to per-capita figures. When the honest framing depends on the question, let people change the frame and label it clearly.
Common mistakes
Auto-scaled bar charts
Many chart libraries auto-fit the y-axis to the data range, including for bars.
Set the bar axis minimum to zero explicitly in your wrapper. Test with values like 98 and 99.
Forcing zero on every line
People over-learn "always start at zero" and flatten meaningful changes in a line (weight, temperature, latency).
For lines, pick the range a knowledgeable person would care about, and label it.
Counts where rates belong
Raw counts are what the database gives you.
Divide by the right denominator (users, sessions, days) whenever groups or periods differ in size.
Check yourself
A sleep app plots nightly resting heart rate (normal range 50–70 bpm) as a line chart with the axis from 0 to 100. Every night looks identical. What should you change?
Lines don't require a zero baseline; a meaningful range reveals real variation. Bars starting at 45 (c) would be a truncated bar and therefore dishonest. A pie (d) is for parts of a whole.
Check yourself
Your changelog says "Crash reports dropped from 120 to 60 this month". Active users also fell from 12,000 to 5,000. What is the honest headline?
The denominator changed. 120/12,000 is 10 per 1,000; 60/5,000 is 12 per 1,000. The rate went up. Counts without denominators are one of the commonest accidental lies.
Exercise 3.1 30 minutes · on your own charts and claims
The honesty audit
Collect every chart and every numeric claim in your product, website and launch posts.
For each bar or area chart, check the baseline. For each line chart, write the range and whether an expert would call it meaningful.
For each comparison, check for a missing denominator, a cherry-picked window, or a cumulative total used to show health.
Compute the lie factor for the worst one.
Fix it, and rewrite its title to state the size of the effect.
You're done when: you have a list of charts and claims, each marked honest or fixed, with the lie factor of the worst offender before and after.
Beginner
Competent
Strong
Checks bar baselines only.
Also checks line ranges, windows and denominators, and fixes them.
Builds the rules into the chart component so the mistakes can't recur, and adds uncertainty where numbers are estimates.
4
Small multiples, sparklines and layers
Taught by Edward Tufte, with Josef Albers
Comparison is the heart of understanding numbers. Small multiples repeat one simple chart so the eye compares many; sparklines shrink a chart to the size of a word so data sits inside sentences and rows; layering makes context quiet so data can be loud.
Tufte's question for any graphic is "compared to what?". A single number or a single line rarely answers it. Two of his most practical answers are designs that put many comparisons in a small space.
Small multiples
A small multiple is a grid of the same little chart, one per category, with the same scales and the same design in every panel. Once you've understood one panel you've understood them all, so the eye spends all its effort on the differences. Tufte called them the best design solution for a wide range of problems in data presentation. They beat the alternative (one chart with eight overlapping coloured lines and a legend) because each series gets its own clean space and no colour lookup is needed.
Understand one, read them all. Weekdays peak mid-morning; Saturday drifts to midday; Sunday is an evening writer. One overlapping eight-line chart would hide this in a tangle.
Don't
Spaghetti. Five overlapping lines, five colours to memorise, no single series readable.
Do
One row each. Same scale, direct labels, and a word on the shape. The interesting one is highlighted.
Sparklines
In Beautiful Evidence (2006) Tufte introduced sparklines: small, intense, word-sized graphics with no axes, placed where the words and numbers are, in a sentence, a table cell or a list row. A sparkline answers "compared to what?" for a single number: "Revenue ₹4.2 lakh" says nothing; the same number with a tiny line of the last twelve months says whether that's a good month. Microsoft added sparklines to Excel in 2010, and they are now common in finance apps and dashboards.
Rules that keep them honest: show the same time window in every sparkline you place side by side; decide deliberately whether they share a vertical scale (shared to compare sizes, independent to compare shapes) and don't mix the two in one list; mark the last point (a small dot) and, if useful, the min and max; keep them about the height of a capital letter so line spacing isn't disturbed.
Sparklines in text
This week you wrote 6,240 words over 5 sessions. Your average session was 48 minutes, and your longest streak is 12 days.
This week you wrote 6,240 words over 5 sessions. Your average session was 48 minutes , and your longest streak is 12 days.
Lines show the last 12 weeks; the dot is this week.
Without: the numbers are precise but contextless. Is 6,240 a lot for you? Is 48 minutes normal?
With: the same sentence now says "words are climbing, session length is steady". Twelve weeks of history fit in the space of two words, and the line height is untouched.
Layering and separation
In Envisioning Information (1990) Tufte describes layering and separation: put information on visually distinct layers using differences in value (lightness), weight and colour, so the reader can focus on one layer while the others stay quietly available. Gridlines, axes, context data and previous periods go on a pale back layer; the data you want read goes on a dark or saturated front layer. He borrows Josef Albers's observation that "1 + 1 = 3 or more": two strong marks create a third, unintended shape (the vibrating gap between them), so heavy context marks don't just add noise, they multiply it.
Value and weight build depth. On the right, a faint grid and a dashed grey comparison line sit behind a heavy dark line. You can read either layer by choosing to.
Micro and macro readings
Tufte's other idea from the same book: the best dense displays work at two distances. From afar (macro) you see the overall pattern; up close (micro) every detail is real data. The Vietnam Veterans Memorial is his example: from a distance, a wall of names; up close, one name. In software, a year calendar heatmap is the everyday case: the macro reading shows seasons and streaks, the micro reading shows a single day. Dense is fine when it is organised; what fails is clutter, which is density without structure.
Key idea
Clutter is not too much information; it's too little organisation. Repeat a simple form (small multiples), shrink it to word size (sparklines), and push context back a layer.
For the solo creator
A sparkline component is about 20 lines of SVG code: map values to points, draw a polyline, add a dot. Build it once and you can put context next to every number in your product: list rows, settings pages, email digests. Small multiples are a CSS grid of that same component with a shared scale. Both are cheaper to build than a full charting library and usually more useful.
Do
Use small multiples instead of more than three or four overlapping series.
Keep scales identical across panels unless you say otherwise.
Put sparklines next to the numbers they explain, with a dot on the latest value.
Push gridlines, comparison periods and annotations back a layer with lighter value.
Don't
Give each small panel its own auto-scaled axis without warning; it makes every series look equally dramatic.
Make sparklines taller than a line of text.
Use equal weight and colour for grid, context and data.
Mistake emptiness for clarity; a sparse screen with no context is not calm, it is uninformative.
In the wild
GitHub contribution graphGitHub profile pages
A year of activity as a grid of day squares shaded by count. Macro: busy months and quiet seasons. Micro: a single day. Micro/macro reading in a few hundred pixels.
Apple Weather 10-day forecastredesigned in iOS 15, 2021
Each day's low-to-high range is a bar on a scale shared across all ten days, so you can see at a glance that the weekend is cooler. Small multiples in rows: one shared scale turns a list into a chart.
Stock watchlistsApple Stocks and most broker apps
Each row pairs a ticker and price with a tiny line of the day. Sparklines in rows; but check whether each row is scaled independently, which shows shape but not size.
Excel sparklinesMicrosoft, Excel 2010
Word-sized line, column and win/loss charts inside cells, directly inspired by Tufte. The idea scaled from a book to millions of spreadsheets.
Common mistakes
Independent scales by accident
Libraries auto-scale each mini chart, so a series moving 1% looks as dramatic as one moving 60%.
Pass a shared domain to every panel. If you do want shape-only comparison, say so in a note.
Sparklines without a reference
A lone squiggle with no endpoint value or dot is decoration.
Always pair the sparkline with the current number, and mark that point.
Too many panels on mobile
Twelve panels at 400px become unreadable stamps.
On narrow screens, stack panels into rows (label, sparkline, value), which is still a small multiple.
Check yourself
A habit tracker shows eight habits on one line chart with eight colours and a legend. Users say it's "busy". What is the best redesign?
Small multiples in rows remove the colour lookup and give each series its own space, while a shared scale keeps them comparable. A stacked area (b) makes every series except the bottom one hard to read; legend toggles (d) add interaction and hide comparison.
Exercise 4.1 45 minutes · build it
Add context to three numbers
Find three numbers in your product shown without context (a total, a count, a score).
For each, decide the comparison that makes it meaningful: last period, a typical range, a goal.
Build a sparkline component in your product's stack (SVG polyline plus a dot) and place one next to each number.
If you have more than three related series anywhere, convert them to small multiples with a shared scale.
Check at 400px width and in dark mode.
You're done when: three numbers in your product carry inline context, and you can explain each comparison in one sentence.
Beginner
Competent
Strong
Adds a sparkline but no endpoint marker or consistent window.
A reusable component with shared-scale option, used in small multiples, accessible text alternative ("rising over 12 weeks").
Part one recap · connect the ideas
You're redesigning a reading app's stats page. Which combination applies Part one best (and echoes The Human Mind on limited working memory)?
(a) infers context (this week), shows comparison inline (sparkline), keeps bars honest and layers context quietly. (b) puts interaction first and distorts. (c) forces memory comparisons across tabs, the exact working-memory cost the Mind guide warned about. (d) delays the answer and uses a hard-to-read encoding.
Part two
How the eye reads quantity
Charts work because the visual system turns marks into estimates of size without conscious effort. But it doesn't do this equally well for every kind of mark. This part starts with the experiments that measured which encodings people read accurately, uses them to settle the old arguments (pies, 3D, dual axes), and then turns that into two practical skills: choosing the chart for a question, and crafting it so the answer is the first thing seen.
5
The perceptual ranking: position beats colour
Taught by William Cleveland & Robert McGill, with Jacques Bertin and Jeffrey Heer
People judge quantities most accurately from position on a common scale, then length, then angle, then area, then colour shade. Put your most important comparison in the most accurate channel.
In 1984 William Cleveland and Robert McGill, statisticians at Bell Labs, published "Graphical Perception" in the Journal of the American Statistical Association. They showed people pairs of values encoded in different ways and asked them to judge what percentage the smaller was of the larger. The errors differed a lot by encoding. In 2010 Jeffrey Heer and Michael Bostock re-ran similar experiments with crowdsourced participants on Mechanical Turk and found the same general order. That makes it one of the most reliable findings in visualisation.
A ladder of accuracy. The higher the channel, the smaller the judgement errors. A bar chart uses position and length together; a pie uses angle and area; a heatmap uses shade.
Why the order exists
Comparing two dots on the same axis is a straight distance judgement against a shared reference. Lengths are almost as good, but without a shared baseline you compare them by eye, which adds error. Angles are harder because our sensitivity varies with orientation (we're good near 0°, 90° and 180°, worse in between). Area is worse still: research on perceived magnitude (Stevens's power law) found people tend to underestimate differences in area, so a circle with twice the area looks less than twice as big. Colour shade is the weakest: lightness perception depends on what surrounds it, so the same grey looks different on different backgrounds.
The practical rule: put the comparison that matters most into position. Use length next. Use area and shade only for rough impressions (big vs small, hot vs cold), or when position is already taken (a map uses position for geography, so the data must go into shade or size).
Lab: test your own eye
B is what percent of A?
Make a guess with the slider, then reveal.
Do five guesses per encoding. Most people's average error is smallest for position and length, and two or three times larger for area and shade. That gap is the whole argument for bar and dot charts.
Bertin's visual variables
Long before the experiments, the French cartographer Jacques Bertin set out the vocabulary in Sémiologie graphique (1967; English translation Semiology of Graphics, 1983). A mark on a page can vary in position (two dimensions), size, value (lightness), texture, colour (hue), orientation and shape. His key contribution was to ask which variables can express which kinds of data. Later, Jock Mackinlay (1986) ranked the channels separately for quantitative, ordered and categorical data.
Match the variable to the data type. Hue says "these are different kinds", never "this is more". Lightness says "more" and "less" well enough for order, but not for precise amounts.
Don't
Area for precise comparison. People reliably underestimate area differences, and ranking near-equal circles is close to guessing.
Do
Length on a shared baseline. Sorted, labelled, readable in two seconds, and the order is unmistakable.
For the solo creator
When you sketch a chart, write next to it: "the comparison that matters is ___, and it's encoded as ___". If the answer is area, angle or colour for something people must compare precisely, change the chart. This takes ten seconds and catches most bad chart choices before you write code.
Do
Encode the main comparison as position or length on a shared baseline.
Use hue for categories and lightness for order.
Label values directly when precision matters, whatever the encoding.
Use area and shade for rough "big vs small" impressions, or when position is already used (maps).
Don't
Use rainbow hue scales for quantities; hue has no natural order.
Scale icons in two dimensions to show one-dimensional data.
In the wild
Apple Screen TimeiOS 12, 2018 onward
Daily use is shown as bars on a shared baseline, with a dashed line for the average and category colours stacked inside bars. The total (length) reads well; the stacked category segments, which float, are far harder to compare.
Weather radar mapsmost weather apps
Position is taken by geography, so rain intensity must go into colour. Good apps use an ordered light-to-dark scale; many still use rainbow scales. When position is used up, use lightness for order, and add a legend.
Datawrapper2012 onward
The chart tool's documentation and defaults steer users towards bars, dot plots and direct labels, and its blog regularly explains perceptual reasons for chart choices. A tool can teach good encoding through its defaults.
Common mistakes
Choosing the chart for looks
Bubbles, radial bars and donuts look more designed than bars.
Ask what comparison matters. If it needs precision, use position or length, and make the bars beautiful with type, spacing and colour instead.
Hue as quantity
Heatmaps default to rainbow palettes, which look vivid and imply order that doesn't exist (is green more than yellow?).
Use a single-hue light-to-dark scale for quantity, and a diverging scale (two hues meeting at a neutral midpoint) only when there's a meaningful middle.
Check yourself
You want people to compare monthly spending across six categories precisely. Which encoding best fits the ranking?
Length and position on a common baseline rank highest. Treemaps (a) and circles (c) use area; heatmaps (d) use shade, the weakest for precise comparison.
Exercise 5.1 30 minutes · on apps you use
Encoding inventory
Take five charts from your screenshot folder.
For each, write the main comparison and the channel it uses (position, length, angle, area, shade, hue).
Mark where the main comparison sits lower on the ladder than it needs to.
Redraw the worst one, moving the main comparison to position or length.
You're done when: you have a five-row table (chart, comparison, channel, verdict) and one redrawn chart.
Beginner
Competent
Strong
Names the chart types but not the channels.
Correctly identifies channels and fixes the worst case.
Also notices secondary encodings (hue, shade) and whether they carry categories or quantities appropriately.
6
Pies, 3D and dual axes: the usual suspects
Taught by Stephen Few, with Dona Wong and Alberto Cairo
Pie charts are fine for one simple message about parts of a whole and poor for comparison. 3D adds distortion and nothing else. Dual axes let the designer invent any relationship they like.
Pie charts, fairly judged
Pies rank low on the ladder (angle and area), and Stephen Few's essay "Save the Pies for Dessert" (2007) laid out the case against them. Yet pies survive because they do one thing well: they say "these parts make a whole" instantly. That message is the best case for a pie. When the question is "roughly what share is this?", and there are two or three parts, a pie (or a single filled ring) is quick and familiar. When the question is "which is bigger?" or "how did shares change?", it fails.
A pie is OK when
Use something else when
Two or three parts
More than about five parts (use a sorted bar)
One part vs the whole ("23% of storage used")
Parts are close in size (40 vs 37)
Shares are very different (75/25)
Comparing shares across time or groups (use stacked 100% bars or small multiple bars)
Slices start at 12 o'clock, largest first, labelled directly
A legend is needed to identify slices
Donut charts are a pie with the centre removed; readers then judge arc length rather than angle, which research by Robert Kosara and Drew Skau (2016) suggests is read about as accurately as a pie, not better. The centre hole is useful for a single label. A waffle chart (a 10×10 grid of squares) is often a better part-to-whole form for one share: "23 of 100 squares" can be counted.
Don't
Seven similar slices and a legend. Is Food bigger than Bills? The eye ping-pongs between key and pie.
Do
Sorted bars, labels inline. Food versus Bills is now obvious, and there's nothing to look up.
Where part-to-whole forms shine. One share, or two very unequal parts, said at a glance. The waffle (filled by the page script) lets people count.
3D charts
There is no data reason for 3D in a chart of two-dimensional data. Perspective makes near slices and bars larger than far ones, tilting a pie turns angles into ellipses that no one can judge, and 3D bars sit their visual top above or below the true value depending on the viewing angle. Occlusion hides some bars behind others. Dona Wong's advice is simply not to use it. The only reasonable 3D in data graphics is for genuinely three-dimensional data (terrain, a molecule, a building), usually with interaction to rotate it.
Don't
Equal halves, unequal impressions. The front slice gains a visible side, and perspective enlarges it.
Do
Flat is honest. If the data has two dimensions, the chart should too.
Dual axes
A dual-axis chart plots two series with different units on one chart, one scale on the left and one on the right. The problem: both scales are arbitrary choices, so the designer can make the lines cross, run parallel or diverge simply by adjusting either axis. Readers then see a relationship (correlation, crossing points, "revenue overtook costs") that the data doesn't contain. Few, Cairo and the Datawrapper team all advise against them in most cases.
The designer decides the story. Which is why dual axes are rarely honest. Alternatives: two charts stacked on a shared time axis, or index both series to 100 at the start and plot change.
For the solo creator
Storage meters, quota rings and "profile 60% complete" bars are the legitimate pies of product UI: one share of one whole. Keep them. For anything with more than three parts, ship sorted bars; they're also easier to build responsively, since bars reflow into rows on a phone while pie labels collide.
Do
Use a pie, ring or waffle for one share or two or three very different parts.
Start slices at 12 o'clock, largest first, labels on the slices.
Use stacked small charts or indexed lines instead of dual axes.
Keep 2D data in 2D.
Don't
Compare pies side by side to show change in shares.
Use exploded, tilted or 3D pies.
Put two unrelated units on one chart and let people infer a link.
Use donut charts with seven slices and a legend.
In the wild
iPhone and Mac storage barsApple
Storage use is shown as one horizontal bar split into a few categories, with the largest named first and the free space shown. A segmented bar is a pie unrolled: easier to read and to fit on a narrow screen.
Apple Activity ringsApple Watch, 2015
Three rings, each one share of a personal goal (Move, Exercise, Stand), and rings can go past 100%. Each ring is "one share of one whole", the case where circular forms work; nobody compares the rings to each other.
Google Sheets and Excelchart menus
Both still offer 3D pie and 3D column options. Being available in a menu is not an endorsement.
Common mistakes
Pie for change over time
Shares are part-to-whole, so a pie per month feels natural.
Use 100% stacked bars (one per period) with the key segment at the baseline, or a line per share.
Dual axis "to save space"
Two series feel related and space is tight on mobile.
Stack two short charts sharing one x-axis; it takes barely more height and makes no false claims.
Percentages that don't sum to 100
Rounding each slice independently gives 99% or 101%.
Use a largest-remainder rounding method, or show one decimal, or note "may not sum due to rounding".
Check yourself
A finance app shows "Revenue" (₹, left axis) and "Users" (count, right axis) on one chart; the lines cross in March and the caption says "users overtook revenue". What's wrong?
With dual axes the crossing depends entirely on where each axis is set. Rupees and users aren't comparable quantities, so "overtook" is meaningless. Index both to 100 at the start or show two stacked charts.
Exercise 6.1 25 minutes · redraw
Three rescues
Find (or invent from your own data) a pie with five or more slices, a 3D chart, and a dual-axis chart.
Redraw the pie as a sorted bar chart, the 3D chart flat, and the dual-axis chart as two stacked charts or one indexed chart.
For each, write one sentence on what the reader can now see that they couldn't before.
You're done when: you have three before/after pairs and three sentences.
Beginner
Competent
Strong
Redraws but keeps legends and unsorted order.
Sorted, directly labelled, honest scales.
Also adds an insight title to each and states what the original hid.
7
Choosing the chart from the question
Taught by Stephen Few, with Cole Nussbaumer Knaflic, Francis Anscombe and Alberto Cairo
Don't start from chart types; start from the question the reader is asking. Each question (compare, change, part-to-whole, distribution, relationship) has one or two forms that answer it well, and a few that look plausible and fail.
Most bad charts come from choosing a type first ("let's do a donut here") and pouring data into it. Reverse the order. Write the reader's question as a sentence. Then identify its shape. Nearly every question in product UI is one of a handful:
Comparison: which is bigger, by how much? ("Which project took the most hours?")
Ranking: what's the order? ("My top five apps.")
Change over time: going up or down, how fast, any pattern? ("Am I reading more than last year?")
Before and after: how did each item change between two moments?
Part-to-whole: what share is this? ("How much of my storage is photos?")
Distribution: what's typical, how spread out, any outliers? ("How long are my sessions usually?")
Relationship: does one thing move with another? ("Do I sleep worse when I work late?")
Pattern across two categories: when does it happen? ("Which hours of which days am I most productive?")
Lab: the chart chooser
Pick the reader's question. The lab draws the recommended form with sample data and names what to avoid. Notice how often the answer is a bar, a line or a dot on a shared scale.
Nine forms cover almost every product question. Stacked bars are outlined as a caution: the middle segments float, so comparing them across bars is a judgement of unaligned lengths, two rungs down the ladder.
Always plot the distribution once
Averages hide shape. In 1973 the statistician Francis Anscombe published four small data sets, now called Anscombe's quartet, with nearly identical means, variances, correlations and regression lines. Plotted, they're completely different: a noisy line, a curve, a perfect line with one outlier, and a vertical cluster with one far point. In 2017 Justin Matejka and George Fitzmaurice extended the idea in "Same Stats, Different Graphs" with the "Datasaurus Dozen", a set that includes a dinosaur drawing (based on Alberto Cairo's original "Datasaurus") with the same summary statistics as the others.
Summary statistics are not the data. Before you design a stat tile that shows an average, plot the raw values once yourself. You may discover your "average session" is really two kinds of session.
Question
Use
Avoid
Compare amounts
Sorted bars (horizontal if labels are long); dot plot if values are close and far from zero
Pies, bubbles, radial bars
Ranking
Sorted bar or a ranked list with inline bars
Unsorted alphabetical bars
Change over time
Line for continuous or many points; columns for a few discrete periods
Pie per period; 3D area
Before vs after
Slope graph or dumbbell (two dots joined)
Grouped bars for many items
Part-to-whole
One stacked bar, waffle, or pie/ring for ≤ 3 parts
Pies with many slices, donuts with legends
Distribution
Histogram; strip, box or beeswarm to compare groups
An average alone
Relationship
Scatter plot, maybe with a trend line
Dual axes
Pattern by two categories
Heatmap with a single-hue sequential scale
Rainbow colour scale
Myth
"A table is a failure to visualise." Tables are the right form when people need to look up exact values or compare several attributes of one item. Charts are for shapes, patterns and comparisons. Many good screens use both: a chart for the shape, a table below for the lookup. Chapter 11 is about tables.
For the solo creator
You don't need all nine forms. A product with bars, lines, dot plots and a sparkline covers most needs; add a heatmap if your product is about habits or time. Fewer forms means one consistent look, less code, and users who learn to read your charts once.
Do
Write the reader's question before choosing a form.
Prefer bars, lines and dots; they're on the top rungs of the ladder.
Plot raw distributions before you summarise with an average.
Use horizontal bars when category names are long; they stay readable at 400px.
Don't
Pick a chart for novelty (radar, radial, sankey) when a bar answers the question.
Stack more than two or three segments if people must compare the middle ones.
Report "average" for skewed data without the median or a distribution.
Use a line for unordered categories; a line implies continuity.
In the wild
Stravaactivity screens
Uses a line (elevation, pace over distance) for change along a route, and bars for weekly totals. Two questions, two forms, both on the top rungs.
The Financial Times"Visual Vocabulary" poster
The FT's graphics team published a chart chooser poster organised by relationship type (deviation, correlation, ranking, distribution, change over time, part-to-whole, magnitude, spatial, flow). Organise chart choice by question, not by chart type.
Time trackersToggl Track and similar
Time-tracking reports commonly pair a bar chart of hours per day with a ranked list of projects. Time on a bar, composition as a ranked list, exact values in a table.
Common mistakes
One chart answering three questions
The urge to fit everything on one chart: totals, shares and change.
One chart, one question. Two simple charts beat one clever one.
Lines across categories
Line is the default chart type in many tools.
Use lines only when the x-axis is ordered and continuous (time, distance). For categories, use bars or dots.
Averages hiding two groups
A mean session length of 20 minutes can come from many 2-minute checks and a few 90-minute sessions.
Show a histogram once; if it has two humps, report the groups separately.
Check yourself
You want to show how each of 12 users' weekly usage changed between their first and fourth week. Which form fits best?
Before/after for many items is the slope graph's job: each line's direction and steepness is the change, and highlighting a few lines tells the story. Twelve coloured lines (b) need a legend; 24 grouped bars (c) make pairs hard to compare.
Exercise 7.1 40 minutes · on your own product
Question first
List five questions a user of your product might ask about their own data.
Classify each by shape (compare, rank, time, before/after, part, distribution, relationship, pattern).
Sketch the recommended form for each with realistic numbers.
For one of them, export your real data and plot the raw distribution before deciding what summary to show.
You're done when: you have five question cards, each with a shape and a sketch, and one distribution plot of real data with a sentence on what it revealed.
Beginner
Competent
Strong
Questions are generic; forms chosen by habit.
Questions are specific; forms match the shapes.
The distribution check changes a design decision (median instead of mean, two groups instead of one).
8
Chart craft: titles, labels, colour and shape
Taught by Cole Nussbaumer Knaflic, with Dona Wong, William Cleveland and Edward Tufte
A good chart is designed like a good sentence: it has a point, it says it first, and everything else supports it. Title with the finding, label directly, use colour for one thing, sort with purpose, and choose the shape of the frame deliberately.
Cole Nussbaumer Knaflic's Storytelling with Data (2015) distils a practice that came from years of teaching analysts at Google: understand the context, choose an appropriate visual, eliminate clutter, focus attention where you want it, think like a designer, tell a story. The crafting steps below are where most of the improvement in a chart actually happens. Choosing the right type gets you to "acceptable"; craft gets you to "obvious".
Eight crafted details. None of them is a different chart type. All of them change how fast the point lands.
1. Titles that state the finding
"Sign-ups by month" is a label. "Sign-ups doubled after the free tier launched" is a finding. An insight title tells the reader what to look for, so the chart confirms it in a glance instead of being decoded from scratch. Put the descriptive label (metric, units, period) in a smaller subtitle. In product UI, where the data changes, generate the title from the data: "You read 3 more books than last year" or "Spending is 12% below your monthly average". When there's no clear finding, say so honestly ("About the same as last month") rather than inventing drama.
2. Direct labels instead of legends
A legend asks the reader to hold a colour-to-name mapping in working memory and look back and forth. Put the name at the end of the line or on the bar. Datawrapper, Our World in Data and most newspaper graphics do this by default. A legend is acceptable only when lines are so tangled that labels would collide, and that's often a sign you need small multiples instead.
3. Colour with purpose
Start everything in grey. Then add one colour to the thing the title talks about. That single move does most of the work in Knaflic's "focus attention" step: pre-attentive processing finds the one coloured thing instantly. Use more colours only when categories genuinely need distinguishing, keep categorical palettes small (about six hues at most, distinguishable in colour-blind simulation), use a single-hue light-to-dark ramp for quantities, and a diverging ramp (two hues through a neutral middle) when there's a meaningful midpoint like zero or a target. Keep a colour's meaning consistent across every chart in your product. More on colour and accessibility in Visual Design and Accessible & Inclusive.
Lab: grey the rest, highlight one
Compare the two styles. In the rainbow version, finding "Journal" means a trip to the legend. In the highlight version the eye lands on it immediately, the title tells you what it did, and the other five lines become context instead of competition.
4. Sorting
Unless categories have a natural order (months, age bands, steps in a funnel, rating scales), sort bars by value. Alphabetical order is a database habit; it makes the reader do the ranking. For rating scales, keep the natural order and use a diverging layout. For small multiples, sort panels by the thing you want compared (largest change first), not by name.
Don't
Label title, alphabetical, rainbow. The reader must rank, decode and guess the point.
Do
Finding title, sorted, one accent. The point is the first thing you read and the first thing you see.
5. Aspect ratio and banking
The shape of a line chart's frame changes how steep slopes look, and therefore how dramatic change feels. William Cleveland proposed banking to 45°: choose the aspect ratio so that the average absolute slope of the line segments is about 45°, where people judge slope differences best. You don't need to compute it. The practical version: if a line looks like a cliff, the chart is too narrow or too tall; if it looks like a flat wire, too wide or too short. Pick the frame where the meaningful changes are visible and no steeper. On phones this matters because charts get squeezed into tall narrow boxes, which turns every wobble into a spike.
Same data, three moods. The banked frame shows the rises and dips at slopes the eye compares well. None of these changes a number; all of them change the story.
6. Gridlines, ticks and axis numbers
Gridlines should be just visible: a light rule colour, thin, and only on the value axis. Three to five ticks is plenty for most product charts. Format tick labels for humans: "20k" not "20000.00", "Mar" not "2026-03-01", "₹2L" or "₹2 lakh" for Indian audiences. Drop the axis line on the value axis if gridlines exist; keep a darker baseline at zero for bars. Put units in the subtitle or on the top tick ("60 min") instead of an axis title rotated 90°, which nobody reads on a phone.
7. Annotation
An annotation is a sentence placed on the chart where the thing happened: "Free tier launched", "Server outage", "Started new job". It turns a shape into an explanation. In personal data products, letting users annotate their own charts ("moved city", "injury") is powerful: their context explains their data better than any algorithm can. Keep annotations in the muted colour, attached to the data with a thin line, and limit them to the two or three that explain the shape.
For the solo creator
Generate titles from data with a few rules: compare this period to the previous one; if the change is under a threshold (say 5%), write "About the same as last week"; otherwise "Up 18% on last week" or "Your best week since March". This is a handful of lines of code, and it's the single highest-value improvement you can make to a stats screen.
Do
Write the title as the finding; put units and period in the subtitle.
Label lines and bars directly.
Start grey; add one accent for the point.
Sort by value unless there's a natural order.
Format ticks for humans and keep them few.
Annotate the events that explain the shape.
Don't
Use a legend when labels fit.
Give every series its own bright colour by default.
Rotate axis labels or category names; switch to horizontal bars.
Squeeze line charts into tall narrow boxes.
Write titles that oversell a flat result.
In the wild
The Economist and the Financial Timesdaily charts
Both use short, opinionated titles that state the finding, with a smaller descriptive subtitle, and a source line under every chart. Two-level headings: finding, then description.
Our World in Dataline charts
Country lines are labelled at their right end rather than in a legend, and readers can highlight one country to grey out the rest. Direct labels plus highlight-on-hover is the interactive form of "grey the rest".
Apple HealthTrends and Highlights
Highlights cards pair a short generated sentence comparing a recent period with an earlier one and a simple chart of the two periods. A data-generated insight title, in a consumer product.
Common mistakes
Colour for decoration
The brand palette has six colours, so the chart uses six colours.
Colour means something or it's grey. One accent is the default; brand colours are for the chrome around the chart.
Hype titles on generated insights
"Amazing week!" every week trains users to ignore it, and it's dishonest on bad weeks.
State the comparison plainly and use a threshold for "about the same".
Annotations everywhere
Every spike gets a note, and the chart becomes a comment thread.
Annotate only what explains the title's finding.
Check yourself
A fitness app's weekly chart shows five metrics in five brand colours with a legend underneath. Users mostly care whether they hit their step goal. What's the best single change?
Focus attention on the question users have: one accent, a reference line, a direct label and a finding title. A bigger legend (b) keeps the lookup cost; 3D (c) distorts; animation (d) delays.
Exercise 8.1 45 minutes · on your own product
The eight-detail makeover
Take one chart from your product (or the one from Exercise 2.1).
Apply the anatomy: finding title, subtitle with units, direct labels, one accent, sorted order, faint grid, few formatted ticks, source/date.
Write the rule that would generate the title from live data, including the "about the same" case.
Check the aspect ratio at desktop and 400px; adjust so slopes are neither cliffs nor wires.
Show the before and after to someone for five seconds each and ask what the chart says.
You're done when: you have before/after images, the title rule written as pseudo-code, and the five-second test answers.
Beginner
Competent
Strong
Changes colour and title only.
All eight details applied; the five-second test gets the point right.
Title generation and highlight are built into your chart component and used everywhere.
Part two recap · connect the ideas
Which statement best links the perceptual ranking (chapter 5) to pre-attentive processing from The Human Mind?
Different channels have different jobs. Position and length are best for judging amounts. Hue pops out pre-attentively, which makes it ideal for "look here" and poor for "how much". Good charts use both, each for its job.
Part three
Numbers, tables and dashboards
Most of the data in your product isn't in charts. It's a number in a sentence, a balance on a card, a column in a table, a tile on a stats screen. This part is about the craft of those everyday surfaces: formatting numbers so they're read correctly, giving them context, building tables people can scan, and designing dashboards and personal stats that answer "so what?" without nagging.
9
Formatting numbers for humans
Taught by Dona Wong, with Edward Tufte and the Unicode CLDR locale data
A number should be shown with exactly the precision the reader's decision needs, in the grouping and units they read fluently, and with the comparison that tells them whether it's good.
Formatting looks like a detail. It isn't: a misplaced separator turns ₹12,34,567 into nonsense for an American reader and 1,234,567 into a puzzle for many Indian readers who count in lakhs. Too many decimals make numbers slow to read and imply false precision. Too few hide real differences. Every number in your product goes through this decision, so it's worth getting the rules into one formatting function.
Precision: significant figures, not decimal places
For overview screens, two or three significant figures are almost always enough. "4.2 lakh" or "420k" is read instantly; "4,23,817.46" has to be parsed digit by digit, and the extra digits rarely change a decision. Detail views, invoices, receipts and exports need exact values. A good rule: summary = rounded, detail = exact, money owed = exact to the paisa or cent. And keep decimals consistent within a column or a comparison: 4.0 next to 3.75 next to 12 is harder to compare than 4.00, 3.75, 12.00.
Beware false precision: "Your reading speed is 247.36 words per minute" claims an accuracy the measurement doesn't have. "About 250 wpm" is more honest. The precision you show is a claim about how much you know.
Grouping and locale
Digit grouping differs by locale, and the Unicode CLDR data (which powers Intl.NumberFormat in browsers, and the formatters in iOS and Android) handles it for you:
Locale
12345678.9
Compact
Notes
en-US
12,345,678.9
12M
Groups of three, comma, dot decimal
en-IN
1,23,45,678.9
1.2Cr
First group of three, then twos: thousand, lakh, crore
de-DE
12.345.678,9
12 Mio.
Dot groups, comma decimal
fr-FR
12 345 678,9
12 M
Narrow no-break space groups
ja-JP
12,345,678.9
1235万
Compact form counts in 万 (ten thousands)
The Indian system: 1 lakh = 1,00,000 (one hundred thousand); 1 crore = 1,00,00,000 (ten million) = 100 lakh. An Indian reader seeing "₹45,23,817" reads "forty-five lakh" at a glance; "₹4,523,817" must be re-parsed. If your audience is Indian, use en-IN grouping, and consider writing large amounts in words ("₹45.2 lakh", "₹1.2 crore"), which is how prices of houses, cars and salaries are commonly discussed in India.
Same quantity, two reading habits. Grouping is how people read magnitude at a glance. Use the reader's locale, not yours or your server's.
Lab: one number, many formats
Type a number and switch locales. Notice how the compact and significant-figure versions are readable in a glance while the full version is exact. Your product needs both, in different places. The "in words" row uses lakh and crore, which the built-in formatter doesn't spell out.
Units, signs and symbols
Always show the unit, close to the number: "42 min", "3.2 km", "₹1,200". A bare number is a riddle. In tables, put the unit in the column header once.
Use a real minus sign (−, U+2212) for negative values in display type; the hyphen is shorter and misaligns. Accounting contexts may use parentheses: (1,200).
Keep the number and its unit together with a no-break space so "42" doesn't end one line and "min" start the next.
Durations: "1 h 32 min" reads better than "1.53 hours" for people; "92 min" is good for comparison in a column.
Times and dates: relative for the recent past ("4 min ago"), absolute for anything older than about a day ("12 Mar"), and always absolute on hover or in detail. Follow the user's 12/24-hour setting.
No data is not zero. Show "No data" or a muted dash for missing values, so a gap isn't read as nothing happening.
Relative and absolute, percent and points
Two common traps. First, a relative change without the absolute base is easily misread: "risk doubled" might mean 1 in 10,000 became 2 in 10,000. "+200% sales" might mean 1 sale became 3. Show both: "3 sales (up from 1)". Second, percentages of percentages: if conversion goes from 10% to 12%, that's +2 percentage points or +20%. Both are true; "+2%" is wrong and common. Say "points" for differences between percentages.
Don't
Revenue
₹4,523,817.4627
Conversion
12% +2%
Sessions
0
Raw output from the database. Wrong grouping for an Indian reader, four meaningless decimals, "+2%" that's really points, and a zero that's actually missing data.
Do
Revenue this month
₹45.2 lakh
Conversion
12% +2 pts vs May
Sessions
No data yet
Formatted for the reader. Rounded to what matters, in lakh, period stated, points named, missing data called missing.
For the solo creator
Write one formatNumber(value, kind) function, where kind is money, count, percent, duration or delta, and route every number in your product through it. Use the platform formatter (Intl.NumberFormat, NumberFormatter on Apple platforms) with the user's locale. You'll fix grouping, decimals, units and missing values in one place, forever.
Do
Round summaries to 2–3 significant figures; keep detail exact.
Use the reader's locale for grouping and decimals.
Use lakh and crore for Indian audiences when amounts are large.
Use a hyphen as a minus sign in large display numbers.
In the wild
Zerodha Kite and Indian banking appsIndia
Indian broker and banking apps commonly show balances in Indian digit grouping, matching how users read amounts. Local grouping is not a nicety; it's how people parse money.
YouTube and social appsview counts
Counts are compacted ("1.2M views") in lists and shown in full on the detail page. Summary rounded, detail exact.
Apple Healthunits
Uses the units set in the user's region and preferences (km or miles, kg or lb, °C or °F) consistently across charts and summaries. Units are a locale setting too.
Common mistakes
Formatting with the server's locale
Numbers are formatted on the server (or in a default locale) before reaching the user.
Send raw numbers; format on the client with the user's locale.
Percent of a tiny base
"+300% this week" looks exciting when it's 1 to 4.
Below a minimum base (say 20), show the absolute change only.
Precision drift
Each screen formats on its own, so the same value appears as 4.2, 4.23 and 4.2317.
One formatter, one precision per kind of number.
Check yourself
Your app's open rate went from 40% to 44%. Which label is correct and clearest?
(b) gives the value, the absolute difference in points and the base. (a) is ambiguous and usually wrong. (c) is technically true but a relative change of a percentage confuses most readers. (d) is false precision.
Exercise 9.1 45 minutes · on your own product
One formatter to rule them
Grep your codebase for places that turn numbers into strings (toFixed, toString, string interpolation of numbers).
List the kinds of number your product shows: money, counts, percentages, durations, deltas, dates.
Write a single formatter with a rule per kind (precision, unit, locale, missing value).
Replace at least five call sites. Test with en-IN, en-US and de-DE.
You're done when: one formatting module exists, five or more screens use it, and screenshots in three locales look right.
Beginner
Competent
Strong
Adds thousand separators.
Kinds, locales, units and missing values handled; summary/detail precision rule.
All numbers routed through it; deltas say "points" correctly; small bases handled; tested in three locales.
10
Big numbers, deltas and trend arrows
Taught by Stephen Few, with Edward Tufte and Cole Nussbaumer Knaflic
A big number on its own is a statement without a meaning. Give every headline number a period, a comparison and a judgement of good or bad, and let the typography keep it steady.
The "big number tile" (a large figure with a small label, often in a grid of four to eight) is the most common data element in software. It is also the most commonly misused. The failure is always the same: Tufte's "compared to what?". "1,284 users" doesn't tell you if that's good. "1,284 users this week, up 9% on last week, highest since March" does.
Five parts of a meaningful tile. Remove any one and the number becomes harder to judge. Colour on the delta means "good" or "bad" for this metric, not "up" or "down".
Deltas and trend indicators
Arrows and percentages are where most tiles go wrong:
Say the comparison. "+12%" against what? Previous day, same day last week, last month, last year? Weekly cycles are strong in almost any human activity, so "vs same day last week" is usually fairer than "vs yesterday" (Monday vs Sunday is not news).
Encode good and bad, not up and down. Costs going up is bad; error rate going down is good; screen time going down might be good. Green for up everywhere is a bug. And never rely on colour alone: the arrow and the word carry it too.
Mind the base. Small numbers swing wildly. +200% on a base of 2 is noise. Show the absolute change, and suppress percentages under a minimum base.
Show "about the same". Changes within the normal noise of the metric (say ±3%) should read as neutral, in grey, without an arrow. Otherwise users react to random wobble.
Prefer a trend over a single delta. One comparison can mislead; a sparkline of 8 to 12 periods shows whether this week is a blip or a direction.
Stat tiles: numbers vs meaning
Total users48,912▲ 2.1%
Sessions3,04,118▲ 0.4%
Crashes212▲ 18%
Refunds3▲ 200%
Active users · this week6,410▲ 410 (+7%) vs last week
Sessions per user · week4.7About the same (4.6)
Crash rate · per 1,000 sessions2.9▲ from 2.4 · worse
Refunds · this week3up from 1 · within normal
Without: a cumulative total that only grows, a count that hides users, crashes coloured green because the arrow points up, and +200% on a base of one. Every tile looks like good news, and none is actionable.
With: active rather than cumulative, rates instead of raw counts, a stated comparison, colour that means good or bad, a neutral "about the same", and small bases shown as absolute numbers.
Vanity and the cumulative trap
A vanity metric looks good and informs no decision. "Total users ever" only goes up; it can't tell you that the product is shrinking. "Total words written" is lovely for a celebration, useless for a weekly check. For anything people monitor, prefer active, per-period and per-user rates. Keep the cumulative totals for milestones and year-in-review moments, where celebration is the point.
Typography for numbers
Numbers that change, align or sit in columns need tabular figures: digits of equal width, set with font-variant-numeric: tabular-nums (if the font supports it). Without them, a timer or live counter shimmies left and right as digits change ("1" is narrower than "8" in proportional figures), and columns of numbers don't line up. In running prose, proportional figures look better. Use lining figures (all digits the height of capitals) in UI and tables; oldstyle figures (with ascenders and descenders) suit long-form reading. See Typography for the full treatment.
Don't
Proportional digits in a live number. "1" is narrow and "8" is wide, so every tick moves the whole number.
Do
Tabular figures. The colon and every column stay put; only the digits change.
Watch out
Count-up animations on big numbers (0 → 48,912 over a second) are popular and costly. They delay the answer on every visit, they make the number unreadable while moving, and screen readers may announce intermediate values. If you animate, keep it under about 300 ms, only on first view, and respect reduced-motion settings (see Motion & Feel).
For the solo creator
Your own admin dashboard is where you'll be most tempted by vanity tiles, because they feel good on a hard week. Build it with the same rules: active users per week, rates, and a sparkline. A dashboard that tells you the truth early is worth more than one that cheers you up.
Do
Pair each big number with a period, a comparison and context.
Colour deltas by good or bad for that metric, with an arrow or word too.
Show neutral "about the same" for changes within noise.
Use tabular figures for anything live or in columns.
Don't
Show cumulative totals as health metrics.
Show percentages on tiny bases.
Use more than four to six tiles in a row; nobody reads the seventh.
Animate numbers counting up on every visit.
In the wild
Stripe DashboardHome
Headline figures like gross volume sit above a small chart, and can be compared with a previous period drawn as a fainter line. Comparison and trend built into the tile.
Apple Screen Timeweekly report
The weekly report shows daily average screen time with a percentage change from the previous week. The comparison is there; whether up is good or bad is left to the user, which is honest but can feel like judgement either way.
Plausible Analyticstop stats
A short row of top stats (visitors, pageviews, bounce rate, visit duration), each with a change against the previous period. Few tiles, each with comparison: restraint as a feature.
Common mistakes
Green means up
A generic tile component colours positive deltas green.
Give each metric a "good direction" property (up, down or neutral) and colour from that.
Yesterday vs today
The simplest comparison to compute.
Compare to the same weekday last week, or to a rolling average, so weekly cycles don't trigger false alarms.
The tile wall
Every metric you can compute gets a tile.
Pick the three to five that drive decisions. Move the rest to a detail view.
Check yourself
A tile says "Support tickets 14 ▲ 40%" in green. Last week there were 10. What's the best fix?
More tickets is usually bad, the base is small so the absolute change is clearer, the period must be stated, and the sparkline shows whether 14 is unusual. (a), (b) and (d) keep the misleading "good news" signal.
Exercise 10.1 30 minutes · your stats or admin screen
Tile triage
List every big number on your stats or admin screen.
For each, write: period, comparison, good direction, minimum base, and the decision it informs.
Delete or demote any tile that informs no decision.
Redesign the remaining tiles with the five-part anatomy.
You're done when: you have a tile spec table and a redesigned row of no more than five tiles.
Tiles are fewer, each tied to a decision, built as one component with these properties.
11
Tables people can scan
Taught by Stephen Few, with Edward Tufte and Dona Wong
A table is for looking up and comparing exact values. Its design job is to make columns easy to scan down and rows easy to follow across, with the least ink that does it: aligned numbers, quiet separators, and emphasis on the column that matters.
Stephen Few's Show Me the Numbers (2004, second edition 2012) treats tables as seriously as charts, and argues that for lookup they're often better. Tables are linear: people scan a column to find a row, then read across. Every design decision should help those two motions.
Alignment is the whole game
Numbers right-aligned, so units line up under units and tens under tens; magnitude is then visible from the length of the number alone. Use the same number of decimals in a column, and tabular figures.
Text left-aligned, because we read from the left edge. Centred text gives every row a different starting point.
Headers aligned like their column: a numeric column's header goes right too, so it sits above the numbers.
Dates in a consistent, fixed-width format (12 Mar 2026, or 2026-03-12 for technical audiences), left-aligned or right-aligned consistently.
Units in the header ("Amount (₹)", "Duration (min)"), not repeated in every cell.
Alignment turns digits into a chart. Right-aligned with fixed decimals, the column's longest number is visibly the biggest. Centred, you have to read every value.
Rows: separators and density
Readers need help following a row across, especially in wide tables. Three options, from lightest to heaviest: whitespace alone (works for short, narrow tables), thin horizontal rules (the best general default), and zebra striping (alternating subtle background tints; helpful for very wide tables with many columns, distracting for short ones). Avoid vertical rules: alignment already defines columns, and vertical lines create a grid of boxes that slows scanning. Few recommends using the lightest separation that works.
Density is a trade-off between scanning and seeing more at once. A comfortable row (about 44–48 px tall on desktop) is easy to read and click; a compact row (about 32 px) lets experts see more. Products for professionals (Linear, spreadsheets, finance tools) often offer a density setting. On touch screens, keep tap targets at least 44 pt even if the visual row is dense.
Lab: fix the table
Client
Invoice
Amount
Days late
Turn the fixes on one at a time and try to answer: "which client owes the most?" and "who is most overdue?". Scroll inside the table with and without the sticky header. Notice that the biggest single improvement is right-alignment with fixed decimals.
Emphasis inside tables
Tables have their own layering. Make the column people scan to find a row (usually a name) easy to read, and the key value column slightly heavier. Highlight exceptions with weight or a small marker plus colour, not by colouring entire rows, which shouts. Separate totals from data with a heavier rule above the total row and bold figures. Keep header text short and muted; it's a label, not the content.
A heatmap table (cells tinted by value with a single-hue scale) can add a pre-attentive layer to a dense table of comparable numbers, such as a cohort retention table. Use it only when every coloured cell is the same kind of quantity, and keep the numbers visible on top.
Don't
A spreadsheet grid. Boxes everywhere, numbers centred with mixed decimals, a whole row painted red.
Do
Quiet structure, loud exception. One header rule, faint row lines, aligned figures, and only the overdue value marked.
For the solo creator
Most of this is five lines of CSS you write once: td.num { text-align: right; font-variant-numeric: tabular-nums; }, a header rule, row borders in your rule colour, and no vertical borders. Put it in your base stylesheet so every table in your product, including admin pages and emails, starts right.
Do
Right-align numbers and their headers; left-align text.
Use fixed decimals and tabular figures in numeric columns.
Use the lightest row separation that works; thin rules by default.
Put units in headers and totals under a heavier rule.
Mark exceptions in the cell, with more than colour.
Don't
Centre numbers.
Draw vertical gridlines or boxes around every cell.
Colour entire rows to flag one value.
Use ALL CAPS headers in heavy weight that outshout the data.
In the wild
Linearissue lists
Dense, quiet rows with very light separators, left-aligned titles and small right-side metadata, plus display options for grouping and ordering. Density works when separators are quiet and alignment is strict.
Bank statements in banking appstransactions
Good ones right-align amounts and distinguish debits and credits with a sign and colour, so a column of spending is scannable. Sign plus alignment plus colour, never colour alone.
Wikipedia data tablessortable tables
Many tables are sortable by clicking headers, with numbers right-aligned in the better-edited ones. Sorting turns a table into many tables.
Common mistakes
Text-aligned numbers
The default for table cells is left alignment.
A numeric class for cells and headers in your base CSS; use it everywhere.
Zebra on short tables
Zebra striping looks "designed".
Under about 8 rows or 4 columns, use thin rules or whitespace; save zebra for wide tables.
Every column equal
Columns are generated from the data model.
Order columns by importance: identifier first, key value next, metadata last; give the key value the weight.
Check yourself
A subscriptions table has columns Name, Plan, Price, Renews. Users mostly want to find what costs the most. Which change helps most?
Alignment makes magnitude visible, and sorting answers "most expensive" directly. Zebra (a) and bold headers (b) don't help compare prices; centring (c) makes it worse.
Exercise 11.1 40 minutes · on your own product
The table pass
Find every table (or list with numeric columns) in your product, including admin and email.
Apply alignment, decimals, tabular figures, units in headers, thin rules, and remove vertical lines.
Decide row density for each based on who uses it and how often.
Mark exceptions in-cell with a symbol plus colour.
Time yourself answering one lookup question before and after.
You're done when: your base CSS has table rules, every table uses them, and you have before/after lookup times.
Beginner
Competent
Strong
Right-aligns numbers in one table.
All tables follow the rules; exceptions marked properly.
Density chosen per audience, totals and grouping handled, measurable lookup improvement.
12
Sorting, filtering and tables on small screens
Taught by Stephen Few, with Luke Wroblewski and Bret Victor
In software, a table is a live object: it sorts, filters, truncates and has to survive a 400px screen. Make every one of those states visible, reversible and honest about what's hidden.
Sorting
Choose a meaningful default sort (most recent, most urgent, largest), not database order. This is Magic Ink again: the default should answer the common question.
Show the active sort with an arrow on the header, and make the whole header clickable. Clicking again reverses; consider a third click to return to default.
Sort numbers as numbers, dates as dates (10 after 9, not before 2) and names with natural ordering (file2 before file10) and locale-aware collation.
Sort sensibly by default direction: numbers usually descending first (largest is most interesting), text ascending.
Keep sorts stable so equal items don't jump around, and remember the user's choice.
Filtering and search
Filtering hides data, which makes it dangerous: people forget a filter is on and conclude something is missing. Show active filters as removable chips above the table, show the count ("Showing 12 of 340"), and offer a single "Clear filters". Filters should apply live as they're changed, without an Apply button, when the data set is small enough (Victor's point about immediate feedback). For text search, highlight matched text in the results so people see why each row matched. An empty filtered result should say what filter caused it and offer to remove it, which is different from a truly empty table (see Structure & Interaction on empty states).
State on the surface. Anyone glancing at this table knows it's filtered, by what, how much is hidden, and how it's sorted.
Truncation
When text doesn't fit, truncate with an ellipsis and give access to the full value (a tooltip on desktop, the detail view on mobile). Truncate in the right place: titles at the end, file names and email addresses in the middle (so "Invoice-2026-…-final.pdf" keeps the distinguishing ending), and never truncate numbers: a number cut short is a different number. Give the most important text column the flexible width and let other columns stay fixed.
Tables on a phone
At 400px a five-column table doesn't fit. Luke Wroblewski's "mobile first" argument (his 2011 book Mobile First) applies directly: the constraint forces you to decide what matters. There are five honest strategies; pick by what people do with the table.
Choose by task. Comparing across columns needs scroll with a frozen identifier column. Reading records needs cards. Finding one item needs a list with detail. Hiding columns is fine if you say how many are hidden and how to see them.
A five-column table at phone width
Client
Invoice
Issued
Amount
Late
Asha Studio
INV-2026-0141
12 Feb 2026
₹12,400.00
3
Nimbus Design
INV-2026-0139
02 Feb 2026
₹980.50
41
Kite Labs
INV-2026-0144
20 Feb 2026
₹22,010.75
12
Nimbus Design₹980.50
41 days late● Overdue
Kite Labs₹22,010.75
12 days lateINV-0144
Asha Studio₹12,400.00
3 days lateINV-0141
Sorted by days late · tap for invoice details
Without: the desktop table squeezed into 360px. Amounts are truncated (a cut-off number is a wrong number), invoice IDs eat space, and nothing is readable.
With: cards for a "who owes me" task. Name and amount on the first line, lateness on the second, sorted by urgency, and the rest one tap away.
For the solo creator
Don't build a generic responsive data-grid. For each table, write the one task it serves on mobile and pick one strategy. Cards and list-plus-detail are easy to build with the same data and a different template. Horizontal scroll with a sticky first column is a few lines of CSS (position: sticky; left: 0 on the first cell) inside an overflow-x: auto wrapper.
Do
Default-sort by what answers the common question; show the sort.
Show active filters as chips with a count and a clear-all.
Truncate text in the right place and never truncate numbers.
Pick a mobile strategy per table, based on the task.
Don't
Sort numbers as text.
Hide a filter's existence once applied.
Shrink the font until the desktop table fits.
Hide columns on mobile without saying so.
In the wild
Gmail and Apple Mailmobile lists
On phones, the desktop columns (sender, subject, date) become a two-line row: sender and time on the first line, subject and snippet below. A table reflowed into a list row is the most common responsive table of all.
Airtable and Notiondatabase views
The same data can be shown as a grid, a list, cards (gallery) or a calendar, with view-specific sorts and filters shown in a toolbar. Separating data from its view lets each task get the right layout.
macOS Finderlist view
Long file names are truncated in the middle in some views, keeping the ending and extension visible. Truncate where the least information is.
Common mistakes
The forgotten filter
Filters persist across sessions but the UI only shows them in a closed panel.
Always show active filters on the surface, with a count of hidden rows.
Lexicographic sorting
Values are stored or compared as strings.
Sort on raw typed values, and use Intl.Collator with numeric option for names.
Squeezed desktop tables
The table was designed at 1280px and "made responsive" with smaller text.
Design the 400px version first for each table's task.
Check yourself
A user says "half my transactions disappeared". The cause: a category filter they set last week is still active, shown only inside a collapsed Filters panel. Best fix?
Making the hidden state visible solves it while keeping the user's choice. Clearing on every launch (a) throws away a deliberate setting; documentation (c) doesn't reach people at the moment of confusion.
Exercise 12.1 45 minutes · on your own product
One table, three states, two widths
Pick your most-used table or list.
Define its default sort from the most common question, and make the sort visible.
Design the filtered state (chips, count, clear) and the empty-filtered state.
Choose a mobile strategy based on the task and build it at 400px.
Check truncation: no numbers cut, text truncated in the right place.
You're done when: screenshots of default, filtered, empty-filtered and 400px states exist and match the rules.
Beginner
Competent
Strong
Mobile version is the desktop table, smaller.
Task-based mobile strategy; filters and sort visible.
Sorting is typed and stable, remembered, and the empty-filtered state offers to remove the culprit filter.
13
Dashboards that answer "so what?"
Taught by Stephen Few, with Ben Shneiderman and Bret Victor
A dashboard is a single screen that lets someone check, at a glance, whether things are as they should be. Decide whether it's for monitoring or analysis, put the summary first, keep normal quiet, and make every element lead to a decision.
Stephen Few's Information Dashboard Design (2006) defined a dashboard, roughly, as a visual display of the most important information needed to achieve one or more objectives, fitted on a single screen so it can be monitored at a glance. Each part of that definition is a design constraint: most important (so choose), objectives (so tie each element to a goal), single screen (so no scrolling to find problems), at a glance (so pre-attentive encoding of what's wrong).
Monitoring or analysis?
Monitoring dashboard
Analysis tool
Question
Is everything OK? What needs me now?
Why did this happen? What's the pattern?
Visits
Often, briefly
Occasionally, for a long time
Design
One screen, summary, exceptions highlighted, few controls
Most product dashboards fail by being half of each: too many controls to glance at, too little depth to analyse. Build the monitoring view first, and link from each element into a dedicated analysis view. That's Ben Shneiderman's "visual information-seeking mantra" (1996): overview first, zoom and filter, then details on demand.
Summary before detail. Read top to bottom: the verdict, the vital signs, the trend, and the short list of things to act on. Everything normal is quiet.
Normal is quiet, exceptions are loud
A dashboard where everything is coloured has nothing highlighted. Encode status by exception: normal values in neutral ink, attention values with a warm colour plus a symbol, critical with a strong colour plus a symbol and text. Never rely on red and green alone (about 1 in 12 men has some form of colour-vision deficiency). Few criticised the traffic-light habit, where every metric gets a red, amber or green dot: when twenty dots are green the one amber is lost, and the dot says nothing about how far off target a value is.
Few also designed the bullet graph as a compact replacement for dashboard gauges and meters. A gauge spends a large circle of space to show one value on an angle (a low rung). A bullet graph is a single bar (length, a high rung) over a few shaded bands for qualitative ranges (poor, OK, good), with a short line for the target. It fits in a table row.
Don't
A gauge. A big circle for one number, read by angle; the target is unclear and it can't sit in a row with others.
Do
Bullet graphs. Length on a shared scale, target marked, ranges in quiet bands, three metrics in the space of one gauge. The one problem is flagged.
Density done right
Calm is not the same as sparse. A good dashboard can be dense, because it's organised: aligned grid, consistent chart forms, shared scales, quiet chrome, and a clear reading order. Few lists common dashboard mistakes, including exceeding a single screen, giving inadequate context for the numbers, excessive detail or precision, choosing poor measures, meaningless variety of chart types, cluttering with decoration, and misusing colour. Notice that "too much data" isn't the problem; "too little thought about which data" is.
The "so what?" test: for each element, finish the sentence "If this changes, I will…". If there's no action, it belongs in an analysis view or nowhere.
Checklist: data display audit for your product
Purpose
Honesty
Encoding and craft
Numbers and tables
People
For the solo creator
Your first dashboard is probably your own: revenue, sign-ups, errors. Make it a monitoring dashboard that fits one phone screen and starts with a sentence ("All normal" or "2 failed payments"). You'll check it daily, so every second of reading time you save compounds. Your analytics tool is your analysis view; don't rebuild it.
Do
Decide monitoring or analysis before designing.
Open with a one-line verdict.
Keep normal values neutral; flag exceptions with colour plus symbol plus text.
Use bullet graphs, sparklines and small multiples to pack context into rows.
Link each element to its detail view.
Don't
Fill the screen with tiles because there's room.
Use gauges, dials or traffic lights for everything.
Mix six chart types for variety.
Put filters and date pickers before any data on a monitoring screen.
In the wild
Status pagesStatuspage-style, e.g. GitHub Status
A one-line verdict at the top ("All Systems Operational"), components listed with quiet normal states, and incidents called out with text. The verdict sentence is the dashboard's first line.
Plausible Analyticssingle-page dashboard
Everything for a site on one scrolling page: top stats, one main chart, then ranked lists (sources, pages, countries), each clickable to filter the whole page. Overview first, filter by clicking the data itself.
Vercel and other deploy dashboardsdeveloper tools
Recent deployments are listed with status in words and a symbol, with failures standing out and successes quiet. Exception-based status in a list.
Common mistakes
The everything dashboard
Every stakeholder (even if it's just you on different days) wants their metric up top.
One dashboard per question. A second screen is cheaper than a confused first one.
All-green walls
Status dots on every item feel thorough.
Show status only for exceptions; normal items get no badge.
Real-time for no reason
Live-updating numbers feel impressive.
Update at the pace decisions are made; show "updated 2 min ago" instead of flicker.
Check yourself
Your admin dashboard has 14 tiles, each with a green, amber or red dot. You keep missing problems. What's the most effective change?
Exception-based design with a verdict sentence surfaces problems at a glance and reduces noise. Bigger dots (b) keep the wall; alerts for everything (c) cause fatigue; a filter (d) adds interaction to monitoring.
Exercise 13.1 60 minutes · your own admin or user dashboard
One-screen monitor
Write the dashboard's objective and decide: monitoring or analysis.
Run the "so what?" test on every element; cut what fails.
Write the rule for the verdict sentence from the data.
Lay it out at phone width: verdict, tiles, one trend, needs-you list.
Run the data display audit checklist above.
You're done when: a one-screen dashboard exists with a generated verdict sentence and passes at least 15 checklist items.
Every element links to detail, bullet graphs for targets, and you've used it daily for a week and refined it.
14
Personal stats, progress and the ethics of the mirror
Taught by Stephen Few, with the designers of Strava, Apple Health and Screen Time, and Amber Case
When the data is about the person looking at it, every chart is also a judgement of them. Design personal stats to inform and encourage, show what's normal for them, treat gaps kindly, and never use the mirror to manipulate.
Small apps often have one data screen: the stats page. A writing app shows words per day; a reading app shows books per year; a habit app shows streaks; a fitness app shows weekly distance. These are dashboards with a twist: the subject is the user, and they have feelings about it. The same bar chart can motivate or shame depending on framing.
Compare to themselves, not to strangers
The most useful comparison for personal data is the person's own baseline: "more than your usual Tuesday", "your longest run this year", "within your normal range". Comparison with others (leaderboards, percentiles) motivates a competitive few and discourages most. Strava handles this by making social comparison opt-in by context (segment leaderboards, clubs) while personal progress (weekly totals, personal records, a year-in-sport summary) is the default view.
Streaks and their dark side
A streak counts consecutive days. It's simple and motivating, and it has a cliff: one missed day resets it to zero, often after weeks of effort, and the user's feeling of the product turns from pride to loss. Products have softened this with streak freezes and repairs (Duolingo is the best-known example). A calmer alternative is a rolling consistency measure ("5 of the last 7 days", "18 of 30") or a calendar of done days, which records effort without a cliff.
Don't (alone)
The cliff. 41 days of effort erased by one day off. Many people quit the habit (and the app) right here.
Do
Consistency without the cliff. A rolling count plus a day grid shows effort honestly and survives a rest day.
Scores, rings and composite numbers
Composite scores (a "readiness" of 74, a "health score" of B+) are attractive because they're one number. They're also opaque: the user can't tell what moved it or what to do. If you use one, show its contributors and how each changed, use plain labels for ranges, and never let the score be the only view of the data. Apple's Activity rings work well because each ring is a single, understandable quantity against a goal the user set, and the goal can be changed.
Open the black box. A score earns trust when it shows what it's made of. "Sleep was 50 minutes short" is actionable; "74" alone is not.
A weekly summary: judgement or information?
You only wrote 3 days this week
Your streak is broken. You wrote 41% less than last week. Don't lose your progress!
A lighter week: 3 writing days, 2,140 words
Your usual is 4–5 days. You've written on 19 of the last 30 days, and your monthly total is on track with last month.
Days without the app count as "no data", not zero.
Without: red headline, loss framing, a percentage drop with no context, and a guilt-driven button. It might drive a session today and a churn next month.
With: the same facts, framed against the person's own normal and a longer window. It informs, and lets them decide.
Quantified-self ethics
Missing data is not a bad day. A watch left on the charger, a phone left at home, a day the app wasn't opened: show gaps as gaps.
Rest is part of progress. Fitness apps increasingly show rest and recovery as positive. Habit apps can allow planned days off.
Let people choose what they see. Weight, calories and some health metrics can be harmful for some users. Offer to hide them, and don't push them in notifications.
Notifications about data are interruptions: send summaries at a predictable time, and let users turn them off. See Honest & Calm.
The data is theirs. Personal data deserves export, deletion, and care about what you collect at all. Amber Case's Calm Technology (2015) argues that technology should require the smallest possible amount of attention; for a stats screen, that means informing when asked and staying quiet otherwise.
For the solo creator
Your stats screen is often the most emotional screen in your product, and the cheapest to make kind. Write the copy for the bad week first. If it's honest, specific and free of guilt, the good-week version will be easy. Then add the personal baseline: "your usual" is just a rolling median of the last 8 weeks.
Do
Compare to the person's own usual range.
Use rolling consistency alongside or instead of streaks.
Show what composite scores are made of.
Treat missing data as missing, and rest as normal.
Let people hide sensitive metrics and silence summaries.
Don't
Use loss framing and red headlines for normal variation.
Rank users against strangers by default.
Use a single opaque score as the main view.
Send guilt notifications based on data.
In the wild
Stravaweekly progress and Year in Sport
The weekly view compares the current week with recent weeks; the annual Year in Sport recap is the celebratory, shareable moment, where illustration and big totals belong. Monitoring and celebration are different surfaces with different rules.
Apple Activity ringsApple Watch, 2015
Three rings against personal goals, which the user can change, with awards for milestones. A simple, legible goal beats an opaque score.
Apple Screen TimeiOS 12, 2018
The weekly report shows a percentage change against the previous week without saying what's normal or good for you, so the same notification can read as praise or reproach. A comparison with no personal baseline invites guilt.
Duolingostreaks
The streak is central, with streak freezes and repairs to soften breaks. Effective at engagement; also a clear example of how much power a single number can have over behaviour.
Common mistakes
Zero-filling missing days
The query returns no row for a day, and the chart draws it as zero.
Distinguish "0 recorded" from "no data"; draw gaps as breaks or hollow cells.
Engagement-optimised stats
Stats that create anxiety bring people back, and retention charts reward it.
Decide what a good outcome is for the user (finishing a book, writing regularly) and measure that, not opens.
Check yourself
A meditation app's stats page shows a 60-day streak and a weekly minutes chart. A user travels for a week without the app. What design best respects them when they return?
A gap is honest, rolling consistency preserves the record of effort, and neutral copy avoids shame. (a) uses loss framing; (b) withholds their own data; (d) conflates "no data" with "zero" and drags the chart down misleadingly.
Exercise 14.1 40 minutes · your product's stats or summary
Write the bad week first
Simulate a below-normal week of data for your product.
Write the stats screen and any summary notification for that week.
Check: own baseline? rolling window? gaps as gaps? no guilt? sensitive metrics hideable?
Then write the good week and the "about the same" week with the same structure.
You're done when: you have three versions (bad, normal, good) of the screen and notification copy that follow the same template.
Beginner
Competent
Strong
Softens the wording only.
Personal baseline and rolling window; gaps handled.
Template generated from data, settings to hide metrics and silence summaries, tested on your own real bad week.
Part four
Beyond charts
Some of the best information design in software isn't a chart at all. A transit map, a calendar, a flight timeline, an explanation you can play with. This last part looks at space and time as information, and at interactivity: when letting people manipulate data teaches them something a static picture can't, and when it just adds work.
15
Maps, timelines and calendars
Taught by Harry Beck, Charles Joseph Minard and Massimo Vignelli, with Edward Tufte
Maps, timelines and calendars are charts whose axes are place and time. Use geography only when location is the question, keep time proportional when duration matters, and always show "you are here" and "now".
Maps: is location the question?
A map is irresistible and often wrong. If the question is "which states have the most users?", a sorted bar chart answers it better: maps put the comparison into colour (low on the ladder) and give visual weight to land area, not to people. A large, empty region dominates a choropleth (a map with regions shaded by value) while a small, dense city disappears. Map when the question is genuinely spatial: where is it, what's near me, how does this spread, what's the route. And when you shade regions, use rates (per 1,000 people), not counts, or every map becomes a population map.
Land doesn't use your app; people do. If location isn't the question, a sorted bar chart ranks regions honestly.
Topology over geography
In 1933 London Underground began issuing Harry Beck's diagram, which threw away accurate geography for a cleaner truth: what connects to what, and in what order. Lines run horizontal, vertical or at 45°; stations are evenly spaced; the crowded centre is enlarged. Riders don't need distances underground; they need sequence and interchanges. Massimo Vignelli's 1972 New York subway diagram took the same approach and was replaced in 1979, partly because New Yorkers, who walk between stations above ground, found its geographic distortions confusing. The lesson for software: choose the abstraction that matches the user's task, and know what you're sacrificing.
Sequence and connections, not distance. The diagram removes what riders don't need so what they do need is unmistakable. Your app's "steps", "flow" and "status" diagrams are the same kind of abstraction.
Minard and the multivariate map
Tufte's most famous example is Charles Joseph Minard's 1869 graphic of Napoleon's 1812 Russian campaign. A band whose width is the size of the army flows from the Polish border to Moscow and back, shrinking from about 422,000 men to 10,000, with a temperature chart along the bottom tied to the retreat. Tufte counts six variables in one picture: army size, two dimensions of location, direction, temperature and dates. Tufte wrote that it may well be the best statistical graphic ever drawn. Its lesson isn't "draw more variables"; it's that when the story is a relationship between variables, show them together on one shared frame so the causes are visible.
Timelines: time proportional, now visible
A list of times ("14:05, 14:40, 16:10") makes people compute gaps. A timeline makes gaps visible. When duration and gaps matter (travel, schedules, deliveries, build pipelines), draw time to scale, mark "now" with a line, and style the past differently from the future (muted vs full). Flight trackers and food-delivery apps use exactly this: a progress line along a sequence of stages, with the current stage emphasised and an estimated time to the next.
Calendars are information design
A calendar's day and week views are charts with time on one axis and days on the other. Good ones draw events with heights proportional to duration, so free time is visible as empty space, and show a "now" line so you know where you are. The month view is a different tool: it's for spotting busy and free days, so it summarises (dots, counts or shading) rather than listing everything. A month grid of shaded days is also the best form for habit and activity data, which is why the GitHub contribution graph and many habit apps use it.
Don't
Times as text. Every row looks the same size; the long free afternoon is invisible.
Do
Time to scale, now marked. The free afternoon is a visible gap, and the red line says where you are in the day.
For the solo creator
You rarely need a map library. Most "where" questions in small products are answered by a sorted list with distances ("2.1 km away") or a static thumbnail. Timelines and month grids, on the other hand, are cheap to build with CSS grid and pay off in any product with dates: habits, journals, invoices, reading logs.
Do
Map only when location is the question; otherwise rank with bars.
Shade regions by rates, with a single-hue sequential scale.
Draw time proportionally when gaps and durations matter.
Show "now" and "you are here".
Use month grids for daily activity data.
Don't
Shade regions by raw counts.
Use rainbow scales on maps.
List times when the question is about free time or gaps.
Style past and future identically on a timeline.
In the wild
London Underground diagramHarry Beck, 1933
Topology over geography, still the model for transit maps worldwide. Abstraction is a design decision fitted to the task.
Google Calendar and Fantasticalday and week views
Events drawn with height proportional to duration and a horizontal line for the current time. Free time becomes visible empty space.
Food delivery and ride appsorder tracking
A stage timeline (ordered, preparing, on the way, delivered) with the current stage emphasised and an estimate, often alongside a live map. A timeline answers "how long?"; the map answers "where?".
Common mistakes
The map because it looks impressive
Maps make dashboards look sophisticated.
Ask whether a user would make a different decision based on where something is. If not, use a ranked list.
Non-proportional timelines labelled as if they were
Evenly spaced dots are easy to lay out.
If spacing isn't to scale, make that obvious (a stepper, not a time axis); if durations matter, scale them.
Check yourself
Your app has users in 30 Indian states. You want to show where usage is growing fastest. Best first choice?
The question is a ranking of rates, so bars or dots answer it. A choropleth of totals (a) shows population and land area; a pie (d) with 30 slices is unreadable.
Exercise 15.1 40 minutes · on your own product
Draw time
Find any list of dated items in your product (log, history, schedule, orders).
Decide what question it answers: when, how long, how often, what's next.
Redraw it as a proportional timeline or a month grid, with "now" marked and past styled differently.
Check at 400px; on narrow screens, time usually runs vertically.
You're done when: one dated list has a time-based view that answers its question faster than the list did.
Beginner
Competent
Strong
Adds dates as headers to the list.
Proportional timeline or month grid with now marked.
Both list and time views exist, switchable, with the view remembered.
16
Explorable explanations and interactive restraint
Taught by Bret Victor, with Nicky Case, Vi Hart and Hans Rosling
Interactivity earns its place when it lets people ask "what if?" and see the answer immediately. Make the default view tell the story, let interaction deepen it, and never hide the main point behind a hover.
Chapter 1 argued that interaction is a cost in information software. Bret Victor's 2011 essay "Explorable Explanations" is the other side of the coin. He describes reactive documents, where the numbers in a text can be adjusted (by dragging them) and the conclusions update, so the reader can test the author's assumptions instead of trusting them. He built a small JavaScript library, Tangle, for exactly this. In "Up and Down the Ladder of Abstraction" (also 2011) he showed how controlling a parameter and seeing a whole family of results builds intuition that a single example can't.
The interaction here isn't navigation or querying. It's direct manipulation of the model: change an input, see every consequence at once. That's the kind of interactivity that teaches.
Lab: a reactive sentence
If you read pages a day, on days a week, and books average pages, you'll finish about books a year: one every .
Drag the numbers inside the sentence. The conclusion and the row of books update at once. Try finding how many pages a day you'd need for 24 books a year. That search, done by feel, is what Victor means by building intuition.
Examples worth studying
Nicky Case and Vi Hart's Parable of the Polygons (2014) turns Thomas Schelling's segregation model into a playable story: you move shapes, and see how small individual biases produce large-scale segregation. The New York Times Upshot's "You Draw It" (2015) asked readers to draw their guess of a trend before revealing the real data, so the gap between belief and fact was felt, not just read. Hans Rosling's Gapminder talks (his 2006 TED talk is the famous one) animated bubble charts of income and life expectancy over time, with Rosling narrating the story the motion showed. Bartosz Ciechanowski's long interactive articles (on mechanical watches, GPS, cameras) let you rotate and adjust working models of each idea.
Climb only as high as the question needs. Every rung rests on rung 0: the view people see with no interaction must already tell the main story.
Restraint: rules for interactive data
The default view tells the story. Most people won't interact. Analytics on news graphics have repeatedly suggested that only a minority of readers touch the controls, so anything hidden behind interaction is missed by most.
Tooltips are not labels. If a value matters, label it. Use tooltips (or taps) for the secondary details.
Hover doesn't exist on touch. Every hover interaction needs a tap equivalent, and a tap shouldn't be the only way to read critical information.
Immediate feedback. Inputs update the view as they change, with no Apply button, so cause and effect stay connected.
Keep the reference visible. When a parameter changes, show the original (a ghost line, the default value) so people see the difference, not just the new state.
Make state shareable and resettable. A reset button and, on the web, the state in the URL.
Accessible by keyboard and screen reader. Sliders with labels and values, and a text summary that updates (see Accessible & Inclusive).
Don't
Interaction as a substitute for design. On touch screens, and for most readers, this chart says nothing.
Do
Story first, details on demand. The static view answers the question; tapping adds precision.
For the solo creator
A what-if control is one of the most delightful things a small product can offer: a pricing page where you drag your team size and see the cost, a savings app where you drag the monthly amount and see the date you reach your goal, a reading app that shows when you'll finish this book at your current pace. One slider, one live sentence, one small chart. It's a weekend of work and it makes the product feel thoughtful.
Do
Use interaction to let people test "what if?" against a model.
Tell the main story in the default, static view.
Update instantly and keep the original visible for comparison.
Give every hover a tap equivalent and every slider a label and value.
Don't
Hide key values in tooltips.
Add filters and toggles to a monitoring view.
Animate transitions so long that cause and effect separate.
Build interaction you haven't watched a person use.
In the wild
Parable of the PolygonsNicky Case & Vi Hart, 2014
A playable explanation of how small biases add up to segregation. Manipulating the model teaches a counter-intuitive result better than any chart.
"You Draw It"The Upshot, New York Times, 2015
Readers draw their guess of a trend line before the real data is revealed. Asking for a prediction makes the true answer memorable.
GapminderHans Rosling, TED 2006
Animated bubble charts of countries' income and life expectancy over two centuries, narrated live. Animation works for change over time when someone tells you what to watch.
Bartosz Ciechanowskiinteractive essays
Long-form articles with dozens of small manipulable models, each controlling one idea. Many small, focused interactions beat one big dashboard of controls.
Common mistakes
Interactivity as a feature checkbox
Interactive charts feel modern and libraries make them easy.
Ask what the reader will learn by interacting that they can't see in the static view. If nothing, ship the static view.
Losing the reference
The chart redraws completely when a parameter changes.
Keep a ghost of the default state so the change itself is visible.
Check yourself
You're adding a chart of "time to reach your savings goal" to a budgeting app. Which design best fits this chapter?
This is a what-if question, where a reactive document shines: immediate feedback, the conclusion in words, and a visible reference. The form (b) separates cause and effect; tooltips (c) hide the answer.
Exercise 16.1 90 minutes · build it
One reactive sentence
Find a "what if?" question your users have (cost, time to goal, finish date, capacity).
Write the answer as a sentence with one to three adjustable numbers.
Build it: sliders or draggable numbers, a live conclusion, and a small chart with the default kept as a reference.
Make it work with keyboard and screen reader (label, value, live text).
Watch one person use it without explanation.
You're done when: a working reactive sentence exists in your product or a prototype, and you've noted what one person did with it.
Beginner
Competent
Strong
A slider updates a number.
Live sentence plus chart with reference; accessible.
Shipped, state shareable, and the observation led to a change.
Part four recap · connect the ideas
How do chapter 1 ("interaction is a cost") and chapter 16 ("explorable explanations") fit together?
Victor wrote both. Navigation and queries make people tell the computer what it could infer. Manipulating a model with immediate feedback is the opposite: the computer shows everything that follows from a choice. The same idea links to direct manipulation in Structure & Interaction.
Wrap-up
Ten things to remember
Most software is information software. Design the answer first; interaction is the last resort.
Every mark should carry information. Erase frames, shadows and 3D; keep what helps reading.
Decoration can help memory for one-off stories, but never at the cost of distorting size.
Bars and areas start at zero. Lines may zoom to a meaningful range. Rates beat counts when groups differ.
Position beats length beats angle beats area beats shade. Put the key comparison high on the ladder.
Choose the chart from the question: compare, rank, change, before/after, part, distribution, relationship, pattern.
Title with the finding, label directly, grey the rest and highlight one, sort, and bank to 45°.
Format numbers for the reader: locale grouping (lakh and crore), sensible precision, units, points vs percent.
Tables: numbers right with tabular figures, text left, quiet rules, visible sorts and filters, a deliberate mobile strategy.
Dashboards and personal stats: summary first, normal quiet, exceptions loud, compare people to themselves, and never shame.
Self-assessment: I can…
Practice assignment for the next two weeks
The goal: every number in your product is honest, formatted and in context, and you have one data surface you're proud of.
Days 1–2: Audit. Run the data display audit checklist (chapter 13) on your whole product. Screenshot every number, chart and table. Rank the problems by how often users see them.
Days 3–4: Foundations in code. Build the number formatter (Exercise 9.1), the base table CSS (Exercise 11.1) and a chart wrapper with clean defaults and a zero baseline for bars (Exercises 2.1 and 3.1).
Days 5–6: Context. Add a sparkline component and put context next to three numbers (Exercise 4.1). Redesign your stat tiles (Exercise 10.1).
Days 7–9: The main data screen. Redesign your stats page or dashboard: question first, the right chart for each question, crafted with the eight details, a generated title and verdict, and the bad-week copy written first (Exercises 7.1, 8.1, 13.1, 14.1).
Days 10–11: Small screens and time. Give your most-used table a 400px strategy (Exercise 12.1) and give one dated list a timeline or month view (Exercise 15.1).
Days 12–13: One what-if. Build a reactive sentence for one real user question (Exercise 16.1).
Day 14: Review. Show the before and after of your main data screen to two people for five seconds each and ask what it says. Write a short note on what you changed and what you learned, and file it with your portfolio (see The Solo Practice).
Reading list
The Visual Display of Quantitative Information
Edward Tufte, 1983 (2nd ed. 2001) · The source of data-ink, chartjunk, lie factor and small multiples. Read it with the critique from chapter 2 in mind.
Envisioning Information and Beautiful Evidence
Edward Tufte, 1990 and 2006 · Layering and separation, micro/macro readings, and sparklines. Visual Explanations (1997) completes the set.
Magic Ink: Information Software and the Graphical Interface
Bret Victor, 2006 (essay, worrydream.com) · The case for designing information software as graphics, with context replacing interaction. The most important essay in this guide for a software designer.
Explorable Explanations and Up and Down the Ladder of Abstraction
Bret Victor, 2011 (essays) · Reactive documents and building intuition by manipulating models.
Graphical Perception
William Cleveland & Robert McGill, Journal of the American Statistical Association, 1984 · The experiments behind the perceptual ranking. Pair with Heer & Bostock's 2010 CHI replication.
Semiology of Graphics
Jacques Bertin, 1967 (English 1983) · The original vocabulary of visual variables. Dense; skim for the variables and their properties.
Show Me the Numbers and Information Dashboard Design
Stephen Few, 2004/2012 and 2006/2013 · The most practical books on tables, graphs and dashboards; bullet graphs come from here.
The Functional Art and How Charts Lie
Alberto Cairo, 2012 and 2019 · Design thinking for graphics, and a calm guide to how charts mislead (and how to read them).
The Wall Street Journal Guide to Information Graphics
Dona Wong, 2010 · Short, rule-based and practical: what to do with bars, lines, pies, tables and numbers. Good desk reference.
Storytelling with Data
Cole Nussbaumer Knaflic, 2015 · Declutter, focus attention, and title with the point. The fastest route to better everyday charts.
Useful Junk? The Effects of Visual Embellishment on Comprehension and Memorability of Charts
Scott Bateman et al., CHI 2010 · The study that complicates "maximise data-ink". Read the abstract and results.
Fundamentals of Data Visualization
Claus O. Wilke, 2019 (free online) · A modern, well-illustrated survey of chart forms, colour and common pitfalls, with examples labelled "ugly", "bad" and "wrong" next to better versions.
Visual Vocabulary
Financial Times graphics team · A one-page chart chooser organised by the relationship you want to show. Print it.