-
Notifications
You must be signed in to change notification settings - Fork 54
Revise decision process: champion vs FCP decisions #360
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
14
commits into
rust-lang:master
Choose a base branch
from
nikomatsakis:decision-process-2
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
Changes from 9 commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
f1af0ef
Revise decision process: champion vs FCP decisions
nikomatsakis db1e02e
Update src/fcp-decisions.md
nikomatsakis 3fceeea
Apply suggestions from code review
nikomatsakis 3b70350
refact: create rationale section
nikomatsakis a780675
refact: champion decisions cannot be blocked
nikomatsakis df586f3
feat: document "no recursive blocking" rationale
nikomatsakis af3e8e2
feat: document FCP expectations
nikomatsakis cc6b0f6
feat: concerns limited to lang team members
nikomatsakis d7f3607
rename rationale file to PR 360
nikomatsakis e1f315c
Update src/rationale/pr-360.md
nikomatsakis f5bfd95
revise to a "seconding" rule
nikomatsakis 4786d71
no two-pizza team reference
nikomatsakis 9888a9a
clarify when blocking concern is withdrawn
nikomatsakis 7a7587f
Update src/rationale/pr-360.md
nikomatsakis 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
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,35 @@ | ||
| # Champion decisions | ||
|
|
||
| Champion decisions do not represent team consensus. Rather, they indicate that *somebody* on the team is willing to champion an idea. We use them to begin experiments and for other decisions where we want to move quickly and iterate. | ||
|
|
||
| ## When to use champion decisions | ||
|
|
||
| * Starting or stopping a [lang-team experiment](./how_to/experiment.md) | ||
| * Closing an RFC or issue that is clearly not going to be accepted | ||
| * Significantly changing an existing experiment's scope or goals (either cutting or expanding scope) | ||
| * Opting to focus on a particular design direction and halt investigations of others | ||
| * Adding a new constraint to the design that you've learned as part of exploring the design space | ||
| * Other lightweight decisions that you'd like the team to be aware of, but that don't make a durable commitment | ||
|
|
||
| ## Process | ||
|
|
||
| ### For the champion (lang team member or champion) | ||
|
|
||
| 1. Write up your proposal on a GitHub issue or PR, explaining the decision and context. | ||
| 2. [Nominate](./how_to/nominate.md) it for discussion at a lang-team triage meeting. | ||
| 3. At the triage meeting, the team will discuss and raise any concerns. | ||
| 4. Consider the feedback. If team members expressed strong concerns, you should likely address those before proceeding. | ||
|
|
||
| ### Handling concerns | ||
|
|
||
| When people raise concerns: | ||
|
|
||
| * **Treasure dissent.** Engage with them and make sure you understand the concern. | ||
| * Note concerns on the tracking issue as "unresolved questions" or things to explore—they shouldn't be forgotten. | ||
| * Concerns don't *block* you from proceeding, but they may give you pause, particularly if they are shared by multiple team members. | ||
|
|
||
| ## For other team members | ||
|
|
||
| * Your approval is not required for champion decisions. | ||
| * If you disagree with the decision or think it's a bad idea, say so (constructively)! | ||
| * For experiments, ask yourself: 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| # Decision making | ||
|
|
||
| This page documents our decision making process. | ||
|
|
||
| ## Our goal | ||
|
|
||
| We want the ability to make designs that feel fresh, bold, and innovative. 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 users' needs and live up to Rust's ethos of reliable, performant, accessible code. | ||
|
|
||
| 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 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 has 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 tradition and precedent set by other languages. Sometimes it means taking a socially uncomfortable stance (but always with respect). | ||
| * **Find common ground**. When there is disagreement, look for solutions that address everyone's concerns. Break up designs into smaller pieces if needed. 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. | ||
|
|
||
| ## Two kinds of decisions | ||
|
|
||
| We divide decisions into two categories: | ||
|
|
||
| * **[Champion decisions](./champion-decisions.md)** are the preferred default. They are used for [starting experiments](./how_to/experiment.md) and other decisions where we want to move quickly. A single lang-team member or advisor can champion a decision; others can raise concerns, but cannot block. A champion decision does *not* represent team consensus—it represents only the champion's point of view. Any team member can request FCP escalation at any point—during the initial triage meeting or later—which converts it to an FCP decision. Once a champion decision has been escalated and FCP'd, it becomes durable in the same way as any other FCP decision. | ||
|
|
||
| * **[FCP decisions](./fcp-decisions.md)** represent a significant commitment from the team. They are used for [stabilization](./how_to/stabilize.md), RFC approval, and other cases where we are making a promise to our users or taking a position we don't want to reverse lightly. FCP decisions require broader team sign-off and follow a formal process for resolving concerns. | ||
|
|
||
| **When to use which:** Prefer champion decisions when possible—they have lower overhead and enable faster iteration. Use FCP decisions when the decision is significant enough that reversing it should require another FCP. The expectation is that an FCP'd decision cannot be reversed without some change in circumstances: new experience, new information, or a reasoned change of mind. | ||
|
tmandry marked this conversation as resolved.
|
||
|
|
||
| ## Team size | ||
|
|
||
| The lang team operates as a "two-pizza team" of 4-8 members. This keeps the team small enough for high-bandwidth communication and trust, while large enough for diverse perspectives. | ||
|
tmandry marked this conversation as resolved.
Outdated
|
||
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.
Uh oh!
There was an error while loading. Please reload this page.