A feedback follow-up router on AWS for a few dollars a month
Most small businesses that run a satisfaction survey do the hard part — asking — and then do nothing with the answers. The scores go into a spreadsheet, somebody looks at the average once a quarter, and the person who scored two out of ten and wrote a paragraph about a missed delivery hears nothing at all. This post walks through a small system whose only real job is making sure that person hears something within the hour.

Key takeaways
- An unhappy score reaches a person within the hour, with the order and history attached.
- Speed matters more than wording. A fast short reply beats a slow considered one.
- The rest are grouped into themes on a fixed list, so trends mean something.
- It never writes the reply. A generated apology is worse than a short human one.
- Designed on AWS for about $2 a month.
The whole system on one page
Before any code, here is the shape of what we are designing.
- Analytics
- Front-end & mobile
- People
Speed over wording
The observation this design rests on is that response time dominates almost everything else about a follow-up. Three honest sentences within an hour of a complaint produce a materially different outcome from a carefully composed paragraph four days later, and the difference is not close.
So the design optimises entirely for the hour: the routing is immediate, the context is pre-gathered so nobody has to go looking, and the reply is short because it is written by somebody who has ninety seconds rather than an afternoon.
What runs (the inside)
- The receiver. Takes responses from wherever the survey runs, matches them to a customer, and records the score and comment. Part 2 covers matching and the responses that arrive anonymously.
- The router. Decides urgency from the score first and the comment second, and sends the urgent ones immediately. Part 3 is about why the score alone is not enough.
- The context gatherer. Attaches the last order, the delivery outcome, any open ticket and whether they have complained before. Part 4 is entirely about this, because it is what makes a fast reply a good one.
One response, end to end
- Networking
- Analytics
- Front-end & mobile
- People
In plain words
A customer scores three out of ten and writes “turned up two days late and nobody told me”. The receiver matches it to their order from the survey token. The router sees a low score and routes it immediately. The gatherer attaches the order, the tracking history showing a two-day carrier delay, the fact that no delay notification was sent, and that this is their fourth order and their first complaint.
Somebody gets that on their phone eleven minutes later, and the useful part is that they do not have to look anything up. They can see the delay was real, that the customer is right that nobody told them, and that this is a good customer having a bad experience. The reply takes ninety seconds and says so.
The theme grouping records it as a delivery-communication issue. Eleven of those in a month is a different finding from eleven scattered complaints, and it points at something fixable: the carrier reports delays and nothing forwards them to the customer.
Design rules that shaped every decision
- Route unhappy responses within the hour. Everything else in the design is subordinate to that.
- Attach the context. A reply written without looking anything up is what makes ninety seconds enough.
- Never generate the reply. A generated apology to an annoyed person is transparent and makes it worse.
- Follow up on low scores with no comment. They are the more valuable ones.
- Group into themes from a fixed list, so a trend across months means something.
- Measure whether following up changed anything, not how many follow-ups happened.
Why this shape
Survey tools mostly stop at collection and reporting, which is the easy half. The half that changes anything is the follow-up, and it fails for a mundane reason: the person who should reply does not see the response until somebody exports a spreadsheet, and by then the moment has passed.
So this design does almost nothing clever and spends everything on the two things that actually determine the outcome: getting the response in front of somebody fast, and putting enough context next to it that replying well takes ninety seconds instead of ten minutes of looking things up.
The next four posts walk through each piece: how responses arrive and get matched, how routing decides urgency, what context gets attached, and how themes and outcomes are measured. One diagram per post, a cost breakdown, and an engineering reference at the end.
All posts