[PEP 8013] The External Council Governance Model
Here is the text of PEP 8013 for discussion and improvement (in isolation from the other proposals, of course -- we're not ready for the shoot-out yet.)
I'm keen to see the model be considered, but I don't feel the need to tightly control the specific content in the PEP, so feel free to send your own PRs if you have definitive improvements.
For the next few days I'm also going to have varying amounts of ability to read and respond to email. I'll try and catch up by the weekend or early next week.
Rendered version at: https://www.python.org/dev/peps/pep-8013/
PEP: 8013 Title: The External Council Governance Model Author: Steve Dower <steve.dower@python.org> Status: Draft Type: Informational Content-Type: text/x-rst Created: 2018-09-14
Abstract
This PEP proposes a new model of Python governance based on a Group of Unbiased Independent Directors of Order (GUIDO) tasked with making final decisions for the language. It differs from PEP 8010 by specifically not proposing a central singular leader, and from PEP 8011 by disallowing core committers from being council members. It describes the size and role of the council, how the initial group of council members will be chosen, any term limits of the council members, and how successors will be elected.
It also spends significant time discussing the intended behaviour of this model. By design, many processes are not specified here but are left to the people involved. In order to select people who will make the best decisions, it is important for those involved to understand the expectations of GUIDO but it is equally important to allow GUIDO the freedom to adjust process requirements for varying circumstances. This only works when process is unspecified, but all participants have similar expectations.
This PEP does *not* name the members of GUIDO. Should this model be adopted, it will be codified in PEP 13 along with the names of all officeholders described in this PEP.
Open Discussion Points
Some suggestions in this document are currently weak suggestions, and are open to change during the discussion period. These include:
We can change the name of the group. "Council of Auditors" is the suggested alternative, though "Python Inquisition" is very tempting if we believe we can be clear about the source of the name [1]_
We can change voting procedures, timelines, and tie-breakage rules
The Importance of the Grey Area
In any actual decision-making process, there is going to be grey area. This includes unexpected scenarios, and cases where there is no "correct" answer.
Many process plans attempt to minimise grey area by defining processes clearly enough that no flexibility is required.
This proposal deliberately goes the other way. The aim is to provide a robust framework for choosing the best people to handle unexpected situations, without defining how those people should handle those situations.
Examples are provided of "good" responses to some situations as an illustration. The hope is that the "best" people are the best because they would live up to those examples. The process that is proposed has been designed to minimise the damage that may be caused when those people turn out not to be the best.
Grey area is guaranteed to exist. This proposal deliberately embraces and works within that, rather than attempting to prevent it.
Model Overview
Key people and their functions
The Group of Unbiased Independent Directors of Order (GUIDO) is a council of varying size, typically two to four people, who are elected for the duration of a Python release. One member of GUIDO is considered the President, who has some minor points of authority over the other members.
GUIDO has responsibility for reviewing controversial decisions in the form of PEPs written by members of the core development team. GUIDO may choose to accept a PEP exactly as presented, or may request clarification or changes. These changes may be of any form and for any reason. This flexibility is intentional, and allows the process to change over time as different members are elected to GUIDO. See the later sections of this document for examples of the kinds of requests that are expected.
GUIDO only pronounces on PEPs submitted to python-committers. There is no expectation that GUIDO follows or participates on any other mailing lists. (Note that this implies that only core developers may submit PEPs. Non-core developers may write and discuss proposals on other mailing lists, but without a core developer willing to support the proposal by requesting pronouncement, it cannot proceed to acceptance. This is essentially the same as the current system, but is made explicit here to ensure that members of GUIDO are not expected to deal with proposals that are not supported by at least one core developer.)
GUIDO may not delegate authority to individuals who have not been elected by the core developer team. (One relevant case here is that this changes the implementation of the existing BDFL-Delegate system, though without necessarily changing the spirit of that system. See the later sections for more discussion on this point.)
The Release Manager (RM) is also permitted the same ability to request changes on any PEPs that specify the release they are responsible for. After feature freeze, the RM retains this responsibility for their release, while GUIDO rotates and begins to focus on the subsequent release. This is no different from the current process. The process for selection of a RM is not changed in this proposal.
Core developers are responsible for electing members of GUIDO, and have the ability to call a "vote of no confidence" against a member of GUIDO. The details of these votes are discussed in a later section.
Where discussions between core developers and members of GUIDO appear to be ongoing but unfruitful, the President may step in to overrule either party. Where the discussion involves the President, it should be handled using a vote of no confidence.
Members of GUIDO may choose to resign at any point. If at least two members of GUIDO remain, they may request a new election to refill the group. If only one member remains, the election is triggered automatically. (The scenario when the President resigns is described in a later section.)
The intended balance of power is that the core developers will elect members of GUIDO who reflect the direction and have the trust of the development team, and also have the ability to remove members who do not honour commitments made prior to election.
Regular decision process
Regular decisions continue to be made as at present.
For the sake of clarity, controversial decisions require a PEP, and any decisions requiring a PEP are considered as controversial.
GUIDO may be asked to advise on whether a decision would be better made using the controversial decision process, or individual members of GUIDO may volunteer such a suggestion, but the core development team is not bound by this advice.
Controversial decision process
Controversial decisions are always written up as PEPs, following the existing process. The approver (formerly "BDFL-Delegate") is always GUIDO, and can no longer be delegated. Note that this does not prevent GUIDO from deciding to nominate a core developer to assess the proposal and provide GUIDO with a recommendation, which is essentially the same as the current delegation process.
GUIDO will pronounce on PEPs submitted to python-committers with a request for pronouncement. Any member of GUIDO, or the current RM, may request changes to a PEP for any reason, provided they include some indication of what additional work is required to meet their expectations. See later sections for examples of expected reasons.
When all members of GUIDO and the RM indicate that they have no concerns with a PEP, it is formally accepted. When one or more members of GUIDO fail to respond in a reasonable time, the President of GUIDO may choose to interpret that as implied approval. Failure of the President to respond should be handled using a vote of no confidence.
Election terms
Members of GUIDO are elected for the duration of a release. The members are elected prior to feature freeze for the previous release, and hold their position until feature freeze for their release.
Members may seek re-election as many times as they like. There are no term limits. It is up to the core developers to prevent re-election of GUIDO members where there is consensus that the individual should not serve again.
Election voting process
The election process for each member of GUIDO proceeds as follows:
- a nomination email is sent to python-committers
- a seconding email is sent
- the nominee is temporarily added to python-committers for the purpose of introducing themselves and presenting their position
- voting opens two weeks prior to the scheduled feature freeze of the previous release
- votes are contributed by modifying a document in a private github repository
- each core developer may add +1 votes for as many candidates as they like
- after seven days, voting closes
- the nominee with the most votes is elected as President of GUIDO
- the next three nominees with the most votes and also at least 50% the number of votes received by the President are elected as the other members of GUIDO
- where ties need to be resolved, the RM may apply one extra vote for their preferred candidates
- accepted nominees remain on python-committers; others are removed
No-confidence voting process
A vote of no confidence proceeds as follows:
- a vote of no confidence email is sent to python-committers, naming the affected member of GUIDO, justifying the nomination, and optionally listing accepted PEPs that the nominator believes should be reverted
- a seconding email is sent within seven days
- the nominated member of GUIDO is allowed seven days to respond, after which the nominator or the seconder may withdraw
- if no nominator or seconder is available, no further action is taken
- voting opens immediately
- each core developer may add a +1 vote (remove the GUIDO member) or a -1 vote (keep the GUIDO member) by modifying a document in a private github repository
- after seven days, voting closes
- if +1 votes exceed -1 votes, the GUIDO member is removed from python-committers and any nominated PEPs are reverted
- if requested by the remaining members of GUIDO, or if only one member of GUIDO remains, a new election to replace the removed member may be held following the usual process.
- in the case of removing the President of GUIDO, the candidate who originally received the second-most votes becomes President
Examples of intended behaviour
This section describes some examples of the kind of interactions that we hope to see between GUIDO and the core developers. None of these are binding descriptions, but are intended to achieve some consensus on the types of processes we expect. GUIDO candidates may campaign on the basis of whatever process they prefer, and core developers should allocate votes on this basis.
Scenario 1 - The Case of the Vague PEP
Often in the past, initial proposals have lacked sufficient detail to be implementable by anyone other than the proposer. To avoid this, GUIDO should read proposals "fresh" when submitted, and without inferring or using any implied context. Then, when an aspect of a PEP is not clear, GUIDO can reject the proposal and request clarifications.
Since the proposal is rejected, it must be modified and resubmitted in order to be reviewed again. GUIDO will determine how much guidance to provide when rejecting the PEP, as that will affect how many times it will likely be resubmitted (and hence affect GUIDO's own workload). This ensures that the final PEP text stands alone with all required information.
Scenario 2 - The Case of the Endless Discussion
From time to time, a discussion between Python contributors may seem to be no longer providing value. For example, when a large number of emails are repeating points that have already been dealt with, or are actively hostile towards others, there is no point continuing the "discussion".
When such a discussion is occurring on python-committers as part of a request for pronouncement, a member of GUIDO should simply declare the thread over by rejecting the proposal. In most known cases, discussion of this sort indicates that not all concerns have been sufficiently addressed in the proposal and the author may need to enhance some sections.
Alternatively, and in the absence of any rejection from the other members of GUIDO, the President may declare the thread over by accepting the proposal. Ideally this would occur after directly confirming with the rest of GUIDO and the RM that there are no concerns among them.
When such a discussion is occurring on another list, members of GUIDO should be viewed as respected voices similar to other core developers (particularly those core developers who are the named experts for the subject area). While none have specific authority to end a thread, preemptively stating an intent to block a proposal is a useful way to defuse potentially useless discussions. Members of GUIDO who voluntarily follow discussions other than on python-committers are allowed to suggest the proposer withdraw, but can only actually approve or reject a proposal that is formally submitted for pronouncement.
Scenario 3 - The Case of the Unconsidered Users
Some proposals in the past may be written up and submitted for pronouncement without considering the impact on particular groups of users. For example, a proposal that affects the dependencies required to use Python on various machines may have an adverse impact on some users, even if many are unaffected due to the dependencies being typically available by default.
Where a proposal does not appear to consider all users, GUIDO might choose to use their judgement and past experience to determine that more users are affected by the change than described in the PEP, and request that the PEP also address these users. They should identify the group of users clearly enough that the proposer is able to also identify these users, and either clarify how they were addressed, or made amendments to the PEP to explicitly address them. (Note that this does not involve evaluating the usefulness of the feature to various user groups, but simply whether the PEP indicates that the usefulness of the feature has been evaluated.)
Where a proposal appears to have used flawed logic or incorrect data to come to a certain conclusion, GUIDO might choose to use other sources of information (such as the prior discussion or a submission from other core developers) to request reconsideration of certain points. The proposer does not necessarily need to use the exact information obtained by GUIDO to update their proposal, provided that whatever amendments they make are satisfactory to GUIDO. For example, a PEP may indicate that 30% of users would be affected, while GUIDO may argue that 70% of users are affected. A successful amendment may include a different but more reliable percentage, or may be rewritten to no longer depend on the number of affected users.
References
.. [1] The Spanish Inquisition, <https://youtu.be/Ixgc_FGam3s>
_
Copyright
This document has been placed in the public domain.
Thanks, Steve, for writing this up:
https://www.python.org/dev/peps/pep-8013/
A couple of comments:
I like the council model, but don't understand why the core developers should be stripped from any decision powers.
External people will not have the institutional knowledge core developers have, know why past decisions were reached and thus cannot use this knowledge to base the new decisions on.
To give you an example:
As much as I admire people such as Larry Wall for designing popular programming languages, I would not want to see Python take a Perl'ish approach to language design.
Additionally, we'd have to transfer knowledge of how work is done on the council for every new member. I've seen how long this takes on the PSF and EPS boards. It effectively causes the council to not be fully operable for a couple of months at least.
This will not happen with core developers as council members.
Could you give a reason why the council members should be external ?
Another point I don't understand is why we should drop the BDFL- Delegate system. This has proven to work well.
Perhaps PEP 8011 is a better approach, but it's not available yet, so I'm focusing on your PEP for now.
-- Marc-Andre Lemburg eGenix.com
Professional Python Services directly from the Experts (#1, Sep 26 2018)
Python Projects, Coaching and Consulting ... http://www.egenix.com/ Python Database Interfaces ... http://products.egenix.com/ Plone/Zope Database Interfaces ... http://zope.egenix.com/
::: We implement business ideas - efficiently in both time and costs :::
eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 http://www.egenix.com/company/contact/ http://www.malemburg.com/
On Wed, 26 Sep 2018 at 01:25, Steve Dower <steve.dower@python.org> wrote:
Here is the text of PEP 8013 for discussion and improvement (in isolation from the other proposals, of course -- we're not ready for the shoot-out yet.)
I'm keen to see the model be considered, but I don't feel the need to tightly control the specific content in the PEP, so feel free to send your own PRs if you have definitive improvements.
Thanks for the write-up Steve. If we did go down the "independent advisory council" route, I'd actually prefer to see it used to strengthen the BDFL-Delegate system rather than weaken it: the role of the advisory council would only be to step in when there was a dispute amongst the core developers as to whether or not there was a suitable volunteer available to serve as BDFL-Delegate, or if there was a proposal where nobody was volunteering to be the final decision maker, but the council thought the prospective gains on offer were sufficiently large to make it worthwhile to attempt to change that state of affairs.
The other aspects would pretty much remain the same as you suggest - the advisory council would mainly be there to help BDFL-Delegates out when it came time to end discussion of a proposal and make their decision (whether for or against) stick.
Cheers, Nick.
-- Nick Coghlan | ncoghlan@gmail.com | Brisbane, Australia
On 28Sep2018 0649, Nick Coghlan wrote:
If we did go down the "independent advisory council" route, I'd actually prefer to see it used to strengthen the BDFL-Delegate system rather than weaken it: the role of the advisory council would only be to step in when there was a dispute amongst the core developers as to whether or not there was a suitable volunteer available to serve as BDFL-Delegate, or if there was a proposal where nobody was volunteering to be the final decision maker, but the council thought the prospective gains on offer were sufficiently large to make it worthwhile to attempt to change that state of affairs.
Perhaps I need to clarify the text referring to this system (or provide an example?), but the way I see it working is that the council may choose to nominate a core developer to drive and approve the design by saying that they will veto the proposal unless that specific person approves of it.
What I *don't* want to bake into the process is that the council has no further veto power after nominating a delegate, or that the council is *required* to nominate a delegate. The easiest way to do this is to (a) not allow complete delegation of final approval, and (b) not define the criteria required to obtain approval.
Basically, the written process should not constrain those who we select to manage final decisions. The constraint is that the core developers have to approve of the people selected, which (in my mind, at least) implies some period of campaigning or investigation prior to the election.
The other aspects would pretty much remain the same as you suggest - the advisory council would mainly be there to help BDFL-Delegates out when it came time to end discussion of a proposal and make their decision (whether for or against) stick.
This paragraph makes me think you're on the same page and I just need to add an example for the above case. The members of the council can do or say whatever they like when a proposal is being discussed (but they don't have to), provided they also make an explicit approval/rejection when requested by a core developer.
Cheers, Steve
participants (3)
-
M.-A. Lemburg
-
Nick Coghlan
-
Steve Dower