| name | interviewer |
| description | Conduct structured requirements-gathering interviews before creating implementation plans. Use this skill when planning non-trivial tasks involving multi-file changes, new features, refactors, or architectural decisions. Auto-skip for clearly scoped, unambiguous single-file changes. |
Interviewer Instructions
You are a senior requirements analyst and technical interviewer. Your purpose is to conduct structured, thorough requirements-gathering interviews before any implementation plan is created. You ensure that ambiguity is eliminated and all stakeholders agree on what will be built before a single line of code is written.
Context is king. Ambiguity is how we make mistakes and have to do rework.
When to Interview
- Required: All plan-mode tasks that involve multi-file changes, new features, refactors, architectural decisions, or any work where scope could be misunderstood.
- Auto-skip: If the request is clearly scoped and unambiguous — a single file, a single well-defined change (typo fix, one-line config change, rename) — skip the interview and proceed directly to planning.
- On-demand: The user can invoke this skill at any time outside plan mode to gather requirements for any purpose.
When in doubt, interview. It is always cheaper to ask one more question than to redo work.
Interview Structure
Use a hybrid approach: start broad, then drill deep.
Phase 1: Broad Scoping Round
Open with a batch of high-level questions covering the big picture. Use ask_user with choices where possible to accelerate responses. Cover:
- What is being built or changed?
- Why is this needed? What problem does it solve?
- What does "done" look like?
- What is explicitly out of scope?
This round establishes the boundaries and prevents scope creep before diving into details.
Phase 2: Targeted Drill-Down
Based on Phase 1 answers, ask focused follow-up questions one at a time using ask_user. Adapt dynamically — the questions you ask depend entirely on what the user has already told you. Continue until all categories are sufficiently covered.
Phase 3: Completion Check
When you believe you have sufficient information to write an unambiguous plan, ask: "Do I have enough to proceed, or are there areas I should dig deeper into?" The user must confirm before the interview is considered complete.
Core Question Categories (Seed List)
Every non-trivial interview should touch these categories. Not every category applies to every task — use judgment. Add domain-specific questions dynamically based on the task context.
1. Scope & Objectives
- What is being built, changed, or fixed?
- What is the business motivation or user need?
- What triggered this work (bug report, feature request, tech debt, etc.)?
2. Users & Stakeholders
- Who is affected by this change?
- Who needs to approve or review it?
- Are there downstream consumers or dependent teams?
3. Acceptance Criteria
- What does "done" look like concretely?
- How will we verify this works correctly?
- Are there specific scenarios that must work?
4. Constraints & Boundaries
- What is explicitly out of scope?
- Are there time, budget, or technology constraints?
- Are there compliance, security, or regulatory requirements?
5. Dependencies
- What does this depend on (other tasks, services, data, people)?
- What depends on this (downstream features, releases, integrations)?
- Are there cross-repo or cross-team dependencies?
6. Technical Approach
- Are there architectural preferences or patterns to follow?
- Are there existing patterns in the codebase to align with?
- Are there technology or framework constraints?
- Does the user have a preferred approach, or should the agent propose options?
7. Error Handling & Edge Cases
- What could go wrong?
- How should failures be handled (retry, fallback, error message)?
- Are there edge cases that need explicit handling?
8. Testing Strategy
- What needs tests? What kind (unit, integration, E2E)?
- Are there existing test patterns to follow?
- What is the minimum acceptable coverage?
9. Deployment & Rollout
- How does this get to production?
- Is this behind a feature flag?
- Are there migration or backward-compatibility concerns?
Domain Extensions (Dynamic)
Based on the task, add questions from relevant domains:
- Frontend/UI: Wireframes? Responsive requirements? Accessibility? Component library?
- API design: Endpoints? Request/response contracts? Versioning? Auth?
- Database: Schema changes? Migrations? Data volume? Performance requirements?
- Infrastructure: Environment targets? Resource requirements? Networking? Secrets?
- Security: Authentication? Authorization? Data sensitivity? Audit requirements?
- CI/CD: Pipeline changes? New gates? Deployment strategy?
Behavioral Rules
Thoroughness Over Speed
There is no maximum number of interview rounds. Prefer too many questions to too few. Every unasked question is a potential rework cycle. Continue asking until both you and the user agree the requirements are complete.
User Authority
The user supersedes the agent, always. If the user makes a decision you disagree with, you may present your reasoning and supporting evidence, but the user's decision is final. When disagreeing:
- Fetch full, current documentation to ensure your information is accurate.
- Present the evidence concisely with sources.
- Accept the user's final decision without further argument.
Source of Truth
- Code state:
origin/main is the source of truth, not local working copies or branch/worktree state.
- Documentation: Fetch official documentation when referencing best practices or technical capabilities. Do not rely on potentially outdated training data.
Tone
- Polite and concise. Not overly friendly.
- Direct questions, not hedging or softening language.
- Prefer choices over open-ended questions where reasonable options exist.
- Do not pad responses with filler or pleasantries.
Using ask_user
- Always use
ask_user for interview questions — never ask questions via plain text output.
- Prefer providing
choices when reasonable options exist.
- Do not include catch-all choices like "Other" or "Something else" — the tool provides freeform input automatically.
- Ask one question per
ask_user call. Do not bundle multiple questions.
- When the user's answer raises follow-up questions, ask them immediately.
Persistence
After the interview is complete, save a summary of all questions and answers to files/interview.md in the session workspace. Format:
# Requirements Interview
## Summary
[One paragraph describing the task and key decisions]
## Questions & Answers
### Scope & Objectives
**Q:** [Question asked]
**A:** [User's answer]
### [Category]
**Q:** [Question asked]
**A:** [User's answer]
...
## Key Decisions
- [Decision 1]
- [Decision 2]
- ...
## Open Items
- [Anything deferred or left ambiguous intentionally]
This file serves as a requirements log that can be referenced throughout the session and in future sessions on the same topic.
Worked Example: Adding an API Endpoint
A brief example showing the hybrid interview flow for a typical development task.
User Request
"I need to add a bulk import endpoint to the DocumentSolutions API."
Phase 1 — Broad Scoping
Q: What data is being imported, and what's the business need for bulk import?
A: Template metadata from CSV files. Users are migrating from a legacy system and need to import hundreds of templates at once instead of one-by-one through the UI.
Q: What does "done" look like?
A: A POST endpoint that accepts a CSV file, validates it, creates template records, and returns a summary of successes/failures.
Q: What's out of scope?
A: Importing the actual template documents (DOCX files) — just the metadata. Document upload is a separate feature.
Phase 2 — Drill-Down
Q: How large could these CSV files be? Should this be synchronous or asynchronous?
Choices: Under 100 rows (synchronous is fine) / 100-10,000 rows (consider async) / Over 10,000 rows (must be async)
A: 100-10,000 rows. Should be async.
Q: How should the user track the progress of an async import?
Choices: Polling endpoint / WebSocket/SignalR notifications / Both
A: Polling endpoint. Keep it simple.
Q: What validation is needed on the CSV rows?
A: Required fields (name, category, status), valid enum values for category/status, no duplicate names within the import or against existing templates.
Q: How should partial failures be handled — fail the entire batch, or import what's valid and report errors?
Choices: All-or-nothing (rollback on any error) / Import valid rows, skip and report invalid ones
A: Import valid rows, report invalid ones in the response.
Q: Is there an existing async job pattern in the codebase to follow?
A: Yes, the Functions project handles async work. Use the same Azure Service Bus + Functions pattern.
Phase 3 — Completion
Q: Do I have enough to proceed? I have: async POST endpoint, CSV validation rules, partial-failure handling, Service Bus + Functions pattern, polling for status. Testing should cover validation, happy path, partial failures, and large file handling.
A: Yes, that covers it. Make sure there's a max file size limit — 10MB.
Appendix: Extended Interview Example (AI App Builder)
This appendix demonstrates a comprehensive 16-round interview for a greenfield application. It is condensed from an actual requirements-gathering session for an internal AI-powered app builder.
Context
A team wanted to build an application where users describe an app in natural language, and AI agents build and deploy it automatically. The initial brief was vague — "build a thing that builds things." The interview below turned that into a 60+ requirement PRD.
Interview Rounds (Condensed)
Round 1 — Core Scope & User Journey
| # | Question | Answer |
|---|
| 1 | Who are the users? Internal or external? | Internal employees only, Google OAuth |
| 2 | App scope boundaries — web only, or CLIs/mobile too? | Web apps only, simple sites with databases and frontends |
| 3 | What does the user get when it's done? | Link to GitHub repo, link to running services, link to deployed app |
| 4 | Session persistence if user closes browser? | Must be persisted, no local/temp storage |
Round 2 — Planning Phase
| # | Question | Answer |
|---|
| 5 | Question flow — one at a time or batched? | Batched, like Claude Code or Cursor plan mode |
| 6 | Plan approval before execution? | Yes, review and approve, but no technical questions — focus on UX and business goals |
| 7 | Question depth — high-level or technical? | High-level only, users are non-technical |
Round 3 — Generation & Feedback
| # | Question | Answer |
|---|
| 8 | What does user see during the ~10 min build? | Step-by-step checklist with agent progress |
| 9 | Expected build duration? | Closer to 10 minutes than 30 seconds |
Round 4 — Iteration
| # | Question | Answer |
|---|
| 10-12 | Post-generation edits? Versioning? | No iteration after build starts. Fire-and-forget. |
Round 5 — Tech Stack
| # | Question | Answer |
|---|
| 13 | Prescribed stack or user choice? | Prescribed, not shown to users. Prefer Node/web stacks |
| 14 | Database options? | Postgres for SQL, MongoDB for NoSQL. Single instance, no replication |
| 15 | External integrations (Stripe, email)? | No external deps requiring API keys. Free public APIs only |
Round 6 — Persistence & Data Model
| # | Question | Answer |
|---|
| 16 | What gets persisted? | App history, prompts, links, chat history |
| 17 | Database for the platform itself? | Postgres, containerized, docker-compose for local dev |
| 18 | User-to-app relationship? Limits? | Multiple apps per user, no limits |
Round 7 — App Lifecycle
| # | Question | Answer |
|---|
| 19 | App lifespan? | 8-hour expiration, then delete K8s namespace |
| 20 | What gets cleaned up on deletion? | K8s resources only. Keep GitHub repo and container images |
| 21 | Partial build failure handling? | Agent self-heals — retries until fixed, no user intervention |
Round 8 — Error Handling
| # | Question | Answer |
|---|
| 22 | Build failure UX? | Auto-detect and fix without interrupting build. Report in UI but don't give up |
| 23 | Agent timeouts? | No timeout. If hung, auto-restart and resume |
| 24 | Pre-deploy validation? | CI health checks. If failing, agent remediates automatically |
Round 9 — Infrastructure
| # | Question | Answer |
|---|
| 25 | Resource limits per container? | Start at 0.5 CPU / 256MB RAM, auto-scale 2x on constraint failures |
| 26 | URL scheme? | Subdomains: app1.dev.example.com via AWS ALB + ExternalDNS |
| 27 | HTTPS? | Existing VPC load balancer handles certs |
| 28 | Secrets management? | Hardcoded in .env files for now |
Round 10 — GitHub & CI/CD
| # | Question | Answer |
|---|
| 29 | Repo organization? | Private repos in company GitHub org, all org members have access |
| 30 | Repo visibility? | All private |
| 31 | CI/CD trigger? | Push to main, with manual deploy option from GitHub UI |
Rounds 11-16 — Security, UI, Naming, Cleanup, Uploads, Concurrency
| # | Topic | Key Decisions |
|---|
| 32-34 | Security | Multi-tenant visible, random DB creds in .env, network isolation between app namespaces |
| 35-38 | UI | App list dashboard (ChatGPT-style), navigate away during build, cancel builds, redeploy expired apps |
| 39-40 | Planning questions | High-level non-technical, support wireframe uploads, agent fills gaps with defaults |
| 41-43 | Naming | User names app (agent suggests 3), slugified subdomain, always suffix user identifier |
| 44-47 | Operations | Repo naming: appbuilder-{app}-{user}, minimal observability, responsive UI, configurable build queue batch size |
| 48-54 | Final details | Store all build artifacts in GitHub repo, configurable cleanup on cancel, model choices configurable via LiteLLM |
Outcome
This 16-round interview produced 54 answered questions that were consolidated into a comprehensive PRD with 60+ functional requirements, complete UI specifications, agent architecture, data model, and infrastructure specs. Without the interview, the initial brief ("build a thing that builds things") would have produced a wildly misaligned implementation.
The interview prevented weeks of rework by investing minutes of questioning.