<div dir="ltr"><div>+1 from us on this.</div><div><br></div><div>The only caveat I'll add is:</div><div><ul><li>Getting the right mix of representatives is key.</li><li>You need a chair that'll do the book-keeping but be impartial to the decisions.<br></li><li>Having a nuclear option of 'the representatives cannot agree' is important too.</li></ul><div>Drawing from some life lessons when I spent 5 years designing Vulkan as part of Khronos, the general philosophy was that we'd discuss until we came to a consensus on an issue. This meant we definitely spent more time than was required to solve the technical issues, but I think in each instance the time sunk was of benefit to the individual design decisions we took. But you always need the nuclear option <b>in that sometimes pushing through any decision</b> <b>is better than the paralysis of none at all</b>. In Khronos it was done with a one company / one vote -> majority passes. This was clean-ish there, but failed to take into account that huge companies like Google might have two very different teams working on the technology internally that might have differing views, which couldn't be represented cleanly. You also don't want to overbalance the decision making process by having all representatives from one/a-few companies (this would be way worse than the BDFL we have currently!).<br></div><div><br></div><div>Cheers,</div><div>-Neil.<br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 15, 2020 at 10:42 AM Renato Golin via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, 15 Jan 2020 at 06:58, Chris Lattner via llvm-dev<br>
<<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br>
> Numerous people have been bringing up challenges with consensus driven decision making in the LLVM community.  After considering this and seeing the frustrations it is causing many people, I think we should make a formal process change to help improve decision making going forward.<br>
<br>
Hi Chris,<br>
<br>
Having proposed this many years ago, I think it's a good move forward. :)<br>
<br>
I also mostly agree with your points, here are just some additional<br>
material to think about.<br>
<br>
My main concerns about the current model:<br>
 * You get hit by a bus (hopefully not that drastic, but other life<br>
changing moments can occur).<br>
 * You get a lot of pressure to take decisions that are guaranteed to<br>
divide the community (bad for mental health)<br>
 * You defer to "the community" to avoid mental health breakdown, then<br>
chaos ensue (we have good examples)<br>
 * At the end of chaos, we get to a certain solution, again, with the<br>
community divided<br>
<br>
This is the main problem with the "benevolent dictator" model, and I<br>
think it's worse for you than it is for most of us.<br>
<br>
I have had a few bad experiences (a no good ones) in building a<br>
decision making body that represents a diverse community, and it boils<br>
down to representativity.<br>
<br>
If an unelected body appoints people, no matter how trusted and<br>
truthful they are, the community will already be divided with the<br>
inherent bias (intentional or not).<br>
<br>
If we want to go for meritocracy, which I think most people would<br>
agree, then it would have to be people that already represent the<br>
community, internally or externally.<br>
<br>
Active code owners is an easy solution, but also fraught with problems<br>
(like what constitutes an active code owner?). It also leaves external<br>
active users from the equation (all the languages and side projects).<br>
<br>
Perhaps we could refine the definition of a code owner as one that<br>
actively participates in or around an area and refine the list to<br>
include external users as well, for example Swift or Julia owners.<br>
<br>
Code owners are already somewhat elected by either creating the code<br>
base (back-end, passes) or stepping up and being accepted by the<br>
community. Existing code owners can also step down and propose others,<br>
which are again accepted or not by the community. This is a reasonably<br>
democractic process, even if not encoded, and I think it's the closes<br>
to representation we have.<br>
<br>
But we also need representation of the users and wider groups that do<br>
not relate to code, and I tihnk that's where the foundation comes in.<br>
We should also look for other opportunities (ethnical groupos?<br>
minorities?) to provide their own point of view.<br>
<br>
Hoewever, I'd strongly advise against a simple voting system.<br>
<br>
After all, technical decisions should not be taken by the opinion of<br>
the majority, but by strong and corroborated facts. True, those also<br>
tend to fall into categories (see GihtHub PR vs Phab, both sides have<br>
strong points). But voting should only be a last resort, when there is<br>
no clear majority on any side.<br>
<br>
Voting systems also create biase in themselves, by over/under<br>
representing certain groups in the number of members allowed to vote.<br>
This will create yet another meta-argument and it'll drag us forever.<br>
<br>
If we stick to facts first, and ask the representatives to bring any<br>
concerns their sub-community may have, and we collate all of those,<br>
and there is a clear majority, then the process was fair. Not everyone<br>
was happy, but that was never possible to begin with, so it's ok.<br>
<br>
We should also differentiate between code, process and community<br>
changes. Examples are new passes, GitHub and policy discussions. They<br>
need very different time frames, from weeks, to months, to years, not<br>
necessarily respectively.<br>
<br>
We also need to be scalable. If we have a decision that only affects a<br>
small part of the code, we can handle in the sub-community (like we<br>
currently do RFCs), but if some points may affect a wider range (like<br>
stepvector in SVE), then we need to widen the scope, involve more<br>
people, and we need those people to be pro active and responsive.<br>
<br>
Finally, I think we need to be flexible.<br>
<br>
If new information comes to light, or if someone was on extended<br>
holidays and didn't catch up, etc. We need to make sure we don't just<br>
alienate a sub-community because of a rigid process.<br>
<br>
After all, the end goal is to make better decisions without burdening<br>
the same few individuals every time or fragmenting the community.<br>
<br>
cheers,<br>
--renato<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><table style="border-collapse:collapse;border-spacing:0px;color:rgb(90,90,91);font-size:13px;margin:0px 0px 20px;padding:0px" width="100%" cellspacing="0" cellpadding="0" border="0"><tbody style="margin:0px;padding:0px"><tr style="margin:0px;padding:0px"><td style="border-collapse:collapse;font-size:0px;line-height:1.5em;padding:0px 0px 20px;vertical-align:top" align="left"><table style="border-collapse:collapse;border-spacing:0px;margin:0px;padding:0px" cellspacing="0" cellpadding="0" border="0" align="left"><tbody style="margin:0px;padding:0px"><tr style="margin:0px;padding:0px"><td style="border-collapse:collapse;font-size:1.12em;line-height:1.5em;padding:0px;vertical-align:top;width:64px"><img style="border: medium none; border-radius: 0px; display: block; font-size: 13px; height: auto; line-height: 100%; margin: 0px; max-width: 100%; outline-style: none; outline-width: medium; padding: 20px 0px 0px; width: 100%;" alt="" src="https://unity3d.com/profiles/unity3d/themes/unity/images/ui/other/unity-logo-dark-email.png" width="64" height="auto"></td></tr></tbody></table></td></tr><tr style="margin:0px;padding:0px"><td style="border-collapse:collapse;font-size:0px;line-height:1.5em;padding:0px;vertical-align:top" align="left"><div style="color:rgb(0,0,0);font-family:Roboto,Arial;font-size:14px;font-weight:600;line-height:15px;margin:0px;padding:0px">Neil Henning</div></td></tr><tr style="margin:0px;padding:0px"><td style="border-collapse:collapse;font-size:0px;line-height:1.5em;padding:0px;vertical-align:top" align="left"><div style="color:rgb(0,0,0);font-family:Roboto,Arial;font-size:14px;line-height:15px;margin:0px;padding:0px 0px 10px">Senior Software Engineer Compiler</div></td></tr><tr style="margin:0px;padding:0px"><td style="border-collapse:collapse;font-size:0px;line-height:1.5em;padding:0px;vertical-align:top" align="left"><div style="color:rgb(0,0,0);font-family:Roboto,Arial;font-size:12px;line-height:15px;margin:0px;padding:0px"><a href="http://unity.com" target="_blank">unity.com</a></div></td></tr></tbody></table></div></div>