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

Steering committee establishment #5

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
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
247 changes: 245 additions & 2 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,246 @@
## Kuadrant Governance
# Steering Committee Governance

Governance for the Kuadrant project is still a work in progress. You can participate in discussions via our project [slack channel](https://kubernetes.slack.com/archives/C05J0D0V525).
The Kuadrant Steering Committee is the governing body of the Kuadrant project,
providing decision-making and oversight pertaining to the project bylaws,
sub-organizations, and financial planning. The Steering Committee also defines
Copy link
Member

Choose a reason for hiding this comment

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

I'd exclude "financial planning" from this sentence and everywhere in the document, in order to avoid misconceptions for the OS community

Copy link
Member

Choose a reason for hiding this comment

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

Unless we really want to be the ones managing any kind of budget related to anything Kuadrant (upstream) related.

Copy link
Member Author

Choose a reason for hiding this comment

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

Suggested change
sub-organizations, and financial planning. The Steering Committee also defines
and sub-organizations. The Steering Committee also defines

@didierofrivia just removing this seem reasonable?

Copy link

Choose a reason for hiding this comment

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

Do note that, as part of the CNCF, the project may have financial resources of its own. If those are not managed by the Steering Committee, who will manage them?

Copy link
Member Author

Choose a reason for hiding this comment

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

project may have financial resources of its own

Got an example of how that might come about?

who will manage them

Good question. Sounds like we need some clause for it here. If not, would it be delegated to some CNCF people?

Copy link

Choose a reason for hiding this comment

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

It can't. The CNCF expects the project to make requests for any money it needs, and to lead any activities which require financing. The staff won't do it for you. If nobody in the project does this, they'll just assume you don't need any resources.

the project values and structure.

This governance is an open, living document, and will continue to
evolve as the community and project change.

## Values

The Kuadrant and its leadership embrace the following values:

* Openness: Communication and decision-making happens in the open and is discoverable for future
reference. As much as possible, all discussions and work take place in public
forums and open repositories.

* Fairness: All stakeholders have the opportunity to provide feedback and submit
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* Fairness: All stakeholders have the opportunity to provide feedback and submit
* Fairness: All collaborators have the opportunity to provide feedback and submit

Copy link
Member Author

Choose a reason for hiding this comment

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

This is an interesting change.
I wonder if stakeholders implies 'users' as well, while collaborators wouldn't?
cc @alexsnaps as you mentioned users in the context of voting elsewhere in the doc

contributions, which will be considered on their merits.

* Community over Product or Company: Sustaining and growing our community takes
priority over shipping code or sponsors' organizational goals. Each
david-martin marked this conversation as resolved.
Show resolved Hide resolved
contributor participates in the project as an individual.

* Inclusivity: We innovate through different perspectives and skill sets, which
can only be accomplished in a welcoming and respectful environment.

* Participation: Responsibilities within the project are earned through
participation, and there is a clear path up the contributor ladder into leadership
positions.

## Charter

The following responsibilities and powers belong to the Steering Committee.

Technical governance is expected to be performed by the Maintainers of the
various project areas and subprojects, as defined in the appropriate OWNERS files.

* Delegate ownership of, responsibility for and authority over areas of the
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
* Delegate ownership of, responsibility for and authority over areas of the
* Delegate ownership of responsibility for and authority over areas of the

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 think the comma is needed here.
Otherwise it's 'ownership of responsibility', when I think it's meant to be the combination of 'ownership, responsibility and authority' of 'areas of the project to specific entities..`

project to specific entities.
* Define, evolve, and defend the vision, mission and the values of the project.
* Charter and refine policy for defining new community groups, and establish
transparency and accountability policies for such groups
* Define and evolve project and group governance structures and policies.
* Act as a final escalation point for disputes in any project repository or
group.
* Request funds and other support from the CNCF (e.g. marketing, press, etc.)
* Coordinate with the CNCF regarding usage of the Kuadrant brand and deciding
project scope, core requirements, and conformance, as well as how that brand
can be used in relation to other efforts or vendors.
Comment on lines +48 to +51
Copy link
Member

Choose a reason for hiding this comment

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

I reckon we should be cautious about these 2 points... Maybe we need guidance on how to proceed (?)

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 wonder if we can get some guidance from @jberkus (or someone else in CNCF) on what the implications of these point from the template actually mean, and if they are needed.

Copy link

Choose a reason for hiding this comment

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

Those are both things that the CNCF asks the project to decide on. In the absence of other governance, they ask the "maintainers".

As a CNCF project, Kuadrant is entitled to, with the approval of the TOC/GB (depending), spend CNCF funds on needed things. As an example, the CNCF pays for Buttondown and Boost subscriptions for Kubernetes. Someone has to have the authority to request this funding.

Copy link

Choose a reason for hiding this comment

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

For that matter, if a vendor wants to have an "official Kuadrant distribution" then that would depend on a program of certification owned by the steering committee.

* Decide, for the purpose of elections, who is a member of standing, and what
privileges that entails.
* Control and delegate access to and establish processes regarding all project
repositories, resources, and assets.
* Appointing the members of the Code of Conduct Committee in order to ensure
responsiveness, diversity, and good judgement.

## Example decisions

* Decides to expand the project's scope to include new functionality related to data analytics, setting the strategic vision for the next major release.
* Decides that the project should support an additional Gateway API provider for a specific set of Kuadrant policies
* Decides to set up a special interest group to investigate and prototype a new type of policy focused on LLM integrations

## Delegated authority

The Steering Committee may choose to delegate its authority to other committees
as-needed. The committee currently recognizes this delegated authority for:

- n/a

## Committee Meetings

The Steering Committee meets every 2 weeks, or as-needed.
Meetings are held online, and are public by default.

Given the private nature of some of these discussions (e.g. privacy, private
emails to the committee, code of conduct violations, escalations, disputes
between members, security reports, etc.) some meetings are held in private.

Meeting notes are available to members of the
[kuadrant mailing list](https://groups.google.com/g/kuadrant).
Public meetings will be recorded and the recordings made available publicly.

Questions and proposals for changes to governance or community procedures are posted as
[issues or pull requests in the governance repo](https://github.com/Kuadrant/governance), and
the Steering Committee invites your feedback there.

## Committee members

Seats on the Steering Committee are held by an individual, not by their
employer.

The current membership of the committee is currently (listed alphabetically by
first name):

|   | Member | Organization |
| -------------------------------------------------------------- | ---------------- | ------------ |

[TODO: Pending elections]

## Decision process

The Steering Committee desires to always reach consensus.

Decisions requiring a vote include: issuing written policy, amending existing
written policy, creating, removing, or modifying a committee or SIG, all spending,
hiring, and contracting, official responses to publicly raised issues, or any
other decisions that at least two of the members present decide require a vote.

Decisions are made in meetings when a quorum of more than half of the members

Choose a reason for hiding this comment

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

I wonder if the 50%+ quorum couldn't be increased (e.g. min 2/3, though I personally would prefer "unanimous"), and decisions made possible to happen async/offline, with a minimum voting period (e.g. couple days).

Additionally, I wonder if there should be veto power established for some cases.

Choose a reason for hiding this comment

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

[…] decisions made possible to happen async/offline, with a minimum voting period (e.g. couple days).

Additionally, I wonder if there should be veto power established for some cases.

I think there's an element of the "Lazy consensus" thing here in what I meant.

are present (and all members have been informed of the meeting), and may pass
with more than half the members of the committee supporting it.

## Getting in touch

Open an issue on [the governance repo](https://github.com/Kuadrant/governance) and indicate that you would like
attention from the steering committee.

## Composition

The steering committee has 3 seats. These seats are
open to any project contributor. See
Copy link
Member

Choose a reason for hiding this comment

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

contributor, not maintainers...?! I think the ROLES.md starts to make more a little more sense.

Copy link
Member Author

Choose a reason for hiding this comment

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

Suggested change
open to any project contributor. See
open to any project maintainer. See

?

[candidate eligibility](#candidate-eligibility) for a definition.

## Election Procedure

### Timeline

Steering Committee elections are held annually. Six weeks or more before the
election, the Steering Committee will appoint Election Officer(s) (see below).
Four weeks or more before the election, the Election Officer(s) will issue a
call for nominations, publish the list of voters, and open the call for
exceptions. Three days before the election the call for nominations and exceptions
will be closed. The election will be open for voting not less than two weeks and
not more than four. The results of the election will be announced within one
week of closing the election. New Steering Committee members will take office on
October 1st of each year.

### Election Officer(s)

Six weeks or more before the election, the Steering Committee will appoint
between one and three Election Officer(s) to administer the election. Elections
Officers will be community members in good standing who are eligible to
vote, are not running for Steering in that election, who are not currently part
of the Steering Committee and can make a public promise of impartiality. They
will be responsible for:

- Making all announcements associated with the election
- Preparing and distributing electronic ballots
- Judging exception requests
- Assisting candidates in preparing and sharing statements
- Tallying voting results according to the rules in this charter

### Eligibility to Vote

Anyone who has at least 10 contributions in the last 12 months is
Copy link

Choose a reason for hiding this comment

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

This says 10 contributions, but the threshold for "contributors" is 50 contributions. It'll make your life easier if both have the same threshold.

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 catch.
I'll leave this comment thread open as a reminder to sanity check numbers across the doc before anything gets merged

eligible to vote in the Steering election. Contributions are defined as opening PRs,
Comment on lines +157 to +158
Copy link
Member

Choose a reason for hiding this comment

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

So somewhat rules out "users", is this on purpose? Desirable?

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'm not against users having a say.
Is it feasible to keep a record of users though.
How would you see that playing out for voting.

Copy link
Member

Choose a reason for hiding this comment

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

Given we have a solution that probably mostly targets developers (even if YAML ones), would it be crazy to require users wanting to vote to "record" as users of any of our components? Or just "star" one of the repo? I guess the problem is needing a way to track individual votes... so a platform that would let users link to their GH account, and that's it? Thinking out loud here, I might well be missing a big part of the problem to be solved.

Again, given the responsibilities of steering committee members being both technical but also "community" ones, being more inclusive in the way they are elected seems desirable... And I feel having "only contributors", given the criteria above, being the voters, seems a little like a close feedback loop to me. But again, maybe I'm missing some aspect of this and could also well be a little too much of a dreamer 😜

Copy link

Choose a reason for hiding this comment

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

I don't know any project that allows "users" to vote, simply because there isn't any good way to verify a user's eligibility. The closest I've seen is that some projects, like Cert-Manager, allow representatives of the organizations in their Adopters.md file to vote on an end user seat.

reviewing and commenting on PRs, opening and commenting on issues, writing
design docs, commenting on design docs, helping people on community forums, participating
in working groups, and other efforts that help advance the project.

[This dashboard](https://kuadrant.devstats.cncf.io/d/8/dashboards?orgId=1&refresh=15m)
shows only GitHub based contributions and does not capture all the contributions
we value. We expect this metric not to capture everyone who should be eligible
to vote. If a community member has had significant contributions over the past
year but is not captured in Devstats,
they will be able to submit an exception form to the Elections Officer(s) who
will then review and determine whether this member should be eligible to vote.
All exceptions, and the reasons for them, will be recorded and saved by the
officers.

The electoral roll of all eligible voters will be captured in the [./elections](./elections) folder, as will the voters’ guide.

We are committed to an inclusive process and will adapt future eligibility
requirements based on community feedback.

### Candidate Eligibility

Community members must be eligible to vote in order to stand for election (this
includes voters who qualify for an exception). Candidates may self-nominate or
be nominated by another eligible member. There are no term limits for Steering
Committee members. Nothing prevents a qualified member from serving on both Steering
and other groups simultaneously.

To run for a seat, a candidate must additionally be at least a
project maintainer as defined in
[ROLES.md](./ROLES.md).

### Voting Procedure

Elections will be held using a time-limited
[Condorcet](https://en.wikipedia.org/wiki/Condorcet_method) ranking on
using the IRV method. The top vote-getters will be elected to the open seats,
with the exceptions for company representation discussed below.

### Limitations on Company Representation

When feasible, no more than 1 seats may be held by employees of the same organization (or
Copy link
Member

Choose a reason for hiding this comment

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

Given our nascence, would it be fair to assume we will have more than one seat from an individual company given the project's roots?

Is the 1 seat per company usual? Feels like a SPOF

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes. Unavoidable at present. I think that's fine.

The limit depends on the overall size of the group.
So if there's 5 in the group, no more than 2 would make sense so that no 1 company can control the project.
If we went with 3 (as is suggested at present), having a limit of 1 would prevent that.
This isn't set in stone, and more of an intent at this time.

Copy link
Member

Choose a reason for hiding this comment

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

Makes sense, yeah I think that's fine.

Copy link

Choose a reason for hiding this comment

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

Do y'all have 3 different folks from different employers who are otherwise eligible and willing?

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 would say this is a 'no' right now.

conglomerate, in the case of companies owning each other). If an
election results in greater than 1 employee of the same organization being
selected, the lowest vote getters from any particular employer will be removed until
representation on the committee is down to two.

If employers change because of job changes, acquisitions, or other events, in a
way that would yield too many seats being held by employees of the same
organization, sufficient members of the committee must resign until only 1
employee of the same employer are left. If it is impossible to find sufficient
members to resign, all employees of that organization will be removed and new
special elections held. In the event of a question of company membership (for
example evaluating independence of corporate subsidiaries) a majority of all
non-involved Steering Committee members will decide.

## Vacancies

In the event of a resignation or other loss of an elected SC member, the
candidate with the next most votes from the previous election will be offered
the seat, provided that person otherwise qualifies to join the SC. This process
will continue until the seat is filled.

In case this fails to fill the seat, a special election for that position will
be held as soon as possible, unless the regular SC election is less than 7 weeks
away. Eligible voters from the most recent election will vote in the special
election. Eligibility will not be redetermined at the time of the special
election. Any replacement SC member will serve out the remainder of the term for
the person they are replacing, regardless of the length of that remainder.

## Changes to the charter

Changes to this charter may be proposed via a PR on the charter itself.
Amendments are accepted with majority consent of the committee as per the
[decision process](#decision-process) outlined above.

Proposals and amendments to the charter are available for at least a period of
one week for comments and questions before a vote will occur.

## Authority, Facilitation, and Decision Making

Ideally most decisions will be made at the lowest possible level within the
project: within individual working groups. When this is not possible, Steering
can help facilitate a conversation to work through the contended issue. When
facilitation by the SC does not resolve the contention, the SC may have to
make a decision.

Note that if the committee is called to resolve contended decisions regularly, it is a
symptom of a larger problem in the community that will need to be addressed.
25 changes: 25 additions & 0 deletions ROLES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Roles

## Contributor

A contributor is any person who has at least 50 contributor 'Activities' in the Contributor Leaderboard for the last 12 months,
or at least 5 pull requests merged in the last 12 months,
Comment on lines +5 to +6
Copy link
Member

Choose a reason for hiding this comment

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

Any pointers as to how these threshold were decided upon?
My question is actually mostly: do we really need these? Also, what's a contributor anyways? Isn't anyone who contributes, a contributor? Something that tangibly would probably result in a PR to "something"? i.e all of these people for all our repos?

Also, tho I'd generally be against such a large PR/code change, couldn't a single (or two) PRs grant a user with the request to become a contributor "with a lower threshold" based of the work that represents?

Copy link
Member Author

Choose a reason for hiding this comment

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

Any pointers as to how these threshold were decided upon?

Based on the template.

do we really need these
Entirely up to us.

Also, what's a contributor anyways? Isn't anyone who contributes, a contributor?

Grammatically, sure.
It's up to us to define what's the threshold for being able to have some official power (like voting).

couldn't a single (or two) PRs grant a user with the request to become a contributor "with a lower threshold" based of the work that represents?

Sure. Do you want to suggest some modification that captures that?

as shown in https://insights.lfx.linuxfoundation.org/foundation/cncf/overview/github?project=kuadrant&repository=all&routedFrom=Github&dateFilters=Last%2012%20Months&dateRange=2023-08-02%20to%202024-08-01&compare=PP&granularity=month&hideBots=true

## Maintainer

The list of maintainers for the project is at [./MAINTAINERS.md](./MAINTAINERS.md).
Generally, these people have the ability to create, approve and merge pull requests on any repository.

[TODO: Decide & document rules for how someone can become a maintainer]

### Component specific maintainers

Some components have a subset of maintainers. The list of components and maintainers can be found in the [./MAINTAINERS.md#component-specific-maintainers](./MAINTAINERS.md#component-specific-maintainers) section.
These people have the same permissions as maintainers.
However, their role includes having domain expertise in those components.
They can be thought of as technical leads in a smaller part of the overall project.
There are no set rules for how a person can move from a maintainer role to a component specific maintainer role.
Generally, if a person is sufficiently active in a particular area, they may add themselves, be added, or request to be added to the list for a component.
Comment on lines +22 to +23
Copy link

Choose a reason for hiding this comment

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

What about people moving from a contributor role to a component maintainer role? That is, someone who isn't a general maintainer, but wants to move up to a component maintainer?


[TODO: Decide & document rules for how someone can become a component specific maintainer]
80 changes: 80 additions & 0 deletions elections/steering/2024/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# 2024 VOTERS GUIDE - Kuadrant Steering Committee Election

## Purpose

The role of this election is to fill out the three (3) seats due for the first election on the Kuadrant Steering Committee.
Each elected member will serve a two year term.
Copy link
Member Author

Choose a reason for hiding this comment

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

Suggested change
Each elected member will serve a two year term.
As we are starting from scratch with a bootstrapped committee, will will need a transition period, but plan to have staggered 2-year terms.
2 members will be elected for a 2 year term, and 1 member for a 1 year term.
This is to ensure continuity of the committee.
After year 1, that 1 seat will be up for reelection and span a 2 year term.
After year 2, the other 2 seats will be up for reelecation and span a 2 year term... and so on.


## Election Platform

[TODO: something like https://elekto.dev/ ? https://elekto.dev/docs/voting/]

## Background

This election will shape the future of Kuadrant as a community and project. The [Steering Committee Charter](../GOVERNANCE.md) covers the health of the project and community as a whole. Some direct responsibilities of steering members to consider as you are deciding whether to run or who to vote for:

* Delegate ownership of, responsibility for and authority over areas of the
project to specific entities.
* Define, evolve, and defend the vision, mission and the values of the project.
* Charter and refine policy for defining new community groups, and establish
transparency and accountability policies for such groups
* Define and evolve project and group governance structures and policies.
* Act as a final escalation point for disputes in any project repository or
group.
* Request funds and other support from the CNCF (e.g. marketing, press, etc.)
* Coordinate with the CNCF regarding usage of the Kuadrant brand and deciding
project scope, core requirements, and conformance, as well as how that brand
can be used in relation to other efforts or vendors.
* Decide, for the purpose of elections, who is a member of standing, and what
privileges that entails.
* Control and delegate access to and establish processes regarding all project
repositories, resources, and assets.

## Eligibility

Please refer to the [Steering Committee Charter](../GOVERNANCE.md) for [Steering Committee Charter](../GOVERNANCE.md#eligibility-for-candidacy)

### Schedule

| Date | Event |
|:------------------------|:----------------------------------------------------------------------|
| TBD | Steering Committee selects Election Committee |
| TBD | Announcement of Election and publication of voters.yaml |
| TBD | Steering Committee Q+A for the candidates |
| TBD | Candidate nominations due at the end of the day in AoE time |
| TBD | Election Begins |
| TBD | Election Closes at the end of the day in AoE time |
| TBD | Private announcement of Results to SC members not up for election |
| TBD | Private announcement of Results to all candidates |
| Tue, October 1 | Public announcement of Results at Public Steering Committee Meeting |
| TBD | Election Retro |

## Candidacy Process

**Nomination**

1. If you want to stand for the election, create an issue in this GitHub repo
(kuadrant/governance) with the title `Steering Committee Nomination: Your Name (@yourgithub)`.
If you want to nominate someone else, you may do so, but PLEASE talk to them
first.

2. After creating the issue, send an email to [email protected]
with a link to the issue. The subject line of the email should be same as
the title of the issue. This email should encourage people to second your
nomination on GitHub, as +1s via email will not count. Here's an example email:

Hi! I'm nominating _candidate_ for steering committee this year.
If you are an eligible voter and think they should run, please add your +1 as
a comment on the issue _link_ and mention the organization you work for.
While supportive replies are very nice, only comments on the issue will count
towards their eligibility.

3. If you wish to accept a nomination from someone else, reply to the nomination
**issue** saying something like "I accept the nomination".

4. Finally, the candidate closes the **issue** (`#NNN`) by opening a Pull Request
to add their github id to the `candidates.yaml` file.

## Voting Process

[TODO]
3 changes: 3 additions & 0 deletions elections/steering/2024/candidates.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024 Steering Committee Election
candidates:
-
3 changes: 3 additions & 0 deletions elections/steering/2024/voters.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024 Steering Committee Election
eligible_voters:
-