Problem
The panel has nothing in it. The viewer can’t tell whether that means nothing happened, something broke, or they never finished setting it up, and those three call for completely different responses.
Solution
Say which kind of empty this is, then say what to do about it.
NN/g frames the job as three things: communicate system status, provide learning cues, and give a direct path to the key task. On a dashboard the first one carries most of the weight, because a dashboard’s empty state is a factual claim about the world, and it’s frequently wrong.
The distinction that matters here and rarely comes up elsewhere: no data is not zero. A panel showing 0 errors and a panel whose query returned nothing look nearly identical and mean opposite things. One says the system is healthy. The other says you can’t tell. Grafana treats this as a first-class problem on its alerting side, where No Data is its own state with four possible mappings—Set No Data state, Set Alerting state, Set Normal state, Keep last state—and the default refuses to call it normal, creating a DatasourceNoData instance instead. The panel side of the same product is less careful. The “No value” standard option defaults to a hyphen.
Use when
Always. Every container that can be empty will be empty for somebody, usually on their first day, and usually at the moment they’re deciding whether the tool works.
Don’t use when
Never skip the state. Do skip the illustration. A dashboard someone opens forty times a day shouldn’t spend viewings five through forty on a friendly graphic explaining a condition they already understand.
Trade-offs
Empty states get written once, by someone who knows exactly why the container is empty, and read by someone who doesn’t. They age badly: the copy names a button that was renamed two releases ago, or an integration that no longer exists. And the well-meaning versions absorb real failures. A query that errored, a permission the viewer doesn’t hold, and a genuinely empty result all end up behind the same cheerful “Nothing here yet”, which converts a fault into a shrug.
Checklist
- Which empty is this: never configured, configured but no data yet, filtered down to nothing, or failed?
- Does the copy distinguish “no data” from “zero”, and would the viewer read it correctly at a glance?
- If a filter caused it, does the state name the filter and offer to clear it?
- If a time range caused it, does it say the range? “No records for the selected date range” answers a question a blank panel leaves open.
- Is there exactly one obvious next action, and does this viewer have permission to take it?
- What does this look like on the fortieth viewing rather than the first?
- Can an error ever land here instead of in an error state?
- Does the empty state occupy the space the content will, so the layout doesn’t jump when data arrives?
- Is it real text a screen reader can reach, or a background image?
- Who owns this copy when the thing it references gets renamed?
Compare
Grafana is two products on this question. Its alerting side treats No Data as a state you have to consciously map, with four options and a default that won’t call missing data healthy. Its panel side renders a missing value as a hyphen, which on a wallboard ten feet away is a dash that tells the viewer nothing. Sentry makes the empty project be the install flow, putting the DSN and the snippet on the page, on the reasonable bet that a project with no events is a project nobody has wired up yet. Honeycomb is query-first, so an empty result leaves the query builder in place and the state implicitly reads “your query was fine and matched nothing”, which is a different and more useful claim than “there is no data here”. Netdata mostly sidesteps the first-run version by auto-discovering what’s running on the node, which moves the empty state up a level: the question becomes whether the agent is connected, not whether a chart has data.
Related
Loading state is the frame immediately before this one, and confusing the two is the most common bug in the family. Error and stale state is the sibling that should be catching what empty states wrongly absorb. Freshness indicator answers “as of when”, which an empty panel makes urgent. Filter bar is the usual cause. Data source badge says where the nothing came from.