Articles

How Attentive Engineering designed a Pragmatic RFC Process for Teams

Article illustration

Many engineering organizations adopt an RFC (Request for Comments) process with good intentions, only to see it stagnate over time. Documents become heavy, reviews become performative, and engineers either avoid the process entirely or treat it as a bureaucratic checkbox.

That pattern will likely sound familiar because it was ours, too.

About three years ago, when I joined Attentive, it became clear that RFCs were technically part of the engineering culture, but not meaningfully so. A few people wrote them, but there was no shared understanding of when to write an RFC, what it should look like, or how decisions were supposed to emerge from the process. Documents varied wildly in style, tone, and level of detail across teams. As a result, decision-making was inconsistent, and we occasionally ran into avoidable issues that someone else in the organization could have flagged early had they known the work was happening.

As the company grew, this problem became more pronounced. When Attentive was smaller, most engineers had a rough sense of what was being built and why. Over time, changes became increasingly siloed. Staff-plus engineers, in particular, expressed concern that they could not effectively offer their expertise if they did not know who was working on what or when architectural decisions were being made. The cost was a gradual loss of transparency, confidence, and shared technical context.

We needed a system that improved decision-making and transparency without causing process paralysis or developer thrash. What we did not want was a heavy, prescriptive process that slowed teams down, created personality-driven conflict, or made engineers second-guess themselves. 

The RFC process described here is the result of that effort of the Staff-plus guild at Attentive. We iterated on clear guidelines, introduced a lightweight template for consistency, and even built small bits of tooling (such as an internal bot that notifies engineers when new RFCs are ready for review) to make participation easier for those who want to stay engaged.

This post distills that experience into a practical RFC process intended for software engineers and technical leaders who want a lightweight but effective way to make better architectural and design decisions without slowing teams down. The emphasis throughout is on collaborative decision making and clarity, and avoiding consensus by exhaustion.

Our hope is not that you adopt this process verbatim, but that it sparks a similar conversation in your own organization about how design decisions are made, reviewed, and shared.

So, What Is an RFC?

An RFC is a technical design document that captures:

  • The problem being solved
  • The proposed direction or architecture
  • Key technical decisions and their trade-offs
  • Expected impact on systems, teams, and operations

Equally important, an RFC is the engine of a collaborative review process. The document is the artifact but the real value comes from the feedback loop it creates.

RFCs are most effective when they are started once the design has taken a concrete shape, but before implementation details are locked in. The cost of incorporating feedback increases over time, so earlier is generally better.

Most organizations have a template but intentionally avoid a rigid format. RFCs should evolve as feedback is incorporated, and their structure should adapt to the problem being solved.

Why Should You Write an RFC?

You should consider writing an RFC when one or more of the following apply:

  • You are solving a non-trivial technical problem and want to know whether similar problems have been solved elsewhere in the organization.
  • You are solving a problem which has significant cost implications or variability depending on the design. For example, if you are introducing a new technology or pattern into the organization.
  • You have a proposed solution but are unsure how it will behave under future scale, changing requirements, or different operating conditions.
  • Your design impacts systems or teams you do not work with day to day.
  • You want structured, early feedback on architectural or design decisions, especially from subject-matter-experts.
  • The scope or blast radius of the change is large enough that you would prefer broader review before committing.

If any of these resonate, an RFC is likely the right tool for you.

The RFC Process

Goals of a Healthy RFC Process

A well-designed RFC process should:

  • Create visibility and alignment within the organization, before we start investing in a solution.
  • Encourage engineers to seek feedback early and confidently
  • Scale to cross-team and cross-functional initiatives
  • Provide clarity around review, circulation, and approval
  • Avoid common failure modes such as review pile-ons or endless bikeshedding

The goal is to improve decisions, not to maximize participation for its own sake.

Core Principles of the RFC Process

  1. RFCs are tools for consensus-building
    An RFC should be read as: “Here is the direction we propose. What are we missing?” so the author can validate their ideas with the team, subject matter experts and domain experts before significant investment.
  2. Start early, but not prematurely
    Begin the process once the design is structurally complete, even if some details are still annotated or unresolved.
  3. RFCs can be done in before, in parallel, or after prototyping
    Limited MVPs or prototypes can be done before, proceed in parallel, or after the RFC with the understanding that late feedback is more expensive to incorporate. The author can manage this risk as they see fit, however, RFC feedback should not be ignored completely.
  4. Avoid perpetual drafts
    A document that never leaves “draft” status creates ambiguity about when feedback is expected.
  5. Time-box the review period
    RFCs are meant to drive decisions, not stall them. Reviews should have a clear opening and closing window. A default review period for a medium sized RFC could be 1 week with expanding or shrinking this window based on the scope and complexity of the RFC.
  6. Authors own the outcome
    Authors are empowered to accept or reject feedback and move the proposal forward.
  7. Tenured engineers act as stewards
    Staff+ engineers play a key role in mentoring authors, modeling good review behavior, and ensuring the process remains effective.

