Skip to content

RFC (Request for Comments) Process

Goal: Collaborative decision-making on major changes

What is an RFC?

An RFC is a design document proposing a significant change. It invites feedback from the team before implementation begins.

Use RFCs for: - New features (significant scope) - Breaking API changes - Architecture changes - Process changes

Don't need RFC for: - Small bug fixes - Documentation updates - Minor improvements - Experimental prototypes

RFC Process

1. Draft RFC (Author)

Create RFC document following template below.

Include: - Problem statement (what are we solving?) - Proposed solution (how will we solve it?) - Alternatives considered - Risks and unknowns - Success criteria

Format: Markdown document in Google Docs, GitHub Discussion, or shared doc

2. Share for Feedback (Author)

Post RFC in team channel:

📋 RFC: [Title]

I've written an RFC for [brief description]. Looking for feedback on the approach.

Doc: [link]
Feedback deadline: [date, 3-5 days from now]

Key questions:
- Does this solve the problem?
- Are there better approaches?
- What am I missing?

Please comment in doc or reply here. Thanks!

Feedback period: 3-5 working days (depends on urgency and complexity)

3. Incorporate Feedback (Author)

Read all comments, respond to questions: - Accept: Update RFC with suggestions - Reject: Explain why (respectfully) - Discuss: Start thread if need more input

Goal: Convergence, not consensus (can't please everyone)

4. Meeting (If Needed)

Most RFCs don't need meeting (async discussion sufficient)

Schedule meeting if: - Complex tradeoffs - Strong disagreement - Need real-time brainstorming

Meeting agenda: 1. Present RFC (10 min) 2. Q&A (20 min) 3. Discussion (20 min) 4. Decision (10 min)

5. Decision (Author or Tech Lead)

Author makes final decision after considering feedback

Document decision: - Update RFC with final decision - Add "Status: Accepted" or "Status: Rejected" - Summarize key changes from feedback - Thank contributors

Create ADR if decision is architectural

6. Implementation

If accepted: - Create issues for implementation - Link to RFC from issues - Track progress - Update RFC if implementation differs

RFC Template

# RFC: [Title]

**Author**: @username
**Date**: YYYY-MM-DD
**Status**: Draft | In Review | Accepted | Rejected | Implemented
**PR**: #XXX (if applicable)

## Summary

[1-2 paragraph summary of proposal]

## Problem Statement

**What problem are we trying to solve?**
-

**Why is this important?**
-

**Who is affected?**
-

## Proposed Solution

**High-level approach**:
[Describe solution in plain language]

**Key design decisions**:
1. Decision 1 (and rationale)
2. Decision 2 (and rationale)

**Example usage** (if API change):
```cpp
// Example code showing how it would be used

Implementation sketch: [Rough implementation plan, doesn't have to be detailed]

Alternatives Considered

Alternative 1: [Name]

Approach: [Description] Pros: - Cons: - Why not chosen: -

Alternative 2: [Name]

[Same format]

Alternative 3: Do Nothing

Pros: No work required Cons: Problem persists Why not chosen: [Why status quo is unacceptable]

Risks and Unknowns

Technical risks:

Unknowns (need to investigate):

Mitigations:

Success Criteria

How will we know this is successful? - [ ] Criterion 1 (measurable) - [ ] Criterion 2 - [ ] Criterion 3

Timeline

Estimated effort: [2 weeks, 1 month, etc.]

Milestones: 1. [Phase 1] 2. [Phase 2] 3. [Phase 3]

Dependencies:

Open Questions

  1. Question 1?
  2. Question 2?

[Resolve these before finalizing]

References

  • [Related RFC/ADR]
  • [External docs]
  • [Research papers]

Feedback Summary

[After feedback period, summarize key feedback and how you addressed it]

Major feedback: - Feedback 1 → Addressed by [change] - Feedback 2 → Not addressed because [reason]

Changes made: - Change 1 - Change 2

Still open: - Question 1 (need more input) ```

Examples

Example: Small RFC (Async Discussion Sufficient)

RFC: Add dry/wet mix parameter to all effects

Process: 1. Author writes 1-page RFC 2. Posts in Slack, 3-day feedback window 3. Team comments (mostly supportive, minor suggestions) 4. Author updates RFC, marks "Accepted" 5. Creates issue, implements

Total time: 1 week

Example: Large RFC (Needs Meeting)

RFC: Rewrite state management with new architecture

Process: 1. Author writes 5-page RFC with diagrams 2. Posts in Slack, 5-day feedback window 3. Major questions and concerns raised 4. Author schedules 1-hour meeting 5. Meeting: Present, discuss, converge on approach 6. Author updates RFC based on meeting 7. Final review (async), marks "Accepted" 8. Creates ADR-042 documenting decision 9. Creates issues for implementation

Total time: 3 weeks (including implementation)

Tips for Good RFCs

Writing

Be clear: - Use plain language - Define acronyms - Include examples

Be concise: - 1-3 pages ideal - Use bullet points - Diagrams help

Be thorough: - Consider alternatives - Identify risks - Define success

Getting Feedback

Ask specific questions: - "Does this API make sense?" - "Am I missing any edge cases?" - "Is this too complex?"

Invite dissent: - "What could go wrong?" - "Why might this be a bad idea?" - "What am I not considering?"

Respond graciously: - Thank commenters - Explain decisions - Accept criticism

Making Decisions

Seek agreement, not unanimity: - Can't make everyone happy - Gather input, then decide - Explain reasoning

Be decisive: - Don't let RFC linger forever - Set deadline for decision - Move forward

Document dissent: - Note unresolved disagreements - Explain why proceeding anyway - Revisit later if needed

Anti-Patterns

❌ RFC Paralysis

Problem: Endless discussion, no decision Solution: Set deadline, author makes final call

❌ RFC Theater

Problem: Decision already made, RFC is formality Solution: Don't write RFC if mind made up

❌ RFC Overload

Problem: RFC for every tiny thing Solution: Reserve for significant changes only

❌ RFC Abandonment

Problem: Write RFC, then ignore feedback Solution: Genuinely consider feedback, engage

Resources


Remember: RFCs are for collaboration, not gatekeeping. Make the process as lightweight as reasonable.