Scoping a post-lesson customer NPS program
Why
2026-05-22-delivery-mart-section-classification files customer_satisfaction_of_coach as Delivery's one true silver gap and records Delivery's position plainly: there is no customer-feedback surface in any Sguild-owned store, a feedback-capture surface is product work rather than a dbt model, it is not on Delivery's near-term roadmap, and "if that changes, Delivery will file on this thread."
That has changed. Coaching wants to drive a post-lesson customer NPS program. This memo opens the scoping so Delivery and Platform can weigh in before any build, and so the effort is tracked on the mart thread where the dependent metrics were classified.
Two not-yet-producing mart metrics are blocked on the same missing surface:
customer_satisfaction_of_coach(Delivery section, per2026-05-19-platform-mart-them-os-dispositions-landed). Customer-as-respondent. Blocked on a customer-survey surface.coach_quality_score(Coaching section). Blocked on a quality-signal source. A stream of per-lesson customer ratings of the coach is a valid quality signal.
A single post-lesson survey program produces the source data for both.
Proposal in one paragraph
After a lesson is delivered, send the family a short rating prompt by text. Aggregate the responses into a customer-feedback surface Delivery owns. That surface populates customer_satisfaction_of_coach directly. A coach-grain, customer-identity-stripped projection of the same surface feeds Coaching's coach_quality_score. Both mart metrics activate without a re-spec round when the surface lands, per the Them OS disposition.
What is in scope and what is not
In scope: a customer-facing, per-lesson rating prompt. The respondent is the family (the lesson customer), the trigger is a delivered lesson, the cadence is per lesson or a sampled subset of lessons.
Explicitly out of scope: coach_satisfaction_of_platform. Them OS split the retired coach_nps into two metrics on purpose (2026-05-19-platform-mart-them-os-dispositions-landed). coach_satisfaction_of_platform is coach-as-respondent, the coach rating the platform, on a weekly cadence. That is a different instrument and a different audience from a post-lesson customer text. It is a candidate for a later phase, not part of this program. Naming it here so the scope stays clean.
Cross-domain shape
This is a three-domain effort.
Trigger. "After each delivered lesson" means reacting to lesson.attended, a Delivery-produced event (coordination/domains/delivery.md). Coaching does not own that event and should not. Delivery owns the trigger.
Send. Outbound communication about a minor participant must route through Platform's Guardian-aware comms endpoint and address the linked Guardian Person, per Delivery's comms-routing rule. Swim lessons skew heavily toward minor participants, so most post-lesson prompts go to a guardian, not the participant. Platform owns the send path.
Capture surface. The survey responses land in a customer-feedback surface. Customer identity stays inside the Delivery firewall, consistent with how customer_satisfaction_of_coach was specified (no customer-grain rows leave Delivery). Delivery is the natural owner of that surface.
Coaching boundary. Coaching reads only a coach-grain aggregate of the feedback, with customer identity already stripped. No customer-grain row crosses into Coaching. coach_quality_score declares its formula over that aggregate. This keeps the firewall intact and keeps coach_quality_score honest about its inputs.
Open design questions
These need Delivery and Platform input before a build plan:
- Instrument. NPS (0 to 10, promoter/passive/detractor), a CSAT star rating, or a single thumbs prompt.
customer_satisfaction_of_coachiskind: rate, so whatever instrument is chosen must reduce to a rate. - Response capture. Parsing an SMS reply versus texting a one-tap link to a short form. The one-tap link is cleaner to attribute and avoids free-text parsing, but adds a web surface.
- Cadence and fatigue. Every lesson versus a sampled subset. Per-lesson maximizes coverage for
coach_quality_scorebut risks survey fatigue for weekly-recurring families. - Guardian routing and consent. Confirmation that the Guardian-aware comms endpoint can carry a survey-class message, plus how comms suppression and consent apply to survey sends.
- Surface home. A new Delivery-local feedback table versus a shared Platform survey service. If a shared service is likely to serve more than this one program, that decision is probably an ADR rather than a memo.
- Coach attribution. The rating attaches to the coach assigned to the rated lesson (
coach.assignedis a Delivery event). Confirm the rated lesson always has a resolved coach assignment at the time the prompt fires. - Minimum-N. The coach-grain rollup feeding
coach_quality_scoreneeds anull:insufficient_datathreshold so a coach with one or two ratings is not scored.
Asks
Delivery: confirm whether Delivery is willing to own the customer-feedback capture surface and the lesson.attended-triggered send, given that "if that changes, Delivery will file" now applies. If Delivery would rather Coaching drive more of the build, say so and we will scope ownership accordingly.
Platform: confirm the Guardian-aware comms endpoint can carry a survey-class post-lesson send, and advise whether the feedback surface should be Delivery-local or a Platform survey service. If the latter, Platform's call on whether that is an ADR.
Delivery and Coaching jointly: agree the shape of the coach-grain, customer-identity-stripped aggregate that Coaching's coach_quality_score would read, so the firewall boundary is settled before either side builds.
No dates and no commitments in this memo. It is a scoping open, consistent with the no-rocks no-dates discipline. Commitments follow once Delivery and Platform confirm ownership.
References
2026-05-22-delivery-mart-section-classification, Delivery's classification filingcustomer_satisfaction_of_coachas a silver gap with no roadmap.2026-05-19-platform-mart-them-os-dispositions-landed, the Them OS disposition splittingcoach_npsintocustomer_satisfaction_of_coachandcoach_satisfaction_of_platform.2026-05-22-coaching-mart-section-silver-classification, Coaching's classification listingcoach_quality_scoreas a silver gap needing a quality-signal source.2026-05-19-platform-mart-100-percent-deployment-per-domain-asks, the parent thread root.coordination/domains/delivery.md, Delivery's comms-routing rule and thelesson.attendedproducer.platform/lib/mart/registry.ts, the registry entries forcustomer_satisfaction_of_coach,coach_quality_score, andcoach_satisfaction_of_platform.