This reference provides templates, patterns, and best practices for formulating clarifying questions that are grounded in research and lead to actionable answers.
Installs into .claude/skills of the current project.
Are you the author of 2944 Question Patterns 2c46f71b?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/tools-only-2944-question-patterns-2c46f71b)
# Question Patterns for Effective Clarification
This reference provides templates, patterns, and best practices for formulating clarifying questions that are grounded in research and lead to actionable answers.
## Table of Contents
- [Question Construction Principles](#question-construction-principles)
- [AskUserQuestion Tool Format](#askuserquestion-tool-format)
- [Question Templates by Category](#question-templates-by-category)
- [Number of Questions Guidelines](#number-of-questions-guidelines)
- [Option Generation Best Practices](#option-generation-best-practices)
- [Common Pitfalls](#common-pitfalls)
## Question Construction Principles
### Core Principles
1. **Ground in Research**: Every option must come from actual findings
- Codebase exploration results
- Documentation references
- Web search for best practices
- Git history for patterns
2. **Be Specific**: Avoid generic options
- Bad: "Use a different approach"
- Good: "Use JWT tokens with HttpOnly cookies"
3. **Provide Context**: Explain trade-offs in descriptions
- Why this option exists
- What it implies
- When it's appropriate
4. **Stay Focused**: One decision point per question
- Bad: "Which file and what approach?"
- Good: "Which file?" (separate question for approach)
5. **Enable Choice**: 2-4 options per question
- Fewer than 2: Not a choice
- More than 4: Overwhelming
- "Other" is always available automatically
### Question Quality Checklist
Before formulating questions, verify:
- [ ] Completed research phase with documented findings
- [ ] Each option based on actual research (not assumptions)
- [ ] Each option is specific and actionable
- [ ] Context/trade-offs included in descriptions
- [ ] Questions are independent (can be answered in any order)
- [ ] Total questions: 1-6 based on complexity
## AskUserQuestion Tool Format
### Complete Tool Structure
```json
{
"questions": [
{
"question": "Clear, specific question ending with ?",
"header": "Short label (max 12 chars)",
"multiSelect": false,
"options": [
{
"label": "Concise choice (1-5 words)",
"description": "Context about this option, trade-offs, implications"
},
{
"label": "Another choice",
"description": "Why this option, when to use it"
}
]
}
]
}
```
### Field Guidelines
**question:**
- Must end with `?`
- Should be conversational and clear
- Include context from research if helpful
- Examples:
- "Which authentication approach should we implement?"
- "Where should the validation logic be added?"
- "What scope should this refactoring cover?"
**header:**
- Maximum 12 characters (strict limit)
- Acts as visual label/tag in UI
- Should be noun or noun phrase
- Examples:
- "Auth method" (11 chars)
- "File target" (11 chars)
- "Scope" (5 chars)
- "Approach" (8 chars)
**multiSelect:**
- `false`: User selects exactly one option (default for most cases)
- `true`: User can select multiple options (when choices aren't mutually exclusive)
- Always explicitly specify (don't rely on defaults)
**options:**
- Minimum 2, maximum 4 options
- Each must have `label` and `description`
**label:**
- 1-5 words typically
- Specific and scannable
- Examples:
- "JWT with refresh tokens"
- "Session-based auth"
- "OAuth 2.0 integration"
**description:**
- Explain what this option means
- Include trade-offs or implications
- Provide context for decision-making
- Examples:
- "Stateless authentication using JWT access tokens (short-lived) and refresh tokens (stored securely). Best for distributed systems."
- "Server-side session storage using Redis. Simpler but requires sticky sessions or shared session store."
## Question Templates by Category
### Target Identification Questions
**When:** Unclear which file, function, or component to modify
**Template 1: File Selection**
```json
{
"question": "Which file should be modified?",
"header": "Target file",
"multiSelect": false,
"options": [
{
"label": "src/auth/login.ts",
"description": "Main login handler with authentication logic (currently 245 lines)"
},
{
"label": "src/auth/middleware.ts",
"description": "Authentication middleware used by all protected routes (89 lines)"
},
{
"label": "src/auth/session.ts",
"description": "Session management and validation utilities (156 lines)"
}
]
}
```
**Template 2: Function/Method Selection**
```json
{
"question": "Which function needs the changes?",
"header": "Function",
"multiSelect": false,
"options": [
{
"label": "validateUser()",
"description": "Validates user credentials against database (auth.ts:45)"
},
{
"label": "authenticateToken()",
"description": "Verifies JWT token signature and expiration (auth.ts:89)"
},
{
"label": "refreshSession()",
"description": "Extends active session duration (auth.ts:134)"
}
]
}
```
### Approach/Implementation Questions
**When:** Target is clear, but implementation approach is ambiguous
**Template 1: Technical Approach**
```json
{
"question": "Which authentication approach should we implement?",
"header": "Auth method",
"multiSelect": false,
"options": [
{
"label": "JWT with HttpOnly cookies",
"description": "Store JWT in HttpOnly cookies. Prevents XSS attacks, simpler client-side code. Requires CSRF protection."
},
{
"label": "JWT in Authorization header",
"description": "Client stores JWT in memory, sends in Bearer token. More flexible for mobile apps, requires client-side token management."
},
{
"label": "Session-based with Redis",
"description": "Server-side sessions stored in Redis. Traditional approach, easier to invalidate, requires session store infrastructure."
}
]
}
```
**Template 2: Architectural Pattern**
```json
{
"question": "How should the validation logic be organized?",
"header": "Pattern",
"multiSelect": false,
"options": [
{
"label": "Middleware approach",
"description": "Create validation middleware that runs before route handlers. Reusable across routes, centralized error handling."
},
{
"label": "Service layer validation",
"description": "Add validation to UserService class methods. Closer to business logic, easier to test in isolation."
},
{
"label": "Schema-based validation",
"description": "Define JSON schemas and use validator library. Declarative, auto-generates documentation, type-safe with TypeScript."
}
]
}
```
### Scope Questions
**When:** Unclear how much work should be done
**Template 1: Feature Scope**
```json
{
"question": "What scope should this refactoring cover?",
"header": "Scope",
"multiSelect": false,
"options": [
{
"label": "Single function only",
"description": "Refactor just getUserById(). Minimal change, quick to implement and test."
},
{
"label": "Entire UserRepository class",
"description": "Refactor all user data access methods (8 functions). Consistent patterns across class."
},
{
"label": "All repository classes",
"description": "Apply pattern to UserRepository, ProductRepository, OrderRepository (3 classes, 24 functions). Codebase-wide consistency."
}
]
}
```
**Template 2: Test Coverage Scope**
```json
{
"question": "What level of test coverage should be added?",
"header": "Test scope",
"multiSelect": false,
"options": [
{
"label": "Happy path only",
"description": "Basic test for successful operation. Quick validation that feature works."
},
{
"label": "Happy path + error cases",
"description": "Success cases and expected errors (invalid input, not found, etc.). Comprehensive basic coverage."
},
{
"label": "Full coverage including edge cases",
"description": "Success, errors, edge cases (empty data, null values, rate limits, etc.). Production-ready coverage."
}
]
}
```
### Priority/Order Questions
**When:** Multiple tasks or unclear which to tackle first
**Template 1: Task Priority**
```json
{
"question": "Which aspect should be addressed first?",
"header": "Priority",
"multiSelect": false,
"options": [
{
"label": "Fix security vulnerability",
"description": "SQL injection in user search (HIGH severity). Blocks production deployment."
},
{
"label": "Improve performance",
"description": "Optimize N+1 query in dashboard (MEDIUM severity). Affects user experience but not blocking."
},
{
"label": "Add documentation",
"description": "Document API endpoints (LOW severity). Important for maintainability but not urgent."
}
]
}
```
**Template 2: Feature Ordering**
```json
{
"question": "In what order should these features be implemented?",
"header": "Order",
"multiSelect": false,
"options": [
{
"label": "Auth → Dashboard → Export",
"description": "Build foundation first. Each feature depends on previous ones."
},
{
"label": "Dashboard → Auth → Export",
"description": "Get core functionality working, add security, then enhancements."
},
{
"label": "All in parallel",
"description": "Work on all features simultaneously. Faster but requires careful integration."
}
]
}
```
### Configuration Questions
**When:** Implementation requires configuration choices
**Template 1: Library/Tool Selection**
```json
{
"question": "Which validation library should be used?",
"header": "Library",
"multiSelect": false,
"options": [
{
"label": "Zod",
"description": "TypeScript-first schema validation. Excellent type inference, modern API. Already used in frontend."
},
{
"label": "Joi",
"description": "Mature validation library. Large ecosystem, extensive documentation. Used by many enterprise projects."
},
{
"label": "class-validator",
"description": "Decorator-based validation. Works well with TypeORM entities. Already in package.json."
}
]
}
```
**Template 2: Configuration Values**
```json
{
"question": "What timeout value should be configured?",
"header": "Timeout",
"multiSelect": false,
"options": [
{
"label": "5 seconds",
"description": "Aggressive timeout. Fast failures but might interrupt legitimate slow operations."
},
{
"label": "30 seconds",
"description": "Balanced timeout. Industry standard for API requests. Recommended for most use cases."
},
{
"label": "120 seconds",
"description": "Conservative timeout. Allows for slow operations (large file uploads, complex reports)."
}
]
}
```
## Number of Questions Guidelines
### 1-2 Questions: Simple Clarification
**Use when:**
- Single point of ambiguity
- Binary or ternary choice
- Target identification only
**Example:**
```json
[
{
"question": "Which file should be modified?",
"header": "Target file",
"multiSelect": false,
"options": ["auth.ts", "middleware.ts", "session.ts"]
}
]
```
### 3-4 Questions: Moderate Complexity
**Use when:**
- Multiple independent decisions needed
- Approach and scope both unclear
- Configuration plus implementation questions
**Example:**
```json
[
{
"question": "Which component should handle validation?",
"header": "Component",
...
},
{
"question": "What validation approach should be used?",
"header": "Approach",
...
},
{
"question": "Should existing validation be preserved?",
"header": "Migration",
...
}
]
```
### 5-6 Questions: Complex Scenarios
**Use when:**
- Major feature with multiple architectural decisions
- Multiple aspects needing clarification
- Configuration, approach, scope, and priority all unclear
**Important:** Only use 5-6 questions when truly necessary. Most scenarios should use 1-4 questions.
**Example:**
```json
[
{
"question": "Which authentication method?",
"header": "Auth method",
...
},
{
"question": "Where should tokens be stored?",
"header": "Token store",
...
},
{
"question": "What scope for user roles?",
"header": "Role scope",
...
},
{
"question": "How to handle existing sessions?",
"header": "Migration",
...
},
{
"question": "Which database for sessions?",
"header": "Session DB",
...
}
]
```
## Option Generation Best Practices
### Grounding Options in Research
**Bad (Assumption-Based):**
```json
{
"label": "Use MongoDB",
"description": "NoSQL database, good for flexibility"
}
```
**Good (Research-Grounded):**
```json
{
"label": "Use MongoDB",
"description": "NoSQL database. Project already uses MongoDB for user data (see db/connection.ts). Consistent with existing stack."
}
```
### Providing Actionable Context
**Bad (Vague):**
```json
{
"label": "Refactor approach",
"description": "Better way to organize code"
}
```
**Good (Specific):**
```json
{
"label": "Extract to service layer",
"description": "Move business logic from controllers to UserService class. Follows repository pattern already used in OrderService and ProductService."
}
```
### Including Trade-offs
**Bad (One-Sided):**
```json
{
"label": "Microservices architecture",
"description": "Modern, scalable approach"
}
```
**Good (Balanced):**
```json
{
"label": "Microservices architecture",
"description": "Split into auth-service and user-service. Better scaling and independence, but adds deployment complexity. Team has Docker expertise."
}
```
### Using Codebase Evidence
**Research findings inform options:**
```
Research Results:
- Found 3 API clients: src/api/rest-client.ts, src/api/graphql-client.ts, src/api/websocket-client.ts
- rest-client.ts has timeout config (line 23: timeout: 30000)
- graphql-client.ts missing timeout (potential bug)
- websocket-client.ts uses different pattern (reconnect logic)
```
**Generated question:**
```json
{
"question": "Which API client needs timeout configuration?",
"header": "API client",
"multiSelect": false,
"options": [
{
"label": "REST client (src/api/rest-client.ts)",
"description": "Already has 30s timeout. Update existing configuration."
},
{
"label": "GraphQL client (src/api/graphql-client.ts)",
"description": "Missing timeout configuration. Likely the source of hanging requests."
},
{
"label": "WebSocket client (src/api/websocket-client.ts)",
"description": "Uses reconnect pattern instead of timeout. Different approach needed."
}
]
}
```
## Common Pitfalls
### Pitfall 1: Generic Options
**Bad:**
```json
{
"label": "Best practice approach",
"description": "Use industry standard methods"
}
```
**Why bad:** Not actionable, no clear guidance
**Fix:**
```json
{
"label": "Repository pattern with dependency injection",
"description": "Separate data access into UserRepository, injected via constructor. Used in OrderService (see src/services/order.service.ts:15)."
}
```
### Pitfall 2: Too Many Options
**Bad:**
```json
{
"question": "Which approach?",
"options": [
"Approach A",
"Approach B",
"Approach C",
"Approach D",
"Approach E",
"Approach F"
]
}
```
**Why bad:** Overwhelming, decision paralysis
**Fix:** Narrow to 2-4 most relevant options based on research. If more than 4, create multiple questions or categorize.
### Pitfall 3: Leading Questions
**Bad:**
```json
{
"question": "Should we use the superior JWT approach?",
"options": ["Yes, JWT", "No, sessions"]
}
```
**Why bad:** Biased question influences answer
**Fix:**
```json
{
"question": "Which authentication mechanism should be implemented?",
"options": [
{
"label": "JWT tokens",
"description": "Stateless, scales horizontally. Client manages tokens. Trade-off: harder to invalidate."
},
{
"label": "Server-side sessions",
"description": "Stateful, easier to invalidate. Server manages state. Trade-off: requires shared session store."
}
]
}
```
### Pitfall 4: Compound Questions
**Bad:**
```json
{
"question": "Which library and what configuration should be used?",
"options": [
"Library A with Config X",
"Library A with Config Y",
"Library B with Config X",
"Library B with Config Y"
]
}
```
**Why bad:** Mixing multiple decisions, exponential option growth
**Fix:** Separate into two questions
```json
[
{
"question": "Which library?",
"options": ["Library A", "Library B"]
},
{
"question": "What configuration?",
"options": ["Config X", "Config Y"]
}
]
```
### Pitfall 5: Asking Without Research
**Bad:**
```json
{
"question": "How should we implement authentication?",
"options": [
{"label": "Some approach", "description": "I think this might work"},
{"label": "Another approach", "description": "This could also work"}
]
}
```
**Why bad:** Not grounded in codebase reality, generic options
**Fix:** Research first
```
1. Explore codebase for existing auth patterns
2. Check package.json for auth libraries
3. Review similar implementations in repo
4. Web search for framework-specific best practices
5. Generate options based on findings
```
## Summary Checklist
Before using AskUserQuestion tool:
- [ ] Completed research phase with documented findings
- [ ] Each option grounded in research (not assumptions)
- [ ] Each option is specific and actionable (not generic)
- [ ] Descriptions include context and trade-offs
- [ ] Questions are focused (one decision per question)
- [ ] Using 1-6 questions based on complexity
- [ ] Each question has 2-4 options
- [ ] header field is ≤12 characters
- [ ] multiSelect explicitly set (true/false)
- [ ] question ends with `?`
**Remember:** The goal is clarity through specificity. Every option should be traceable back to research findings. Generic or assumed options undermine trust and lead to poor decisions.