Problem
People scanning many items need to find those requiring attention before reading every value.
Solution
Define a small set of status colors and use each one consistently. Keep those colors distinct from decorative accents or category identities where confusion is likely.
Pair every status with a word, icon, shape, or position so color is not the only cue. Check contrast and legibility in every supported theme.
Keep the rules behind the statuses visible and maintained. Show unknown or missing data separately from a healthy result.
Use when
People need to prioritize items by their current condition.
Don’t use when
The quantity is continuous and the magnitude matters. Reducing latency to amber loses the difference between 210ms and 900ms. Use colour for state and let a number or a bar carry the amount.
Trade-offs
Threshold colors can make nearly identical values appear categorically different. Familiar color meanings may vary between products or audiences. Persistent warnings lose prominence, especially when their underlying rules are outdated.
Checklist
- How many states, and is the set closed and written down?
- Does any of these colours also appear decoratively or as a series colour on the same page?
- Is there a non-colour signal for every state—icon, shape, label, position?
- Do the colours meet contrast requirements against both light and dark backgrounds?
- Has the palette been checked against the common colour vision deficiencies?
- Does saturation or weight distinguish severity, or are warning and critical equally loud?
- Where are the thresholds defined, and who can change them?
- What does “unknown” or “no data” look like, and is it distinct from healthy?
- Does the same colour mean the same thing across every page in this product?
- Is anything permanently coloured, and has anyone noticed?
Compare
Grafana attaches colour to thresholds as a field property, so status colour is derived from a rule rather than set by hand, and the same thresholds drive the stat panel, the gauge, the table cell and the state timeline. That consistency is the strongest argument for defining status colour at the data layer rather than the panel layer. Sentry encodes severity levels on the event rather than on the display, so colour follows the data into lists, alerts and digests. Datadog ties colour to monitor state, meaning what you see is what would page someone, which keeps the page and the alerting honest with each other. Public status pages typically run three states and always pair colour with a word, because their audience is unknown and cannot be assumed to share any convention.
Related
Grayscale with alerts limits competing color. Threshold line shows a status boundary. Status history applies states over time.
Red/green direction coloring shows movement instead of health. Header KPI strip uses status to guide the first scan.