Skip to content

Commit 899b19d

Browse files
committed
Add Project Group RFC
1 parent 3df38f6 commit 899b19d

File tree

2 files changed

+391
-0
lines changed

2 files changed

+391
-0
lines changed

resources/project-group-workflow.png

91.2 KB
Loading

text/0000-project-groups.md

+391
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,391 @@
1+
# Project Group RFC
2+
3+
# Summary
4+
5+
- Formalize project groups as groups dedicated to completing specific projects
6+
within the context of a Rust team
7+
- Project groups are created via an RFC and have a "parent team" (or
8+
multiple teams)
9+
- The groups then drive the project to completion, e.g. by authoring follow-up
10+
RFCs and doing design work.
11+
- Each project group typically has:
12+
- A charter outlining the group's scope and goals.
13+
- Appointed shepherds and team liasons.
14+
- An associated repository.
15+
- Regular meetings.
16+
- Dedicated streams on Discord/Zulip/etc.
17+
- Define working groups to refer to the "domain working groups" that are created
18+
to explore particular domains, such as embedded, CLI, etc.
19+
- They have a charter and defined leads but operate more independently from
20+
the Rust teams.
21+
- Define community group as the term for groups not formally affiliated with the
22+
Rust project.
23+
24+
# Motivation
25+
26+
Working groups were not created through the RFC process, as such there's not
27+
much documentation on exactly what a working group does, what are its
28+
responsibilities, and also importantly setting expectations or goals. There is
29+
one definition of "Working Group" available in [rust-lang#54445]; quoted below.
30+
31+
> A Rust Working Group is a set of people working at common purpose. Working
32+
> Groups are associated with a Rust team. Unlike a Rust Team, Working Groups
33+
> don't have "formal decision making power", though often they are charged with
34+
> drawing up recommendations, RFCs, or other documents for the teams (which is
35+
> then intended to make the final decision).
36+
37+
While this definition is true in the broad sense, it does not define the
38+
difference between what has come to be called "Domain Working Groups" and
39+
"Team Working Groups". Additionally the community has also adopted the Working
40+
Group terminology for organising and working on areas they are interested in,
41+
independent of The Rust Programming Language's Working Groups. It's great that
42+
we have a community able to self organise in this way, however it has led to
43+
some confusion over who is supporting these efforts, and whether they're
44+
considered _"official"_ Working Groups.
45+
46+
This RFC aims to provide clarity by providing new distinct terminology that
47+
matches the intent behind each of these three separate groups, as well as codify
48+
the processes that these groups have been using to help facilitate creating
49+
new groups.
50+
51+
[rust-lang#54445]: https://github.com/rust-lang/rust/issues/54445
52+
53+
# Guide-level explanation
54+
55+
To address this confusion this RFC proposes breaking up the single "Working
56+
Group" term, into three distinct terms.
57+
58+
- **Working Group** would map most directly to the previous "Domain Working
59+
Group" terminology, focused on building and organising around new areas of
60+
Rust that aren't covered by the current team roster.
61+
- **Project Group** would replace the "Team Working Group", and would serve as a
62+
catch all term for sub teams for the existing teams to organise around
63+
specific efforts, such as certain project or effort in the Rust team.
64+
- **Community Group** would act as a catch all term for community self
65+
organising groups that are independent of the Rust Programming
66+
Language Organisation.
67+
68+
## Life-cycle of a Project Group
69+
70+
This is a high level overview of the complete process of a project group. While
71+
the flow is built around project groups, we expect that working groups would
72+
follow a similar process with only minor specifics changed. E.g. A working
73+
group does not have to find a liaison.
74+
75+
<p align="center">
76+
<img src="../resources/project-group-workflow.png"
77+
alt="A flow diagram showing each step of a project group"
78+
height="800px">
79+
<p align="center">Figure 1. Project Group Lifecycle</p>
80+
</p>
81+
82+
### Steps
83+
84+
1. Exploratory period.
85+
86+
- Initial discussions of the problem area.
87+
- Write a charter containing motivation, and some notes on
88+
possible solutions.
89+
- Find a person from the relevant team who's willing to act as a liaison.
90+
- Typically can find someone by creating a post on [internals] or pinging
91+
specific people from team to gauge their interest.
92+
93+
2. Obtain consensus to create group.
94+
95+
- Specify the liaison, and shepherd(s).
96+
- How consensus is reached would vary from team to team, some would require an
97+
RFC while others could decide in a meeting. (See [Future Work](#future-work))
98+
99+
3. Create infrastructure for group.
100+
101+
- GitHub repository under `rust-lang` for hosting work and discussions, such
102+
as for draft RFCs.
103+
- A Discord channel or a Zulip stream for communication.
104+
- Project group in [`rust-lang/team`], as well as a team on GitHub, for
105+
handling permissions.
106+
107+
4. Create a post on the Rust or Inside Rust blog announcing creation of
108+
the group.
109+
110+
5. The group works towards the goals laid out in their charter.
111+
112+
6. When active work has stopped a group is "archived".
113+
114+
- Archival is not necessarily a permanent state, it is only a reflection on the current
115+
status of the group. A group can be "restored" at a later stage.
116+
- Reasons to archive:
117+
- Nobody in the group has time anymore or higher priority things arose.
118+
- There's a blocking issue that can't be resolved.
119+
- Don't see any additional work to do in this area in the near future.
120+
- The work was done to a satisfactory state.
121+
- The group decided the idea wasn't so good after all.
122+
123+
7. Create a blog post announcing the archival of the group.
124+
125+
- The scope of this post will vary based on the scope of the group, but
126+
ideally it would include some of the following.
127+
- Overview of decisions, RFCs, and other output the group produced.
128+
- Thoughts on the process, how it worked (or didn't as case may be), any
129+
difficulties encountered, and what they would want to be improved.
130+
131+
8. Archive infrastructure.
132+
133+
- Archive GitHub repository to be read-only.
134+
- Archive chat channel(s) on any platforms.
135+
136+
9. (Optional) Restore group
137+
138+
- At any later point the group could be restored to active status if there are
139+
assigned liaisons and shepherds, and the group has consensus from the team
140+
that the group should become active again.
141+
- If significant time has passed, part of restoring the group should be to
142+
evaluate whether the past decisions and rationale are still applicable to the
143+
present.
144+
- If there is consensus to become active again, go to step 3.
145+
146+
[`rust-lang/team`]: https://github.com/rust-lang/team
147+
[internals]: https://internals.rust-lang.org
148+
149+
# Reference-level explanation
150+
151+
## Common Aspects of Working Groups and Project Groups
152+
153+
Before going into the differences between these groups it's important to start
154+
with what it is shared between them.
155+
156+
- A charter that defines the scope and intent of the group.
157+
158+
- A GitHub repository hosted under the `rust-lang` organization
159+
(or separate organisation if necessary) containing the charter and
160+
instructions for how community members can monitor or participate in
161+
the group.
162+
163+
- Groups have at least one shepherd who acts as the leader of the group and is
164+
typically responsible for writing the initial charter, handling administrative
165+
and communication tasks, as well as delegating responsibilities to other
166+
members in the group.
167+
168+
- Groups should have a liaison member associated with an official Rust team.
169+
170+
- This liaison may also be but is not required to be a shepherd.
171+
172+
- Groups and their members are represented on the official
173+
[rust-lang.org] website.
174+
175+
- Membership requirements for both groups is decided by the shepherd and should
176+
be stated in the charter.
177+
178+
- Initial membership should try to represent people who have already been
179+
participating regularly and productively in the respective area.
180+
181+
- Neither group has _"formal decision making power"_: meaning that they are not
182+
able to accept RFCs on `rust-lang/rfcs`. Similarly, neither group has
183+
representation on the Core team.
184+
185+
- Groups are of course encouraged to create RFCs as well
186+
as advocate their concerns and desired changes to the Rust teams
187+
and community.
188+
189+
- Both groups are entitled to spaces in any or all of Rust's officially managed
190+
discussion forums.
191+
192+
- As the time of this writing this includes [Zulip] and [Discord].
193+
- Groups are also free to create spaces on platforms where the Rust project
194+
does not have a official presence. Moderation for these spaces should still
195+
follow Rust's [Code of Conduct].
196+
197+
[rust-lang.org]: https://rust-lang.org
198+
[zulip]: https://rust-lang.zulipchat.com
199+
[discord]: https://discord.gg/rust-lang
200+
[code of conduct]: https://www.rust-lang.org/policies/code-of-conduct
201+
202+
### Initial Setup
203+
204+
Once a group has been approved, a pull request with the initial set of members
205+
should be made to [`rust-lang/team`]. Please refer to team's documentation for
206+
how to create a group.
207+
208+
It is recommended for the working group to create a `wg-{name}`/`project-{name}`
209+
repository under the `rust-lang` organisation using the [project group
210+
template], and making any relevant changes and personalisation.
211+
212+
[`rust-lang/team`]: https://github.com/rust-lang/team
213+
[project group template]: https://github.com/rust-lang/project-group-template
214+
215+
## Working Groups
216+
217+
Working groups are a way of finding new domains that would benefit from
218+
continual development, that are not covered by an existing Rust team. Examples
219+
of this include [Embedded][embedded-wg], [WebAssembly][wasm-wg], and
220+
[Game Development][gamedev-wg].
221+
222+
[embedded-wg]: https://github.com/rust-embedded/wg
223+
[wasm-wg]: https://github.com/rustwasm/team
224+
[gamedev-wg]: https://github.com/rust-gamedev/wg
225+
226+
### Working Group Creation
227+
228+
Creation of a working group is approved by the core team. Typically this has
229+
been done by the core team agreeing to approve the creation of new working
230+
groups, having a period of time soliciting applications from the community,
231+
and then approving a subset of those applications.
232+
233+
#### Application Checklist
234+
235+
This not meant to be formal list of questions to be answer, however the
236+
application should try to address these points.
237+
238+
- What value do you see your group bringing to the organisation?
239+
- What are the goals of your group?
240+
- What are explicitly non-goals of your group?
241+
242+
These first three points should also serve as the basis for the charter for the
243+
working group.
244+
245+
- Is your group long-running or temporary?
246+
- If it is temporary, how long do you see it running for?
247+
- What is the long-term vision of your group?
248+
- What do you expect the relationship to the organisation be?
249+
- How do you want to establish accountability?
250+
- If applicable, which other working groups or teams do you expect to have close
251+
contact with?
252+
- What are the short-term goals of your group?
253+
- Who are the initial shepherds/leaders? (This is preferably 2–3 individuals,
254+
but not required.)
255+
- How do you intend to make your work accessible to people outside your group?
256+
- Where do you see your group needing help?
257+
- What is your preferred way for the core team to contact you?
258+
259+
### Working Group Evaluation
260+
261+
Working group shepherds should be regularly participating in the project leads
262+
discussion channels so that the rest of the organisation is aware of the work
263+
and can help where needed.
264+
265+
If a working group has demonstrated consistent productivity over a significant
266+
period time, and there is consensus that there is significant future work, it
267+
may become a Rust team. Conversely if there is consensus that the work is
268+
"complete" to the point that there's there is little benefit to continuing the
269+
working group, it may be archived.
270+
271+
## Project Groups
272+
273+
A Project Group is a group of people working on a particular project or
274+
responsibilities at the behest of an official Rust team. Some project groups are
275+
are ephemeral, meaning that they are archived once the project is complete.
276+
However, there are projects that have continual work and maintenance.
277+
278+
Examples of project groups around specific feature include [FFI Unwind],
279+
[Inline ASM], and [Safe Transmute]. Examples built around continual work and
280+
maintenance would include [Triage], and [Rustup].
281+
282+
The goal of a project is build a community or formalise and existing community
283+
around a particular feature or project in the in the organisation, and use this
284+
space to discuss and iterate on that feature.
285+
286+
Part of building a community is removing some of the institutional memory that
287+
develops in the design process, and centralising the information and discussion
288+
around the feature so that we can provide better visibility into why certain
289+
decisions and trade offs were made over others.
290+
291+
Previously a lot of the discussion and iteration for large features would
292+
happen in the initial RFC thread. This leads to a lot of discussion in the top
293+
of the thread and that has can become completely irrelevant to the current
294+
iteration.
295+
296+
This process has also been unsuitable to describe features that can take
297+
multiple years to develop and will become multiple RFCs over the course of its
298+
design process. Some examples of of this are the "`impl Trait`" and "macros
299+
2.0" features, where the goals has shifted a lot from the initial RFCs, and it
300+
can be hard to know their current status.
301+
302+
[ffi unwind]: https://github.com/rust-lang/project-ffi-unwind
303+
[inline asm]: https://github.com/rust-lang/project-inline-asm
304+
[safe transmute]: https://github.com/rust-lang/project-safe-transmute
305+
[triage]: https://github.com/rust-lang/team/blob/master/teams/wg-triage.toml
306+
[rustup]: https://github.com/rust-lang/team/blob/master/teams/wg-rustup.toml
307+
308+
### Project Group Creation
309+
310+
Since project groups are approved by their relevant parent team over the core
311+
team, it's up to each team decide their specific requirements. However we
312+
recommend using the [application checklist](#application-checklist) as the basis
313+
for process and if needed adding any extra requirements.
314+
315+
Process around project group membership is up to the shepherd's discretion.
316+
Typically, people who are productively contributing to the project group for
317+
some time will be added as members. It is not required for a project group to
318+
have a lot of members though, some project groups may only have one or
319+
two members.
320+
321+
### Project Group Evaluation
322+
323+
Parent teams should add checking in with their project groups as part of their
324+
regular triage.
325+
326+
## Community Groups
327+
328+
Community Groups are groups of individuals who want to work and collaborate on a
329+
specific topic, without going through the formal process of a working group.
330+
Community groups are encouraged to adopt the structure of working or projects
331+
groups laid, but are free create and experiment with their own structure. As
332+
such community groups are not officially endorsed by The Rust Programming
333+
Language Organisation.
334+
335+
## Archival
336+
337+
The archival process of a group involves communicating the wind down to the
338+
community and the archival or transfer of ownership of the relevant projects.
339+
As well archiving any chat channels hosted by the Rust project.
340+
341+
### Retrospectives
342+
343+
While this RFC attempts to address some of the current organisational problems
344+
within the organisation, it also doesn't believe that this RFC will be a panacea
345+
to those problems or that we won't encounter more in the future. As part of
346+
that, we'd also like to introduce performing retrospectives with groups, once
347+
significant time has past or the group has been finished it's project.
348+
349+
This would involve a discussion between the members of the group, and ideally
350+
their parent team and the Governance working group. The retrospective should
351+
produce a public blog post on the Inside Rust blog, however any feedback a
352+
member has that they would want to keep private would be omitted.
353+
354+
The blog post should try to cover the output of the group, such as RFCs or
355+
projects, as well what the group thought worked and importantly what
356+
didn't work. This should help us iterate on this initial RFC and help us find
357+
and address issues that come up in the process.
358+
359+
# Drawbacks
360+
361+
- This will add organisational overhead to maintain group repositories
362+
and documents.
363+
- There's a lot of inertia around the Working Group terminology, and switching
364+
to new terminology will likely also cause some confusion, though hopefully
365+
only in the short term.
366+
367+
# Future Work
368+
369+
- Ideally we'd prefer if every team obtained consensus to form groups through
370+
RFCs, as they an open process that allows us to easily keep track of
371+
decisions. However we recognise that the current RFC process is maybe too
372+
heavyweight for some teams currently. We're currently looking how we can
373+
simplify some of this process, see [wg-governance#38] for further information.
374+
375+
[wg-governance#38]: https://github.com/rust-lang/wg-governance/issues/38
376+
377+
# Unresolved questions
378+
379+
[unresolved-questions]: #unresolved-questions
380+
381+
- The term _"shepherd"_ term has been used extensively in the Rust project and
382+
the community to describe leaders of teams however there hasn't ever been a
383+
strict definition and this could come with different expectations of what is
384+
expected from a shepherd. This RFC does not attempt to define this, however
385+
there are few resources that are helpful to understanding the terminology.
386+
387+
> - [Niko Matsakis' "AiC: Shepherds 3.0"][niko-sheps]
388+
> - [James Munns' "Shepherding v3.1"][james-sheps]
389+
390+
[niko-sheps]: http://smallcultfollowing.com/babysteps/blog/2019/09/11/aic-shepherds-3-0/
391+
[james-sheps]: https://jamesmunns.com/blog/shepherding-3-1/

0 commit comments

Comments
 (0)