Requests for Comment (RFCs)
Proposing and documenting technical decisions
A Request for Change (RFC) is a structured document used to propose, discuss, and document significant technical or organizational decisions. Think of it as a formal way to think through changes before implementing them, ensuring everyone understands the problem, the proposed solution, and the implications.
What are RFCs?
RFCs help you:
- Propose Changes: Present ideas for significant changes or features
- Document Thinking: Capture the reasoning behind decisions
- Enable Collaboration: Get feedback from team members before committing
- Create Records: Maintain a history of why decisions were made
- Reduce Risk: Identify problems and alternatives before implementation
- Align Teams: Ensure everyone understands what's being built and why
RFC Properties
Each RFC has:
Basic Information
- RFC Number: Auto-generated identifier (e.g., "RFC-2024-001")
- Title: Clear, descriptive name for the change being proposed
- Summary: Brief overview of what the RFC proposes
- Author: The person who created the RFC
- Status: Current state of the RFC (open, closed, or converted to ADR)
- Project: Which project this RFC belongs to (required)
- Statement of Work: Optional link to a specific SOW
- Organization: Which organization owns this RFC
Status Lifecycle
Open:
- RFC is being drafted or discussed
- Can be edited and updated
- Accepting feedback and comments
- Not yet decided
Closed:
- Decision has been made (accepted or rejected)
- No longer accepting changes
- Locked for historical reference
- May have moved to implementation
ADR Created:
- Decision was accepted
- Converted to an Architecture Decision Record
- Documented in formal architecture docs
- Represents a binding decision
Collaborators
- Owner: The RFC author (automatically added)
- Collaborators: Team members contributing to the RFC
- Each collaborator can view and edit while RFC is open
Created/Updated
- Created At: When the RFC was first written
- Updated At: Last time any changes were made
- Close Date: When the RFC was closed (if applicable)
RFC Structure
RFCs are organized into sections that guide you through documenting your proposal:
Standard RFC Sections
Understanding the Problem
Summary:
- High-level overview of what's being proposed
- What problem are you solving?
- Why is this important?
Problem Statement:
- Detailed explanation of the current problem
- Who is affected?
- What's the impact of not solving this?
Background:
- Context and history
- What led to this problem?
- What have we tried before?
Motivation:
- Why solve this now?
- What are the benefits?
- What happens if we don't address this?
Proposing the Solution
Solution Overview:
- High-level description of the proposed solution
- Key concepts and approach
- What will change?
Technical Details:
- Specific implementation details
- Technologies and tools involved
- Architecture and design decisions
- Code examples or diagrams
UX/UI Considerations:
- User experience implications
- Interface changes
- Usability concerns
- Design mockups or wireframes
Alternatives Considered:
- Other approaches you evaluated
- Why were they rejected?
- Trade-offs between options
Analyzing Impact
Technical Impact:
- How does this affect existing systems?
- Performance implications
- Scalability considerations
- Technical debt created or resolved
Organizational Impact:
- Team structure changes
- Training needs
- Process modifications
- Resource requirements
Security Impact:
- Security implications
- New vulnerabilities introduced
- Security improvements
- Compliance considerations
Operational Impact:
- Deployment complexity
- Monitoring and maintenance
- Support requirements
- Incident response changes
Planning Implementation
Implementation Plan:
- Step-by-step approach
- Phases or milestones
- Testing strategy
- Rollout plan
Timeline:
- Estimated duration
- Key dates and deadlines
- Dependencies on other work
Dependencies:
- What must be done first?
- External dependencies
- Team dependencies
- Resource constraints
Risks and Mitigations:
- What could go wrong?
- How likely are these risks?
- How can we mitigate them?
Reaching Conclusion
Open Questions:
- Unresolved issues
- Areas needing more research
- Items for future discussion
Decision:
- Final decision made (accept, reject, defer)
- Who made the decision?
- When was it decided?
Decision Rationale:
- Why this decision was made
- Key factors that influenced it
- Trade-offs accepted
Creating an RFC
When to Write an RFC
Create an RFC when you need to:
- Propose a significant architectural change
- Introduce a new technology or tool
- Change a core system or process
- Make a decision with long-term implications
- Resolve a complex technical problem
- Coordinate a large, multi-team effort
When NOT to Write an RFC
Skip the RFC for:
- Small bug fixes
- Minor refactoring
- Routine maintenance
- Well-established patterns
- Individual task decisions
- Urgent production issues (address first, document later)
Starting Your RFC
-
Choose Your Project
- Select the project this RFC relates to
- Optionally link to a specific Statement of Work
-
Write a Clear Title
- Be specific and descriptive
- Example: "Migrate user authentication to OAuth 2.0"
- Not: "Auth changes"
-
Draft a Summary
- 2-3 sentences explaining the proposal
- What, why, and high-level how
-
Add Collaborators
- Invite team members who should contribute
- Include stakeholders who need visibility
Building Your RFC
Fill in the sections:
- Start with problem statement and background
- Explain your proposed solution
- Document alternatives you considered
- Analyze the various impacts
- Create an implementation plan
- List open questions and risks
- Leave decision sections for later
Tips:
- Write clearly and concisely
- Use diagrams and examples
- Link to relevant resources
- Update as you learn more
- Iterate based on feedback
The RFC Workflow
1. Draft Phase (Status: Open)
Activities:
- Write the initial RFC
- Fill in key sections
- Add diagrams or examples
- Invite collaborators
Who's Involved: RFC author, early collaborators
2. Review and Discussion (Status: Open)
Activities:
- Share with team for feedback
- Discuss in meetings or comments
- Refine the proposal
- Address questions and concerns
- Update sections based on feedback
Who's Involved: Collaborators, stakeholders, technical reviewers
3. Revision (Status: Open)
Activities:
- Incorporate feedback
- Update technical details
- Refine implementation plan
- Resolve open questions
- Consider alternatives raised
Who's Involved: RFC author with input from team
4. Decision (Status: Changes to Closed or ADR Created)
Outcomes:
Accepted:
- Change status to "ADR Created"
- Document the decision and rationale
- Convert to Architecture Decision Record
- Move to implementation
Rejected:
- Change status to "Closed"
- Document why it was rejected
- Preserve for future reference
- May revisit later
Deferred:
- Change status to "Closed"
- Document reasons for deferral
- Note conditions for reconsidering
- Preserve the research
5. After Closure
Once closed, the RFC:
- Becomes read-only
- Serves as historical record
- Can be referenced in code or docs
- Provides context for future decisions
Working with RFCs
Viewing RFCs
You can see RFCs in different ways:
- All RFCs: Every RFC in your organization
- Project RFCs: All RFCs for a specific project
- By Status: Filter to open, closed, or ADR-created
- Search: Find RFCs by title, summary, or content
Editing RFCs
While Open:
- Edit any section
- Add or remove collaborators
- Update implementation details
- Refine based on feedback
When Closed:
- Cannot edit content
- Can only update status
- Preserved as historical record
Collaborating on RFCs
As a Collaborator:
- Read and understand the proposal
- Provide constructive feedback
- Suggest alternatives
- Ask clarifying questions
- Help refine the solution
As the Author:
- Incorporate feedback thoughtfully
- Respond to questions
- Update the RFC as it evolves
- Drive toward a decision
- Document the final outcome
RFC Best Practices
Writing Effective RFCs
Do:
- Start with the problem, not the solution
- Be specific and concrete
- Consider multiple alternatives
- Analyze all types of impact
- Identify risks honestly
- Update as you learn
- Keep it concise but thorough
Don't:
- Jump straight to implementation details
- Ignore alternatives
- Downplay risks or negative impacts
- Write once and never update
- Make it too long (aim for clarity over length)
- Skip the rationale
Problem Statement Tips
Good Problem Statements:
"Users currently cannot reset their passwords without
contacting support, resulting in 50+ support tickets
per week and frustrated users unable to access their
accounts quickly."Poor Problem Statements:
"Password reset doesn't work well."What makes it good:
- Specific impact (50+ tickets/week)
- Identifies who's affected (users, support team)
- Explains the consequence (frustration, slow access)
- Measurable and clear
Solution Description Tips
Good Solution Descriptions:
"Implement a self-service password reset flow that
sends a secure, time-limited reset link to the user's
email. The link expires after 1 hour and can only be
used once. Users can initiate this from the login page
without support intervention."Poor Solution Descriptions:
"Add password reset functionality."What makes it good:
- Specific approach (email with time-limited link)
- Security considerations (expires, single-use)
- User experience (from login page, self-service)
- Clear boundaries (no support needed)
Decision-Making Guidelines
Accept when:
- Problem is well-understood
- Solution addresses the problem
- Impacts are acceptable
- Team has consensus
- Implementation is feasible
Reject when:
- Problem isn't significant enough
- Solution has major drawbacks
- Better alternatives exist
- Timing is wrong
- Resources aren't available
Defer when:
- More research is needed
- Dependencies aren't ready
- Priorities have shifted
- Better to wait for X to complete
Common RFC Patterns
Technical Architecture RFCs
Focus on:
- System design and architecture
- Technology choices
- Integration patterns
- Data models
- API design
Key Sections:
- Technical Details
- Technical Impact
- Implementation Plan
- Alternatives Considered
Process Change RFCs
Focus on:
- Team workflows
- Development processes
- Deployment procedures
- Communication patterns
Key Sections:
- Organizational Impact
- Implementation Plan
- Timeline
- Training needs
Infrastructure RFCs
Focus on:
- Hosting and deployment
- Scaling and performance
- Monitoring and alerting
- Security and compliance
Key Sections:
- Technical Details
- Operational Impact
- Security Impact
- Costs and resource implications
Linking RFCs to Work
Connect to Projects
Every RFC must belong to a project:
- Shows which client or initiative it relates to
- Groups related RFCs together
- Provides organizational context
Optional SOW Links
Link an RFC to a specific Statement of Work when:
- The RFC proposes changes for a specific deliverable
- Implementation will be part of a particular SOW
- You want to track RFC as part of that work
Note: The SOW must belong to the same project as the RFC.
From RFC to Implementation
When an RFC is accepted:
-
Convert to ADR (Architecture Decision Record)
- Document the binding decision
- Add to architecture documentation
- Status becomes "ADR Created"
-
Create Work Items
- Break down implementation into tasks
- Add to appropriate Statement of Work
- Reference the RFC number in tasks
-
Track Progress
- Link tasks back to RFC
- Note RFC number in code comments
- Update team on implementation progress
RFC Numbers
Automatic Numbering
RFCs get automatic, unique numbers:
Format: RFC-YEAR-###
Examples:
RFC-2024-001- First RFC in 2024RFC-2024-042- 42nd RFC in 2024RFC-2025-001- First RFC in 2025
How it works:
- Year is based on when the RFC is created
- Number increments automatically
- Unique within your organization
- Cannot be changed after creation
Why Automatic Numbers?
- Easy to reference in discussions
- Sortable and searchable
- No manual tracking needed
- Clear chronological order
- Prevents duplicates
Troubleshooting
Can't Edit an RFC
Check the status:
- Only "open" RFCs can be edited
- Closed or ADR-created RFCs are read-only
- Preserves historical record
Solution:
- If it needs updates, create a new RFC
- Reference the previous RFC number
- Explain why a new RFC is needed
RFC Won't Link to SOW
Common Issue: SOW belongs to a different project
Solution:
- Verify the SOW's project matches the RFC's project
- Either change which SOW you're linking to
- Or create the RFC in the correct project
Lost RFC
Search by:
- RFC number (RFC-2024-001)
- Title keywords
- Project name
- Author name
Check filters:
- Status filter may hide closed RFCs
- Project filter may exclude it
- Organization filter in multi-org setups
Decision Made But RFC Still Open
Don't forget to:
- Add decision to the "Decision" section
- Add rationale to "Decision Rationale" section
- Change status to "closed" or "adr_created"
- Add close date