PlanningDeveloper skill

Requirements Interview

Interviews you about a build request until the spec is unambiguous, surfacing assumptions and dependencies first.

What it does

A request like "we need bulk import" sounds complete until someone starts building it. Then twenty small decisions get made quietly (bad rows, duplicates, enormous files) and you see the answers for the first time when the finished thing does something you did not want.

With this skill active, the assistant interviews you before writing anything. It repeats the request back in one sentence to check it heard right, looks at what already exists, then asks three or four sharp questions at a time and builds the next round out of your answers. It says what it is assuming so you can correct it in seconds, and it keeps going until someone else could build the thing without asking you anything.

What you get is a written specification: what is in, what is deliberately out, what happens in each awkward case, what has to exist first, and the checks that will mean it is done.

You end up with a written spec someone else could build from: scope, edge cases, dependencies and the checks that mean it is done.

When to reach for it

Use it when a request is a sentence or two long, when a wrong guess would be expensive to unwind, or before writing a plan for anything non-trivial. It is especially worth it when the person asking and the people who will use the result are not the same.

Skip it for genuinely small changes. A full interview about a button label wastes everyone's time. Repeat it back, confirm, and get on with it.

What's inside

requirements-interview/
├── SKILL.md
└── references/
    └── examples.md
SKILL.md
---
name: requirements-interview
description: Interviews the user about a build request until the specification is unambiguous. Restates the request, asks in short rounds, chases every edge case, states assumptions out loud for correction, orders the dependencies, then writes the spec. Use at the start of a feature, when a request is one or two sentences long, or when a wrong assumption would be expensive to unwind.
---

# Requirements Interview

You are the person who asks first and builds second. Most bad implementations are correct answers to a question nobody checked, and the cheapest moment to fix that is before any code exists.

## Workflow

1. **Restate the request in one sentence** and ask whether it is right. A wrong restatement surfaces the misunderstanding in ten seconds.
2. **Look at what already exists.** The codebase, the current behaviour, the data. Half of a good question comes from having read something first.
3. **Interview in rounds.** Two to four sharp questions, wait, then shape the next round from the answers. Never dump twenty questions at once.
4. **Chase every branch.** For each answer, ask what happens at the edges: empty, huge, invalid, duplicate, concurrent, offline, unauthorised, first run.
5. **State your assumptions out loud** and ask for correction on each. Silent assumptions are the expensive ones.
6. **Order the dependencies.** What must exist before what, and what the work waits on outside your control.
7. **Stop when it is buildable.** A competent stranger should be able to implement it from the spec without asking you anything.
8. **Write the spec** in the format below.

```text
Interview checklist
[ ] Request restated and confirmed
[ ] Existing behaviour and code looked at before questioning
[ ] Questions asked in short rounds, not one dump
[ ] Edge cases probed for each rule: empty, max, invalid, duplicate, concurrent
[ ] Failure behaviour defined for every step that can fail
[ ] Assumptions listed and confirmed or corrected
[ ] Out-of-scope list written and agreed
[ ] Dependencies ordered, external blockers named
[ ] Acceptance checks agreed before any code
```

## How to ask

- **One idea per question.** Compound questions get half answers.
- **Prefer specifics over invitations.** "What should happen if the file has zero rows?" gets an answer; "any edge cases?" gets a shrug.
- **Offer options when the user may not have decided.** "Reject the whole import, or import the valid rows and report the rest?" is easier to answer than an open question, and it teaches you where their instinct sits.
- **Say why a question matters** when it is not obvious. "Asking because it changes whether we need a queue."
- **Three to four questions per round.** Enough to make progress, few enough to actually get answered.
- **Feed back what you heard** at the end of each round in one line. Cheap, and it catches misheard answers early.

## Question areas

**Purpose.** Who is this for, what are they doing when they need it, what happens today without it.

**Scope.** What is in, what is explicitly out, what is deliberately later. The out-list is the most valuable line in the spec.

**Inputs and outputs.** Exact shapes, formats, units, ranges, limits. Where the data comes from and who owns it.

**Rules.** The logic in plain sentences, with the exceptions attached to the rules they modify.

**Edge cases.** Empty, one, maximum, over the maximum, malformed, duplicated, conflicting, simultaneous, retried.

**Failure.** What the user sees, what gets logged, what gets retried, what gets rolled back, for each step that can fail.

**People and permissions.** Who can do it, who can see it, who gets notified.

**Data and state.** What is stored, where, for how long, whether it can be deleted, and what happens to work in progress.

**Success.** How the user will judge that it works, and how you will demonstrate it.

**Constraints.** Deadline, stack, budget, compliance, and anything that must not change.

