Should I vibe code
Conversational surveys, NPS, employee experience, and automation
NPS is not measured, it is manufactured — by who you emailed, when, and whether you chased the quiet ones.
?
Their verdict, the Business price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-04.
?
Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.
The honest answer
why the verdict is what it is
Alchemer's entry covers what happens when you promise anonymity and your schema quietly disagrees, and SurveySparrow sells employee experience and 360 assessments too, so take that argument as read here. What is specific to this one is the other half of the product. This is not a form you link to; it is a programme that runs. Contacts go in, a send goes out on a schedule, reminders chase the people who did not answer, the survey asks one question at a time, and out of the far end comes a number — NPS, CSAT, CES — that lands in a deck and gets compared with last quarter. Two consequences, and the first is the one nobody prices in: that number is not measured, it is manufactured. Who was on the list, what day the send went out, whether you chased the quiet ones, whether partial responses count, whether churned accounts were excluded — each of those moves NPS further than anything you shipped that quarter. Your build makes every one of those choices by accident, in whatever order you happened to write the code, then reports the result to one decimal place. The second consequence is duller and lands harder: you are now sending recurring bulk email to your customer list from your own domain, which is a deliverability problem, a suppression obligation and a complaint rate — and the domain your survey invitations go out from is usually the domain your invoices go out from.
What actually breaks
not "if". the specific failures.
- The number, which moves more with sampling decisions than with anything you changed about the product, and which nobody in the room reading the deck knows are decisions
- Non-response bias, because the people with the strongest opinion either answer immediately or unsubscribe, and your build cannot tell those two apart
- Reminders, which is the moment a survey becomes a bulk email programme with a cadence and a complaint rate
- Deliverability, once your own domain is sending thousands of invitations: a bad run damages the sending reputation your invoices and password resets share
- Opt-outs, which have to be honoured across every future programme rather than the one that was running when someone clicked, and which almost never are in a hand-built list
- Duplicate contacts, the specific bug that turns one reminder job into three emails to the same customer and the same customer into two responses
- The response endpoint, which is public by construction and will be found by bots long before your customers finish answering
- Partial responses, because whether a half-finished survey counts changes every number in the report and the decision gets made late, in whichever direction flatters it
- Resumability in a one-question-at-a-time flow, which Typeform's entry covers in full: refresh on question nine and the answers only ever lived in browser memory
The quarterly NPS run goes out at 09:00 on the Tuesday to just over four thousand customers. The reminder job is scheduled for seventy-two hours later and selects everyone who has not responded — joining responses to contacts on email address, because the import had no stable identifier and email seemed unique enough. It is not: six hundred contacts exist twice, from a CRM sync in March that nobody cleaned up. Those six hundred get the reminder up to three times each, including the ones who already answered on Tuesday. By Wednesday evening the complaint rate at two large mailbox providers is over threshold, and on Friday the monthly invoice run from the same domain starts landing in spam, which is how anyone finds out. The survey itself looks fine. The score is up eleven points on last quarter, because the customers angry enough to complain unsubscribed instead of answering — and that number is already in the board pack.
Is that you?
the verdict is a default, not a law
- It runs once, to a list you own, with no reminders and no recurring schedule
- Nobody is going to report the resulting number as a trend against a previous quarter
- You send through an established provider with suppression handling rather than your own SMTP
- You self-host LimeSurvey or Formbricks instead of writing a survey engine and a mailer from scratch
- The output is a metric that goes upward in the organisation and gets compared over time
- It sends recurring email to customers from the same domain as your transactional mail
- Respondents are employees or anyone with a power relationship to whoever reads the answers, which is the Alchemer problem and it is worse here because the programme repeats
- There is no suppression list that survives the end of this particular campaign
If you build it anyway
the checklist, then the prompt that enforces it
- Write the sampling decisions down before the first send and keep them next to the number forever: who was in the frame, who was excluded, when it went out, how many reminders, whether partials count. A score without that record is not comparable with anything, including itself last quarter.
- Send through a real ESP with a suppression list, and make the suppression list global across every programme rather than per-campaign. Unsubscribes are the one piece of state that must outlive the campaign that collected them.
- Never send on a stable identifier you do not control. Deduplicate contacts before a run, key responses to an invitation token rather than an email address, and make the reminder query select on the token.
- Cap the whole thing. A maximum number of emails per contact per quarter, a hard total per run, and a dry run that prints the recipient count before anything leaves. The failure mode of a scheduled mailer is volume, and volume is the only thing you can defend against in advance.
- Decide the partial-response rule before launch and encode it in the export, because deciding it after you have seen the data is deciding it in whichever direction flatters the number.
- Report a confidence interval and a response rate next to every score, or do not report the score. An NPS built on forty responses out of four thousand is a rumour with a decimal point.
- Rate-limit the response endpoint and use unguessable per-invitation tokens. An open survey URL attracts bots and, if there is any incentive attached, deliberate fraud.
- Give the survey a retention date at creation and make deletion reach responses, contacts, invitations, email logs and any export somebody downloaded.
I am building a recurring customer feedback programme: surveys sent to a contact list on
a schedule, with reminders, producing an NPS-style score. Treat these as constraints and
push back where I break them.
1. Before any survey builder, build the sending safety rails: a global suppression list,
a per-contact frequency cap, a hard cap on total emails per run, and a dry run that
prints the recipient count and stops. Nothing sends until these exist.
2. Suppression is global and permanent across all campaigns, not per-campaign. Removing
someone must be one operation and it must survive the next import.
3. Deduplicate contacts before every run and key every invitation to a token, never to an
email address. The reminder query selects on tokens that have no response, not on
addresses that appear absent.
4. Send through an established provider. Do not build an SMTP sender, do not send from
the same subdomain as transactional mail, and tell me which subdomain you used and why.
5. Record the sampling frame with every run: who was included, who was excluded and on
what rule, the send time, the reminder schedule. Store it immutably next to the results
and print it on every report.
6. Every reported score carries the response rate and a confidence interval. If I ask for
a bare number on a dashboard, refuse and explain that it will be compared with last
quarter by somebody who does not know the sample changed.
7. Ask me now, before schema: do partial responses count? Encode the answer in the export
and do not let it be changed after a run has completed.
8. The response endpoint is rate-limited, uses unguessable tokens, and accepts one
response per token. Assume bots will find it in the first week.
9. Use native form controls with real labels. A one-question-at-a-time flow must work
with a screen reader and must resume after a refresh, not lose eight answers.
10. Give every survey a retention date at creation. Deletion reaches responses, contacts,
invitations, email logs and exports.
11. Out of scope unless I ask: 360 assessments, employee engagement surveys and anything
promising anonymity — those are a different and harder product, and a licence is the
cheap answer there.That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.
their build prompt ↗Or don’t build it
the boring option, and the way back out
The moment a number from this is reported to anyone. What a survey platform sells at this end of the market is not the form builder — it is the sending infrastructure with a suppression list somebody else maintains, a response cap that makes the sampling frame explicit, and a set of defaults for partials, reminders and anonymity that were argued about by people who run feedback programmes for a living. SurveySparrow's paid tiers are sold by response volume rather than seats, which is worth noticing: the thing they are metering is exactly the thing that determines whether your score means anything.
Export the questionnaire, not just the answers. A CSV of responses without the question text, the option order, the branching rules and the version each respondent actually saw is a spreadsheet nobody can interpret in two years. Dump the survey definition as JSON with every response set, and keep the sampling record — frame, exclusions, send time, reminder count — in the same folder, because that is the only thing that makes two quarters comparable. Prefer a format LimeSurvey can import. Then write the destruction step into the same job: the honest end state for a feedback programme is deleted on schedule, not archived forever.
Open-source surveys and experience management, including in-product and link surveys.
Twenty years of survey engine — branching, quotas, panels, invitation tokens and anonymised response modes already built.
Open-source form builder and collection backend.
Questions
There are already several survey entries. What does this one add?
Cadence. Typeform is about the one-question-at-a-time session and what it does to your data. Alchemer is about promising anonymity to employees and breaking it in the schema. SurveySparrow is bought to run something repeatedly — quarterly NPS, post-ticket CSAT, an annual engagement cycle — and repetition is what turns a form into two problems it did not have: a metric that gets compared over time, and a mailing list you are now operating.
Is a survey invitation really bulk email in the regulated sense?
It depends on content and jurisdiction, and the honest answer is that the line is blurrier than anyone building this assumes. A transactional post-purchase feedback request sits in a different place from a quarterly satisfaction survey to your entire customer base, and a survey with a prize draw or a product plug in it is closer to marketing than either. What is not ambiguous is the operational reality: mailbox providers do not read statutes, they read complaint rates, and thousands of unexpected messages from a domain that normally sends invoices is exactly the pattern their filters are tuned for.
Why is the score itself listed as a risk? It is just arithmetic.
Because the arithmetic is the easy part and the sample is the hard part, and only the arithmetic shows up in your code. NPS moves several points if you send on a Tuesday instead of a Friday, several more if you chase non-responders, and a great deal if a churned-customer cleanup removed the unhappiest accounts from the list between quarters. None of that is visible in the number, and the number is what somebody presents. If you are going to build this, the sampling record is not documentation, it is part of the output.
- CAN-SPAM Act compliance guide for business (FTC, US)
- GDPR Art. 7 — conditions for consent (EU)
- GDPR Art. 5 — principles relating to processing of personal data (EU)
Every week, someone ships something they shouldn’t have.
New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.
LimeSurvey is GPL — don't clone it, run it. Then explain to the ethics board where the responses actually live.
“Responses are anonymous” is an engineering claim. Your access log, invite token and timestamps disagree.
Survey answers are other people’s opinions with their identity attached. Store them like it.
last reviewed 2026-08-05 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice