// diagnose

Customer Survey Design

Use when the user wants to design a customer or market survey — choosing the questions, structure, scales, and sample size to get unbiased, decision-useful answers. Also use when the user mentions survey, questionnaire, NPS, customer feedback, market research survey, product-market fit survey, sample size, margin of error, "how many responses do I need," or "what should I ask my customers." Produces a structured survey with unbiased questions mapped to decisions, plus computed sample-size, invite, and segment-readability numbers from a runnable engine.

DiagnoseengineStarter
bash
$npx skills add sarojkjha/aaj-marketing-skills --skill customer-survey-design
Or run it in Claude or ChatGPT through the AAJ engines connector

How to install and run this

Install it in your project:

npx skills add sarojkjha/aaj-marketing-skills --skill customer-survey-design

No install? Add https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp as a custom connector in Claude, ChatGPT or any MCP client.

https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp

Then ask: Use the AAJ customer-survey-design skill on my numbers.

Step-by-step for every agent, Windows, Mac and Linux →

Claude Code

/plugin marketplace add sarojkjha/aaj-marketing-skills
/plugin install aaj-marketing-skills@aaj

OpenAI Codex

codex plugin marketplace add sarojkjha/aaj-marketing-skills
codex plugin add aaj-marketing-skills@aaj

Claude or ChatGPT — no install

Add this as a custom connector:

https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp
Recipes: vendor data in, a verdict out

// when to use it

Use when the user wants to design a customer or market survey — choosing the questions, structure, scales, and sample size to get unbiased, decision-useful answers. Also use when the user mentions survey, questionnaire, NPS, customer feedback, market research survey, product-market fit survey, sample size, margin of error, "how many responses do I need," or "what should I ask my customers." Produces a structured survey with unbiased questions mapped to decisions, plus computed sample-size, invite, and segment-readability numbers from a runnable engine.

// what you give

The decision the survey should inform, who you'll ask, audience size and expected response rate if known, and the segment cuts you plan to report

// what you get

A structured survey — questions, types, scales, and order — designed to avoid bias, plus required completes, invites, and a per-segment readability verdict from the engine

Engine spec

// decision it supports

How many responses do we need, and which segment cuts will our sample be able to read?

// inputs

The decision the survey should inform, who you'll ask, audience size and expected response rate if known, and the segment cuts you plan to report

// output

A structured survey — questions, types, scales, and order — designed to avoid bias, plus required completes, invites, and a per-segment readability verdict from the engine

// acts or analyzes

Analyzes only

Makes no network calls, writes no files and changes nothing in your tools.

// where your information goes

How you run itWhere your inputs go
Skill installed in your agent, or the local MCP serverThe engine runs on your machine and AAJ receives nothing. Your AI agent still sends what you give it to its model provider (Anthropic, OpenAI and so on), under your own account's terms.
Hosted MCP serverYour agent's model provider, as above, plus AAJ's server on Cloudflare, which receives the engine inputs over HTTPS, runs them in memory and keeps no copy. Cloudflare keeps error logs (no inputs) for up to 7 days.

No engine needs customer names, emails or other personal data; leave them out.

// limitations

  • It sizes the sample, not the questions. It cannot spot leading or double-barrelled wording; pilot the survey with a few people first.
  • Invites are completes divided by the response rate you enter. An optimistic rate makes an infeasible plan look feasible.
  • Segment margins are worst case per cell, and the READ, CAUTION and DON'T READ cut-offs (5 and 8 points) are working labels, not laws.
  • It sizes survey reads, not experiments. Whether variant B beat variant A belongs in ab-test-significance.

// review before acting

The founder or researcher confirms the reachable audience size and a response rate from past sends, and drops or resizes any DON'T READ segment before the readout promises it.

// setup

install
$npx skills add sarojkjha/aaj-marketing-skills --skill customer-survey-design
hosted mcp
$https://aaj-engines-mcp.sarojkjha10.workers.dev/mcp

Agents listed: Claude Code, Cursor, OpenAI Codex, Windsurf, Cline. Tested and recorded: Claude Code, OpenAI Codex (Windows, ab-test-significance only).

Full spec on GitHub

Customer Survey Design

Design surveys that produce answers you can act on, not vanity data. The discipline is starting from the decision the survey must inform and writing questions that don't lead the respondent — most surveys fail by asking biased questions that confirm what the author hoped.

The second, quieter failure mode is fielding a survey that can't answer its own question: 60 responses split across five segments, then decisions made on ±13-point noise. This skill computes what a readable survey actually requires before anything is sent — and refuses to bless segment cuts the sample can't support.

When to use

The user is about to field a survey and needs the questions, structure, and sample plan to be right before it goes out.

Before you start

  1. Name the decision. What will you do differently based on the results? If a question doesn't inform a decision, cut it.
  2. Identify the respondents and how you'll reach them (existing customers, churned users, prospects, market panel) — this shapes wording and length. Get the reachable audience size and a realistic response rate if known.
  3. List the cuts you'll report. If the readout says "by segment," the sample must be sized for the smallest cell, not the total.
  4. Pick the survey type to match: PMF ("how would you feel if you could no longer use this?"), NPS + why, onboarding/CSAT, churn reason, or discovery.

Method

