Blog

2026-09-30

Blog

Ask after the ticket or after first value, not on first paint

Post-ticket CSAT and post-onboarding NPS measure different moments. How to time each ask so people answer, and why one blended score is a sampling change wearing a product story.

Wednesday, 09:02. Jordan, CS lead at a 35-person SaaS, closed ticket #4412 at 16:38 yesterday. The customer, an admin on Pro, had waited four hours for a billing credit. The close email went out at 16:40 with a CSAT link. They rated 2 at 16:47: "four hours for a credit that should have been one click."

This morning the same person reset a password, landed in the app, and sat still for eight seconds. The product NPS widget appeared. They rated 3. Standup at 09:30 quotes NPS +12 (n=9), because this week's onboarding cohort is mostly people who just fought auth.

Two moments. One dashboard. A story nobody can act on.

The weak version, and what it costs at 09:30

The program that produced that standup looks like this:

One NPS survey. Trigger auto. Delay 8,000 ms. Every session, including first paint and password reset.

The same NPS URL pasted into the support close macro, because collection is collection.

One headline. Ticket comments sit next to comments from people who have not created a project yet.

The version that keeps the clocks honest looks like this:

Post-support: a CSAT survey, 1-5, hosted link in the close email, sent when the ticket actually closed.

Post-onboarding: a separate survey, shown after first value (first project created, first export, first invite), with UserVane.survey("onboarding-nps").

The person who answered at 16:47 is not asked again at 09:02.

The weak version costs you 09:30. You declared onboarding fixed because the number recovered, when you actually hired another support person and ticket CSAT moved. Or you kill a billing-credit workflow because the NPS dip was nine people who reset passwords on Wednesday. The comments from #4412 are still in the feed. Nobody reads them because the slide already has a number.

Post-support is an episode

A closed ticket is a finished interaction. Ask how satisfied they were with that ticket, on a 1-5, while the wait is still in their body. That is CSAT. The metric chooser is the rule: post-ticket is not a relationship NPS. A 0-10 "would you recommend us" after a billing-credit delay measures the company, then you will treat it as a score of the agent.

The ask lives where the conversation lived. Support closes in email, so the survey is a hosted link in the close macro, not a widget on the next login. The channel chooser is that decision. Send it at close, not on first reply while the ticket is still open, and not three days later when they have to reconstruct the wait.

Do not paste the product NPS URL into the macro because one URL feels simpler. You just mixed an episode sample into a relationship trend, and next month you will not know which one moved.

Post-onboarding is a first-value check

First paint is not first value. First value is the moment they have something to have an opinion about: they created a project, invited a teammate, finished the setup checklist, exported a report. Before that, you are surveying confusion, auth, and empty states.

Make the onboarding survey manual. In the widget quickstart that is one call after the event you already track:

UserVane.survey("onboarding-nps")

The classic widget guide is the trigger table: auto waits a fixed idle delay (8 seconds unless you change it) and will fire on password reset if you let it. Manual fires when you say the person is ready. Identify with plan and role at login so you can read Pro separately later without adding those as questions; that is the traits post. The open-source SDKs that carry that call live at github.com/uservane/uservane-js.

NPS is a fair relationship check once they have used the product. If you are measuring whether setup was easy, that is CES, a different survey. Do not use a 0-10 recommend question as a proxy for "was the wizard hard."

Do not average the two clocks

Keep two surveys. Two questions. Two trends. If the board wants one number, label it: "post-ticket CSAT this week" is not "product NPS." Plotting both on one axis labeled health is how a hiring week looks like an onboarding miracle.

A quiet period after an in-product answer (seven days unless you change it) stops the widget from chaining surveys on the same person. It does not decide whether you send a close-email CSAT the same week as an onboarding NPS. That is a program rule you write down: one primary ask per person per window, and the second channel only for a defined gap. The person who rated ticket #4412 at 16:47 has already spent their attention.

Either program can still be a thin sample. Nine onboarding completes is not a climate. Check the slice on the sample size calculator before standup quotes it; the older post on why a naked score lies is the decision rule. Read the comments from that moment in the same sitting, or the score is a trophy. The weekly comment read is that sitting.

Timing gets answers from the people who were there

A well-timed CSAT after ticket close measures people who opened tickets. A well-timed onboarding ask measures people who reached first value. Neither represents the accounts that churned before the prompt, the buyers who never log in, or the people who closed the widget. The interval on the calculator does not see who you did not ask. That is the limit.

It does not make first-paint NPS a better sample. It makes you keep the two programs labeled, so 09:30 is a decision about a moment instead of a number with nowhere to go.

Bottom line: survey the ticket as CSAT at close, on a hosted link. Survey first value as its own in-product ask, on a manual trigger. Leave first paint and password reset alone. Two clocks, two scores, one person not asked twice before breakfast.