Skip to main content

RFC Software Engineering: How Request for Comments Works

NR Tech Studio Team
NR Tech Studio
14 min read

RFCs are written proposals that describe a new technology, a proposed standard, or a process change, and they are the primary mechanism for proposing changes to the Internet’s technical foundations and, increasingly, to internal engineering systems. An RFC is a document that follows a structured lifecycle from draft to final status, with community review and consensus-building at its core. This article explains the RFC process, its role in software engineering, and how to implement RFC-driven design in your organization.

The problem is that many engineering teams make significant architectural decisions in hallway conversations or single-owner design docs, leading to costly rework and security oversights. The RFC process introduces formalized peer review, which catches design flaws, security vulnerabilities, and integration issues before a single line of code is written. In this guide, we will dissect the RFC lifecycle, its governance, and its practical application in modern software development, including how to write, review, and manage RFCs effectively.

What Is an RFC in Software Engineering?

An RFC (Request for Comments) is a formal document that proposes a change, a new feature, or a standard, and it invites discussion and feedback from a defined community before implementation. Originating from the Internet Engineering Task Force (IETF), RFCs have governed the evolution of the Internet since 1969. In software engineering, an RFC is a written proposal that describes a technical problem, a proposed solution, and the trade-offs involved, and it is circulated for review before code is written.

The purpose of an RFC is to ensure that significant technical decisions are made with broad input, not by a single developer in isolation. This collaborative approach reduces the risk of design flaws, security vulnerabilities, and costly rework. RFCs are not just for open-source projects; many companies, including Stripe, Uber, and HashiCorp, use internal RFC processes to align their engineering teams on major changes.

An RFC typically includes a clear problem statement, proposed solution, alternatives considered, and implementation plan. It is a living document that evolves based on feedback, and it is only finalized after consensus is reached. The RFC process is a cornerstone of collaborative software engineering, promoting transparency, accountability, and high-quality design.

For a deeper understanding of how architectural decisions fit into broader software development, you may find our guide on computer software development useful.

The RFC Lifecycle: From Draft to Standard

The RFC lifecycle is a structured path that a document follows from initial idea to final acceptance. In the IETF, an RFC goes through several states: Internet-Draft, Proposed Standard, Draft Standard, and finally Internet Standard. However, in internal engineering teams, the lifecycle is often simplified to Draft, Review, Accepted, and Implemented.

Here is a typical lifecycle in a company setting:

  1. Draft: An author writes the RFC and submits it for review.
  2. Review: The team comments, suggests changes, and discusses trade-offs.
  3. Accepted: After revisions and consensus, the RFC is formally accepted.
  4. Implemented: The proposed change is coded, tested, and deployed.

In the IETF, the process is more formalized. An Internet-Draft is published, and after community review and revision, it may be promoted to Proposed Standard. After further testing and implementation, it can become a Draft Standard, and eventually an Internet Standard. This rigorous process ensures that only well-vetted technologies become standards.

Understanding the lifecycle is essential for engineers who want to propose changes effectively. It is not just about writing a document; it is about shepherding it through community review and building consensus.

Why Use RFCs? Benefits for Engineering Teams

RFCs offer several benefits for engineering teams, especially those working on complex systems where mistakes are costly.

  • Early Detection of Flaws: Peer review catches design errors, security vulnerabilities, and integration issues before code is written.
  • Consensus Building: RFCs ensure that all stakeholders have a say, reducing friction during implementation.
  • Documentation: RFCs serve as a historical record of why decisions were made, which is invaluable for onboarding and future maintenance.
  • Knowledge Sharing: The process exposes engineers to different parts of the system and encourages learning.
  • Risk Mitigation: By considering alternatives and trade-offs, RFCs reduce the likelihood of costly pivots.

From a security perspective, RFCs are particularly valuable. They force authors to consider security implications, threats, and attack vectors as part of the design. This is a proactive approach to security, rather than a reactive one.

