Feature documentation serves to:
- Define requirements before implementation begins
- Clarify scope and goals through structured questions
- Track progress on feature development
- Provide context for reviewers and future maintainers
- Align team on feature design and implementation
- Preserve decisions and rationale for future reference
See active-features.md for the current list of ongoing feature work.
See completed-features.md for the complete history of finished features.
Create a new folder in docs/features/{feature-name}/ with three core documents:
- README.md - Feature overview, status, and quick summary
- questions.md - Clarifying questions to refine requirements
- specification.md - Detailed technical specification
Recommended structure (flexible based on feature complexity):
docs/features/{feature-name}/
├── README.md # Overview, status tracking, quick summary
├── questions.md # Questions for product owner/stakeholders
└── specification.md # Technical specification and implementation details
The questions.md file helps clarify:
- Scope: What's included vs. what's deferred?
- Requirements: What are the must-haves vs. nice-to-haves?
- Constraints: What limitations or dependencies exist?
- Success criteria: How do we know it's complete?
- Priority: What's the timeline and urgency?
Product owner or stakeholders answer these questions directly in the document to provide clear direction.
Based on question answers:
- Refine the specification with clearer requirements
- Update scope and goals
- Add implementation details
- Document decisions and rationale
- Define acceptance criteria
- Create implementation plan (can be in specification or separate document)
- Break down into phases or milestones
- Track progress with checkboxes
- Commit frequently with conventional commit messages
- Update documentation as implementation progresses
When feature is complete:
- Mark status as ✅ Complete in feature README
- Move entry from active-features.md to completed-features.md
- Feature documentation remains in repository for reference
- Implementation history preserved in git
For features that are fully mature and well-documented elsewhere:
- Consider moving to git history (delete from main branch)
- Update completed-features.md to reference git commit/tag where documentation existed
- Keep entry in completed-features.md with link to git history
Each feature should have three core documents. Templates are provided to make creating new features easier.
Use these templates when creating a new feature:
- TEMPLATE-README.md - Feature overview and status tracking
- TEMPLATE-QUESTIONS.md - Clarifying questions for stakeholders
- TEMPLATE-SPECIFICATION.md - Detailed technical specification
To create a new feature:
- Copy the templates to a new folder:
docs/features/{feature-name}/ - Rename files (remove
TEMPLATE-prefix):README.md,questions.md,specification.md - Fill in the templates with feature-specific information
- Add the new feature to active-features.md
- README.md: High-level overview, status tracking, quick reference
- questions.md: Clarify requirements with product owners before implementation
- specification.md: Detailed technical design, implementation plan, acceptance criteria
- 📋 Specified - Requirements documented, awaiting implementation
- 🚧 In Progress - Implementation has started
- ✅ Completed - Feature fully implemented and merged
- ⏸️ Deferred - Work postponed for future consideration
- 🔄 Refactoring - Being redesigned or improved
- ❌ Cancelled - Feature abandoned or superseded
Create feature documentation when:
- ✅ Adding new user-facing capabilities
- ✅ Implementing significant new functionality
- ✅ Building features that span multiple components
- ✅ Work requires stakeholder alignment
- ✅ Design decisions need documentation
- ✅ Implementation will take multiple sessions
Skip formal feature documentation for:
- ❌ Simple bug fixes
- ❌ Internal code improvements (use refactoring docs)
- ❌ Trivial enhancements
- ❌ Emergency hotfixes
Good feature specifications:
- ✅ Clear problem statement - Explain why this matters
- ✅ Defined scope - What's in and what's out
- ✅ User-focused goals - How does this help users?
- ✅ Technical feasibility - Can we actually build this?
- ✅ Measurable outcomes - How do we know we're done?
- ✅ Risk assessment - What could go wrong?
Keep documentation updated:
- After each milestone: Update status and checklist
- When blocked: Document blockers and decisions
- On completion: Mark feature as complete
- Post-implementation: Add lessons learned (optional)
Features add new capabilities for users.
Refactorings improve existing code quality.
| Aspect | Features | Refactorings |
|---|---|---|
| Purpose | Add new user-facing functionality | Improve code quality and maintainability |
| Outcome | New capabilities, behaviors, or options | Better structure, performance, readability |
| Visibility | Users see and use the changes | Users don't notice (internal improvement) |
| Location | docs/features/ |
docs/refactors/ |
Some work may involve both - implement a feature, then refactor to improve it.
- Refactoring Plans - Code quality improvements
- Development Principles - Core principles guiding development
- Contributing Guidelines - General contribution process
- Architectural Decision Records - Significant design decisions
- Start with the problem - Why does this feature matter?
- Use questions.md - Clarify ambiguities early
- Keep it simple - Avoid over-engineering
- Include examples - Show how it works
- Define success - Clear acceptance criteria
- Get feedback early - Share draft specifications
- Answer questions promptly - Unblock development
- Prioritize clearly - What's must-have vs. nice-to-have?
- Be specific - Vague requirements lead to wrong solutions
- Consider constraints - Technical limitations matter
- Validate assumptions - Check if the proposed solution fits needs
- Read everything - Questions, specification, related docs
- Ask for clarification - Don't guess on unclear requirements
- Update as you go - Keep documentation current
- Track progress - Update checklists and status
- Document decisions - Capture important choices made during implementation
- Verify completeness - All acceptance criteria met?
- Check alignment - Matches specification and principles?
- Test thoroughly - Does it actually work?
- Provide feedback - Constructive suggestions for improvement
- Approve clearly - Signal when it's ready to merge
- Open a GitHub issue with label
feature - Reference specific feature documents
- Tag relevant maintainers for feedback
Last Updated: October 9, 2025