This reference provides templates, patterns, and best practices for formulating clarifying questions that are grounded in research and lead to actionable answers.
Scanned 6/1/2026
Install via CLI
openskills install tools-only/X-Skills# 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.
No comments yet. Be the first to comment!