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

PDEP-1 Revision (Decision Making) #53576

Merged
merged 19 commits into from
Apr 1, 2024
Merged
Changes from 6 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
76 changes: 67 additions & 9 deletions web/pandas/pdeps/0001-purpose-and-guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[#51417](https://github.com/pandas-dev/pandas/pull/51417)
- Author: [Marc Garcia](https://github.com/datapythonista),
[Noa Tamir](https://github.com/noatamir)
- Revision: 2
- Revision: 3

## PDEP definition, purpose and scope

Expand Down Expand Up @@ -56,8 +56,19 @@ advisor on the PDEP when it is submitted to the PDEP repository.

### Workflow

#### Rationale

Our workflow was created to support and enable a consensus seeking process, and to provide clarify,
noatamir marked this conversation as resolved.
Show resolved Hide resolved
for current and future authors, as well as voting members. It is not a strict policy, and we
discourage any interpretation which seeks to take advantage of it in a way that could "force" or
"sneak" decisions in one way or another. We expect and encourage transparency, active discussion,
feedback, and compromise from all our community members.

#### PDEP States

The possible states of a PDEP are:

- Draft
- Under discussion
- Accepted
- Implemented
Expand All @@ -71,16 +82,62 @@ Proposing a PDEP is done by creating a PR adding a new file to `web/pdeps/`.
The file is a markdown file, you can use `web/pdeps/0001.md` as a reference
for the expected format.

The initial status of a PDEP will be `Status: Under discussion`. This will be changed to
`Status: Accepted` when the PDEP is ready and has the approval of the core team.
The initial status of a PDEP will be `Status: Draft`. This will be changed to
`Status: Under discussion` by the author(s), when they are ready to proceed with the decision
making process.

#### Accepted PDEP
#### PDEP Discussion Timeline

A PDEP discussion will remain open for up to 60 days. This period aims to enable participation
from volunteers, who might not always be available to respond quickly, as well as provide ample
time to make changes based on suggestions and considerations offered by the participants.
Similarly, the following voting period will remain open for 15 days.

To enable and encourage discussions on PDEPs, we follow a notification schedule. At each of the
following steps, the pandas team, and the pandas dev mailing list are notified via GitHub and
E-mail:
- Once a PDEP is ready for discussion.
- After 30 discussion days, with 30 days remaining for discussion.
- After 45 discussion days, with 15 days remaining for discussion.
- In case 15 days passed without any new comments, the authors may close the discussion period
noatamir marked this conversation as resolved.
Show resolved Hide resolved
noatamir marked this conversation as resolved.
Show resolved Hide resolved
noatamir marked this conversation as resolved.
Show resolved Hide resolved
and open the voting period.
- Once the voting period starts, after 60 days or in case of an earlier vote, with 15 days
remaining for voting.
- After 10 voting days, with 5 days remaining for voting.

#### Casting Votes

As the voting period starts, a VOTE issue is created which links to the PDEP discussion issue.
noatamir marked this conversation as resolved.
Show resolved Hide resolved
Each voting member may cast a vote by adding one of the following comments:
Copy link
Contributor

Choose a reason for hiding this comment

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

Apologies if I havce missed this but it does appear that a "voting member" is explicitly defined?

The removed section seems to suggest that a voting member is anyone in the "core development team". Does pandas have any segregation between "active" and "inactive" core development members and does this have any bearing on their right to vote?

Is there any scope to specifically invite certain informed (non-core dev) parties to vote on issues? I would probably consider this an abuse of power and instead invite to participate in the discussion to influence members.

If votes are cast by core dev members does this have implications for inviting future members into the core dev team? i.e to not push for adding members of a group of similar, or friendly like minded individuals, perhaps from the same institution etc, that can build up substantial iunfluence?

Copy link
Contributor

Choose a reason for hiding this comment

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

There's a bit of a chicken and egg issue here. We are planning on updating other governance documents to define who can vote. Right now, it is the core team, but it is likely we will not use that in the future.

Copy link
Member

Choose a reason for hiding this comment

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

Right now, it is the core team, but it is likely we will not use that in the future.

IMO we should also require a discussion to change this, hence my comment to define voting member in this PDEP now.


A PDEP can only be accepted by the core development team, if the proposal is considered
worth implementing. Decisions will be made based on the process detailed in the
[pandas governance document](https://github.com/pandas-dev/pandas-governance/blob/master/governance.md).
In general, more than one approval will be needed before the PR is merged. And
there should not be any `Request changes` review at the time of merging.
- +1: approve.
- 0: abstain.
jorisvandenbossche marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Member

Choose a reason for hiding this comment

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

Do we want to add a small explanation of how we understand "abstaining" or what it could mean?
Something like "Not fully convinced, but don't want to block it", or better worded (although there might be many reasons to vote +0, like "I haven't closely followed, but trust the majority")

Copy link
Member Author

Choose a reason for hiding this comment

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

Isn't that the one sentence reason thing on the next line?
Formally, it is anyone who wants the vote to proceed (achieve quorum), but not interested in voting for or against it. But that's kind of the dictionary definition almost no?!

- Reason: A one sentence reason is required.
- -1: disapprove
- Reason: A one sentence reason is required.
A disapprove vote requires prior participation in the PDEP discussion issue.
Copy link
Contributor

Choose a reason for hiding this comment

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

Would it not be sufficient for a voting member to follow a discussion led by knowledgeable parties and simply provide a vote that read: "-1: disapprove. I agree with XXX's analysis and concerns and disagree that YYY's argument and the PDEP are suitable".

Rather than provide rules that restrict voting in certain ways (which might be difficult to police anyway), would it not be sufficient to design quorum and majority rules that aim to progress PDEPs that have garnered 'sufficient' support (whatever that may end up being), above objections.

Copy link
Contributor

Choose a reason for hiding this comment

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

Would it not be sufficient for a voting member to follow a discussion led by knowledgeable parties and simply provide a vote that read: "-1: disapprove. I agree with XXX's analysis and concerns and disagree that YYY's argument and the PDEP are suitable".

They could post that in the PDEP discussion issue, and then cast their vote that way in the voting issue.

Rather than provide rules that restrict voting in certain ways (which might be difficult to police anyway), would it not be sufficient to design quorum and majority rules that aim to progress PDEPs that have garnered 'sufficient' support (whatever that may end up being), above objections.

I think our goal here was to avoid the case where we have one or two people who oppose a PDEP stop the PDEP from moving forward. If you have an idea on how to improve what we've proposed, we'd certainly be open to that.


Once the voting period ends, any voter may tally the votes in a comment, using the format: x-y-z,
where x stands for the total of approving, y of abstaining, and z of disapproving votes cast.

#### Quorum and Majority

For a PDEP vote to result in accepting the proposal, a quorum is required. All votes (including
abstentions) are counted towards the quorum. The quorum is computed as the lower of these two
values:

- 11 voting members.
noatamir marked this conversation as resolved.
Show resolved Hide resolved
- 50% of voting members.

Given a quorum, a majority of 75% of the non-abstaining votes is required as well, i.e. 75% of
mroeschke marked this conversation as resolved.
Show resolved Hide resolved
the approving and disapproving votes must be in favor.

Thus, abstaining votes count towards a quorum, but not towards a majority. A voting member might
choose to abstain when they have participated in the discussion, have some objections to the
proposal, but do not wish to stop the proposal from moving forward, nor indicate their full
support.

noatamir marked this conversation as resolved.
Show resolved Hide resolved
#### Accepted PDEP

Once a PDEP is accepted, any contributions can be made toward the implementation of the PDEP,
with an open-ended completion timeline. Development of pandas is difficult to understand and
Expand Down Expand Up @@ -184,6 +241,7 @@ hope can help clarify our meaning here:

- 3 August 2022: Initial version ([GH-47938][47938])
- 15 February 2023: Version 2 ([GH-51417][51417]) clarifies the scope of PDEPs and adds examples
- DD MM YY: Version 3(link) defines a structured decision making process for PDEPs
noatamir marked this conversation as resolved.
Show resolved Hide resolved

[7217]: https://github.com/pandas-dev/pandas/pull/7217
[8074]: https://github.com/pandas-dev/pandas/issues/8074
Expand Down