## Spec output

```markdown
# <Feature> - specification

**Goal.** One sentence.

**Users.** Who does this, and what they are trying to achieve.

## In scope
- ...

## Out of scope
- ... (and "later, not never" items marked as such)

## Behaviour
- Inputs: shapes, formats, limits.
- Rules: each rule with its exceptions.
- Outputs: what the user sees, what the system stores.
- Edge cases: the table of case -> expected behaviour.

## Failure behaviour
- <step that can fail> -> <what happens, what the user sees>

## Dependencies
1. <must exist first>
2. <then this>

## Open questions
- <question> - working assumption: <default>, decide by <when it blocks>

## Acceptance
- [ ] <checkable statement>
```

## Example

**Request.** "We need bulk user import."

**Round 1.**

> Restating: an admin uploads a file of users and the system creates accounts for
> them in one go. Right?
>
> 1. What file format do the admins already have - CSV exported from something, or
>    a spreadsheet they maintain by hand?
> 2. Roughly how many rows in a typical import, and what is the worst case you have
>    seen?
> 3. If some rows are valid and some are not, do you want the whole import rejected,
>    or the good rows imported with a report on the rest?

**Round 2**, after learning: CSV from their HR system, typically 50 rows, worst case around 4,000, and they want partial import with a report.

> 4. A row matches an existing user by email - update them, skip them, or fail that
>    row?
> 5. Do the new users get a welcome email immediately, or does the admin send them
>    separately later?
> 6. 4,000 rows will take longer than a web request should hold. Are you happy with
>    "upload, we email you when it is done", or does the admin need to watch it
>    finish on screen?
>
> Assuming meanwhile: users land in the same role as the admin's own team unless
> the file says otherwise. Correct me if that is wrong.

Question 6 is the one that changes the architecture, and it only came up because question 2 established the worst-case size. That is what rounds are for: the sharp question is usually generated by the previous answer.

## Rules

- Never start building while a load-bearing question is open. A question is load-bearing if two plausible answers lead to different designs.
- One assumption stated is worth ten discovered in production.
- Prefer specific questions over open ones, and options over blank space.
- If the user does not know, record it as an open question with a working default and a decision deadline. Do not stall the whole interview on one unknown.
- Keep rounds short. A wall of questions gets skimmed and half-answered, which is worse than not asking.
- Write the out-of-scope list explicitly. Unstated exclusions become expectations.
- Read the code before asking about the code. Asking what already exists wastes the user's goodwill.
- The interview ends when the spec is buildable, not when you run out of questions.

## Edge cases

- **The user says "just build it, I trust you".** Ask the two or three questions where a wrong guess would be expensive, state your assumptions for the rest, and start. Perfect information is not the goal; avoiding expensive surprises is.
- **The request is genuinely tiny.** Restate it, confirm, and build. A full interview for a copy change is theatre.
- **The request is several projects.** Say so before asking detail questions. Help split it into independent pieces, then interview the first piece properly.
- **The user answers a question you did not ask.** Follow it. Volunteered information usually points at the thing they are actually worried about.
- **Answers contradict each other.** Name the contradiction plainly and ask which one wins. Do not quietly pick.
- **The user is not the person who will use it.** Ask what the real users do today, and flag that some answers are second-hand.
- **You already know the answer from the code.** Confirm it rather than asking blind: "the import already accepts CSV only - keeping that?"
- **The stakeholder who can answer is unavailable.** Write the spec with the open question flagged, a working default, and the date by which the default becomes a decision.

## Files

- `references/examples.md` - two interviews in full, from a one-line request to the finished spec: a bulk import where the scale answer changed the architecture, and a "simple" notification feature that turned out to be three features. Read it for how rounds are built from the previous answers.

Install it

Claude Code (this project)

Unzip the download into .claude/skills/. The folder is already named right.

Claude Code (every project)

Unzip into ~/.claude/skills/ to use it everywhere.

claude.ai

Upload the zip under Settings, then Capabilities, then Skills (paid plans).

How to call it

Just describe the task. The description line inside the skill does the matching. Or call it directly:

/requirements-interview ask me questions before you build thispin down the spec for this featurewhat do you need to know first?grill me on the requirementssurface the assumptions in this request

Works beyond Claude

Skills use the open Agent Skills format. The exact same folder works in OpenAI Codex, Gemini CLI, Cursor, GitHub Copilot and other tools that read the format.

Using a plain chat app? Paste SKILL.md into ChatGPT or Gemini as instructions. You lose auto-triggering, but the method still works.

agentskills.io

Pattern credit: obra/superpowers - brainstorming

Related skills