Skip to content

RFC (Request for Comments)

A design proposal circulated to invite critique before a decision is made.

An RFC (Request for Comments) is a structured proposal that circulates a design or change to a group of reviewers before any decision is finalized. Its defining characteristic is the open invitation: the author lays out a problem, proposes an approach, names the alternatives they considered, and explicitly asks readers to push back. Where an ADR records a settled choice, an RFC is the conversation that happens before one.

The format originated in the internet standards community, where IETF RFCs defined protocols through iterative public comment. Engineering teams borrowed the pattern to coordinate changes that are too consequential to decide unilaterally - a new API contract, a major refactor, a shift in technical direction. The RFC disciplines the proposal author to write down their reasoning before reviewers can probe it, and gives reviewers a structured place to respond asynchronously.

# RFC-NNNN: [Proposal Title]
## Status
[Draft | Under Review | Accepted | Rejected | Withdrawn | Superseded by RFC-NNNN]
## Author(s)
[Name(s), date]
## Problem
[What is broken, missing, or needed. Why this matters now.]
## Proposed Approach
[What you are proposing. Be specific enough that a reviewer can push back on the details.]
## Alternatives Considered
[Other approaches evaluated and why they were not chosen.]
## Open Questions
[What the author is uncertain about and wants reviewer input on.]
## Consequences
[What this change costs, enables, or forecloses if accepted.]

Proposing a significant technical or design change that requires team alignment before work begins, coordinating cross-team decisions where multiple stakeholders need to be heard before a direction is set, changes consequential enough to deserve structured written critique while still open to revision, surfacing objections early when the design is still cheap to change.

When a decision has already been made and needs to be recorded (write an ADR instead), urgent changes that cannot wait for a comment period, small easily reversible decisions that do not warrant structured review.

pragmatic-architect, senior-consultant, candid, diplomatic, problem-solution, dialectic

adr: An ADR records a decision already made and explains the reasoning behind it. An RFC is the proposal that precedes the decision - it is still open to revision and asks reviewers whether the proposed approach is the right one.

prd: A PRD specifies what to build and defines requirements for an execution team. An RFC proposes how to approach a design challenge and asks peers to evaluate that approach. The PRD is an input to engineering work; the RFC is a checkpoint before committing to a direction.

design-doc: A design doc is the implementation specification for something already being built - it answers “how exactly will this work?” An RFC is a comment-seeking proposal for a design direction that explicitly invites pushback before a decision is finalized. Their templates look alike: both have a problem statement, a proposed approach, and alternatives. The line is purpose and timing - an RFC asks “should we go this direction?”; a design doc answers “here is how we are going.”

  • An explicit Status line that tracks the proposal lifecycle (Draft, Under Review, Accepted, Rejected, Withdrawn)
  • An Open Questions section that names what the author is genuinely uncertain about and wants reviewer input on
  • An Alternatives Considered section that records what was evaluated and why it was not chosen
  • A Problem section that frames the gap or failure before the solution appears
  • An author byline with date, marking it as a time-bound proposal and not a standing document
  • Language that actively invites disagreement rather than presenting a finished position
  • Writing the RFC as a fait accompli - no open questions, no real alternatives, and a Proposed Approach that reads like an announcement - An RFC without genuine openness is theater; if the decision is already made, write an ADR. Using an RFC form to manufacture the appearance of consultation corrodes reviewer trust.
  • Skipping the Alternatives Considered section or listing only one throwaway alternative - Alternatives Considered is the core evidence that the author did comparative thinking; without it, reviewers cannot tell whether the proposed approach was chosen deliberately or defaulted to.
  • Treating the RFC as a PRD by writing requirements and acceptance criteria instead of a design proposal open to critique - A PRD specifies what to build for an execution team; an RFC proposes an approach and asks peers whether it is the right one. Mixing the two makes the document unusable for either purpose.
  • Leaving the RFC open indefinitely with no review deadline and no decision recorded - An RFC without a status update to close the loop becomes organizational clutter; the comment period needs a deadline and the author must update the status after review ends.
  • Collapses into a question-dump - so many open questions and so little conviction that reviewers have nothing concrete to push back on - An RFC needs a real proposed approach, not just a problem description. Draft a concrete recommendation before opening for comment; open questions should be targeted uncertainties, not a substitute for having a position.
  • Stretches into a permanent consultation - the comment period never closes, the status stays Draft, and the proposal never reaches a decision - Set a review deadline when the RFC is opened. After the deadline, synthesize feedback and update the status to Accepted, Rejected, or Withdrawn; an undecided RFC is an abandoned RFC.
Write as an RFC (Request for Comments). Structure the document with these sections:
Problem, Proposed Approach, Alternatives Considered, Open Questions, and Consequences.
In Problem: frame what is broken, missing, or needed - do not lead with the solution.
In Proposed Approach: be specific enough that a reviewer can push back on the details.
In Alternatives Considered: honestly name what you evaluated and why you did not choose it;
one throwaway alternative is not enough. In Open Questions: name the things you are
genuinely uncertain about and want reviewer input on - these are invitations, not
weaknesses. The tone should be candid and diplomatic: the author has a position but is
genuinely open to being wrong. Do not write as if the decision is already made.

