Problem
Someone committed to a number. The viewer needs to know how far along they are and whether that pace gets them there, and the current value alone answers neither.
Solution
Few designed the bullet graph for exactly this, explicitly to replace the gauges and meters that were eating dashboards. It is linear, it is small, and it carries four things at once: the featured measure as a bar, a target as a perpendicular marker crossing it, qualitative ranges as bands behind it, and optionally a comparative measure like the same figure a year ago.
The detail in Few’s spec that most implementations skip: encode the qualitative ranges as intensities of a single hue rather than distinct colors, dark for poor through light for good. Three bands in red, amber, and green is the version everyone builds and it fails for colorblind readers, who then have three indistinguishable grey bands and no fallback. Same information, one hue, works for everybody.
The second thing that separates a real progress display from a filled rectangle is pace. Being 60% of the way to a quota is good in week eleven and catastrophic in week fifty. A progress bar that doesn’t encode expected-progress-by-now is showing the viewer half the question. Error budget displays get this right by construction, because burn rate is the whole point.
Use when
There is a real, agreed target, and the gap to it is actionable. Quota attainment, SLO budget, campaign pacing, capacity against a limit.
Don’t use when
The “target” is decorative. A progress bar against a number nobody committed to is a bar chart with extra implication, and it teaches viewers to ignore the ones that matter. Also don’t use it when the metric has no meaningful ceiling; progress toward infinity is just a value.
Trade-offs
Progress displays compress time out of the picture. They say where you are, rarely how fast, and almost never whether the rate is enough. They also invite gaming, because the moment a bar is on a wall someone starts optimizing the bar. Fixed targets go stale quietly, and a bar sitting at 140% for a quarter is a sign the target was wrong, not that the team is winning. And the bar’s full width implies the target is the maximum, which is wrong for anything that can and should overshoot.
Checklist
- Who set this target, when, and is it still the right one?
- Is expected progress by now shown, or only progress to date?
- What happens visually past 100%, and is overshooting good here?
- Are the qualitative bands encoded as intensities of one hue rather than red/amber/green?
- Would a colorblind reader get the same reading as everyone else?
- Is the target a line the eye can locate precisely, or a color boundary it has to estimate?
- Does the bar start at zero, and if the range doesn’t, is that labelled?
- Is the underlying number visible, or only the proportion?
- If this is a budget being consumed, does the display show burn rate as well as balance?
- What does it show before the period starts, and after it ends?
Compare
Grafana’s bar gauge is the closest thing in the category and stops short of a bullet graph: thresholds color the bar itself rather than sitting behind it as ranges, so the qualitative context and the measure share one channel instead of two. Honeycomb frames the same pattern as error budget rather than progress, showing what’s left and how fast it’s going, which answers the pace question the generic progress bar drops. Tableau ships Few’s bullet graph as a built-in, which is why it’s the version most analysts have actually seen. Netdata largely skips targets, on the position that a per-second chart with a threshold line already says everything a progress bar would.
Related
Gauge is the pattern Few built this one to replace, and the entry there covers when the radial version survives. KPI tile is the smaller container that shows the value without the distance. Metric targets is where the goal gets defined in the first place, and it’s usually the thing that’s actually broken when a progress bar misleads. Threshold line puts the same idea on a time axis. Semantic status color governs the bands.