-
Notifications
You must be signed in to change notification settings - Fork 48
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
Add information about project governance and team #231
base: production
Are you sure you want to change the base?
Conversation
@@ -0,0 +1,80 @@ | |||
= Governance |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file is based on the Commonhaus template, with some heavy changes to better match what (I think) is the current governance model in the Hibernate team.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note iteration 2 involves even heavier changes, the decision-making process is quite different.
340ce51
to
73524a8
Compare
This is a list of all | ||
%a(href="/community/governance/#roles") | ||
Hibernate Members | ||
who decided to make their membership public on GitHub. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oddly, some very active members have made their membership private... Maybe by mistake?
If you read this, and you're not on this page, please check your membership's visibility. See https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-your-membership-in-organizations/publicizing-or-hiding-organization-membership
I have two high level comments
|
Which rules are you talking about? The code of conduct and trademark policy are quite large, I'm not sure it would make things clearer if we inlined them... For the decision making process that'd be more reasonable, especially considering the confusing references to the "council" and similar in the Commonhaus document. I could try to inline that -- if I manage to remove some content so it fits in a reasonably-sized section. |
(sent too fast...)
Yeah that's one place where I tried to meet Commonhaus half-way... It's in the original template, I just added "overruling power" for project leaders. I agree what you described is accurate: consensus if possible, leader decision otherwise. I haven't seen a vote take place. But then, giving leaders "overruling power" over their project gives us pretty much that way of working -- votes would only be useful when leaders don't feel strongly either way, to resolve conflicts between non-project-leaders, or when a conflict arises about a decision that is not strictly about one project. Fortunately such conflicts have been rare, so I don't really have examples of situations where the vote would have been useful. However, if we are to formalize governance, I think we need an answer ahead of time. Conflict resolution is important if we hope that the move to Commonhaus will encourage other interested parties to become significant stakeholders -- with potentially diverging views and interests. Perhaps I should rephrase the document to say that project leaders don't have "overruling power", but rather that decisions are made in this order:
(I will try to phrase it better.) It amounts to pretty much the same thing as what I wrote, but presented this way it does feel closer to how we've appraoched this in practice: item 1 and 2 are how it's always been done, and 3/4 are two further steps to address situations that could arise with a more heterogeneous pool of decision-makers. |
Yes it's about the decision process, the sentence that triggered me was
So I was assuming I had to read the Commonhaus rules to understand the process. |
I am uneasy about this. Personally, I would describe what we have today. This does not prevent a lead to ask for a vote. And if everyone want to add this vote thing, then we can amend. I am not sure commonhaus reps should be above on any subjects. Which leads to the question, which types of subjects make sense to be escalatable, and which is not? I'm sure the name of the Id generation interface is not something that would be useful to raise to a commonhaus board. If some mad lead wants to ban 1/3rd of the community based on first name initials, then maybe a commonhaus appeal would make sense but even there it feels a bit counter to the CH rules of hands off and set your own governance model it was initially started as. |
TL;DR: I think this is the minimal decision process we can describe while sticking to the existing one:
I'd personally prefer some clear way of resolving conflicts that doesn't involve Commonhaus -- for example in case there is disagreement, including between leaders, regarding whether someone should join the Hibernate org.
IMO joining Commonhaus to demonstrate openness, then presenting a decision-making process that gives absolute power to leaders, with no way to appeal... does not make much sense. Yes we can add vote thing later, but then I question whether joining Commonhaus changes anything at all for prospective contributors. That would amount to delaying the demonstration of openness. Regarding appeal to Commonhaus, we can hide it from the governance model, but we cannot remove it completely -- see below.
To be clear, the vote between members mentioned in this document is between members of the Hibernate organization. Which may or may not be Commonhaus members -- that's completely orthogonal. I agree that's unclear in this PR given the link about voting redirects you to a document that talks about votes between Commonhaus members. It would need to be inlined and adapted -- if we keep the vote thing. If you're talking about the "last-resort" conflict resolution... see below.
That's true... to some extent. Joining Commonhaus implies some rules are forced upon us, most notably the code of conduct, trademark policy, ... At least any conflict around those would legitimately involve Commonhaus. Sure we don't need to mention this in the decision-making process, but it's there anyway and we're bound by it anyway, so I feel this would make sense to mention -- especially since this actually makes the governance look better (safer) to prospective contributors (more on this below).
I think we don't have a choice when it comes to anything that Commonhaus allows escalating -- which would be code of conduct violations, trademark policy violations, etc. For anything else, and in particular decisions related to development ("the name of the Id generation interface")
I'm not sure Commonhaus bylaws contain guidance around the naming of the Id generation interface, so indeed, this would be pointless to escalate: Commonhaus would have no grounds to decide how to name that interface. I think it's more about how decisions are made than which decisions are made. IMO what matters is that people have the option to escalate, and thus feel safe that their investment in the project won't be ruined by one decision that means everything to them. Like "renaming the Id generation interface at a time where my downstream product cannot tolerate a breaking change". E.g. the Commonhaus code of conduct, in section 3.2 "standards" mentions:
I could imagine a decision being appealed if it's the best interest of a project leader (and their employer) at the expense of the rest of the community. And the code of conduct would give Commonhaus grounds to oppose such a decision. And I personally think that's good. |
To reflect what's currently true: project leaders make the final decision, though they're free to organize a vote.
[[decision-making]] | ||
== Decision-Making | ||
|
||
Hibernate projects follow a common decision-making process. | ||
|
||
Consensus-seeking (lazy consensus):: | ||
Hibernate projects primarily aim for a consensus-based decision-making process, | ||
where Members and active contributors discuss and come to an agreement. | ||
+ | ||
In practice, this involves: | ||
+ | ||
* Discussing matters openly, to facilitate others joining the discussions and expressing concerns. | ||
* Taking into account every contributor's opinion, regardless of their role. | ||
|
||
+ | ||
Actual implementation of consensus decision-making is up to Members and can vary based on the audience and criticality of the discussion. | ||
Inspiration may be found in | ||
the https://community.apache.org/committers/decisionMaking.html[Lazy Consensus model as defined by the Apache Foundation], | ||
and in https://digitalcommons.unl.edu/cgi/viewcontent.cgi?article=1825&context=sociologyfacpub[Martha's Rules]. | ||
Conflict Resolution:: | ||
If conflicts arise, Members are responsible for facilitating a resolution. | ||
+ | ||
Project Leaders hold the power to make the final decision, be it individually for the project they lead, | ||
or collectively for cross-project matters. | ||
+ | ||
As a last resort, in particular in case of disagreement about the decision-making process, | ||
the https://www.commonhaus.org/bylaws/cf-council.html[Commonhaus Foundation Council] (CFC) can be asked to mediate the discussion. | ||
|
||
[[role-granting-revoking]] | ||
== Role granting/revoking | ||
|
||
The role of Member or Project Leader is granted or revoked through the <<decision-making,decision-making process>>, | ||
with additional restrictions: | ||
|
||
1. The discussion must happen on the Hibernate development mailing list, as listed in the link:/community[Community page on this website]. | ||
// This prevents a Project Leader overruling their own revocation, in particular. | ||
2. The opinion of the Members or Project Leader whose role is being discussed does not factor into the decision. | ||
// This is long on purpose, to eliminates the risk of a decision being taken "in absentia" during e.g. holidays. | ||
// The assumption is that decisions around the project can be taken collectively, or by the previous leader, in the interim. | ||
3. Discussions regarding the role of Project Leader may not last less than 30 days. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@emmanuelbernard (and others) due to concerns around the voting system, I removed any mention of votes in order to better reflect the existing process.
I guess we can add voting later if "enlightened dictatorship" proves to be a real dealbreaker for some prospective contributors -- though I'm not sure how we'd ever hear about that.
This is where most changes are, but see the second commit for detailed changes.
That's right. I'm not leading any project at the moment.
This role, I think, has never been totally clear -- even before I took it on :) The way I see it my role is more internal to our employer, around effort coordination and consistency of technical choices initiated within our company. If other companies want to help out and make significant, regular contributions, it is in their right to have their own strategy, their own internal coordination, and it seems fair to me to handle related decisions/conflicts at a (sub)project level. I doubt they would like having yet another person to say "pretty please" to, especially if they are only interested in one relatively independent (sub)project (e.g. Hibernate Validator). There is the question of cross-project technical decisions, such as "which observability stack are we going to focus our efforts on". But then it's really about effort; I could see scenarios where multiple companies maintain separate efforts for separate integrations to different observability stacks. It'd be a mess, sure, but it would truly be open, and project leads would still be able to veto problematic contributions (e.g. force these integrations to remain outside of the core artifacts). We could probably advertise my role within Red Hat on the website, but I'm not sure it makes sense to have the Hibernate governance model give me elevated decision power, on top of my influence within Red Hat. After all, Red Hat does encourage technical choices that are what's best for a project, technically, even if that is not what's best for Red Hat :) |
+1 |
BTW @Sanne that's the PR I mentioned to you |
This GitHub API is limited to 30 hits by default.
Sorry for being late, but have some thoughts as well.
I think it would be nice to have a stronger accent on collaboration rather than the project lead appearing to be solely responsible for such aspects. I appreciate this is difficult to express, sorry for that.
I'm a little confused here - isn't this precisly the paragraph that should explain how we do it, rather than suggesting options? Perhaps this is the right place in which we can elaborate on the role of the project lead I expressed in the previous point? We could say something among the lines "member consensus, or project lead decision if no consensus could be defined in reasonable time".
What happens if the 30 days are over? |
There's also the need to have a well defined way to take cross-project decisions. In the current structure it seems to revolve around the Project Leads, but they are by definition scoped to particular projects. |
Thanks for taking the time to review, Sanne.
I agree and think choices have been made that were perhaps a bit too liberal when it comes to adding people to the GitHub org. But then I'm not going to try and remove people, because I've already tried some softer approaches, and even that usually comes right back in my face. We need a discussion about people having unnecessary access rights on GitHub, though; it's in my plans, but unrelated to the governance model. Will happen later. Relegating the (few) members "added by accident" to "contributor" status is also something we can investigate -- but, similarly, it'd require a separate discussion.
As I explained on this PR, and as is highlighted on the website, people who don't make their membership public are hidden. If, aside from that, some major contributors that you consider members are missing from the GitHub org, please give me a list. Without a formal definition of what it means to be a Hibernate member, we just don't know who is a member right now. We need some authoritative list, and GitHub was just the most obvious choice. It seems good enough to me if everyone just agrees.
Like
We can talk about the "steering the direction" part, but enforcing compliance with Commonhaus rules is definitely the role of the project lead, per Commonhaus' own policy. No way around that. There's even rules to evict a project leader if rules aren't complied with.
I think that description is overly optimistic, but I agree we don't need to require the "steering" part in the governance model. What we need to do is justify the higher decision power. So, what about: "Responsible for keeping the project's technical direction consistent, safe and sustainable, and for enforcing compliance with requirements of the Commonhaus Foundation." Or whatever adjectives you think make sense.
This is pretty much what the decision-making process describes.
Fair enough. Seems the governance model as it is wouldn't prevent that?
@emmanuelbernard doesn't want to mandate a particular, strict process, because we haven't had one so far and there's time to introduce something stricter later -- if we want to. I think it makes sense.
That's... what it says? "Conflict Resolution" > "Project Leaders hold the power to make the final decision, be it individually for the project they lead, or collectively for cross-project matters."
Then discussions can end, with whatever outcome.
"Conflict Resolution" > "Project Leaders hold the power to make the final decision, be it individually for the project they lead, or collectively for cross-project matters." If consensus cannot be reached, other project leaders decide.
I felt that way too. I proposed a voting system similar to Commonhaus. Emmanuel remarked this does not reflect how we currently work, and thus should probably be discussed separately. Given our divergence of opinions, I tend to agree with this. Let's nail down how it works now, and discuss improvements later.
The decision process describes that: we discuss this, try to reach a consensus, and if we don't, project leaders decide collectively, and if someone disagrees very strongly they can appeal to (very) higher instances at Commonhaus. I could come up with arbitrary rules to resolve conflicts between project leaders, but we'd need to agree on those rules. So, like above... let's describe how it works now? |
Definitely agree with Emmanuel here. Voting is the worst possible way to resolve a disagreement, since it doesn't actually resolve the disagreement. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, I better understand the proposal now - essentially we want to keep it light on specific restrictions at this stage, with the option to refine.
I'm cool with that 👍
I think that I'd prefer to rephrase the specific wording of project leads still a little, just to better reflect the nature of them being "final-word bearing to break deadlocks" rather than them having to do a lot of daily work to emphasize that everyone has shared responsibilities, but rather than going on a tangent on this already complex PR, I'm OK to accept this proposal and discuss minor nitpicks in a separate follow up.
I semt an email about this to hibernate-dev, it warrants a discussion among all members: https://lists.jboss.org/archives/list/[email protected]/thread/WMNJHAWAVAAJVWFWNBIJV2GNRMUHOIW2/
The important changes are:
GOVERNANCE.md
file in all repositories (or at least the main ones).IMPORTANT: This is a first attempt. I worked on this by myself, so it needs reviews, comments, and adjustments. The final document must be something we all agree with, and commit to complying with.=> See discussions below, it looks like consensus was reached for those who had a look so far. Waiting for a few more...