RFC Status and Lifecycle

Clear status signaling is essential so that all stakeholders are aware of the timelines and progress. Consider including a status indicator in your header metadata

  • Draft: Initial writing phase; early feedback may be solicited once structurally complete
  • In Review: The proposal is ready for broad feedback and active discussion
  • Changes Requested: The proposal requires some serious concerns to be addressed before it can be approved.
  • Approved / Closed: Review is complete; comments are no longer blocking
  • Blocked / Discarded: Review revealed major issues with the proposal or uncovered blocking requirements. The project is discarded, possibly back to the drawing board.

Post-closure changes should be captured as addendums to preserve decision history.

Early Alignment and Vibe Checks

If you are unsure of the proposal, or suspect a proposal may face strong resistance, consider doing a lightweight "vibe check" before investing significant time in writing a full RFC. Informal conversations with likely approvers or domain experts can quickly surface fatal flaws or misalignment.

This is not about pre-approval or consensus-building behind closed doors. It is about avoiding sunk-cost bias and ensuring that a written RFC is a productive use of time for both the author and reviewers.

Parallel Work and Timelines

Once approvers are largely comfortable with the proposed direction, teams may begin work breakdowns or limited implementation. This allows momentum to continue without waiting for perfect certainty.

However, if there are serious unresolved concerns in the RFC, authors should pause before productionizing the solution. RFCs exist to surface risks and build shared confidence. Proceeding while substantive issues remain unresolved undermines the process and erodes trust. Reviewers can indicate their concerns by using the “Request Changes” state on their review. 

In these situations, the right response is to slow down deliberately: invest time in building consensus, clarifying assumptions, or adjusting the design before committing further. The further along implementation goes, the more expensive RFC-driven changes become. Unresolved feedback should be treated as a signal, not noise.

Asynchronous First, Meetings When Useful

RFCs should default to asynchronous review to allow thoughtful feedback. Meetings can be valuable when discussion stalls or complex trade-offs need real-time alignment.

If you schedule a meeting:

  • Ask participants to read the document beforehand
  • Set a concrete agenda
  • Link the meeting directly in the RFC so observers can opt in

When an RFC Should Not Move Forward

Although RFCs are not approval-seeking exercises, there are cases where the review process surfaces concerns that are serious and unmitigable. In such situations, outright rejection of the RFC may be warranted.

Authors, and their managers, should treat this as a strong signal and an opportunity to course-correct. If the work is constrained by external timelines, this is often the right moment to renegotiate assumptions, scope, or deadlines. A poorly designed project does not avert a crisis; it merely delays it.

The cost of ignoring serious concerns is rarely avoided. It is deferred, and almost always paid later, by more teams, at significantly higher cost.

Responsibilities of RFC Authors

The RFC author is accountable for the full lifecycle of the proposal, including drafting, soliciting feedback, and driving the document to completion.

Practical guidance for authors:

  • Pair with an experienced engineer for early stages of RFCs if helpful
  • Seek feedback early; Do not wait for a perfectly polished document before opening it for review
  • Ensure the document is complete, with clearly marked placeholders where details are pending
  • Involve approvers early to surface risks and reduce rework

Defining the Audience

Authors should explicitly identify who is involved in the RFC and in what capacity. A responsibility assignment matrix (often framed as RACI) works well:

  • Responsible: Owners accountable for driving the RFC
  • Approvers: Expected to render a review state before the review window closes
  • Consulted: Provide input during review
  • Informed: Kept aware of outcomes but not required to participate

This clarity helps prevent both under-review and “too many cooks” scenarios.

Content Guidelines

Use Your Words

An RFC is a communication artifact, not a code dump. Use clear prose to explain the proposal, its motivations, and its trade-offs. Simply pasting code snippets, schemas, or contracts and expecting reviewers to infer intent wastes reviewer time and almost always results in excessive clarification comments.

If reviewers need to ask basic questions to understand what you are proposing, the document is incomplete. The RFC should stand on its own, with code and contracts used only as supporting material where they add clarity.

