How an urgent answer gets flagged
A weekly summary is the right speed for most feedback. It is exactly the wrong speed for the customer who just wrote “third time the order was wrong, I’m done, cancel my account.” That answer can’t wait five days to show up in a tidy theme. So every answer, the moment it lands, runs a quick urgent check — and anything that trips jumps the whole queue and goes straight to a human. This post walks through what the check looks for, what happens when it fires, and why a real person, not the system, decides what to do next.
Key takeaways
- Every answer runs a quick urgent check at intake — a small, cheap Claude Haiku 4.5 call.
- It looks for an angry customer, a threat to leave, a safety or legal concern, or a callback request.
- If it trips, the answer is sent to a human within a minute via SNS — email or Slack.
- The system only flags and routes; the human decides what to actually do.
- Every flag is logged, and the week’s flags are appended to the weekly summary too.
Three outcomes of the urgent check
The check itself: one small call at intake
When an answer lands — from any of the three lanes in Part 2 — the intake runs a single Claude Haiku 4.5 call before the answer settles in the store. The prompt is short and the rules doc supplies the definition of urgent, so the business can tune it: “Read this survey answer. Does it need a human today? Answer urgent, callback, or normal, and give a one-line reason. Urgent means an angry customer, a threat to cancel or leave, a safety or legal concern, or anything that reads like a complaint that will escalate. Callback means they asked to be contacted but it isn’t a crisis. Otherwise, normal.” It’s Haiku, not Sonnet, because this runs on every answer and the judgment is a simple sort, not an essay — the cheap model is both fast enough and good enough.
The check looks only at the one answer in front of it. It doesn’t need the embeddings, the clusters, or the rest of the week — it’s a fast triage at the door, deliberately kept separate from the slow, thorough grouping that happens later.
Outcome 1: notify now
If the answer trips the urgent bar, the analyzer publishes it to an SNS topic immediately. SNS fans the message out to whoever the rules doc named as on-call — an email address, a Slack channel, or both. The message carries the full answer text (not a summary — the human needs the real words), the one-line reason it tripped, the survey and date it came from, and any rating. The whole path from “answer lands” to “phone buzzes” is well under a minute. The answer is still stored and still grouped into a theme the following week; flagging it urgent doesn’t pull it out of the normal picture, it just adds a fast lane on top.
Crucially, the system stops there. It does not reply to the customer, does not offer a refund, does not promise anything. It hands a real person the words and the reason and gets out of the way. The most expensive mistake a feedback system can make is auto-answering an angry customer with something tone-deaf, so this lane is flag-and-route only — a human owns every word that goes back.
Outcome 2: callback queued
Plenty of answers ask for contact without being a crisis — “could someone call me about my account?”, “happy to chat more if useful.” Paging the on-call person for those would train them to ignore the alerts, which is the worst outcome of all. So a callback answer goes onto a short list that the on-call person clears once a day rather than firing an instant alert. It’s the middle speed: faster than the weekly summary, calmer than a page. The answer is stored and grouped as normal too.
Outcome 3: normal
The common case. Most feedback is ordinary — a compliment, a small gripe, a suggestion — and nothing needs to happen today. The answer simply waits in the store for the weekly grouping pass, where it becomes part of a theme and a count. No alert, no queue, no noise. Keeping this the default is what makes the urgent lane trustworthy: because the bar is set so that most answers are normal, an alert actually means something when it fires.
Why a human always decides, and why every flag is logged
Two design rules hold this lane together. First, the system never acts on the customer’s behalf — it surfaces and routes, and a person decides what to do. That keeps the analyzer firmly in “read-only” territory: it can’t send a bad reply because it can’t send a reply at all. Second, every outcome — urgent, callback, or normal — writes a row to the sa-flags table with the timestamp, the answer id, the outcome, the reason, and who was notified. That log is what lets you tune the rules (“we’re getting paged too often — tighten the definition”), prove a complaint was seen the day it arrived, and append the week’s flags to the bottom of the summary so the slow and fast lanes meet in one place.
Next post: the cost breakdown. The whole pipeline above — embeddings, a weekly grouping pass, a per-answer urgent check, and one summary — runs in coffee-money territory at SMB volume; Part 6 explains exactly where the dollars go.
All posts