-
Notifications
You must be signed in to change notification settings - Fork 51
new decision process #326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
nikomatsakis
wants to merge
3
commits into
rust-lang:master
Choose a base branch
from
nikomatsakis:decision-process
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
new decision process #326
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Reversible decisions | ||
|
||
Reversible decisions do not represent team consensus. | ||
Rather, they indicate that *somebody* on the team is in favor of the idea. | ||
We use them to begin experiments and do other small things. | ||
We never use them for decisions that impact stable code, such as stabilizing a feature. | ||
|
||
## Examples where this process is appropriate | ||
|
||
* Championing a lang-team experiment | ||
* Closing an RFC -- | ||
* Technically reversible (you can always re-open the PR), but particularly when external contributors are involved it's best to discuss this with the team beforehand. It's very confusing for people to have their PR closed and re-opened and can lead to burned bridges. | ||
|
||
## Process | ||
|
||
### Decision maker (lang team member or lang team advisor) | ||
|
||
* Write a comment on the Github issue or PR that | ||
* Explains decision and context | ||
* Labels the issue with `T-lang` (`@rustbot labels +T-lang`) | ||
* Starts a `@rfcbot poll` -- typically the issue should *only* have `T-lang` to avoid excessive pings | ||
* If people raise concerns, particularly Rust team members: | ||
* Remember to **treasure dissent**. Engage with them and make sure you understand it. Note all the concerns raised on the tracking issue as "unresolved questions" or things to explore so they don't get forgotten. | ||
* Concerns don't *block* you from going forward, but they may give you pause, particularly if they are shared by many on the team. | ||
|
||
### Other team members | ||
|
||
* Since this action is reversible, your approval is not required. However, please check your box to indicate you reviewed the issue, it's useful feedback. | ||
* If you disagree with the decision, or think the experiment is a bad idea, say so (constructively)! | ||
* For experiments, ask youself: What are the "weak spots" that the experiment ought to probe? What information can we gather? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
# Consensus decisions | ||
|
||
Consensus decisions represent the official opinion of the team. They require that a majority of the team is in favor and that nobody has raised a concern that achieved [strong enough support](#threshold-to-resolve-a-concern-without-consent) to block the decision. | ||
|
||
They are used for for decisions that cannot be reversed (e.g., stabilization decisions or decisions that affect language semantics). They are also used for RFC approvals because, while the designs described there can be reversed before stabilization, we do not wish to do so lightly. | ||
|
||
## Definitions | ||
|
||
The decision making process distinguishes the following roles | ||
|
||
* **Lang team**: the [Language Design Team](https://github.com/rust-lang/team/blob/master/teams/lang.toml). | ||
* **Lang team member**: a member of the Lang team. Lang team members are the ones who have to [approve the final decision](#the-process). | ||
* **Advisor**: a member of the [lang team advisors](https://github.com/rust-lang/team/blob/master/teams/lang-advisors.toml). Advisors can propose a decision and can raise [formal concerns](#raising-concerns) but their approval is not required. | ||
* **Decision document**: the RFC, issue text, or other document describing the decision being made. | ||
* **Document author**: The person who authored the decision document. They ultimately decide what changes they wish to make to the text in response to concerns. They often do this in close consultation with a member of the lang team, but that is not required. | ||
|
||
## The process | ||
|
||
Consensus decisions are done using rfcbot. They always begin with a decision document authored by the [document author](#definitions). The document author can be anyone, they do not have to be a member of a Rust team. | ||
|
||
To make a decision, a [lang team member or advisor](#definitions) should issue `@rfcbot fcp merge`. This will create checkboxes. Once [2/3 of the boxes have been checked](#doing-the-math), the decision will enter final-comment-period. During that period the team should review any comments raised — assuming no concerns are raised (see below), the decision is finalized once the FCP has expired. | ||
|
||
*Note:* Before finalizing the decision, the team should engage with **new** points raised on the thread (particularly if they are made by people not able to raise formal concerns). | ||
|
||
## Raising concerns | ||
|
||
[Lang team members or advisors](#definitions) are entitled to raise a **formal concern** during the discussion process. This can be done with `@rfcbot concern concern-name`. The decision cannot be finalized until the concern is resolved, either because the person who raised the concern is satisfied and [resolves](#resolving-a-concern) it themselves, or because the team decides to [challenge it](#challenging-a-concern). | ||
|
||
### Expectations on raising a concern | ||
|
||
The [lang team member or advisor](#definitions) who raises a concern is expected to | ||
|
||
* write a constructive comment explaining the concern; | ||
* make themselves available for discussion in a reasonable fashion; | ||
* be prepared to write a document summarizing their concern for the lang-team if requested. | ||
|
||
### When a concern is raised | ||
|
||
When a concern is raised, the team will review the concern in the triage meeting. Based on that discussion, the [document author](#definitions) can decide whether they wish to make changes to mitigate or resolve the concern. | ||
|
||
## Resolving a concern | ||
|
||
If the person who raised the concern is satisfied, either because of changes made or because they don't wish to continue blocking progress, they should resolve the concern themselves with `@rfcbot resolve`. This is the desired outcome. | ||
|
||
If the concern has still not been resolved, there will typically be a period of deeper discussion. The goal is to [find common ground](./making_decisions.md#design-axioms), either by mitigating it directly or by side-stepping it via a subset of the design that still achieves the major goals. | ||
|
||
### Challenging a concern | ||
|
||
If deeper discussion does not reach a solution, a [lang team member](#definitions) can challenge a concern. This indicates that they feel they understand the concern and do not agree it is a problem. | ||
|
||
Challenging a concern is done by scheduling a meeting in which the lang team reads and discusses a summary of the concern and the subsequent discussion. At the end of this meeting, the concern will either be *sustained* (meaning that progress is still blocked) or *resolved* (meaning that final-comment-period can continue, assuming there aren't other concerns to be resolved). | ||
|
||
Sustaining a concern requires [1/4 of the lang team](#doing-the-math) to agree to sustain; this number includes the person who raised the concern, if they are a member of the lang team and not an advisor. Members can agree to sustain either because they with the concern *or* because they feel more time is needed for discussion. | ||
|
||
*Note:* The document to be read during the meeting will ideally be prepared by both the person raising the concern and the people challenging it so that it fairly represents both points of view. The document should include a | ||
|
||
1. summary of the concern and discussion; | ||
2. coverage of possible mitigations, changes, or subsets that were considered and their pros/cons | ||
|
||
|
||
## Doing the math | ||
|
||
Given a team of N>=4 members, the actual threshold `R` for approving a decision is `R = round(N * 2 / 3)`. The threshold `S` for sustaining a concern is `floor(N / 4)`. So e.g... | ||
|
||
| N | R | S | | ||
| --- | --- | --- | | ||
| 20 | 13 | 5 | | ||
| ... | ... | ... | | ||
| 12 | 8 | 3 | | ||
| ... | ... | ... | | ||
| 9 | 6 | 2 | | ||
| 8 | 5 | 2 | | ||
| 7 | 5 | 2 | | ||
| 6 | 4 | 2 | | ||
| 5 | 3 | 2 | | ||
| 4 | 3 | 2 | | ||
|
||
If the team has 3 members or less, all members must agree to all decisions and concerns cannot be challenged. Really y'all need to recruit some new members at that point. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,28 @@ | ||||||
# Decision making | ||||||
|
||||||
This page documents our decision making process. | ||||||
|
||||||
## Our goal | ||||||
|
||||||
We want the ability to make designs that feel fresh, bold, and innotative. We do not want Rust to feel like it has been "designed by committee", with all the interesting bits smoothed down. | ||||||
|
||||||
We also want designs that meet Rust user's needs and live up to Rust's ethos of reliabile, performant, accessible code. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
These two goals can be in tension. The former pushes us to empower individuals. The latter pushes us to validate designs broadly. We use this decision making process to guide us in balancing those tensions. | ||||||
|
||||||
## Design axioms | ||||||
|
||||||
Our decision making process axioms are rules that we follow to help us achieve our goal. We try to satisfy them all, but if they come into tension, we prefer items that appear first in the list. | ||||||
|
||||||
* **No new rationale**. We make decisions only after the rationale have been presented publicly and all relevant stakeholders have had a chance to present counterarguments. | ||||||
- **Not afraid to do the right thing**. At the end of the day, we have to do what we feel is *right*. Sometimes this means breaking with the tradition and precedent set by other languages. Sometimes it means taking a socially uncomfortable stance (but always with respect). | ||||||
- **Find common ground**. It's good to break up designs into small pieces and proceed step by step. But be sure that each piece solves an end-to-end problem on its own. | ||||||
- **Trust each other**. Lang team members are expected to have demonstrated sharp instincts, humility, and the ability to hear and understand others. Sometimes you have to put your doubts aside and trust the others on the team. | ||||||
- **Treasure dissent**. When someone raises a concern, we take it as an opportunity to improve the design, not an obstacle to be overcome. We invite people to elaborate and make sure we understand what's motivating them before we decide how to respond. | ||||||
|
||||||
## Processes | ||||||
|
||||||
We divide decisions into two categories: | ||||||
|
||||||
* [Reversible decisions (aka, 2-way door)](./2-way-door.md), used for [starting experiments](./how_to/experiment.md) and other decisions that don't make a promise to our end users. Reversible decisions follow a "champion" rule, which means that just one person on the team has to be in favor for the decision to go through; others on the team present concerns as a way to help make sure the champion is aware of them. | ||||||
* [Consensus decisions (aka, 1-way door)](./consensus.md), used for [stabilization decisions](./how_to/stabilize.md) and for RFC approvals. Consensus decisions require everyone on the team to sign off. The decision cannot be finalized if there is a blocking concern backed by 2 or more team members. |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.