Initial commit
This commit is contained in:
353
skills/docs-and-changelogs/scripts/create_prd.py
Normal file
353
skills/docs-and-changelogs/scripts/create_prd.py
Normal file
@@ -0,0 +1,353 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Create a new Product Requirement Document (PRD).
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def slugify(text):
|
||||
"""Convert text to lowercase slug format."""
|
||||
text = text.lower()
|
||||
text = re.sub(r'[^\w\s-]', '', text)
|
||||
text = re.sub(r'[-\s]+', '-', text)
|
||||
return text.strip('-')
|
||||
|
||||
|
||||
def create_prd(title, prd_dir='docs/PRD', author=''):
|
||||
"""Create a new PRD file."""
|
||||
prd_dir = Path(prd_dir)
|
||||
prd_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
slug = slugify(title)
|
||||
filename = f"{slug}.md"
|
||||
filepath = prd_dir / filename
|
||||
|
||||
date = datetime.now().strftime('%Y-%m-%d')
|
||||
|
||||
content = f"""# Product Requirement Document: {title}
|
||||
|
||||
**Author:** {author or '[Your Name]'}
|
||||
|
||||
**Date:** {date}
|
||||
|
||||
**Status:** Draft
|
||||
|
||||
**Last Updated:** {date}
|
||||
|
||||
## Executive Summary
|
||||
|
||||
[Brief 2-3 sentence overview of what this feature is and why it matters]
|
||||
|
||||
## Problem Statement
|
||||
|
||||
### Current Situation
|
||||
|
||||
[Describe the current state and what pain points exist]
|
||||
|
||||
### User Impact
|
||||
|
||||
[Who is affected by this problem and how?]
|
||||
|
||||
### Business Impact
|
||||
|
||||
[What is the business cost of not solving this problem?]
|
||||
|
||||
## Goals and Objectives
|
||||
|
||||
### Primary Goals
|
||||
|
||||
1. [Goal 1]
|
||||
2. [Goal 2]
|
||||
3. [Goal 3]
|
||||
|
||||
### Success Metrics
|
||||
|
||||
- [Metric 1]: [Target]
|
||||
- [Metric 2]: [Target]
|
||||
- [Metric 3]: [Target]
|
||||
|
||||
### Non-Goals
|
||||
|
||||
[What is explicitly out of scope for this feature?]
|
||||
|
||||
- [Non-goal 1]
|
||||
- [Non-goal 2]
|
||||
|
||||
## User Stories
|
||||
|
||||
### Story 1: [User Type]
|
||||
|
||||
**As a** [user type]
|
||||
**I want to** [action]
|
||||
**So that** [benefit]
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] [Criterion 1]
|
||||
- [ ] [Criterion 2]
|
||||
- [ ] [Criterion 3]
|
||||
|
||||
### Story 2: [User Type]
|
||||
|
||||
**As a** [user type]
|
||||
**I want to** [action]
|
||||
**So that** [benefit]
|
||||
|
||||
**Acceptance Criteria:**
|
||||
- [ ] [Criterion 1]
|
||||
- [ ] [Criterion 2]
|
||||
|
||||
## Requirements
|
||||
|
||||
### Functional Requirements
|
||||
|
||||
#### Must Have (P0)
|
||||
|
||||
1. **[Requirement 1]**
|
||||
- Description: [Details]
|
||||
- User Impact: [High/Medium/Low]
|
||||
|
||||
2. **[Requirement 2]**
|
||||
- Description: [Details]
|
||||
- User Impact: [High/Medium/Low]
|
||||
|
||||
#### Should Have (P1)
|
||||
|
||||
1. **[Requirement 3]**
|
||||
- Description: [Details]
|
||||
- User Impact: [High/Medium/Low]
|
||||
|
||||
#### Nice to Have (P2)
|
||||
|
||||
1. **[Requirement 4]**
|
||||
- Description: [Details]
|
||||
- User Impact: [High/Medium/Low]
|
||||
|
||||
### Non-Functional Requirements
|
||||
|
||||
#### Performance
|
||||
|
||||
- [Performance requirement 1]
|
||||
- [Performance requirement 2]
|
||||
|
||||
#### Security
|
||||
|
||||
- [Security requirement 1]
|
||||
- [Security requirement 2]
|
||||
|
||||
#### Accessibility
|
||||
|
||||
- [Accessibility requirement 1]
|
||||
- [Accessibility requirement 2]
|
||||
|
||||
#### Scalability
|
||||
|
||||
- [Scalability requirement 1]
|
||||
- [Scalability requirement 2]
|
||||
|
||||
## Design Considerations
|
||||
|
||||
### User Experience
|
||||
|
||||
[Describe the intended user experience]
|
||||
|
||||
#### User Flow
|
||||
|
||||
1. [Step 1]
|
||||
2. [Step 2]
|
||||
3. [Step 3]
|
||||
|
||||
#### UI Components
|
||||
|
||||
- [Component 1]: [Description]
|
||||
- [Component 2]: [Description]
|
||||
|
||||
### Technical Architecture
|
||||
|
||||
[High-level technical approach]
|
||||
|
||||
#### Components
|
||||
|
||||
- **[Component 1]**: [Purpose and responsibilities]
|
||||
- **[Component 2]**: [Purpose and responsibilities]
|
||||
|
||||
#### Data Model
|
||||
|
||||
[Overview of data structures and relationships]
|
||||
|
||||
#### APIs
|
||||
|
||||
- **[Endpoint 1]**: [Purpose]
|
||||
- **[Endpoint 2]**: [Purpose]
|
||||
|
||||
### Integration Points
|
||||
|
||||
- [System/Service 1]: [How it integrates]
|
||||
- [System/Service 2]: [How it integrates]
|
||||
|
||||
## Dependencies
|
||||
|
||||
### Internal Dependencies
|
||||
|
||||
- [Dependency 1]: [Why needed]
|
||||
- [Dependency 2]: [Why needed]
|
||||
|
||||
### External Dependencies
|
||||
|
||||
- [Third-party service 1]: [Purpose]
|
||||
- [Third-party service 2]: [Purpose]
|
||||
|
||||
### Blocking Issues
|
||||
|
||||
- [Issue 1]: [Resolution plan]
|
||||
- [Issue 2]: [Resolution plan]
|
||||
|
||||
## Risks and Mitigation
|
||||
|
||||
| Risk | Impact | Likelihood | Mitigation Strategy |
|
||||
|------|--------|------------|---------------------|
|
||||
| [Risk 1] | High/Medium/Low | High/Medium/Low | [Strategy] |
|
||||
| [Risk 2] | High/Medium/Low | High/Medium/Low | [Strategy] |
|
||||
|
||||
## Timeline and Milestones
|
||||
|
||||
### Phase 1: [Name] ([Duration])
|
||||
|
||||
- [ ] [Milestone 1]
|
||||
- [ ] [Milestone 2]
|
||||
|
||||
### Phase 2: [Name] ([Duration])
|
||||
|
||||
- [ ] [Milestone 3]
|
||||
- [ ] [Milestone 4]
|
||||
|
||||
### Phase 3: [Name] ([Duration])
|
||||
|
||||
- [ ] [Milestone 5]
|
||||
- [ ] [Milestone 6]
|
||||
|
||||
### Target Launch Date
|
||||
|
||||
[Date or timeframe]
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### Unit Testing
|
||||
|
||||
[Approach to unit testing]
|
||||
|
||||
### Integration Testing
|
||||
|
||||
[Approach to integration testing]
|
||||
|
||||
### User Acceptance Testing
|
||||
|
||||
[UAT plan and criteria]
|
||||
|
||||
### Performance Testing
|
||||
|
||||
[Performance testing approach]
|
||||
|
||||
## Launch Plan
|
||||
|
||||
### Pre-Launch Checklist
|
||||
|
||||
- [ ] [Item 1]
|
||||
- [ ] [Item 2]
|
||||
- [ ] [Item 3]
|
||||
|
||||
### Rollout Strategy
|
||||
|
||||
[Describe how the feature will be rolled out]
|
||||
|
||||
- **Audience**: [Who gets access first]
|
||||
- **Timeline**: [Phased rollout schedule]
|
||||
- **Monitoring**: [What metrics to watch]
|
||||
|
||||
### Communication Plan
|
||||
|
||||
- **Internal**: [How to communicate to team]
|
||||
- **External**: [How to communicate to users]
|
||||
|
||||
### Rollback Plan
|
||||
|
||||
[How to rollback if issues arise]
|
||||
|
||||
## Post-Launch
|
||||
|
||||
### Monitoring
|
||||
|
||||
- [Metric to monitor 1]
|
||||
- [Metric to monitor 2]
|
||||
|
||||
### Iteration Plan
|
||||
|
||||
[How we'll iterate based on feedback]
|
||||
|
||||
### Success Evaluation
|
||||
|
||||
[How and when we'll evaluate if we met our goals]
|
||||
|
||||
## Open Questions
|
||||
|
||||
- [ ] [Question 1]
|
||||
- [ ] [Question 2]
|
||||
- [ ] [Question 3]
|
||||
|
||||
## Stakeholders
|
||||
|
||||
| Name | Role | Responsibility |
|
||||
|------|------|----------------|
|
||||
| [Name] | [Role] | [What they're responsible for] |
|
||||
| [Name] | [Role] | [What they're responsible for] |
|
||||
|
||||
## References
|
||||
|
||||
- [Link to related PRDs]
|
||||
- [Link to design mockups]
|
||||
- [Link to technical specs]
|
||||
- [Link to user research]
|
||||
|
||||
## Appendix
|
||||
|
||||
### Terminology
|
||||
|
||||
- **[Term 1]**: [Definition]
|
||||
- **[Term 2]**: [Definition]
|
||||
|
||||
### Additional Resources
|
||||
|
||||
- [Resource 1]
|
||||
- [Resource 2]
|
||||
"""
|
||||
|
||||
with open(filepath, 'w') as f:
|
||||
f.write(content)
|
||||
|
||||
print(f"Created PRD: {filepath}")
|
||||
|
||||
return filepath
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description='Create a new Product Requirement Document')
|
||||
parser.add_argument('title', help='Title of the PRD')
|
||||
parser.add_argument('--dir', default='docs/PRD', help='PRD directory path')
|
||||
parser.add_argument('--author', help='Document author name')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
filepath = create_prd(args.title, args.dir, args.author or '')
|
||||
|
||||
print("\nNext steps:")
|
||||
print(f"1. Edit {filepath} to complete all sections")
|
||||
print("2. Share with stakeholders for review")
|
||||
print("3. Refine based on feedback")
|
||||
print("4. Get final approval before implementation")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user