The engine (resources/survey-design.js, Node, stdlib only) computes:

  • Required completes — n₀ = z²·p(1−p)/e², with finite-population correction n = n₀/(1+(n₀−1)/N) when the audience is finite. Worked check: ±5pp at 95% (z=1.96, p=0.5) → n₀ = 384.16 → 385; corrected for N=2,000 → 323.
  • Invites — completes ÷ response rate, with a feasibility verdict against the audience size (loosen the margin, lift response, or run a census and report the achieved ±).
  • Segment readability — worst-case margin per cell, e = z·√(0.25/n_cell), labelled READ (≤±5pp), CAUTION (±5–8pp, directional), DON'T READ (wider). Thresholds are working labels, not laws.

Modes: sample '<json>' and segments '<json>'. --demo runs both worked examples with no arguments; --help prints the schema.

Workflow

  1. Size the survey first — run node resources/survey-design.js sample '<json>' with the margin, confidence, audience, and response rate. If it's not feasible, fix the plan before writing a single question.
  2. Check the cuts — run segments mode with planned segment shares. Merge or oversample any DON'T READ cell now, not after fielding.
  3. Map questions to decisions — list the decisions, then write the minimum questions that inform each.
  4. Choose question types and scales using resources/survey-template.md (open-ended for discovery, closed/scale for measurement; consistent scale direction).
  5. Write unbiased wording — neutral, one idea per question, no leading or loaded phrasing, balanced options.
  6. Order for flow and low drop-off — easy/engaging first, sensitive/demographic last, group by topic, keep it short.
  7. Add the key open-ended "why" after rating questions — that's where the actionable insight lives.

Present the result

Lead with the sample plan (completes, invites, feasibility, and the segment-readability table from the engine), then the survey in order (question, type, scale/options) with the decision each informs, an estimated completion time, and the recommended channel/timing.

Show where it came from. Open your answer with "AAJ customer-survey-design engine result:" and print the engine's output block exactly as it returned it, then add the line Method: https://skills.aajconsult.com/skills/customer-survey-design. Say the numbers come from the AAJ engine, not from the model. Put your interpretation under that block. Do not retype the figures from memory. If you could not run the engine, say so and label any numbers as your own estimate, not an AAJ result.

Guardrails & common mistakes

  • Don't promise segment reads the sample can't support. If a cell says DON'T READ, either resize or drop the cut from the readout.
  • No leading questions. "How much did you love our amazing onboarding?" yields noise. Ask neutrally.
  • One idea per question. Double-barreled questions ("Was it fast and easy?") can't be answered cleanly.
  • Keep it short. Every extra question lowers completion and data quality.
  • Balance the scale. Offer as many negative as positive options; include a neutral where appropriate.
  • Pilot first. Test with a few people to catch confusing wording before fielding.
  • Survey sampling ≠ experiment significance. Testing whether variant B beat variant A belongs in ab-test-significance; this engine sizes reads, not experiments.

persona-builder (turn answers into personas) · positioning-statement (questions that test messaging) · lifecycle-and-retention (churn-reason surveys feed the retention diagnosis) · ab-test-significance (experiments, not survey reads).

// see it run

agent · diagnose
$
view engine source

Examples

// prompt

node resources/survey-design.js --demo

// result

▸ DEMO 1 — sample mode (Brightlane onboarding NPS-driver survey)
AAJ · SURVEY SAMPLE SIZE
────────────────────────────────────────────────────────
Target read        ±5.0pp at 95% confidence (z=1.96)
Assumed proportion 50% (worst case — safest)

Completes needed   323   (infinite-population n=385, corrected for N=2000)
Invites needed     1615   (at 20% response rate)

▲ FEASIBLE — 1615 invites fits inside your 2000-person audience.

▸ DEMO 2 — segments mode (can we read Enterprise separately?)
AAJ · SEGMENT READABILITY
────────────────────────────────────────────────────────────────
Total completes 323 · 95% confidence · worst-case p=50%

Segment          n     ±MoE                Verdict
SMB             178  ±7.3pp   ██████░░░░░░  CAUTION (directional only)
Mid-Market       97  ±10.0pp  ████████░░░░  DON’T READ (noise at this size)
Enterprise       48  ±14.1pp  ███████████░  DON’T READ (noise at this size)

▼ 3 cut(s) below a clean read. Smallest cell "Enterprise" (n=48) is ±14.1pp.
  A ±5pp read needs ~385 completes per cell at 95% — either boost total n,
  oversample the small segment, or merge it into a wider cut before fielding.

// faq

// install

$npx skills add sarojkjha/aaj-marketing-skills --skill customer-survey-design

// run it

$node .agents/skills/customer-survey-design/resources/survey-design.js --demo

// worked example

Get the worked example for Customer Survey Design

One email. The filled-in config, the output, and how to read it.

No spam. Unsubscribe anytime.

// sprint

Positioning & Message Sprint — $3,500, 10 business days

This skill is one of the engines behind the Positioning & Message Sprint — $3,500, ten business days.

Positioning, copy, and voice governance — every claim defensible.

See what's included.

// human in the loop

Need a human in the loop?

AAJ builds the strategies, tools, and playbooks these skills are made of — with engagements for growth-stage and enterprise teams.