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
- an RFC openened on Febuary 16th, 2023 on 7:28 PM would be:
- 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?