In my experience, teams that adopt RFCs for significant changes see a reduction in production incidents and a more cohesive architecture. The process is not without overhead, but the benefits far outweigh the costs for non-trivial changes.

RFC vs. ADR: What’s the Difference?

RFCs and Architecture Decision Records (ADRs) are both documentation tools, but they serve different purposes. An RFC is a proposal for a change that invites discussion and feedback, while an ADR is a record of a decision that has already been made, often in a concise format.

Here is a comparison:

Aspect RFC ADR
Purpose Propose and discuss a change Record a decision and its context
Length Often lengthy, detailed Short, one page or less
Lifecycle Active until accepted or rejected Static once written
Audience Broad team for review Future engineers for reference

In practice, an RFC may lead to an ADR once the decision is made. The RFC captures the discussion and alternatives, while the ADR captures the final decision and rationale. Some teams use RFCs for major architectural changes and ADRs for smaller decisions.

Choosing between RFC and ADR depends on the magnitude of the decision. If it is a significant change that affects multiple systems, an RFC is appropriate. If it is a localized decision, an ADR might suffice.

How to Write an Effective RFC

Writing an RFC is a skill that improves with practice. A well-structured RFC increases the likelihood of acceptance and reduces review time. Here is a template that works well in many engineering organizations:

# RFC: [Title]

## Status
- **State:** Draft / In Review / Accepted / Rejected
- **Author:** [Name]
- **Date:** [YYYY-MM-DD]

## Problem Statement
Describe the problem in clear, concise terms. Include data if possible.

## Proposed Solution
Describe the change in detail, including architecture, interfaces, and data models.

## Alternatives Considered
List other solutions and why they were rejected.

## Security Implications
Discuss security risks, threats, and mitigations.

## Migration Plan
How will this change be rolled out? Any backward compatibility concerns?

## Open Questions
List unresolved issues that need discussion.

When writing, keep the audience in mind. Your peers are busy, so get to the point quickly. Use diagrams and code snippets to illustrate complex ideas. Anticipate objections and address them in the document.

The security section is often overlooked but is critical. As a security engineer, I always emphasize this part. Consider threat models, data sensitivity, and compliance requirements. A thorough security analysis can prevent vulnerabilities from entering the codebase.

RFC Review Process: How to Conduct a Technical Review

The review process is where the RFC’s value is realized. A structured review ensures that all aspects are examined, especially security and scalability.

Here is a process that works:

  1. Assign reviewers: Choose engineers with relevant expertise, including a security reviewer.
  2. Set a review period: Give reviewers enough time to provide thoughtful feedback, typically 1-2 weeks.
  3. Encourage written comments: Use a platform like GitHub or a wiki to allow inline comments.
  4. Discuss in meetings: If there are conflicting opinions, schedule a meeting to resolve them.
  5. Iterate: The author revises the RFC based on feedback.
  6. Decision: After consensus, the RFC is accepted or rejected.

During the review, focus on the following:

  • Does the solution address the problem?
  • Are there any security vulnerabilities?
  • Is the design scalable and maintainable?
  • Are there better alternatives?
  • Is the migration plan sound?

As a security engineer, I pay close attention to threat modeling. I ask questions like: What if an attacker gains access to this endpoint? What data is exposed? How is encryption handled? These questions should be part of every review.

RFC Governance: Roles and Responsibilities

Effective RFC processes have clear governance. This includes defining who can author an RFC, who reviews it, and who makes the final decision.

In many organizations, the roles are as follows:

  • Author: The engineer or team proposing the change.
  • Reviewers: A designated group of engineers, often including a security expert.
  • Decision Maker: A tech lead or architect who has the authority to accept or reject the RFC.

It is important to establish a process for escalating disagreements. If reviewers cannot reach consensus, the decision maker may need to step in. Some teams use a lazy consensus model, where an RFC is accepted if no one objects within a certain timeframe.

