Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[RFC] Project governance, Maintainer's guide #1839

Merged
merged 13 commits into from
Jan 9, 2018
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# Project governance

The tldr-pages project strives to have an **open**, **welcoming**,
and [**non-hierarchical**](https://en.wikipedia.org/wiki/Flat_organization)
governance structure.

To that end, this document describes the principles
that guide the self-management of the project.
By having them written down explicitly, and open to scrutiny,
the entire community can read, improve and adapt them as needed,
with no central authority.


## I. Participation and community interactions

- **All contributions are welcome**,
[no matter how small](https://github.com/kentcdodds/all-contributors).
The tldr-pages project is a [do-ocracy](https://communitywiki.org/wiki/DoOcracy),
so don't hesitate to get involved — we're happy to welcome you into the community!
Please take a look at [CONTRIBUTING.md](https://github.com/tldr-pages/tldr/blob/master/CONTRIBUTING.md)
to get started.

- All members of the community are expected to **be cordial in all communications**.
Avoid making assumptions about the others' intentions, and make your own intentions clear.
When in doubt, provide additional context, or ask for clarification.
Remember, it's very hard to convey meaning on a purely written medium,
especially between people from different cultures, technical backgrounds,
English proficiency levels, etc.

- **All communications are public**.
There are no permanent private channels where maintainers discuss "internal" matters.
Occasional private chat messages may be exchanged,
e.g. when setting up services that require passwords,
but otherwise all exchanges that impact the project either happen in issue or PR discussions,
or in the [Gitter chat room](https://gitter.im/tldr-pages/tldr)
(which is open to all, and publicly logged).

- **All decisions are made by community consensus.**
Copy link
Contributor

@leostera leostera Dec 30, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So after reading about it in the link you have below, it looks like the word we want to use is consent rather than consensus here.

So rather than by community consensus, it'd read with community consent.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I was a little liberal with the terminology here, but the fuzziness is intentional (hence the "ideally" below). The rationale for this choice of words is (1) I assumed most people would be more likely to get the right idea from "community consensus" than "community consent", and (2) I wanted to give the community some wiggle room, rather than hint to a strict specification of the consent method as a rule, since it can be abused as some sort of veto, which can cause friction and bottlenecks in discussions.

Does this make sense to you?

This does not mean there has to be unanimity,
nor that decisions result from vote counts.
What it means is that every interested member of the community can voice their thoughts,
and different positions are ideally resolved via
[informed consent](https://en.wikipedia.org/wiki/Sociocracy#Consent_vs._consensus)
of the involved people, who accept the collective decision
as "good enough for now, safe enough to try".


## II. Role transitions

The main goal of these principles is to support a continuous replenishing of the management team
via a **smooth transition flow between community roles** —
from newcomer, to occasional contributor, to regular contributor, to maintainer.
This way the project can adapt in a flexible way
to the the natural variations in availability and interest of its contributors,
ensuring long-term resilience,
and avoiding [single points of failure](https://en.wikipedia.org/wiki/Bus_factor).

To this end, rather than assigning roles and tasks to people,
these guidelines instead aim to **recognize the work that people already do**.
Everyone is therefore encouraged to get involved and contribute to the project in whatever way they prefer,
and we will strive to **get barriers out of the way** of these contributions.

To ensure that these processes are transparent, predictable, and free from subective judgment,
the metrics used are simple, objective, and publicly available.

- Regular contributors shall be recognized as collaborators in the organization.

- Specifically: once a contributor has had **5 pull requests merged**,
they should be invited to become a
[**member of the tldr-pages organization**](https://github.com/orgs/tldr-pages/people).
This means they will be able to push commits to all of the organization's repositories,
merge PRs, label and close issues, among other things.
Note: All members of the tldr-pages organization must make their membership public.

- Members of the organization who demonstrate interest in performing maintainership tasks,
by reviewing and/or merging PRs, responding to and labeling issues, and generally doing project maintenance work,
shall be made part of the maintenance team, and their name added to the list of current maintainers
in the [MAINTAINERS.md](MAINTAINERS.md) file.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I recommend to recognize non code contributions as well. We've had people being active on our code of conduct, performing usability tests or just "joking around making the community more happy".

Copy link
Member Author

@waldyrious waldyrious Dec 30, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sils fully agreed. I'm not sure where you're getting the "code-only contributions" vibe from, though. Can you quote the specific passages that you'd suggest rephrasing?

Or was this meant as a general comment to the whole document? Note that the very first bullet point ("All contributions are welcome") already makes this clarification, even linking to the https://github.com/kentcdodds/all-contributors repo.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you seem to be measuring activity by PRs made or reviewed. I think we have an additional clause that is vague by design and allows the maintainers to rank up anyone for arbitrary awesome stuff done.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see what you mean. While this text explicitly mentions a variety of maintenance-related activities:

reviewing and/or merging PRs, responding to and labeling issues, and generally doing project maintenance work

...the actual metrics only take PRs merged and reviewed into account. The first reason for this is that those are clear, transparent metrics that are easy to check; the second, and most important reason IMO, is to avoid giving these role transitions a meaning of recognition of past work, i.e. make them into some sort of promotion/demotion. Instead, they should occur in a casual, natural manner, in either direction, without connotations of evaluation or judgment (positive or negative). For example, nobody has to second-guess why person X was added and person Y wasn't, nor why person Z was removed. I think you'll agree that it's very hard to measure "awesomeness" objectively :) and in a way that everyone will agree.

That said, such a vague clause is already possible, via the "all decisions are made by community consensus" item. As a concrete example, I was planning on starting a discussion, after this PR, to propose making @rprieto, as the project's creator, not affected by the inactivity guidelines.

That way we allow this document to remain a set of loose guidelines, rather than an exhaustive list of procedures. Adding exceptions for all edge cases would make it increasingly more verbose and, ironically, less flexible.

† In fact, ideally these role transitions would happen automatically, as is the case for example with StackOverflow, where privileges are distributed automatically based on karma, and even the moderators are elected by the entire community.


- Specifically: once a contributor has been an organization member for at least 3 months,
and has **reviewed or merged 10 pull requests** by other contributors,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would rather this be merged 10 pull requests and reviewed 5 pull requests. I want to keep a minimum bar on the reviewing part.

Copy link
Member Author

@waldyrious waldyrious Dec 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fine by me 👍. I'll wait for others' comments before making changes.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably worth including some hint at needing some substance to the review, otherwise you'll be drowned in "LGTM" comments, and newcomers will be surprised when maintainers disagree with the "LGTM" littered on their PRs.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I guess phrasing it as "non-trivial reviews" will suffice, but let me know if you have other ideas.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good points here!

they should be invited to become an **owner of the tldr-pages organization**.
This means they will be able to add people to the organization,
manage all the organization's repositories, configure integrations, etc.

- If a collaborator or maintainer stops being active in the project for more than 6 months,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe state 'calendar months', so that people can easily look at their monthly activity on GitHub to determine when they need to do some more work in order to keep 'active'. Ideally somehow phrase it so that an action on Jan 1 requires another action on July 31 at the latest.

Also I see one listed maintainer who this would apply to the moment the document becomes effective, in which case it would be nice to offer them the chance to fix the problem, either by doing an action, or stepping down so they are not listed in the maintainers document only to be immediately.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understand the sentiment, but I'm not sure "calendar months" would make the language clearer. For me at least, it would only make me more confused, as that's not a term I'm familiar with as a non-native English speaker.

In any case, the idea here is not to define activity requirements that people would have to fulfill in order to keep their membership. It's more of a way to allow the official list of maintainers to adjust to accurately reflect the actual maintenance team. Perhaps we could tweak the wording here to reinforce this sentiment?

Also, note that since becoming active again is sufficient to have the membership reinstated (as the initial thresholds had already been met the first time around), this shouldn't be a hassle for contributors who go through a period of reduced availability. If anything, it should make things easier for them, by making it official that they're not publicly identified as maintainers, as that can convey a sense of obligation -- which we want to avoid because it can quickly lead to burnout.

Copy link

@jayvdb jayvdb Dec 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"more than 6 months" means "6 months and one day"

"more than 6 calendar months" means anywhere between 6 and 7 complete months (minus seconds) depending on when the first action occurred.

The intend is being able to use GitHub's monthly activity list to see which month the person was active and let them have six complete named months pass without activity before the pin is pull, without caring which day of the month their last activity was.

And moving people to inactive would be a regular first day of month maintenance task, not relative to when each persons last action day occurred.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use GitHub's monthly activity list to see which month the person was active

Are you talking about the activity graph in the user profile? Perhaps this wasn't clear, but the intention here was to count activity in the tldr project, not on github overall. Or am I missing something?

And moving people to inactive would be a regular first day of month maintenance task, not relative to when each persons last action day occurred.

That's a good point, but the idea was not to control each maintainer's activity down to such detail, but just to provide a rough indication of the period after which it would make sense to look at how long they've been effectively inactive in the project and then update the member list accordingly. If it takes a week or a month more to update the list, there's no harm. Besides, in our experience this shouldn't be a common enough occurrence to warrant establishing a monthly cleanup schedule.

That said, I think we can add an additional bullet point saying that they should get a friendly message informing them of the fact -- perhaps even provide a boilerplate message similar to the one Homebrew provides for inviting maintainers, just to make sure that the removal won't give out the wrong impression.

their membership status will be equally deactivated,
and their name added to the list of former maintainers in the MAINTAINERS.md file.
Again, this is and merely a reflection of their actual involvement with the project,
not a demotion or punishment. In fact, if they return to active participation in the project,
they should be re-added back to the organization, to reflect that fact.

- This inactivity threshold additionally ensures
that the list of organization members doesn't grow to unwieldy sizes,
and that it accurately reflects the active team managing the project.
20 changes: 20 additions & 0 deletions MAINTAINERS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## Current maintainers

The following people are the current owners of the tldr-pages organization,
and have admin access to all of its repositories.

- Romain Prieto `<[email protected]>` (@rprieto)
- Igor Shubovych `<[email protected]>` (@igorshubovych)
- Ruben Vereecken `<[email protected]>` (@rubenvereecken)
- Waldir Pimenta `<[email protected]>` (@waldyrious)
- Felix Yan `<[email protected]>` (@felixonmars)
- Leandro Ostera `<[email protected]>` (@ostera)
- Agniva De Sarker `<[email protected]>` (@agnivade)
- Starbeamrainbowlabs `<[email protected]>` (@sbrl)

## Past maintainers

The following people are former maintainers of the tldr-pages project,
who have moved on to other projects.
Their contributions and dedication have ensured the success of the tldr project,
and for that they'll always be appreciated.
37 changes: 37 additions & 0 deletions contributing-guides/maintainers-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Maintainer's guide

The following guidelines are meant to provide a general basis
for the behavior expected of tldr-pages maintainers:

- When responding to issues or pull requests,
remember that you're temporarily the face of the tldr-pages project.
**Be welcoming and friendly**, and if you don't know how to answer,
ping other maintainers who you think might have a say.

- Although push access allows committing directly to master,
plase **create pull requests for all of your changes**,
except the simplest ones (e.g. typo fixes).
This ensures that the entire process other contributors go through
is exposed to maintainers, who can then identify and address bottlenecks or inconveniences.
Similarly, **avoid merging your own PRs**.

- Ideally, **every new discussion should receive a response within 24 hours**.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is quite tight. I've been working to ~48hrs up until now. Do I need to change this?

Copy link
Member Author

@waldyrious waldyrious Dec 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, the 24h was just a number that sounded reasonable on the surface when I wrote this. I didn't put too much thought into it because I assumed the "ideally" would suffice to make it clear that it's in no way an obligation, just a nice-to-have. But I can see how it could be interpreted as some sort of a deadline.

I'm perfectly fine with changing it to 48h, 3 days, one week, or whatever you guys feel is reasonable for both the contributors and the maintainers.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am good with "ideally". Being an open-source project, I believe, by definition it does not have a deadline.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@agnivade true....? Perhaps it could not be bold then? That would make it less imposing.

You can respond yourself or ask other members to provide their thoughts/opinions.

- When mergin PRs, use the strategy that produces a **clean git history** in the repository:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo at mergin

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops 😄 will fix.

Use squash if there's a single commit in the PR, or if the multiple commits are not independent changes.
If the PR author took the time to craft individual, informative commit messages for each commit,
use regular merge to honor that work and preserve the history of the changes.

- **Know when and how to say no**.
Sometimes requests or contributions need to be declined, at least in their current form.
The project has developed multiple guidelines over time to handle edge cases
— get acquainted with them, and point them out when necessary.
Be polite, but firm: it saves everyone's time and patience to make expectations clear early.

- Always remember to **thank every contribution**,
even when it can't be accepted (in fact, especially then).
Keep in mind that [every form of contribution](https://github.com/kentcdodds/all-contributors)
(pull request, feature request, bug report, etc.)
is a voluntary gift of time offered to the tldr project by someone who cares about it,
so make sure not to take it for granted.
8 changes: 0 additions & 8 deletions contributing-guides/project-governance.md

This file was deleted.