Four questions a designer brought to silent crit about an "explain this chart" moment, the loading-state trap he called out himself, and how a crit became a convergence board.
Four questions came to Thursday’s silent crit from a designer working on a small AI moment in our analytics: a button on a report that explains the chart you’re looking at, what’s driving it, and what else is worth knowing. The larger vision on that team is something closer to an advisor you can ask anything about your numbers, and he was clear that this is nowhere near that. It’s the scoped version, and a build day the week before pulled it forward from months out to soon, which is why the questions were practical ones. I’m sharing them because every one of them applies to any team adding an AI moment to an existing screen.
-
The name. “Explain this” is friendlier; “Analyze” is more accurate. My take is that the name is a promise about depth. When the answers are deliberately surface level and designed to point you to the next place to look rather than claim a cause, “explain” is the right word. Save “analyze” for the day it earns it.
-
The loading state. He laid out 3 options: shimmering status text (“looking at your data,” “comparing to last month”), a plain loading indicator like the general-purpose chat products use, or the illustration our other AI moments already use. Then he called out the trap himself, which is the reason this write-up exists. The shimmering status text was designed for multi-step agent work, where the system really is doing 4 things in sequence and the text is true. This is a single prompt that returns in 4 or 5 seconds. Status text on a single call is theater. A loading state is a promise about what’s happening behind it, and for 5 seconds of one call the promise should be small: a spinner, or the same illustration the rest of our AI moments use so it reads as the same family. Consistency with the existing AI patterns is the whole first phase; the content is where the actual problem lives, and he said as much.
A loading state is a promise about what’s happening behind it. Five seconds of a single call doesn’t earn a progress narrative.
-
Follow-ups under a budget. The feature is free while it’s being learned from, which means the number of follow-up questions a person can ask is constrained by cost. Option A was a finite chain of follow-ups that simply runs out, designed so the person never hits a “you’ve been cut off” wall. Option B, from a peer in the room, was to put more depth into the first response behind accordions, progressive disclosure, so fewer follow-ups are needed in the first place. I lean B with a little A. Cost constraints are a design input, and the strongest design puts the depth where it’s cheapest, in the response you’ve already paid for, instead of rationing a conversation.
-
Skimmability. How to format the response so a first-time analytics user can scan it. He had the right instinct here too: the applied AI engineers are building evals with the PM on what a good answer looks like, and the UI can stay consistent with what’s already in the product while that gets figured out. The container is not the hard part.
It’s worth calling out what happened next, because it was the most useful 10 minutes of the crit. We have several efforts touching the same assistant pattern right now, on different squads, and the first presenter that day had asked the room to help lock a top navigation for his assistant. I asked everyone with a sibling screen to drop it into the same FigJam, so we could use the crit to see what’s new, what’s different, and what aligns. A silent crit is a feedback instrument by default. It becomes an alignment instrument the moment you ask the room to bring the cousins.