Governance also includes version control. RFCs should be stored in a repository, such as GitHub, so that changes are tracked. This provides a historical record and makes it easy to reference past decisions.

From a security perspective, governance ensures that no RFC bypasses the review process. A formal process prevents shadow decisions that could introduce vulnerabilities.

RFCs in Open Source: IETF and Beyond

The IETF is the original home of RFCs. Since 1969, thousands of RFCs have been published, covering everything from TCP/IP to HTTP. The IETF process is open and community-driven, with anyone able to contribute.

Other open-source projects have adopted RFC-like processes. For example, the Rust project uses RFCs for significant language changes, and the Python community uses PEPs (Python Enhancement Proposals), which are similar in spirit.

These processes share common principles:

  • Open participation
  • Transparent discussion
  • Consensus-based decision making
  • Documentation of decisions

If you are contributing to an open-source project, understanding its RFC process is essential. It shows that you have taken the time to understand the project’s governance and can increase the chances of your proposal being accepted.

For internal use, you can borrow these principles to create a lightweight process that fits your team’s culture.

Security Considerations in RFCs

Security should be a first-class concern in every RFC. As a security engineer, I have seen many RFCs that focus on functionality but ignore security, leading to vulnerabilities that are expensive to fix later.

When writing or reviewing an RFC, consider the following:

  • Threat Modeling: Identify potential attackers and attack vectors. What are the assets at risk?
  • Data Protection: How is sensitive data handled? Is encryption used in transit and at rest?
  • Authentication and Authorization: How will users be authenticated? What are the authorization rules?
  • Input Validation: How will the system handle malicious input? Are there proper validation and sanitization measures?
  • Compliance: Does the change affect compliance with regulations like HIPAA or GDPR?

Include a dedicated security section in your RFC template. This forces the author to think about security and makes it easier for reviewers to assess risks.

For example, if you are proposing a new API endpoint, you should specify authentication methods, rate limiting, and data validation. If you are integrating a third-party service, you should assess its security posture.

By integrating security into the RFC process, you build a security-first culture that prevents vulnerabilities from entering the codebase in the first place.

Case Study: Using RFCs for a Major Architecture Change

To illustrate the power of RFCs, consider a scenario where a team decides to migrate from a monolithic Laravel application to a microservices architecture. Without an RFC, each team might make independent decisions, leading to inconsistent interfaces and duplicated functionality.

With an RFC, the team can propose a service decomposition, API contracts, and data ownership boundaries. The RFC would be reviewed by all affected teams, and security implications would be discussed, such as how services authenticate to each other.

In one project I worked on, we used RFCs to introduce a new event-driven architecture. The RFC process helped us identify potential security issues, such as unauthorized event publishing, before implementation. It also facilitated a smooth migration because all teams were aligned on the design.

The RFC served as a blueprint for implementation, and it was referenced throughout the project. It also became a valuable onboarding document for new engineers.

This case study shows that RFCs are not just bureaucratic overhead; they are a practical tool for managing complexity and risk.

Common Pitfalls in the RFC Process and How to Avoid Them

Implementing an RFC process is not without challenges. Here are common pitfalls and how to avoid them:

  • Overly Long RFCs: If an RFC is too long, reviewers may not read it. Keep it concise and focused.
  • Lack of Reviewers: If you do not have a diverse set of reviewers, you may miss important perspectives. Ensure you have reviewers from different teams.
  • Ignoring Feedback: If authors do not address feedback, the process becomes a rubber stamp. Make it a requirement to respond to all comments.
  • Process Overhead: If the process is too heavy for small changes, engineers will bypass it. Use a lighter process for trivial changes.
  • Security Blind Spots: Without a security reviewer, vulnerabilities may slip through. Always include a security expert.

To avoid these pitfalls, regularly review your RFC process and adjust it based on feedback. The goal is to create a process that is rigorous but not burdensome.

Tools for Managing RFCs

