market-research
Upstream market-research methodology: market sizing, survey/sampling design, and segmentation. The discipline here is method + assumptions: a TAM is never a single number, a survey is never powered only in aggregate, and a segment is never a demographic slice.
Purpose
Market-research analysts, product marketers, and strategy teams need rigorous evidence before anyone optimizes a campaign or sets a strategy. This skill structures three methodology decisions:
Three deterministic tools:
- — Computes TAM/SAM/SOM by both top-down and bottoms-up methods side-by-side, reports the divergence, and flags failed triangulation. Never returns a single number.
- — Survey sample size from confidence, margin of error, and expected proportion, with the finite-population correction and per-segment minimums (a survey powered overall is not powered per reported segment).
- — Scores candidate segments against Kotler's five criteria and enforces a substantiality + accessibility gate; a slice that is too small or unreachable is dropped.
When to use
Invoke this skill when:
- A board or exec asks "how big is this market?" and you need a defensible, triangulated answer.
- You are fielding a survey and need a sample size that holds up per segment, not just overall.
- You have a list of candidate segments and need to know which are real markets vs demographic slices.
- You are synthesizing competitive intelligence and need a methodological backbone.
Do NOT use this skill to: measure a live campaign (attribution, ROAS, CPA →
marketing-skill/campaign-analytics
), build demand-gen / paid-media plans (
marketing-skill/marketing-demand-acquisition
), set positioning / GTM strategy (
marketing-skill/marketing-strategy-pmm
), or set pricing (
commercial/pricing-strategist
).
Workflow
- Write the brief — Fill
assets/market_research_brief_template.md
(objective, the decision this informs, sizing approach, sampling plan, assumptions register).
- Size the market — Run
market_sizer.py --input market.json --method both --profile {b2b-saas|consumer|enterprise|marketplace|hardware|services}
. Reconcile the top-down/bottoms-up delta before quoting anything.
- Plan the survey — Run
sample_size_planner.py --input survey.json
. Fund the per-segment floors, not just the overall n.
- Score the segments — Run
segmentation_scorer.py --input segments.json --profile <same>
. Drop segments failing the substantiality/accessibility gate.
- Assemble the evidence pack — Combine into a brief. Every number carries its method + assumptions + confidence.
Scripts
| Script | Purpose | Profiles |
|---|
| TAM/SAM/SOM top-down AND bottoms-up + triangulation flag | b2b-saas, consumer, enterprise, marketplace, hardware, services |
scripts/sample_size_planner.py
| Survey n + FPC + per-segment minima | n/a (parameter-driven) |
scripts/segmentation_scorer.py
| Kotler 5-criteria scoring + gate | b2b-saas, consumer, enterprise, marketplace, hardware, services |
All three: stdlib-only,
,
,
.
Onboarding & customization
Run the onboarding questionnaire once before you start — it captures your defaults so every tool in this skill is pre-configured. Customization is the point: the answers actually change tool behavior.
bash
python3 scripts/onboard.py # interactive (also: --defaults, --set key=value, --reset)
python3 scripts/onboard.py --show # see the questions + current effective config
Answers are saved to
~/.config/research-ops/market-research.json
(global) or
./.research-ops/market-research.json
(
) and are read automatically by
. They set the default market
profile, the default survey
confidence and
margin of error, and the default
sizing method. CLI flags always override saved config;
ignores it.
The four questions: market profile · survey confidence · margin of error · sizing method.
Optimize with autoresearch (opt-in)
This skill ships an
isolated, opt-in bridge to
engineering/autoresearch-agent
. Only when you ask to "optimize" / "reconcile the sizing" / "run a loop" does an autoresearch experiment iteratively reconcile your market model so top-down and bottoms-up triangulate.
is the ground-truth evaluator; it prints
tam_divergence: <fraction>
(
lower is better).
bash
/ar:setup --domain custom --name tam-triangulation \
--target market.json \
--eval "python3 ar_evaluator.py --target market.json" \
--metric tam_divergence --direction lower
/ar:loop custom/tam-triangulation
Isolated: no hard dependency — autoresearch runs only on demand, and the loop edits
, never the evaluator.
References
references/market_sizing_canon.md
— TAM/SAM/SOM frameworks (Bessemer, a16z); top-down vs bottoms-up; Fermi estimation; market-model conventions; common sizing fallacies.
references/survey_methodology.md
— Cochran Sampling Techniques; Dillman Tailored Design Method; Groves Survey Methodology; question-wording bias (Schuman & Presser); AAPOR standards.
references/segmentation_and_ci.md
— Kotler segmentation criteria; needs-based vs firmographic; Porter Five Forces; SCIP ethics; Christensen JTBD; conjoint/MaxDiff primer.
Assumptions
- The sizer reports both methods but cannot validate your inputs — a top-down "1% of a $40B market" is only as good as the cited source and the serviceable fraction.
- Sample-size uses the conservative p=0.5 (maximum variance) unless you supply an expected proportion.
- Segment scores are inputs you provide; the tool enforces the gates and the weighting, it does not gather the underlying evidence.
- Competitive intelligence must follow the SCIP code of ethics — no misrepresentation, no protected information.
Anti-patterns
- A single TAM number with no method. Always triangulate top-down against bottoms-up.
- Spurious precision. Size to the decision's tolerance; "$3.7142B" implies a confidence you do not have.
- Powering only the total. Each reported segment needs its own sample floor.
- Leading or double-barreled survey questions. Pre-test wording against the bias literature.
- Calling a demographic slice a segment. It must be substantial AND accessible.
Distinct from
| Neighbor | Scope | Difference |
|---|
marketing-skill/campaign-analytics
| Attribution, ROAS, CPA, funnel of a live campaign | That measures spend deployed; this is upstream methodology |
marketing-skill/marketing-demand-acquisition
| Demand-gen, paid media, channel mix | That runs acquisition; this builds the evidence |
marketing-skill/marketing-strategy-pmm
| Positioning, GTM, category | That sets strategy; this sizes and segments the market |
commercial/pricing-strategist
| Pricing model + WTP + packaging | That sets price; this sizes the market |
| (sibling) | User/product discovery methods | That studies users; this studies the market |
Quick examples
bash
python3 scripts/market_sizer.py --sample
python3 scripts/sample_size_planner.py --population 62000 --confidence 0.95 --moe 0.05
python3 scripts/segmentation_scorer.py --sample --output json
The sample market triangulates a ~$1.47B top-down SAM against the bottoms-up figure and flags the divergence; the segmentation sample drops the "solopreneurs who might want analytics" slice for failing the substantiality and accessibility gates.
Forcing-question library (Matt Pocock grill discipline)
Walked one at a time by
or the orchestrator. Recommended answer + canon citation per question. Never bundled.
-
"Is your TAM top-down or bottoms-up — and have you computed it both ways to triangulate?"
Recommended: both; reconcile the delta before quoting a number.
Canon: Bessemer / a16z market-sizing; Fermi estimation.
-
"What decision will this market size actually drive — and at what precision does it matter?"
Recommended: size to the decision's tolerance, not to a spurious-precision number.
Canon: market-model conventions (Gartner/Forrester); decision-driven analysis.
-
"What's your target margin of error and confidence — and does your sample clear it per segment, not just overall?"
Recommended: power each reported segment, not only the total.
Canon: Cochran Sampling Techniques; AAPOR standards.
-
"Are your survey questions free of leading and double-barreled wording?"
Recommended: pre-test the wording; cite the bias source.
Canon: Schuman & Presser; Dillman Tailored Design Method.
-
"Do your segments pass measurable / substantial / accessible / actionable — or are they just demographic slices?"
Recommended: drop segments that fail substantiality or accessibility.
Canon: Kotler segmentation criteria.
Walk depth-first. Lock 1-2 before opening 3-5. After all are answered, invoke
→
→
.