Problem
Large changes are decided in meetings or in code, excluding people who bear the consequences. Context is lost, and the same debates recur. Late objections cause expensive rework.
Also known as: design-doc-review, request-for-comments
Make significant technical decisions through written proposals reviewed asynchronously by affected stakeholders.
Large changes are decided in meetings or in code, excluding people who bear the consequences. Context is lost, and the same debates recur. Late objections cause expensive rework.
An RFC is a written proposal that invites comment before a significant change is built. It trades a little speed up front for fewer surprises later. Rust, Python (PEPs), and many companies use variants.
Good RFCs are short, typically two to five pages. Their value is the alternatives section, which forces authors to show that other options were considered and why they lost. Reviewers should comment on risks and missing cases, not preferences.
The lifecycle is explicit and time-boxed.
Draft --> In Review (7-14 days) --> Decision
|--> Accepted --> ADR + tickets
|--> Rejected (kept, with reasons)
`--> Withdrawn
Template: Context | Proposal | Alternatives | Risks | Rollout | Open questions
Choose where RFCs live, typically a repository with pull requests so comments are threaded and history is kept. Tag affected teams automatically with code owners, and close the loop by marking status and linking to the delivered change so future readers see the outcome.
None - repository or wiki
Medium - reviewer time
Low
RFCs written after the decision is already implemented
No decider, so threads never close
Threshold too low, flooding reviewers with trivia