Several tools can help you manage RFCs effectively. The choice depends on your team’s preferences and existing infrastructure.

Tool Features Best For
GitHub Pull requests, inline comments, version history Teams that use Git
Confluence Collaborative editing, comments, page hierarchy Teams that prefer a wiki
Google Docs Real-time collaboration, comments, suggestions Teams that want simplicity
Phabricator Differential review, audit Teams that need advanced review workflows

GitHub is a popular choice because it integrates with the development workflow. You can create a pull request that contains the RFC text, and reviewers can comment on specific lines. Once approved, the RFC can be merged into a repository.

For security, ensure that the RFC repository has access controls. Not all RFCs may be public, especially if they contain sensitive information about your infrastructure.

RFCs and Modern Practices: Docs-as-Code and CI/CD

The concept of docs-as-code applies to RFCs as well. Treat RFCs like code: store them in version control, review them in pull requests, and even lint them for style and formatting.

You can integrate RFC checks into your CI/CD pipeline. For example, you can use a tool to validate that the RFC has all required sections, such as a security section. This ensures that no RFC is submitted without proper consideration.

Here is an example of a simple CI script that checks for a security section:

# .github/workflows/rfc-check.yml
name: RFC Check
on:
  pull_request:
    paths:
      - 'rfcs/**'
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Check for security section
        run: |
          if ! grep -q "## Security Implications" "${{ github.event.pull_request.head.ref }}"; then
            echo "RFC must include a Security Implications section."
            exit 1
          fi

Such automation enforces quality without adding manual overhead. It also demonstrates a commitment to security and thoroughness.

RFC Process in Practice: A Step-by-Step Guide

Implementing an RFC process in your team can be done in a few steps:

  1. Define the scope: Decide what changes require an RFC. Typically, any change that affects multiple systems, introduces new dependencies, or alters public APIs.
  2. Create a template: Use a standard template to ensure consistency.
  3. Set up a repository: Create a folder in your version control system to store RFCs.
  4. Establish a review process: Define who reviews and how decisions are made.
  5. Communicate the process: Make sure all engineers know about the process and how to use it.

Start with a pilot to refine the process. After a few months, collect feedback and make adjustments.

Remember, the goal is not bureaucracy but better decisions. Keep the process lightweight and adaptable.

The Role of RFCs in Security Compliance

In regulated industries, RFCs can play a role in demonstrating compliance. When an auditor asks how you ensure that changes are reviewed, you can point to your RFC process.

RFCs provide evidence that you have considered security and compliance implications before implementing changes. This is particularly important for standards like SOC 2 or ISO 27001.

To maximize compliance value, ensure that RFCs are archived and linked to the changes they describe. This creates an audit trail that shows the evolution of your systems.

From a security perspective, RFCs help you maintain a secure posture by ensuring that no change goes unreviewed. This is a key principle of secure software development.

Conclusion: Making RFCs a Habit

RFCs are a powerful tool for improving software engineering. They bring structure to decision-making, foster collaboration, and enhance security. By adopting an RFC process, you can avoid costly mistakes and build a culture of thoughtful design.

Start small, refine as you go, and always include security in the conversation. The investment in writing and reviewing RFCs pays off in the long run.

For more insights on modernizing legacy systems, you might find our article on the strangler fig pattern for modernizing legacy PHP and Laravel systems relevant. Also, explore our complete Laravel, Basics directory for more guides.

RFCs are more than just documents; they are a process for collective intelligence. When used correctly, they prevent design errors, enhance security, and create a shared understanding of your system. By adopting RFCs, you are not adding bureaucracy but investing in the quality of your software.

Start using RFCs today, and you will see the difference in your engineering culture.

Ready to Build a Custom Solution?

NR Studio specializes in custom software built around your workflow. Tell us what you’re building and we’ll walk through your options together.

Start a Conversation

References & Further Reading

Leave a Comment

Your email address will not be published. Required fields are marked *