RFC 2856: Project groups

core (governance)

Summary

Motivation

Working groups in Rust were not created through the RFC process, as such there's not much documentation on exactly what a working group does, what are its responsibilities, and also importantly setting expectations or goals. There is one definition of "Working Group" available in rust-lang#54445; quoted below.

A Rust Working Group is a set of people working at common purpose. Working Groups are associated with a Rust team. Unlike a Rust Team, Working Groups don't have "formal decision making power", though often they are charged with drawing up recommendations, RFCs, or other documents for the teams (which is then intended to make the final decision).

While this definition is true in the broad sense, it does not define the difference between what has come to be called "Domain Working Groups" and "Team Working Groups". This RFC aims to provide clarity by providing new distinct terminology that matches the intent behind "Team Working Groups", as well as codify some of the processes that these groups have been using to help facilitate creating new groups.

Guide-level explanation

To address this confusion this RFC proposes switching from using "Team Working Group" in favour of "Project Group". This would serve as a catch all term for the sub teams of the existing teams to organise around specific efforts, such as certain project or effort in the Rust team.

Note: Currently existing working groups should remain working groups unless explicitly re-proposed through the project group process detailed in this RFC.

Life-cycle of a Project Group

This is a high level overview of the complete process of a project group.

A flow diagram showing each step of a project group

Figure 1. Project Group Lifecycle

Steps

  1. Exploratory period.
  1. Obtain the consensus of the team to create group.
  1. Create infrastructure for group.
  1. Create a post on the Inside Rust blog announcing creation of the group. Be sure to include the following information.
  1. The group works towards the goals laid out in their charter.

  2. When active work has stopped a group is "archived".

  1. Create a blog post announcing the archival of the group.
  1. Archive infrastructure.

Reference-level explanation

A Project Group is a group of people working on a particular project or responsibilities at the behest of an official Rust team. Some project groups are are ephemeral, meaning that they are archived once the project is complete. However, there are project groups that have continual work and maintenance.

Examples of project groups around specific feature include FFI Unwind, Inline ASM, and Safe Transmute. Examples built around continual work and maintenance could include Triage, and Rustup.

The goal of a project is build a community or formalise an existing community around a particular feature or project in the organisation, and use this space to discuss and iterate on that feature.

Part of building a community is removing some of the institutional memory that develops in the design process, and centralising the information and discussion around the feature so that we can provide better visibility into why certain decisions and trade offs were made over others.

Previously a lot of the discussion and iteration for large features would happen in the initial RFC thread. This leads to a lot of discussion in the top of the thread and that often becomes completely irrelevant to the current iteration.

This process has also been unsuitable to describe features that can take multiple years to develop and will become multiple RFCs over the course of its design process. Some examples of of this are the "impl Trait" and "macros 2.0" features, where the goals has shifted a lot from the initial RFCs, and it can be hard to know their current status.

Project Group Creation

A project group should have the following;

Creating The Charter

Since project groups are approved by their relevant parent team over the core team, it's up to each team decide their specific requirements. However the author recommends that a group should try to make a charter that addresses the following questions.

Initial Setup

Once a group has been approved, a pull request with the initial set of members should be made to rust-lang/team. Please refer to team's documentation for how to create a group.

It is then recommended for the project group to create a repository under the rust-lang organisation using the project group template, and making any relevant changes and personalisation.

Evaluation

Parent teams should add checking in with their project groups as part of their regular triage. The project group is also encouraged to post their progress updates and meeting minutes as blog posts on the "Inside Rust" blog.

Archival

At some point, the group's work will conclude. Whether because the work is complete, or the members cannot finish the work, or the group feels like the project isn't worth pursuing further. The author is calling this process "Archival".

Announcement

A group that is considering archival should first figure out what should happen to any crates, repositories, or projects that they started. In general these projects should be migrated to other groups or individuals, or archived if there is there isn't any suitable candidate for maintaining the project.

Once that has been resolved the group should write an announcement of their archival along with any relevant details about the migration and/or archival of projects.

Retrospective

While this RFC attempts to address some of the current organisational problems within the organisation, the author doesn't believe will be a panacea to those problems or that we won't encounter new problems in the future. As part of that, the RFC introduce having retrospectives with the groups once significant time has past or the group has been finished it's project.

This would involve a discussion between the members of the group, and ideally their parent team and the Governance working group. The retrospective should produce a public blog post on the Inside Rust blog, however any feedback a member has that they would want to keep private would be omitted.

The blog post should try to cover the output of the group, such as RFCs or projects, as well what the group thought worked and importantly what didn't work. This should help us iterate on this initial RFC and help us find and address issues that come up in the process.

Both the retrospective and the archival announcement can and likely should be written as a single post. However there will be times where having a timely retrospective will not be possible, and in that case a shorter seperate announcement post is appropiate.

Drawbacks

Future Work

Unresolved questions