SemAgent Team · 2026-09-04 · 6 min read
Short answer: if a ratio has a denominator of zero, that ratio does not exist — it is not 0%. A panel that says “0% satisfaction” does not mean your customers are unhappy; most of the time it means nobody voted. Showing both in the same box is the quietest lie a product panel can tell.
This post is the five rules we held ourselves to while building our own panel. All five are implemented; nothing here is a promise about the future.
The classic mistake: you compute positive / total, total happens to be zero, the result is 0, and a red 0% lands on the screen. The user reads it as a measurement. No measurement was made.
The fix is to not compute the ratio when the denominator is zero and to say “no data yet” instead. Our endpoints return null rather than a number in that case, and carry a separate “is there data” flag per block; the panel then says plainly that there is nothing to show. It sounds like a detail — until a customer in their first week sees “0% satisfaction” about their own assistant.
“88% of answers were positive” is an incomplete sentence. You cannot interpret it without knowing how many answers were voted on: if 145 of 1,240 answers got a vote, that 88% is telling you something about 12% of the answers.
So we show the share of answers voted on as its own measure, right next to the positive rate. Putting the size of the sample beside a good number does not weaken it — it makes it usable.
If there is a date range picker at the top of a page, users reasonably assume all the numbers belong to that range. In most panels they do not: one metric comes from the last 7 days, another from all time.
There are two honest options: actually compute everything over the selected range, or print each card's own window next to it. We did the second, and wrote under the picker exactly what it governs: the range only changes the conversation count and the question mix; resolution and escalation are the last 7 days; satisfaction is all time. Letting a picker look like it governs a number it does not is the same category of error as showing the wrong number.
The most tempting moment in panel design is a line that looked great in the prototype: “3 questions found no source”, “41 documents are unused because of a closed folder”. The problem is that some of those lines have no data behind them — nobody ever measured it.
We removed those lines rather than filling them with an estimate. A panel row is a promise: it says “I know this”. If you do not know, leaving it out beats making it up. The same principle governs the widget: the assistant does not invent something that is not in the knowledge base — it says it could not find it.
The audit log is the clearest example. An empty list has two possible causes: nothing was done, or nothing was being recorded yet at that time. If the user cannot tell those apart, an empty screen reads as “your account is fine”.
The fix is simple: have the screen say when recording started. Ours prints that above the list — “older actions were not skipped, they were not recorded”.
Because a panel exists to make people decide. A wrong number is not just wrong information; it causes wrong work — you chase a problem that does not exist, or miss one that does. An assistant that does not invent and a panel that does not invent are two faces of the same discipline.
If you want to see what it looks like in practice, every one of these pages now carries a picture of the screen itself: Answer Review (votes and coverage), Reports (windows) and Audit Log (what an empty list means).
Start a 7-day free trial — card required, test it with your own content in 5 minutes.
Try free