Product Discovery skill for Codex

Test the riskiest assumption before writing code. Codex builds an opportunity solution tree from one outcome down to research-backed customer opportunities, insists on several candidate solutions per target opportunity, and maps the assumptions behind the favourite by importance and evidence. The riskiest ones get the cheapest credible test, each pre-registered with pass and fail thresholds and the decision that follows, so results cannot be reinterpreted afterwards.

  • Product Management
  • $product-discovery
  • 137 lines
  • 2 files
  • ~1,550 tokens
  • MIT
  • Updated

Install

curl -fsSL codexskills.dev/install.sh \  | sh -s -- product-discovery

Installs to ~/.agents/skills/product-discovery/ for every project on this machine.

104-line POSIX script. No sudo, no telemetry. Read install.sh

Use it in Codex

Start a prompt with $product-discovery, or pick it from /skills. You can also just describe the task: Codex reads the description below and loads the playbook when your request matches.

What Codex reads before loading it

Runs continuous product discovery - an opportunity solution tree from a desired outcome through customer opportunities to candidate solutions, assumption mapping by risk (value, usability, feasibility, viability), and small assumption tests (fake doors, prototypes, concierge, data mining, one-question surveys) with pre-registered pass/fail thresholds - before committing engineering time. Use when asked to do product discovery, build an opportunity solution tree, decide which idea to pursue, test an assumption cheaply, or check whether a feature is worth building.

Use it when

  • The team has an outcome to move but no agreed problem to solve
  • A favourite feature idea has not been checked against evidence
  • You need a quick, cheap test before committing engineering time
  • Discovery work needs a weekly rhythm and visible state

Use something else when

  • You are ready to run a statistically powered experiment on a real build: use ab-testing
  • The direction is chosen and you need to cut a first release: use mvp-scoping
  • You need to rank a backlog that is already defined: use prioritization-frameworks

How to check the result

Every solution traces to an evidenced opportunity, the target opportunity has three or more candidate solutions, and each test's threshold is dated before it launched.

The mistake it prevents

Starting from a solution and inventing an opportunity above it, which turns the tree into a justification for a decision already made.

~/.agents/skills/product-discovery/SKILL.md

--- name: product-discovery description: Runs continuous product discovery - an opportunity solution tree from a desired outcome through customer opportunities to candidate solutions,… license: MIT ---

Discovery is done well when the team is working toward one measurable outcome, every candidate solution traces to a customer opportunity backed by research, the riskiest assumptions behind the chosen idea are tested with the cheapest credible experiment, and pass/fail thresholds were written down before the results arrived.

Opportunity solution tree

Outcome: raise 7-day team activation from 22% to 32%
├── Opportunity: new admins don't know who to invite first
│   ├── Solution: suggested teammates from email domain
│   └── Solution: invite step inside the first project template
├── Opportunity: invited people don't understand why they were invited
│   ├── Solution: personal note from inviter in the invite email
│   └── Solution: invitee landing page showing the shared project
└── Opportunity: teams start empty and see no value
    ├── Solution: import from spreadsheet
    └── Solution: starter templates by team type

Rules:

  • Outcome at the root: a product metric the team can influence (from OKRs or $product-metrics), not a business lagging metric like revenue.
  • Opportunities are customer needs, pains or desires in the customer’s language, discovered through interviews and data. Never solutions in disguise (“need a Slack integration”).
  • Break large opportunities into smaller child opportunities until one can be addressed in a few weeks.
  • Compare and contrast: pick one target opportunity, then generate at least three solutions for it before choosing. One idea is not a choice.
  • Experiments hang below solutions and test assumptions, not whole solutions.

Assumption mapping

For the chosen solution, list assumptions across categories, then plot by importance (would the idea fail if wrong?) and evidence (do we already know?):

CategoryPromptExample
Desirability / valueWill they want it and choose it?Admins will add a personal note when prompted
UsabilityCan they use it?Admins notice the note field without guidance
FeasibilityCan we build it?Email provider supports per-invite custom text
ViabilityDoes it work for the business?No spam-compliance risk from user-written text in our emails
EthicalShould we?Notes cannot be used to phish invitees

