Deep Dive into RFCs: Capturing Collaborative Design in Docs-as-Code¶
RFCs — Request for Comments — are one of the most powerful tools for teams trying to make better architecture and design decisions without descending into endless meetings or tribal knowledge.
Used properly, RFCs create space for exploration, debate, feedback, and consensus across engineering. They help us decide what to build, how to build it, and most importantly — why we're going that way, while documenting the alternative paths we left behind.
In this deep dive, we’ll explore:
- What an RFC is and why it’s different from an ADR
- When to write one
- The anatomy of a good RFC
- Review and signoff processes that work
- Tips to integrate RFCs into your daily flow
What is an RFC?¶
A Request for Comments is a collaborative design artefact that outlines a proposal for a significant technical or architectural change. It’s not a decision (yet) — it’s an open invitation to shape one.
It’s used to:
- Share context and intent
- Propose architectural options
- Invite feedback
- Document discussion history
- Guide implementation and future reference
When to Use an RFC¶
| Trigger | Example |
|---|---|
| New architectural direction | Replace monolith with microservices |
| Significant refactor | Split telemetry handler from app logic |
| Cross-team dependencies | Propose shared config service |
| Ambiguity or conflict | Should we use Kafka or Redis Streams? |
| Evaluation of 3rd-party tooling | SSO with Keycloak vs Auth0 |
If the outcome has long-lasting impact, or multiple stakeholders are involved — write an RFC.
Structure of a Good RFC¶
---
title: "RFC-005: Redesign API Authentication"
status: "draft"
author: "team-api"
component: "auth-gateway"
created: "2025-05-01"
---
## Summary
Short and clear explanation of the problem and proposed change.
## Motivation
Why this matters. What problems are we solving?
## Detailed Proposal
- Architecture sketch
- Sequence diagrams
- Service impact
- Data model changes
## Alternatives Considered
What else did we explore and why were they rejected?
## Impact Analysis
What will change? Who needs to know? What risks exist?
## Open Questions
Things still under debate or to be validated.
## Timeline and Rollout
Rough implementation and adoption plan.
## Feedback History
Thread summaries or issue discussions linked here.
Lifecycle of an RFC¶
- Draft: Initial writeup with team or squad
- Discussion: Shared with broader teams
- Updates: Revisions made as feedback lands
- Approved: Accepted and moved into roadmap
- Abandoned / Rejected: Closed with explanation
- Archived: Linked from ADR or historical reference
Keep this flow lightweight but visible.
From RFC to ADR¶
Once a decision has been made, convert the RFC’s selected option into a formal ADR.
Link between them:
- From RFC: “See ADR-014 for the adopted design”
- From ADR: “Result of RFC-005”
This preserves exploration history without muddying the final record.
Running Good RFC Reviews¶
1. Open in PR, not email¶
Use GitHub or Azure DevOps Pull Requests to review and comment
2. Use tagging¶
Assign reviewers by area or team
3. Set a deadline¶
Say: “Feedback closes Friday EOD”
4. Accept dissent¶
Summarise objections and why a direction was chosen anyway
5. Link to real tickets¶
Reference stories, features, tech debt cleanup
Linking RFCs to Your Work¶
- Jira/ADO: “This story is blocked by RFC-007”
- README or repo docs: “See RFC-012 for legacy auth removal”
- Test strategy: “Covers requirements from RFC-010”
RFC Template and Metadata¶
---
title: "RFC-007: Unified Config Service"
author: "infra-team"
status: "proposed"
component: "config-api"
created: "2025-04-30"
tags: ["config", "microservices", "refactor"]
Track:
- Status: draft, discussion, accepted, rejected, superseded
- Tags: for filtering and grouping
- Created date and revision history
Folder Structure Example¶
docs/
├── rfc/
│ ├── rfc-001-initial-schema.md
│ ├── rfc-007-unified-config.md
├── adr/
│ ├── adr-014-use-keycloak.md
├── diagrams/
│ ├── config-flow.mmd
Common Pitfalls¶
| Pitfall | Fix |
|---|---|
| No one reads them | Share in syncs, channels, reviews |
| No follow-up | Assign owner to drive RFC forward |
| Too verbose | Aim for clarity over formality |
| Ends in limbo | Set review window, declare outcome |
Why RFCs Help Culture¶
- Create a record of thoughtful engineering
- Invite multiple voices into decision-making
- Build confidence in change
- Improve trust between platform and feature teams
- Teach juniors how architectural thinking works
Final Thoughts¶
RFCs aren’t red tape — they’re open space. They give teams the permission, format, and clarity to explore options together without endless Slack threads or whisper networks.
Use them to slow down when it matters, to show your thinking, and to future-proof your system with historical context.
Pair RFCs with ADRs, tag and trace them, and you’ll build a body of design knowledge your whole org can stand on.
📘 Next in the series: Writing a Software Design Specification (SDS) Using Docs-as-Code