|
| 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