Test only the high-importance, low-evidence quadrant. Everything else is either known or does not matter yet.

Pick the cheapest credible test

TestGood forEffortWatch out
Data mining (existing analytics, logs, tickets)Does the behaviour or pain already show up?HoursAbsence of data is not absence of need
One-question in-product surveyPrevalence of a situation1-2 daysAsk about past behaviour
Prototype test (5-8 users)Usability, comprehensionDaysNot evidence of demand
Fake door / painted doorDemand: do people click when it is offered?DaysMust explain honestly on click; low volume pages give no signal
Concierge / Wizard of OzValue of the outcome, delivered manually1-3 weeksLabour cost; small n
Technical spikeFeasibility1-5 daysTime-box strictly
A/B test of a real buildMeasured impact at scaleWeeksNeeds traffic; see $ab-testing

Pre-register every test:

Assumption: Admins will add a personal note when prompted
Test: show optional note field to 50% of new-workspace admins for 2 weeks (flag invite_note)
Metric: % of invites sent with a non-empty note
Pass: >= 25% | Fail: < 10% | In between: run 5 interviews to understand why
Sample needed: ~400 invites per arm at current volume (about 10 days)
Decision if pass: build full version with templates; if fail: drop and test landing page idea

Fake doors and in-product tests change what customers see: confirm with the user and any required owners (legal, brand) before they go live, and always tell users honestly what happened when they click a feature that does not exist yet.

Weekly discovery cadence

- [ ] Talk to at least one customer this week (see $customer-interviews)
- [ ] Add new opportunities to the tree; prune ones evidence has killed
- [ ] Re-check the target opportunity is still the best bet
- [ ] Run or analyze at least one assumption test
- [ ] Share a short update: what we learned, what changed, next test

Workflow for a specific idea

- [ ] 1. Name the outcome the idea is meant to move
- [ ] 2. Place the idea on the tree: which opportunity does it serve? Add evidence
- [ ] 3. Generate two or more alternative solutions for that opportunity
- [ ] 4. Map assumptions for the leading options; pick the riskiest 1-3
- [ ] 5. Design and pre-register the cheapest credible test for each
- [ ] 6. Run, then compare results to thresholds without moving them
- [ ] 7. Decide: build, iterate, switch solution, or switch opportunity

When the codebase is available, check feasibility cheaply by reading the relevant modules and data model before scheduling a spike; often the answer is in the code.

Output template

## Discovery update: <outcome>
Target opportunity: <...> (evidence: n interviews, data points)
Solutions considered: A, B, C - chosen: B because <...>
Assumptions tested this cycle:
| Assumption | Test | Threshold | Result | Decision |
Next tests:
Tree changes: <added / pruned opportunities>

Gotchas

  • Starting from a solution and back-filling an opportunity makes the tree a justification document. Start from research.
  • Fake-door tests on pages with little traffic produce noise; estimate sample size first.
  • Moving thresholds after seeing results turns an experiment into a story.
  • Prototype enthusiasm (“I’d use that!”) tests usability and appeal, not demand.
  • Discovery is continuous; a one-off “discovery phase” before delivery leaves the team blind afterwards.

Verification

Check each solution on the tree links to an opportunity with cited evidence, the target opportunity has at least three candidate solutions, every running test has a written threshold and decision rule dated before launch, and results are reported against those original thresholds.

What the zip contains

SKILL.md plus the interface file below. Nothing runs on install.

agents/openai.yamlgenerated from this page

Gives the Codex app a display name, a one-line description and a starter prompt for this skill.

interface:
  display_name: "Product Discovery"
  short_description: "Test the riskiest assumption before writing code"
  default_prompt: "$product-discovery Build an opportunity solution tree for raising team activation"

About this skill

Written and maintained by the Codex Skills editors to the same editorial standard as every skill here: a selective description, a real workflow, known pitfalls and a way to verify the work. First published , last updated . MIT licensed. Something wrong or out of date? Tell us.

esc