RFC

What an RFC is?

An RFC or a Request For Comments, is a document that describes a set of requests for comments on a particular issue. These can be low level technical problems or high level management issues.

How to create a RFC?

  • create a new issue on the GitHub
  • the RFC number is obtained by the current date and time in the format yyyymmddhhmm
    • an RFC openened on Febuary 16th, 2023 on 7:28 PM would be: 202302161928
  • the date time is based off of CST (Regina)
  • the rfc number should be followed by a title
  • the body of the RFC should contain enough relevant information to get someone reading it fairly upto speed on the issue at hand
  • in your RFC you should mention how long you want it to stay open for (default is 1 week from the date of creation)
  • if you need an issue resolved immediately, you can tag it as an emergency
  • the RFC should be shared on every relevant subteam's slack channel (use @channel if it's an emergency)

When to create a RFC?

  • when you need advice or opinion on a given topic
  • when there is a conflict about what to do between parties
  • when there are major design decisions that need to be made that concern a large protion of the team
  • use the rfc template on the github

How to vote on a RFC?

  • open an RFC
  • it remains open for a week? (or you can specify a date)
  • only people who made a meaningful contribution to the RFC get a vote
    • meaningful contributions are any contributions that provide substance to the debate and discussion at hand, it cannot just be a couple of lines you need to provide a reasoning behind your stance
  • at least 2(+1) people need to comment on the RFC, for it to escalate to a vote
  • vote needs to pass with a >=66% (absolute) majority
  • voting shall be non-anonymous to leave a voting trail of the original voters, all voters are required to provide a reasoning behind their stance while voting
  • if the RFC is tagged as an emergency i.e. it needs to be resolved in less than a week
  • then it still needs to meet the quorum for voting mentioned above
  • however, there needs to be a meeting where every party involved gets 5 minutes of uninterrupted floor time to speak

What if the RFC fails?

  • if the RFC does not have enough participants to escalate to a vote then it is marked as stale and closed, it can be reopened at anytime by anyone, but still needs to meet requirements to escalate to a vote
  • if the vote does not pass, then the RFC is closed, however it can be reopened with a 50% (absolute) majority from the original voters
  • once an RFC passes it cannot be reopened
  • if you were not one of the original participants and need to reopen an existing RFC, you can ask the original voters of the rfc to vote for a re-open, upon failure of vote to reopne you can just create another rfc in reference to the closed one

What if the RFC is adopted?

  • if the vote passes then the rfc is adopted effective immediately
  • once an RFC is adopted and closed it cannot be re-openened, however adjacent issues that might be needed to discuss can reference the closed RFC, but need to open a new one

Examples of when a RFC might be raised?

  • why we need to use Rust for all programming?
  • why we should not design our own PCBs?
  • why the subteam should have four co-leads?
  • why we should refactor the entire codebase to use xyz library?
  • how do we handle a data race between task1 thread and task2 thread?
  • switch from carbon fibre to aluminium for connectors?

link to an example RFC

RFC Process