{% include “docs/contribute/governance/rfcs/_common/_rfc_header.md” %}
This document provides guidelines for how authors and reviewers can get the most out of the RFC process.
The RFC process is how the Fuchsia project makes decisions. Some RFCs contain decisions to adopt some policy across the project. For example, RFC-0004 specifies that storage sizes should be given in IEC notation (e.g., KiB, not KB). When that RFC was accepted, it meant that we as a project decided to follow that policy. These policy-setting RFCs are relatively rare, though.
The majority of RFCs are essentially design docs. When a design doc RFC is accepted, it means that we as a project decided to solve a problem in a certain way. An accepted RFC is a historical document, recording the fact that everyone who had a stake in that design was comfortable moving forward with it.
When writing an RFC (or anything, for that matter), ask yourself: “why am I writing this?”
Presumably you‘re writing an RFC because you want to change something, but you think your change could have an impact on other members of the project. Before moving forward, you want to make sure they know what you’re planning to do, and that they don‘t mind. These folks who might be impacted by your change are your stakeholders. Once they +1 your RFC and it gets accepted, you’ll have a written record that they're happy with your change. Proceed with confidence!
Let this goal guide the contents of your RFC:
Your RFC does not need to specify every detail of your design. In fact, too much detail can make it harder for your stakeholders to understand the design‘s essential trade-offs. On the other hand, if you don’t include enough detail, different readers might come to different conclusions about what your RFC means. Finding the right level of detail is an art.
Your RFC should include all the details that have a material impact on your design's acceptability, and no more. This will be just enough detail for the stakeholders to endorse your design and for future readers to understand why it was approved. Incidental details just make the RFC harder to review.
Some RFCs get more and more detailed during review. This can be frustrating for authors and stakeholders alike. When a stakeholder asks a question about (or objects to) some part of your design, your instinct may be to add more details as clarification or justification. Before you do, consider whether removing detail would be more appropriate. If the bit they commented on doesn't make a material difference to the RFC, you can short-cut a lot of discussion by deleting it or making it more general and abstract.
To help decide whether some detail has a material impact on your design, consider these questions:
The stakeholders are your RFC‘s primary audience, but you shouldn’t forget about future readers trying understand your design after it has been accepted. Here are some tips for making your RFC accessible to a broader audience:
Once accepted, your RFC documents the fact that your stakeholders were happy with the feature you designed. However, it shouldn't be used as documentation for the feature itself.
RFCs and documentation simply have different goals:
Don't link to an RFC in code or documentation to explain how a feature works. Give the feature its own documentation and link to that instead.
Some suggestions for where to put this kind of documentation:
//src/my_subsystem/docs/
subdirectory in fuchsia.git
. Documentation hosted in fuchsia.git
can be rendered by Gitiles and is great for providing conceptual guides to your subsystem.On the other hand, RFCs may link to documentation. In fact, if your RFC contains lots of background information, consider moving that background into documentation and linking to it instead!
If you have suggestions for best practices (or you think some of the ones above could use updating) reach out to eng-council@fuchsia.dev or send a change to the FEC!