📜Governance Policy
NOTE: Please consult the glossary for definitions of terms and acronyms.
High-level overview
This is the high-level structure that this policy is aiming for:
Development work is organized around individual projects and groups of projects.
Projects are autonomous and consensus-driven, but also equipped with an official and transparent decision-making body.
The Technical Steering Committee is ultimately responsible for ensuring that the principles are followed, and has a formal decision-making body that can progress even when consensus is hard to find.
Projects are accountable to the TSC, and this should affect their behaviour, but this accountability is only formally invoked in exceptional cases.
Conformance
This policy mostly aims to provide a sensible default. Therefore most of its statements use "should". There are a few exceptions, and these are indicated by the use of "must".
See the policy introduction for further discussion.
Decision-making
Decision making should generally be done in a consensus-seeking manner. That is, ideally decisions should have consensus, but we do not generally formally require that. If consensus fails we have more structured methods available (escalation).
The general decision-making process is (in order):
Lazy consensus: just act based on what you think people will want. If nobody objects then everything is fine.
Consensus-building: seek indications of consensus from the relevant group
Voting: the relevant group votes explicitly (this is an example of consensus-building since it aims to get the group to come to a more explicit consensus)
Escalation: the issue is raised to a higher decision-making body
Voting
Voting is a simple way to build consensus, by asking each member of the group to explicitly state their preference. Voting can be used either to seek a binding consensus, or simply to get a partial gauge of sentiment.
The standard voting process is for voters to issue one of the following votes:
+1: positive vote
0: abstention
-1: negative vote
Normally when seeking a binding decision, a majority should be sufficient to decide in favour of a motion, but in some circumstances it may be appropriate to treat any negative vote as a veto. This is because the point is to elicit a group consensus: if the vote does not seem like enough for the group to settle on the outcome, then it may be necessary to escalate.
Escalating issues
Issues that a group cannot resolve themselves must be escalated so that we can continue to make progress. These can be technical problems, social problems, or conflicts between principles.
The default escalation pathway is:
The Project Management Committee
The meta-project Project Management Committee, if there is one
The Technical Steering Committee
Anyone can escalate an issue. Issues raised by Committers must be considered by the relevant body, other issues should be considered.
Projects
A project is the unit of organization of software development at Intersect. A project consists of one or more source code repositories and the people who work on them. Every source code repository in the Intersect organization must be owned by a project.
A project is governed by a committee of its committers, the Project Management Committee (PMC).
A project should have a single "main" repository. Any project-level information should be recorded in the documentation for this repository, and all other project repositories should clearly point to it in their documentation. The following project-level information must be included:
The project's decision-making process
This should include a link to the decision-making section of this document, but should also note any deviations or additions
The membership of the PMC
This can just be a link to the corresponding GitHub team
The location of the project's public communications channels (see below)
If a project has multiple repositories, then the set of committers must be the same across all of them.
Multiple projects can be grouped into "meta-projects". The PMC for such a meta project is comprised by one elected member of each project and projects may be added/removed to the meta-project with the consent of both PMCs to facilitate cross-project collaboration. The meta-project PMC is then part of the escalation chain and other policies apply just the same.
Project Management Committee
The PMC is a committee which consists of all the Committers of the project. The PMC is responsible for making project-level decisions and appointing Committers.
The PMC has two non-development roles associated with it, the Chair and the Secretary. The Chair is responsible for organizing and running meetings, and the Secretary for keeping written material in order. The Chair and the Secretary are elected by the PMC. The Chair and the Secretary need not be Committers. If there is no Chair or the PMC is failing to appoint a Chair, then Intersect may appoint an interim Chair.
PMC meetings should be held regularly, be public, and be advertised on the public communications channel and in the project documentation. Committers have a right to speak, others may be allowed to speak at the discretion of the Chair.
The PMC should make decisions in the usual consensus-seeking manner. If it needs to vote, the Committers are the voters. Votes should be held via the public communications channel to ensure that Committers are notified.
Roles
Roles are per-project. All roles are non-exclusive, an individual may hold any number of roles.
The role assignments for a project should be listed in a discoverable way. For roles associated with membership of a GitHub Team, it is enough to say that the team exists.
Development
There are three primary roles associated with doing development work.
Contributors are anyone who contributes to the project in any way. There is no formal requirement to be a contributor, nor do they have any formal powers, but it is useful to have a way to refer to them.
Committers are people who have been given commit access to the project. Committers are also required to participate in the project governance process - the two go together.
Maintainers are individuals who have contributed in a sustained and substantial way to the project, and who commit to keeping the project healthy. Maintainers have additional responsibilities but no additional power (versus Committers). They are likely to be influential, but this is because influential people should be made Maintainers, rather than vice versa.
Non-development
There are two non-development roles associated with the PMC, Chair and Secretary, which are described in the PMC section.
Individuals may occasionally be given the Administrator role. This is a very powerful role and should only be used for a few highly trusted staff at Intersect who can implement dangerous actions when necessary.
Role and Team Summary
Contributor
Open issues; attend PMC meetings; make code contributions
Committer
As Contributor; speak at PMC meetings; member of <project>-committers
Attend PMC meetings; vote on PMC motions
Maintainer
As Committer; member of <project>-maintainers; maintainer of <project>-committers
As Committer; ensure that pull requests and issues are reviewed in a timely fashion; maintain the health of the codebase
Administrator
Member of <project>-admins; maintainer of all the <project>-* teams
Should only take action when directed to by the appropriate authority.
Chair
Organize PMC meetings; report on the PMC’s activities to Intersect
Secretary
Take minutes during PMC meetings; ensure that minutes are published publicly; send out votes and tally responses
<meta-project>
Parent team the projects associated with the meta-project
<project>
Parent team for teams associated with the project
<project>-committers
Write
<project>-maintainers
Maintain
<project>-admins
Admin
Only appropriately vetted Intersect staff can be in this team
As usual, projects may augment these as they see appropriate, but they should try to keep any additional teams within the appropriate parent teams.
Communications
Projects must have a primary public, durable, and asynchronous public channel. Meeting minutes and votes must be sent out on this channel. This must be on a standard Intersect platform (TBD).
Projects must also have a public, real-time chat channel for discussions. This must be on a standard Intersect platform (TBD).
Last updated