Writing RFCs
Tags: rfc
Published: 2024-03-06 14:00:00

---
title: Writing RFCs
published: true
description: A Request For Comments also known as RFC, is a process that captures ideas and proposals about a specific topic to discuss and find consensus 🤝
tags: rfc
cover_image: https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mtl72692vbmim4buxqbl.png
published_at: 2024-03-06 14:00 +0000
---

A **Request For Comments** also known as _RFC_, is a process that captures ideas and proposals about a specific topic to discuss and **find consensus** 🤝.

An RFC involves a **document** or a series of documents 📑, which are **drafted**, **reviewed** and eventually **approved** or **rejected** by a group of people.

## What are the benefits?

### Planning

Writing down your idea into a document will clarify your thoughts and will help organizing them in a structured manner.

**Anticipating** 🔮 the problem you aim to solve and envisioning potential solutions is key to **identifying issues** and **edge cases**.

### Alignment

As a team, it's important that **decisions** 🎙️ are **made** by **reaching** a **consensus** 🤝. It's very common that as humans we have different opinions and points of view.

RFCs are an effective process to include everyone's opinions 💭 and reach a decision everyone agrees with.

### Documentation

The document 📑 itself is a **valuable piece of documentation** as it captures the context, the problem, the solution, and the decision-making process.

It will serve as a **reference** for **future** team members and will help them **understand** the **context** and the **reasoning** behind the **decisions** made ❣️

An RFC is usually the initial step in the decision-making process before creating [Architecture Decision Record](https://carloscuesta.me/blog/writing-architecture-decision-records) which I previously wrote about ✍️

### Better decision-making

One of the steps of the process is to share the RFC with the team to **collect feedback** and review the context and the proposed solution.

Involving multiple people 🧠 in the decision-making process is key to achieve high quality decisions, as it will bring **different perspectives** and **solutions** to the table **reducing** the chances of **overlooking important details**.

You can think of it as a **code review**, but for **ideas** and **proposals**.

## When you should write an RFC?

It depends 🙈 but generally I would recommend writing them when **dealing** with **high-impact decisions** and **major changes** that **require consensus** and alignment such as:

- Introducing a new service in your company 🚀
- Major changes in the architecture 🏗️
- Big features that have an overarching impact 🆕

It's up to you to decide when to write them, but in my opinion you should **weight** ⚖️ the **effort** 🥵 and the **impact** 💥 since it's a time-consuming process that involves many people.

### How to write an RFC

### Define a template

When writing them, a common practice is to have a template to write ✍🏼 all the documents in the same way.

You'll find a lot of templates online, but [this is the one I use](https://docs.google.com/document/d/19WIct9u3e-BEYTVWzrPxcXUJ28GyQFBrfGF_kpznE6c/edit?usp=sharing) 👈

![RFC Template](https://res.cloudinary.com/carloscuesta/image/upload/v1709328274/rfc_jsuwbb.jpg)

❗️ Use a tool that allows **collaborative features** (comments, suggestions etc) to make it easier for the team to review and provide feedback such as Google Docs or Notion.

### Share document for review

Once you have the document ready, share it with the team for them to **review** 👀 and **provide feedback**.

### Address feedback

After the reviews come in, you should **address** the **comments**, **questions** and **concerns** and **incorporate** any **suggestions** if appropriate 🖊️.

### Make a decision

Finally, after the document has been reviewed and the feedback has been addressed and collected, it's time to **make a decision**.

The team should either **approve** ✅ the RFC and move forward with the proposal or **reject** ❌ it.

## Examples

In case you're looking for inspiration, there are many organizations and communities that use RFCs to propose and discuss new ideas, here are some examples:

- [TC39](https://github.com/tc39/proposals)
- [React](https://github.com/reactjs/rfcs)
- [Rust](https://github.com/rust-lang/rfcs)
- [NPM](https://github.com/npm/rfcs/)

## Conclusion

RFCs are a powerful process to **gather feedback**, **align** the team and **document** **decision-making**. They're a great way to **reach consensus** as a team representing everyone's opinion.

I encourage you to give them a try and see how they can help you and your team to make better decisions! 🫰