Aim for Readability and the Right Level of Detail

Write documents that are readable and scoped appropriately:

  • Extremely long RFCs (e.g., more than 10-12 pages) are a signal that the proposal is either insufficiently distilled or should be split into multiple RFCs. If you want to share additional data, consider structuring the data into appendices or supplemental docs that can be linked.
  • Extremely short RFCs (e.g., one-pagers that could be fully explained through code or a contract) usually do not warrant an RFC at all.

As a rule of thumb, if the idea is too complex to explain clearly without excessive length, it likely needs decomposition. If it is simple enough to be captured entirely in implementation, skip the RFC and proceed directly to code review.

Keep the Focus High-Level

Focus on high-level design and architecture. Discuss alternatives and provide a recommendation. Explain the reasoning about your design choices, decisions and assumptions, with data. If you made assumptions, list them. Avoid low-level implementation details better suited for pull requests. Extensive diagrams, benchmarks, or background material should live in appendices or linked documents.

Expectations for Reviewers and Approvers

RFCs should be approached by reviewers not as a mechanism for gate-keeping, but as a forum for providing active feedback. The author is not asking for permission; they are asking for perspectives that help strengthen the design and surface risks early.

RFCs are also an important form of technical communication and a venue for mentorship and shared learning. Reviewers are encouraged to engage with the document thoughtfully and constructively. Guidance such as Amy Ciavolino’s work on mindful communication in code reviews applies equally here: feedback should invite discussion, encourage openness, and avoid shutting down exploration.

Reviewers should recognize that they are offering perspectives, not arguments. The goal is not to “win” a debate, but to help the author arrive at a well-reasoned solution.

Responsibilities of Approvers

Approvers, in particular, must take proactive ownership of the review process. Early, actionable feedback saves significant time for the author and for the organization by preventing investment in approaches that are unlikely to succeed.

Approvers are active partners in the RFC process and are expected to:

  • Read the RFC and leave feedback in a timely manner
  • Identify missing sections, implicit assumptions, and overlooked questions. It's fair to assume the author has thought diligently about the content they've included. Experienced collaborators are most helpful when they can identify concerns that haven't been addressed.
  • Follow the document’s evolution throughout the review period until they are comfortable approving
  • Avoid waiting until the final days of the review window to raise substantive concerns
  • Avoid approving too early; if you have been closely involved from the beginning, consider allowing space for additional perspectives before approving
  • Avoid rubber-stamping RFCs without meaningful engagement

Review Timelines and Discipline

All reviewers are expected to respect the timelines defined in the RFC. RFCs are meant to drive decisions, not linger indefinitely. In practice, this means:

  • Paying attention to RFC announcements when they are circulated
  • Reviewing and commenting within the timeframe established in the document
  • Understanding that feedback left after an RFC is approved or closed may be too late to incorporate

Review States

Reviewers should update the RFC header with one of the following states once they have reviewed. 

  • Approved: Approved 
  • Request Changes: Directionally approved with a few changes requested before final approval
  • Blocked: Blocking concerns or requirements. A block should state what would resolve it. 

Commenting Guidelines

Before leaving comments, reviewers should read the document at least once in full. Many concerns are addressed later in the RFC, and premature comments often create unnecessary noise.

When commenting:

  • Provide concise, actionable feedback grounded in the context of the current problem
  • Avoid vague or generalized suggestions that do not clearly apply to the proposal
  • If context is unclear, ask the author to expand the problem statement rather than speculating

Managing Discussions and Pile-Ons

Reviewers should actively avoid starting or participating in pile-ons. If a discussion thread becomes overly long or circular, any reviewer or approver may suggest taking the discussion offline via a moderated meeting to resolve the logjam.

Engaged observers are encouraged to step in and propose this path when they see discussions becoming unproductive. This helps prevent unnecessary friction and keeps the RFC moving forward.

If a long discussion has already concluded, avoid reopening the thread. Instead, consult the decision log or ask the author to clarify what decision was made and why.

Closing Thoughts

An RFC process succeeds when it is lightweight, respectful of engineers’ time, and clearly oriented toward better decisions. Clear writing, early feedback, and disciplined scope are what make the process scale.

Treat RFCs as living design conversations not as code dumps, not as permission slips, and not as bureaucratic hurdles, and they will improve decision quality as your organization grows.

View all articles

Discover what it's like to work for us —
our culture, benefits, values, and more.