Skip to main content
`Ctrl`+`K`

# NXEP 1 — Governance and Decision Making

Author:

  Jarrod Millman <millman@berkeley.edu>

Author:

  Dan Schult <dschult@colgate.edu>

Status:

  Accepted

Type:

  Process

Created:

  2020-06-25

## Abstract

NetworkX is a consensus-based community project. Anyone with an interest in the project can join the community, contribute to the project design, and participate in the decision making process. This document describes how that participation takes place, how to find consensus, and how deadlocks are resolved.

## Roles And Responsibilities

### The Community

The NetworkX community consists of anyone using or working with the project in any way.

### Contributors

Any community member can become a contributor by interacting directly with the project in concrete ways, such as:

- proposing a change to the code or documentation via a GitHub pull request;

- reporting issues on our GitHub issues page;

- discussing the design of the library, website, or tutorials on the mailing list, or in existing issues and pull requests; or

- reviewing open pull requests,

among other possibilities. By contributing to the project, community members can directly help to shape its future.

Contributors should read the Contributor Guide and our Code of Conduct.

### Core Developers

Core developers are community members that have demonstrated continued commitment to the project through ongoing contributions. They have shown they can be trusted to maintain NetworkX with care. Becoming a core developer allows contributors to merge approved pull requests, cast votes for and against merging a pull request, and be involved in deciding major changes to the API, and thereby more easily carry on with their project related activities. Core developers appear as team members on the NetworkX Core Developers gallery and can be messaged `@networkx/core-developers`. Core developers are expected to review code contributions while adhering to the Core Developer Guide.

New core developers can be nominated by any existing core developer. Discussion about new core developer nominations is one of the few activities that takes place on the project’s private management list. The decision to invite a new core developer must be made by “lazy consensus”, meaning unanimous agreement by all responding existing core developers. Invitation must take place at least one week after initial nomination, to allow existing members time to voice any objections.

### Steering Council

The Steering Council (SC) members are core developers who have additional responsibilities to ensure the smooth running of the project. SC members are expected to participate in strategic planning, approve changes to the governance model, and make decisions about funding granted to the project itself. (Funding to community members is theirs to pursue and manage.) The purpose of the SC is to ensure smooth progress from the big-picture perspective. Changes that impact the full project require analysis informed by long experience with both the project and the larger ecosystem. When the core developer community (including the SC members) fails to reach such a consensus in a reasonable timeframe, the SC is the entity that resolves the issue.

The current list of steering council members appears on the `NetworkX Steering Council gallery` and can be messaged `@networkx/steering-council`.

## Decision Making Process

Decisions about the future of the project are made through discussion with all members of the community. All non-sensitive project management discussion takes place on the project mailing list and the issue tracker. Occasionally, sensitive discussion may occur on a private list.

Decisions should be made in accordance with our Mission and Values.

NetworkX uses a consensus seeking process for making decisions. The group tries to find a resolution that has no open objections among core developers. Core developers are expected to distinguish between fundamental objections to a proposal and minor perceived flaws that they can live with, and not hold up the decision making process for the latter. If no option can be found without an objection, the decision is escalated to the SC, which will itself use consensus seeking to come to a resolution. In the unlikely event that there is still a deadlock, the proposal will move forward if it has the support of a simple majority of the SC. Any proposal must be described by a NetworkX Enhancement Proposals (NXEPs).

Decisions (in addition to adding core developers and SC membership as above) are made according to the following rules:

- Minor documentation changes, such as typo fixes, or addition / correction of a sentence (but no change of the NetworkX landing page or the “about” page), require approval by a core developer and no disagreement or requested changes by a core developer on the issue or pull request page (lazy consensus). Core developers are expected to give “reasonable time” to others to give their opinion on the pull request if they’re not confident others would agree.

- Code changes and major documentation changes require agreement by two core developers and no disagreement or requested changes by a core developer on the issue or pull-request page (lazy consensus).

- Changes to the API principles require a Enhancement Proposals (NXEPs) and follow the decision-making process outlined above.

- Changes to this governance model or our mission and values require a Enhancement Proposals (NXEPs) and follow the decision-making process outlined above, unless there is unanimous agreement from core developers on the change.

If an objection is raised on a lazy consensus, the proposer can appeal to the community and core developers and the change can be approved or rejected by escalating to the SC, and if necessary, a NXEP (see below).

## Enhancement Proposals (NXEPs)

Any proposals for enhancements of NetworkX should be written as a formal NXEP following the template NXEP X — Template and Instructions. The NXEP must be made public and discussed before any vote is taken. The discussion must be summarized by a key advocate of the proposal in the appropriate section of the NXEP. Once this summary is made public and after sufficient time to allow the core team to understand it, they vote. The workflow of a NXEP is detailed in NXEP 0 — Purpose and Process.

A list of all existing NXEPs is available here.

## Acknowledgments

This document is based on the scikit-image governance document.