See the RFC (Request for Comments) template.

Pragmatic Architect, Senior Consultant, Candid, Diplomatic, Problem-Solution, Dialectic

Urgent, Playful, Pastoral, Reverent

Architecture Decision Record, Product Requirements Document, Design Document

Under Review

Engineering Manager - opened for review after Q1 retrospective

Our current synchronous daily standup is a 9am Pacific meeting that all 11 engineers are expected to attend. The team has grown from 6 to 11 engineers over the past 18 months and now spans four timezones: US Pacific, US Eastern, UK, and India. That scheduling arithmetic does not work.

For our three India-based engineers, 9am Pacific is 9:30pm IST. Q1 attendance data confirms the effect: India engineers averaged 3.2 standup appearances per week out of 5; US-based engineers averaged 4.6. The shortfall is not disengagement. It is a timezone that makes a nightly meeting unsustainable.

Beyond the equity problem, the meeting produces little durable output. The standup averages 14 minutes. Analysis of the past month puts the content that changed someone’s behavior at roughly 4.2 minutes - a blocker raised, a dependency flagged, a context shared. The other 10 minutes is status that required no response from anyone. And even the useful 4.2 minutes disappears afterward: nothing is written down, nothing is searchable. In Q1 we documented three incidents where an engineer spent more than an hour on a problem that had already been discussed in a previous standup.

The problem is not that people are attending badly. The problem is that we designed a synchronous meeting for a team that is no longer synchronous.

Replace the daily synchronous standup with an async update posted to #team-standup by 10am each engineer’s local time.

The template would be three fields:

  • Shipped: what completed in the last 24 hours
  • In progress: current focus
  • Blocked or at risk: anything that needs attention, with @mention of the person who can resolve it

The on-call engineer reads #team-standup once between 10am and 11am Pacific and responds to any blocked items within 30 minutes during business hours. On-call rotation stays the same - the responsibility shifts from running the meeting to monitoring the channel.

The 9am Pacific standup slot gets repurposed rather than eliminated. I am proposing a 60-minute Thursday working session in its place - explicitly not a status meeting, reserved for topics that need real-time exchange. If there is nothing on the agenda by Wednesday evening, we cancel.

Before committing permanently, I propose a 30-day trial starting from a date the team agrees on, with a retro at the end to decide whether to make the change permanent.

Rotate the standup time. We could change the meeting time each week or each sprint to distribute the timezone burden more fairly. This addresses the equity problem but does not solve information persistence, and adds scheduling overhead on a team already managing cross-timezone calendar complexity. The India engineers still get a late-evening meeting every few weeks.

Eliminate standup entirely. The meeting is low-signal, so one response is to stop having it. I am not proposing this because some coordination value does persist - the “blocked” information in particular needs a home. The proposal preserves that signal while removing the synchronous overhead.

Adopt a purpose-built async standup tool (Geekbot or similar). Several tools automate async standup collection with reminders and digest formatting. I looked at Geekbot. The cost and the additional tooling layer did not seem worth it when Slack templates can serve the same function at zero marginal cost. If the Slack-native approach proves too manual to sustain, a dedicated tool is worth revisiting.

Keep the meeting and add a writeup requirement. Require engineers to post a written summary after the standup to address the persistence problem. This stacks more process on the existing burden rather than replacing it, and still does not solve the 9:30pm IST problem.

What is the right posting deadline? I proposed 10am local time, but I am not confident this works for every timezone. For UK engineers, 10am GMT means their posts arrive before the Pacific team is at their desks. Does that matter for coordination? Is there a structure - a window rather than a hard cutoff - that serves both IST and UK engineers better?

How do we prevent the Thursday session from becoming a second standup? My intent is a working session for topics that require real-time exchange, not a status meeting with a different name. What guardrails would actually hold for this team? Should we require a written agenda at least 24 hours in advance?

What does “trial succeeded” look like? 30 days is a guess, and I do not have clear criteria for what we would need to see before committing. Should we set participation-rate targets? Blocker resolution time? I want us to agree on the decision criteria before we start the trial, not after.

How much does the on-call monitoring role actually cost? I am estimating 10 to 15 minutes per morning to scan the channel and handle mentions. That estimate might be too low, especially in the first weeks when blockers are more likely to surface through an unfamiliar format. I would rather know that before locking in the on-call spec.

If accepted:

Benefits: India-based engineers participate on a schedule that fits their timezone. Status information persists and is searchable, which addresses the duplicate-work incidents from Q1. Blocked items route directly via @mention rather than surfacing verbally in a meeting no one can search later. Engineers recover the time previously spent in synchronous status reporting.

Costs: Some social cohesion from daily shared presence is reduced. The Thursday session is a partial substitute but not an equivalent. The format depends on consistent participation - if engineers stop posting, the channel’s value drops for everyone. Blockers requiring nuanced discussion may be harder to surface through a three-field template than through a live conversation.

If rejected: The current format continues to impose a 9:30pm IST obligation on three engineers. That is the strongest argument for changing something, even if this specific proposal is wrong. If reviewers reject this approach, I am asking for a counter-proposal rather than a return to the status quo.