Skip to content

Commit 6baa18a

Browse files
XAMPPRockynikomatsakisvalgrimm
committedApr 16, 2020
Add Project Group RFC
Co-Authored-By: Niko Matsakis <niko@alum.mit.edu> Co-Authored-By: valgrimm <56933147+valgrimm@users.noreply.github.com>
1 parent 3df38f6 commit 6baa18a

File tree

2 files changed

+322
-0
lines changed

2 files changed

+322
-0
lines changed
 

‎resources/project-group-workflow.svg

+3
Loading

‎text/0000-project-groups.md

+319
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,319 @@
1+
# Summary
2+
3+
- Formalize project groups as groups dedicated to specific projects within the
4+
context of a Rust team.
5+
- Project groups are created via team consensus (such as an RFC) and have a
6+
"parent team(s)"
7+
- The groups then drive the project to completion, e.g. by authoring follow-up
8+
RFCs and doing design work.
9+
- Once the work has been concluded, the group is archived.
10+
- Each project group typically has:
11+
- A charter outlining the group's scope and goals.
12+
- Appointed shepherds and team liaisons.
13+
- An associated repository.
14+
- Dedicated streams on Discord/Zulip/etc.
15+
16+
# Motivation
17+
18+
Working groups in Rust were not created through the RFC process, as such
19+
there's not much documentation on exactly what a working group does, what are
20+
its responsibilities, and also importantly setting expectations or goals. There
21+
is one definition of "Working Group" available in [rust-lang#54445]; quoted below.
22+
23+
> A Rust Working Group is a set of people working at common purpose. Working
24+
> Groups are associated with a Rust team. Unlike a Rust Team, Working Groups
25+
> don't have "formal decision making power", though often they are charged with
26+
> drawing up recommendations, RFCs, or other documents for the teams (which is
27+
> then intended to make the final decision).
28+
29+
While this definition is true in the broad sense, it does not define the
30+
difference between what has come to be called "Domain Working Groups" and
31+
"Team Working Groups". This RFC aims to provide clarity by providing new distinct
32+
terminology that matches the intent behind "Team Working Groups", as well as codify
33+
some of the processes that these groups have been using to help facilitate creating
34+
new groups.
35+
36+
[rust-lang#54445]: https://github.com/rust-lang/rust/issues/54445
37+
38+
# Guide-level explanation
39+
40+
To address this confusion this RFC proposes switching from using "Team Working
41+
Group" in favour of "Project Group". This would serve as a catch all term for
42+
the sub teams of the existing teams to organise around specific efforts, such
43+
as certain project or effort in the Rust team.
44+
45+
**Note:** Currently existing working groups should remain working groups unless
46+
explicitly re-proposed through the project group process detailed in this RFC.
47+
48+
## Life-cycle of a Project Group
49+
This is a high level overview of the complete process of a project group.
50+
51+
<p align="center">
52+
<img src="../resources/project-group-workflow.svg"
53+
alt="A flow diagram showing each step of a project group"
54+
height="800px">
55+
<p align="center">Figure 1. Project Group Lifecycle</p>
56+
</p>
57+
58+
### Steps
59+
60+
1. Exploratory period.
61+
62+
- Initial discussions of the problem area.
63+
- Teams are not obligated to look at or respond to any of the initial
64+
discussions. Of course, interested members are free to participate.
65+
- Write a short motivation for the project.
66+
- Find a person from the relevant team who's willing to act as a liaison.
67+
- Finding a liasion is specific to each team, you should consult the
68+
team's documentation on how to propose project groups.
69+
- You may not always be able to find someone who is willing to act as
70+
liasion. It's up to each team to decide how many new efforts
71+
they'll have the bandwidth for, which may at times be none.
72+
73+
2. Obtain the consensus of the team to create group.
74+
75+
- Specify the liaison, and shepherd(s). (See [Project Group Creation](#project-group-creation))
76+
- Write a short motivation, and some notes on possible solutions.
77+
- How consensus is reached would vary from team to team, some would require an
78+
RFC while others could decide in a meeting. (See [Future Work](#future-work))
79+
80+
3. Create infrastructure for group.
81+
82+
- GitHub repository under `rust-lang` for hosting work and discussions, such
83+
as for draft RFCs.
84+
- A Discord channel or a Zulip stream for communication.
85+
- Project group in [`rust-lang/team`], as well as a team on GitHub, for
86+
handling permissions.
87+
88+
4. Create a post on the Inside Rust blog announcing creation of the group. Be
89+
sure to include the following information.
90+
- An introduction
91+
- The charter (either linked or inlined) \[See [Creating The Charter](#creating-the-charter)\]
92+
- A link to your group's GitHub repository
93+
- If your group is open for participants, provide information on how they
94+
can contribute.
95+
- If you're also planning on running regular meetings, include when your
96+
group plans to meet along with a link to calendar event for the meeting.
97+
98+
5. The group works towards the goals laid out in their charter.
99+
100+
6. When active work has stopped a group is "archived".
101+
- Archival can be started by the project group shepherds, the liasion, or the
102+
lead(s) of the parent team if needed.
103+
- Archival is not necessarily a permanent state, it is only a reflection on the
104+
current status of the group.
105+
- Similarly a groups archival doesn't imply that work in that area has been
106+
exhausted
107+
- Reasons to archive (non-exhaustive):
108+
- Nobody in the group has time anymore or higher priority things arose.
109+
- There's a blocking issue that can't be resolved.
110+
- Don't see any additional work to do in this area in the near future.
111+
- The work was done to a satisfactory state.
112+
- The group decided the idea wasn't so good after all.
113+
114+
7. Create a blog post announcing the archival of the group.
115+
116+
- The scope of this post will vary based on the scope of the group, but
117+
ideally it would include some of the following.
118+
- Overview of decisions, RFCs, and other output the group produced.
119+
- Thoughts on the process, how it worked (or didn't as case may be), any
120+
difficulties encountered, and what they would want to be improved.
121+
122+
8. Archive infrastructure.
123+
124+
- Archive GitHub repository to be read-only.
125+
- Archive chat channel(s) on any platforms.
126+
127+
[`rust-lang/team`]: https://github.com/rust-lang/team
128+
[internals]: https://internals.rust-lang.org
129+
130+
# Reference-level explanation
131+
132+
A Project Group is a group of people working on a particular project or
133+
responsibilities at the behest of an official Rust team. Some project groups are
134+
are ephemeral, meaning that they are archived once the project is complete.
135+
However, there are project groups that have continual work and maintenance.
136+
137+
Examples of project groups around specific feature include [FFI Unwind],
138+
[Inline ASM], and [Safe Transmute]. Examples built around continual work and
139+
maintenance could include [Triage], and [Rustup].
140+
141+
The goal of a project is build a community or formalise an existing community
142+
around a particular feature or project in the organisation, and use this
143+
space to discuss and iterate on that feature.
144+
145+
Part of building a community is removing some of the institutional memory that
146+
develops in the design process, and centralising the information and discussion
147+
around the feature so that we can provide better visibility into why certain
148+
decisions and trade offs were made over others.
149+
150+
Previously a lot of the discussion and iteration for large features would
151+
happen in the initial RFC thread. This leads to a lot of discussion in the top
152+
of the thread and that often becomes completely irrelevant to the current
153+
iteration.
154+
155+
This process has also been unsuitable to describe features that can take
156+
multiple years to develop and will become multiple RFCs over the course of its
157+
design process. Some examples of of this are the "`impl Trait`" and "macros
158+
2.0" features, where the goals has shifted a lot from the initial RFCs, and it
159+
can be hard to know their current status.
160+
161+
[ffi unwind]: https://github.com/rust-lang/project-ffi-unwind
162+
[inline asm]: https://github.com/rust-lang/project-inline-asm
163+
[safe transmute]: https://github.com/rust-lang/project-safe-transmute
164+
[triage]: https://github.com/rust-lang/team/blob/master/teams/wg-triage.toml
165+
[rustup]: https://github.com/rust-lang/team/blob/master/teams/wg-rustup.toml
166+
167+
## Project Group Creation
168+
A project group should have the following;
169+
170+
- **Leads** — At least one person who acts as the leader of the group and is
171+
typically responsible for writing the initial charter, handling
172+
administrative and communication tasks, as well as delegating those
173+
responsibilities to other members in the group.
174+
- **Liaisons** — A member from a official Rust team that is sponsoring the
175+
work, and acts as a point of contact between the team and the group. They
176+
may or may be that directly involved, but they should check-in
177+
periodically and be able to represent the work in meetings with the team.
178+
They should also look out for when this might intersect with other work
179+
happening in the team that is beyond the working group itself.
180+
- Liaisons may also be but are not required to be one of the leads.
181+
- **Members** — Individuals who regularly participate and/or
182+
contribute to the project group.
183+
- Membership requirements for groups are decided by the shepherd and should
184+
be stated in the charter.
185+
- Initial membership should try to represent people who have already been
186+
participating regularly and productively in the respective area.
187+
- It is not required for a project group to have a lot of members though,
188+
some project groups may only have one or two members including leads and
189+
liasions.
190+
- A charter that defines the scope and intent of the group.
191+
- A GitHub repository hosted under the `rust-lang` organization containing
192+
the charter and instructions for how community members can monitor or
193+
participate in the group.
194+
- Representation on the official [rust-lang.org] website.
195+
- No _"formal decision making power"_: meaning that they are not able to
196+
accept RFCs on `rust-lang/rfcs`.
197+
- Groups are of course encouraged to create RFCs as well as advocate their
198+
concerns and desired changes to the Rust teams and community.
199+
- Dedicated space(s) in of Rust's officially managed discussion platforms.
200+
- As of the time of this writing this includes [Zulip] and [Discord].
201+
- Ideally the group should use the same platform as their parent team to
202+
ease communication, though there may be cases where the team agrees to
203+
a group trying out a different platform.
204+
205+
### Creating The Charter
206+
Since project groups are approved by their relevant parent team over the core
207+
team, it's up to each team decide their specific requirements. However the
208+
author recommends that a group should try to make a charter that addresses
209+
the following questions.
210+
211+
- What value do you see your group bringing to the organisation?
212+
- What support do you need, and separately want, from the Rust organization?
213+
- Why should this be a project group over a community effort?
214+
- What are the goals of your group?
215+
- Both in the short term, and if relevant over a longer period.
216+
- What are explicitly non-goals of your group?
217+
- What do you expect the relationship to the team be?
218+
- How do you intend to make your work accessible to people outside your group?
219+
- Who are the initial shepherds/leaders? (This is preferably 2–3 individuals,
220+
but not required.)
221+
- Is your group long-running or temporary?
222+
- If it is temporary, how long do you see it running for?
223+
- What is the long-term vision of your group?
224+
- If applicable, which other groups or teams do you expect to have close
225+
contact with?
226+
- Where do you see your group needing help?
227+
228+
229+
[rust-lang.org]: https://rust-lang.org
230+
[zulip]: https://rust-lang.zulipchat.com
231+
[discord]: https://discord.gg/rust-lang
232+
[code of conduct]: https://www.rust-lang.org/policies/code-of-conduct
233+
234+
## Initial Setup
235+
236+
Once a group has been approved, a pull request with the initial set of members
237+
should be made to [`rust-lang/team`]. Please refer to team's documentation for
238+
how to create a group.
239+
240+
It is then recommended for the project group to create a repository under the
241+
`rust-lang` organisation using the [project group template], and making any
242+
relevant changes and personalisation.
243+
244+
[`rust-lang/team`]: https://github.com/rust-lang/team
245+
[project group template]: https://github.com/rust-lang/project-group-template
246+
247+
## Evaluation
248+
249+
Parent teams should add checking in with their project groups as part of their
250+
regular triage. The project group is also encouraged to post their progress
251+
updates and meeting minutes as blog posts on the ["Inside Rust" blog][inside-rust].
252+
253+
[inside-rust]: https://blog.rust-lang.org/inside-rust
254+
255+
## Archival
256+
257+
At some point, the group's work will conclude. Whether because the work is
258+
complete, or the members cannot finish the work, or the group feels like the
259+
project isn't worth pursuing further. The author is calling this process
260+
"Archival".
261+
262+
### Announcement
263+
264+
A group that is considering archival should first figure out what should happen to
265+
any crates, repositories, or projects that they started. In general these
266+
projects should be migrated to other groups or individuals, or archived if
267+
there is there isn't any suitable candidate for maintaining the project.
268+
269+
Once that has been resolved the group should write an announcement of their archival
270+
along with any relevant details about the migration and/or archival of projects.
271+
272+
### Retrospective
273+
274+
While this RFC attempts to address some of the current organisational problems
275+
within the organisation, the author doesn't believe will be a panacea to those
276+
problems or that we won't encounter new problems in the future. As part of
277+
that, the RFC introduce having retrospectives with the groups once significant
278+
time has past or the group has been finished it's project.
279+
280+
This would involve a discussion between the members of the group, and ideally
281+
their parent team and the Governance working group. The retrospective should
282+
produce a public blog post on the Inside Rust blog, however any feedback a
283+
member has that they would want to keep private would be omitted.
284+
285+
The blog post should try to cover the output of the group, such as RFCs or
286+
projects, as well what the group thought worked and importantly what
287+
didn't work. This should help us iterate on this initial RFC and help us find
288+
and address issues that come up in the process.
289+
290+
Both the retrospective and the archival announcement can and likely should be
291+
written as a single post. However there will be times where having a timely
292+
retrospective will not be possible, and in that case a shorter seperate
293+
announcement post is appropiate.
294+
295+
# Drawbacks
296+
297+
- There's a lot of inertia around the Working Group terminology, and switching
298+
to new terminology will likely cause some confusion, though hopefully
299+
only in the short term.
300+
301+
# Future Work
302+
303+
- An initial version of this RFC also specified Working & Community Groups,
304+
however we found that we want to discuss that topic in more depth, and
305+
didn't want to block Project Groups, so it was removed. See [wg-governance#46]
306+
for tracking future progress.
307+
- Ideally the Governance WG would prefer if teams obtained consensus to form
308+
groups through RFCs, as they an open process that allows us to easily keep
309+
track of decisions. However we recognise that the current RFC process is maybe
310+
too heavyweight for it work for some teams currently. We're currently looking
311+
how we can simplify some of this process, see [wg-governance#38] for
312+
further information.
313+
314+
[wg-governance#38]: https://github.com/rust-lang/wg-governance/issues/38
315+
[wg-governance#46]: https://github.com/rust-lang/wg-governance/issues/46
316+
317+
# Unresolved questions
318+
319+
[unresolved-questions]: #unresolved-questions

0 commit comments

Comments
 (0)
Please sign in to comment.