Today's governance and evolution process are not meeting the current needs of the Carbon project in a few ways:
An orthogonal problem that is worth solving while here is to update the set of people providing governance for Carbon. This is not a pressing problem, but the set should grow to reflect the many new and active members of the project.
This proposal makes significant changes to both the governance model and evolution process. Rather than describing the delta, it focuses on the newly proposed model and process.
The primary governance model for Carbon shifts to be handled directly by the arbiters from the prior system. There remain three of them, and they make decisions by blocking consensus with a quorum of two. The group is renamed to the "Carbon Leads". They may in the future create other similarly small groups of leads and delegate specific domains or decisions.
The core team, as well as other teams, are replaced with a directory of experts. This is an informal list of experts with different backgrounds, experience, expertise, and interest. It is indexed by these different areas and focuses on breadth. People listed should be actively interested in Carbon, invested in its success, and available to engage on their relevant topic area. The intent is to both surface different interested parties, and provide resources for contributors to Carbon for advice, information, or insight on specific areas.
An overview of the new evolution process, but note that details are saved for the detailed section below:
proposals/ directory of the project, using a similar template to
our current one.It is also useful to see what the process looks like for different roles within the community. These perspectives are also the most critical to keep simple and easily understood.
Proposal author: this should feel like a code review, with some broken out issues for longer discussion:
Community: anyone that is interested can participate in the RFC:
Active contributors: everyone actively contributing to the evolution of Carbon should try to regularly:
Carbon Leads: responsible for making decisions rapidly and ensuring proposal PRs land:
This proposal asks Kate Gregory to join the leads, replacing Titus Winters who doesn't currently have the bandwidth to participate as actively. Given the shift to the leads handling a more direct share of the evolution process, it seems prudent to make this change at the same time.
No specific composition of the experts directory is proposed here. Instead, it is suggested to collaboratively build that with interested parties adding themselves and helping structure the domains / areas to be covered. Those changes shouldn't require any formal proposal, and can simply be approved by any one of the leads.
A proposal PR should use the proposal label, have a descriptive title, and
easily understood initial summary comment. Authors and leads are encouraged to
edit both as necessary to ensure they give the best high-level understanding of
the proposal possible. The proposals should then use the template markdown file
to describe itself fully. This template will have an additional section to
contain the rationale for the proposal being accepted.
The purpose of the rationale section will match the prior process's rationale: it must explain how the proposal furthers the goals for Carbon. It is important that proposals stay aligned with Carbon's goals, and where they need to change over time we change the goals themselves rather than inventing new rationale incrementally. While the author of the proposal should suggest an initial rationale, the reviewers and leads can also help improve this to make sure it captures the basis on which the proposal is accepted. Authors shouldn't stress about getting the rationale right out of the box, this is among the easiest parts to improve with help from the community.
Proposal PRs can also include changes to the rest of the Carbon project as part of the PR, in subsequent PRs that are referenced for context, or they can be stand-alone changes that are implemented through a series of future PRs to the rest of the project. All of these options are fine.
There won't be a separate "decision" file for proposals as the rationale will be incorporated, and the decision will be marked by closing the PR. Existing proposals should be updated to merge their decisions into the document so that we have a simpler layout of the proposals tree and can have simple and easy tooling around it.
PRs that are in "draft" status in GitHub are considered works-in-progress
(rather than prior WIP label). Check with the author before spending time
reviewing these, and generally avoid distracting the author with comments unless
they ask for them. The proposal may be actively undergoing edits.
Feel free to factor out open questions in a proposal to issues that you assign to the leads to resolve. You can even do this before sending the proposal for review. Even after resolved, an open question issue can be reopened if new information comes up during the RFC.
When a proposal PR is sent for review by the leads, one of them will be assigned the PR and is responsible for helping land that proposal, or explaining why the project won't move forward in that direction. The assigned lead is also ultimately responsible for the code review on the PR. Proposals sent for review are also sent as an RFC to the entire community.
All active Carbon contributors are strongly encouraged to regularly skim the title and summary comment of proposals under RFC that are interesting to them. They should use GitHub reactions, including at least a thumbs-up, to show their interest and enthusiasm about the proposal, and help encourage the author. Writing proposals is extremely hard work, and we need to clearly show both interest in the proposed direction of Carbon and appreciation for the work put into the proposal. This is not about approving the proposal, or any of its details. It is completely fine and coherent to both give a thumbs-up to a proposal and provide a serious, blocking issue that needs to be resolved.
Anyone in the community, of course including active contributors, is encouraged to participate in the RFC in detail if interested. However, not everyone needs to participate in every RFC. If a proposal is already getting actively and thoroughly reviewed, feel free to focus your time on other proposals with fewer comments. Even if there are issues or problems discovered later, we can always fix them with follow-up proposals.
Both code review and high-level design comments are welcome. If an open question comes up or a high level blocking issue is uncovered, feel free to move it to its own issue and assign it to the leads to resolve. That issue is also a good place to focus discussion on that specific topic rather than the main PR.
The assigned lead should provide an LGTM on proposals once the following criteria are met:
The last two criteria are fundamentally judgement calls for the lead to make, and we don't try to formulate a rigid or fixed bar for them. If resolving the blocking issues requires significant changes, the author should also get a fresh LGTM from the assigned lead after those changes, just like they would with code review.
The assigned lead may also request a final comment period for the community when giving an LGTM. This signals to the community that the proposal is likely to move forward once the blocking issues are resolved, and any remaining concerns need to be surfaced. The goal is to help uncover concerns that were hidden until it was clear that the proposal is likely to move forward. However, this is not the default. The assigned lead should only do this when there is some reason to expect further community comment is especially important to solicit. Common cases to consider are contentious, complex, or dramatic changes to the language or project. Ultimately, whether this is important is a judgement call for the lead. This will be modeled by filing a blocking issue that resolves in one week when giving the LGTM. This issue will also explain the motivation for requesting a final comment period.
Any time an open question or a blocking issue is filed for the leads to resolve, that issue forms both the primary discussion thread and where the leads signal how it is resolved. We use issues both to track that there is a specific resolution expected and that there may be dependencies.
These issues can be created at any time and by any one. Issues can be created while the proposal is a WIP or draft in order to help inform specific content that should go into the proposal. It is even fine to create an issue first, even before a proposal exists, as an open question about whether to produce a particular proposal, or what a proposal that is being planned should say. For issues which don't (yet) have a specific proposal PR associated with them, at some point the leads may ask that a proposal be created to help collect in a more cohesive place a written overview of the issue and related information, but this process need not be strictly or rigidly bound to having proposal text.
Discussion on these issues, especially contentious ones, should endeavor to focus on surfacing information and highlighting the nature of the tradeoff implied by the decisions available. This is in contrast to focusing on advocacy or persuasion. The goal of the issues shouldn't be to persuade or convince the leads to make a specific decision, but to give the leads the information they need to make the best decision for Carbon. It is of course fine that some people have a specific belief of which decision would be best. However, by framing their contributions to the discussion as surfacing the information that underpins that belief the discussion is more likely to be constructive, welcoming, and effective. Overall, everyone should strive to minimize their use of rhetoric or other persuasive methods to the extent they can. However, none of this should preclude gathering information like polls of opinion among groups, or signaling agreement. Where community members stand and how many agree with that stance on any issue is information, and useful to surface.
Avoid using issues for things that are just requests or suggestions on a proposal PR. If in doubt, start off with a simple comment on the PR and see if there is any disagreement -- everyone may already be aligned and agree. When a comment does seem worth turning into an issue, don't worry about that as the author or the commenter. Getting the leads to resolving a disagreement isn't a bad thing for anyone involved. This should be seen as a friendly way to move the discussion with more disagreement out to its own forum where it'll get resolved, and focus the PR on improving the proposal and getting it ready to land.
When an issue is created from a discussion on a PR, and after the discussion on the issue all the original parties actually come to a happy agreement, it's totally ok to just close the issue and move back to the code review in the PR. Anyone who would prefer the leads to still chime in can just re-open the issue and the leads will follow up, even if its just to get confirmation that everyone did end up happy with the resolution. At the end of the day, while it's fine to resolve an issue that everyone actually ended up agreeing about (maybe once some confusion is addressed), ultimately the leads are responsible for resolving these issues and there is no pressure on anyone else to do so.
Our goals document identifies that "[t]he community needs to be able to effectively engage in the direction and evolution of the project and language, while keeping the process efficient and effective. That means we need an open, inclusive process where everyone feels comfortable participating. Community members should understand how and why decisions are made, and have the ability to both influence them before they occur and give feedback afterward."
Our prior process, in a well-intentioned effort to ensure we have scope for community engagement, is not as efficient and effective as we would like, and that lack of efficiency ironically has a negative impact on community engagement that outweighs the benefits. The proposed process removes several artificial delays from our process and enables much earlier feedback and decision-making as part of proposal development, ideally without introducing a negative impact on any of the other aspects of this goal.
We could simply not make a change here.
Advantages:
Disadvantages:
We could attempt to solve the problems cited while keeping the larger core team structure. This would largely involve carefully changing the role that members of the core team fill when making decisions, and the process used to make those decisions.
Advantages:
Disadvantages:
These were added based on the repeated failure modes seen in other language communities where members of the community didn't feel they had sufficient opportunity to participate in discussions. We could retain them with the new process.
Advantages:
Disadvantages: