Discussion about recent CoC events

FWIW I’m not happy about the new status quo. :confused:

Unfortunately I don’t feel that this is the right venue (at least for me) to discuss this in non-abstract form. Sorry.

Perhaps the right way of approaching this problem would be to have an informational PEP with communication guidelines on how minor API and code maintenance changes should be proposed, argued, rejected, or accepted, as well as covering various code ownership related questions. This sounds like an obvious thing that all software engineers should have good intuition about, but at least my experience suggests that it’s not.

6 Likes

BTW, offense is in the eye of the offended. And I actually am somewhat offended by that you snipped my later:

A CoC standing against “serious” abuse is 100% fine with me. Less than that and it gets ever dicier.

which made it crystal clear that I was not advocating for a return to Usenet standards, but view the fragment you quoted as a point on a spectrum of possibilities. My initial reply to you should not have been necessary. Setting up a strawman caricature to tear down is a form of rhetorical abuse.

But, no, I do not want a CoC so petty it would allow me to hassle you over that. Usenet is one end of the spectrum; living in a North Korean re-education camp is the other, and I don’t want that either. Did you advocate for a North Korean re-education camp? No - but turnabout is fair play :wink:.

6 Likes

I’ll provide my experience as part of the community then (not just about CoC issues).

I am profoundly physically disabled; pretty much all I can do now is talk and use 3 fingers, and eventually I will become completely paralyzed. Also, my family is Jewish (I’m atheist though) and some died in the holocaust.

I’ve never, ever felt that I was treated differently by the Python community in bug trackers, in pull requests, in person or video calls, in IRC, etc. I’ve encountered folks who seemed to be having a bad day, and even those who are notoriously abrasive. That’s just life and never did it feel personal. I have always felt included by virtue of our shared love of the language and the value it brings to the world.

Over the past few years, however, the atmosphere doesn’t feel quite as welcoming as it used to be and I find myself getting less and less involved, making acquaintances/friends, etc.

For starters, there has been a cultural shift within the tech scene and increasingly in Western society at large where people prefer to have minor interpersonal disputes arbitrated by third parties, in our case the SC. This change is actually an area of active research in psychology and sociology. One of the seminal papers is Campbell, B., & Manning, J. (2014). Microaggression and Moral Cultures. Comparative Sociology, 13(6), 692–726 (access on sci-hub here).

A key insight is:

a morality that privileges equality and condemns oppression is most likely to arise precisely in
settings that already have relatively high degrees of equality

That sounds like what the Python community has been for years: very egalitarian and inclusive.

A consequence of this shift is spurious accusations of CoC violations. Consider this one against Łukasz Langa: please address these concerns · Issue #1536 · psf/black · GitHub

While the person seemed well intentioned, it’s obviously ridiculous. The truly unfortunate part though, is that with the current culture of most members in Python leadership positions, it’s plausible that feature would have been implemented had the issue been left open or if a tweet about it gained popularity.

Another problem is self-censorship. Not only do I restrict what I say in friendly real-life scenarios (jokes, political talk, etc.), but I also find it stressful to decline or critique contributions for technical reasons even when being as polite as possible. If there is difficulty even imagining this scenario, consider then that a monoculture may have already been formed here.

Second, I find the emphasis on diversity to be a bit insulting. I don’t want my defining characteristic in people’s minds to be something I cannot control, basically becoming just a statistic.

The underlying assumption is that phenotypic expression somehow leads to certain thought patterns, or another version, an identity grouping is so homogenous that any member may adequately represent the group.

That is false. On basically every measurable metric (interests, IQ, etc.) the difference within groups is greater than that of between. Not only is that notion empirically untrue, but when applied to skin pigmentation, that is quite literally the definition of racism.

We all should be thought of as individuals, each with our own unique experience and ideas.

20 Likes

I completely agree with this perspective.

2 Likes

My feeling as well. This community is becoming increasingly bigoted and intolerant.

3 Likes

From the perspective of general civil discourse, particularly against those with opposing viewpoints, I would certainly agree. I think that we could collectively do a much better job of thinking before we respond to others and considering that not everyone else shares the same exact perspectives (even more so with the global presence of the python dev community).

1 Like

Including me, certainly. :slight_smile: However, my concern is also with shutting down people (using threats of coercition) rather than merely responding to opinions (unless you meant “respond to” as “act against”).

The fact that we’ve banned two core developers who mostly kept to themselves, made statistically little fuss on mailing-lists, and were passionately focussed on the one or two topics they are experts in, speaks a lot to how “healthy” the community has become.

6 Likes

No, that’s incorrect.

The SC banned one core developer for three months after he posted racist and demeaning theories on a public mailing list on more than one occasion.

The second core developer was not banned. He left on his own accord while he was under investigation by the CoC WG and SC. He attacked at least four core developers, their employers and at least one contributor on one or more occasion.

5 Likes

One core developer has only be banned temporarily for 3 months. Do you see that as an inappropriate reaction to a CoC violation? What would be an appropriate reaction according to you when the PSF Conduct WG concludes that the CoC has been violated?

IMO we need to react in case of violations, otherwise the CoC is empty and people will continue to violate it.

As I wrote previously, I’m not here to judge the PSF Conduct WG recommendations since I don’t feel that objective anymore. It is a external group on purpose, to remain as objective as possible.

For the second ban, the PSF Conduct WG conclusion was made public, so everyone can make their own opinion if the CoC has been violated or not. Obviously, everyone has different opinions on the CoC :wink:

2 Likes

In case if it was not obvious enough, yes, the Steering Council took Stefan’s skills in account. It has been said in the email sent to Stefan:

Stefan behaved as a gate-keeper on the decimal module, preventing other people to contribute. The SC doesn’t want a bus factor of 1 on a module, it is way too dangerous for the Python long term substainability if the only maintainer can suddenly stop contributing for various reasons (family reasons, burnout, bored, whatever).

I gave concrete examples of this gate-keeping behavior in this email: Mailman 3 [Python-Dev] Re: [python-committers] Resignation from Stefan Krah - Python-Dev - python.org

It has been decided that it is better for the long term to have no maintainer for now, and expect to get more and more people contributing to the decimal module later.

I repeat, the issue here is not a person, but a pattern: gate-keeping. Obviously, we can argue about the thin difference between gate-keeping and a maintainer having strong opinions on a module design :wink: But the gate-keeping behavior was not the only reason for the ban.

I would prefer to not have to remain this, but IMO CoC violations must not be ignored only because the abuser has rare technical skills.

8 Likes

You mean we are all biased except for the PSF Conduct WG who is miraculously objective by virtue of being “external”?

As @tim.one explained, there is a reason that modern, reasonable legal systems don’t blindly trust collectives of mythically “objective” people. Instead, they rely on due process and a complex of set of balancing mechanisms to ensure that accusations are thoroughly and rigorously debated.

So, Stefan opposed those changes. Those are not important changes by any measure. It is certainly frustrating for you that he refused them, but realistically, they wouldn’t have brought any significant improvement for users.

If you had proposed a significant feature addition or a fix for an often-reported bug, I would be more convinced that the _decimal situation needed improving.

And this is not a legitimate reason at all to ban a core developer. It never has been. At worse, it would be a reason to deprecate the module, and tell them to maintain it elsewhere. But banning the author of a high-quality module on the basis that his maintenance of it was supposedly suboptimal (while agreeing that the module is high-quality), just doesn’t make sense. :thinking:

Well, as @tim.one explained, first try to understand why Stefan reacted so? Obviously (to me) he felt attacked when the bug reporter behaved in a manner slightly impolite and dismissive of his work. That doesn’t make the response reasonable, but it certainly explains it.

When someone reacts in defense because they feel attacked, you certainly don’t solve the issue by attacking them even more and threatening them with retaliation. At least, if your objective is to solve the issue without resorting to ban someone.

I’m sure that you can find myriads of CoC violations in python-dev and python-ideas debates (think about any heated discussions in the last 10+ years). So, by that measure, the CoC is almost empty. But in some cases, perhaps as a way of proving that the CoC is not entirely empty, people are abruptly banned for an occasional misbehaviour, and a narrative is opportunistically constructed to justify the ban.

5 Likes

To clarify: I believe that the entire process should be handled by another group, not just checking what to consider a violation or not. This removes part of the stress from the SC. The SC would only come into play when things are so serious that there’s no other way than to “eject” core developers.

Overall, I believe that we don’t really gain a lot in the community by just establishing a police for (potentially) punishing people. It would be far more productive and helpful for everyone to have a dedicated moderation team, which gets called into situations where the proponents are having problems.

Could also be that it’s just a wording and terminology thing: I’m sure people in the conduct WG want to be seen as helping the community, not as a special task force. “CoC” comes across as the big hammer, where in reality what we want is a helpful hand, someone who doesn’t take sides in an argument, but only manages the discussion itself. If different terminology were used for all this, I’m sure we’d have fewer discussions about CoCs, cases, violations, etc.

As I mentioned, perhaps in a too implicit way, in a previous reply: The ultimate goal of any such team and implementation should be to get everyone understand what’s going wrong, why it’s going wrong and why it’s better to cool off in one form or another. Understanding is what makes the difference and helps us improve.

5 Likes

Maybe we should be thinking in terms of “mediation” in the first instance rather than moderation or enforcement? Although without a full picture of what happened in any given case, I don’t know whether that’s something that happened - and if it did, my apologies to the people involved for assuming otherwise.

5 Likes

The Missing Stair

I’d like to return to the topic’s original post to address this thing in particular. Working around another person’s problematic behavior and having to teach newcomers to the group to do the same is a known psychological antipattern.

Often the reason cited for excusing such behavior is that said person’s work is world-class. Or that “I had no problems personally therefore this is no problem”. Or that the bad behavior isn’t so bad. I personally don’t find those excuses hold water but my personal feelings on the matter aren’t important.

What is important though is that in our small tribe of release managers Stefan is a known missing stair. I was warned about his behavior by other release managers and personally experienced his disregard towards our self-imposed limitations of what is allowed when in the release process. While I never had any issue with Stefan as a person, and I do agree his contributions were stellar, I did take issue with some of his actions and language used as they were simply demoralizing to the rest of us. They made me feel like rules apply to us regular folk but not to World-class Contributors.

Enforcement vs. shaming

The Steering Committee tried hard not to make the temporary suspension of Stefan’s commit rights about shaming him. They made their work harder for themselves by trying to conceal his identity and focusing on the fact that there was some enforcement that took place.

I personally feel better about knowing that we do enforce our CoC rules, otherwise they’re pointless. Again, this enforcement is not about rejecting a person, they are about rejecting inappropriate behavior.

What now?

The amount of discussion here as well as under Carol’s and Raymond’s nomination posts demonstrates that some members of our community would like the CoC enforcement to go away, maybe even the entire concept of CoC to go away. Pardon the banned, tell the offended to toughen up, return to the old ways.

I would personally hate to see that happen.

21 Likes

In a uniformly interesting and thoughtful post (thanks!), that one kicked me in the teeth. It made explicit something I found odd about

but never consciously realized before: in the summary of CoC processes, there isn’t a step that involves facilitating, mediating, arbitrating, or even considering the possibility of, the aggrieved parties working out their disputes among themselves.

The more people wholly accepting of this process post, though, the more I get the impression they don’t see “aggrieved parties”. Instead there’s the community and a specific person suspected of being a threat to its health. You can’t talk with an abstraction (the “community” reification), so mediating, facilitating, arbitrating, …, are right out.

Careful, there! If you think your physical challenges are tough now, wait until you’re accused of suffering the far more debilitating disease of counterrevolutionary individualism :wink:.

3 Likes

I believe this is not an accurate representation. There are participants in this discussion who feel that the current concept has flaws and is not necessarily reaching the goals it was meant for: that of a healthy (developer) community.

Note that “healthy” doesn’t mean there are no conflicts or we avoid yelling at each other. It means that we understand that people can have different opinions or approaches to things and together we find a way to still make things work. The “together” part is what the the current concept is not addressing at all. It’s completely one-sided (see Tim’s post for the procedures).

There’s also no concept for mediating (thanks, Paul !) between parties as the very first step.

Going back to the comparison with modern legal systems, they too have realized that it’s usually better to not even go to court at all, if there’s a way to resolve the issues with the help of a mediator outside court – not only because it saves you costs, but because it very often only takes an unbiased third person to step into the discussion and help guide the discussion back into clear waters.

6 Likes

I don’t see the comments in that way. I think it demonstrates that a lot of people care about the community, and about how we treat each other. I see that as a positive thing. I think it demonstrates that we don’t all agree about how to address the problems of interpersonal conflict, and other social issues that occur in a community like this. I think that’s healthy, and normal. I don’t think anyone has said they don’t want to see offences dealt with - but I fear that it’s probably possible to find evidence otherwise, because it’s very hard to retain all of the context when quoting people in a discussion like this. There’s far too much subtlety and nuance in people’s positions to allow easy summarisation in a “sound bite” form.

Personally, I’m glad that people take the CoC seriously, and immensely grateful that there are people willing to take on the emotionally exhausting and generally thankless task of dealing with giving it meaning (I’m carefully avoiding the word “enforcement” here - it’s far more than that).

However, I feel that the need for, and the processes involved in, the CoC (any CoC) emphasise a certain level of “formality” in our community which, for better or worse, make it harder to see the community as a group of friends, and make it more effort to interact with the community as a result. That’s probably inevitable - Python is far too big now for us to simply act as if we’re all just a bunch of pals doing whatever we want, for fun - but please forgive anyone who regrets the loss of that more easygoing, friendly community. That’s not to say that bad behaviour is any more acceptable in an “easygoing, friendly community” - just that there are less process-heavy ways of dealing with it when (nearly) everyone knows each other.

I got into Python as a hobby, for fun. I still find it immensely enjoyable. But there are plenty of times nowadays when interacting with the community feels far more like hard work than it ever did before. This message is a perfect example of that. It’s exhausting to write, because I don’t want to be misinterpreted or to offend anyone, and I send it in fear that someone will misinterpret what I’m saying, and I’ll need to follow up with clarifications (or in the worst case¹, even apologies). In a conversation between friends, a simple “oops, I that’s not what I meant” is sufficient. In a forum like this, it feels far more like what you say can’t be taken back, or explained or modified, so there’s immense pressure to make sure that everything you write is precisely what you mean to say from the start.

So in my view basically, having a set of community rules on what is acceptable is essential. Making those explicit and precise is necessary, because people have a tendency to interpret vagueness however they want. Having mechanisms for enforcing those rules is sadly important, because some people will violate the rules. But we should never forget that “assume good faith” comes first - we should start from a position that everyone, no matter how unacceptable their behaviour might seem to us, is intending to make a positive contribution. This is hard to do, and over time, “actions speak louder than words” and the benefit of the doubt gets withdrawn, but let’s not get drawn into a situation where we assume people are guilty by default. (I’ll add a disclaimer here, which I’d like to think is not needed, but I want to be explicit - I am not suggesting that anyone in the Python community acts like that, or ever would).

One other thing I feel I should mention here. I have learned an immense amount about other people and other experiences, just from being a member of the Python community. I have learned more about other cultures, other backgrounds, other circumstances, and what people have to deal with, by participating in this community than I would ever have imagined possible. Most of that comes from the fact that when interacting via a computer, everyone looks the same in a very fundamental way. Finding out that someone has very different circumstances than I do often comes as both a surprise, and a significant learning experience. That’s a huge privilege, which I’ll never be able to pay back. But it does leave me with a fear that I could inadvertently offend people, simply because I don’t know their circumstances. The mere existence of a Code of Conduct, and the mechanisms around it, leave me worried that such inadvertent offence could escalate before I could address the issue. That’s necessary, but I find it a sad (and to be honest, stressful) necessity.

I hope I’ve put my position across the way I hoped to. I feel like I’ll just have to hope, as I may never really know. But I’m going to try and ignore this discussion from now on, as I find it fairly exhausting just reading the discussions, let alone participating.

To misquote someone wiser than me, I apologise that this post is so long. I don’t have the skill (or time) to make it shorter.

¹ “Worst case” because it means I didn’t explain my position properly. Not because I don’t want to apologise :slightly_smiling_face:

9 Likes

I don’t know how one would go about adding a step to the current Python community CoC process, but I would definitely advocate for attempted meditation between the aggrieved parties as being an important first step to take before any real consequences are considered (especially for when the behavior doesn’t have a clear pattern across several cases and/or isn’t particularly egregious).

I think there’s a lot of value to be gained from simply having a voice/video conference [1] with a 3rd party moderator to talk about the situation, and could allow for both sides to better understand each other’s situation. There’s very frequently subtlety and tone lost in text-only exchanges that leads to misunderstandings.


[1] - Assuming that it’s a case where the reporting side doesn’t feel a need to remain anonymous. In that situation, a voice/video chat between the person being reported and someone from the CoC WG or SC could provide a similar purpose.

6 Likes

Since mediation has been mentioned by @tim.one and @aeros, probably others too, I want to share a portion of Jupyter’s Code of Conduct enforcement guide where mediation and other actions are mentioned: https://github.com/jupyter/governance/blob/master/conduct/enforcement.md#enforcement-guidelines-and-principles

For context, the Jupyter Code of Conduct was vigorously debated when it came to how and what the CoC should be. We had many voices of input globally. It’s not perfect but it did come from months of constructive debate and refinement.

7 Likes

Huge +1 from me to include something like the above in the Python community CoC enforcement procedures (or at least to propose adding it to the CoC workgroup):

Mediation: voluntary, informal mediation is a tool at our disposal. In contexts such as when two or more parties have all escalated to the point of inappropriate behavior (something sadly common in human conflict), it may be useful to facilitate a mediation process. This is only an example: the Committee can consider mediation in any case, mindful that the process is meant to be strictly voluntary and no party can be pressured to participate. If the Committee suggests mediation, it should:

Find a candidate who can serve as a mediator.
Obtain the agreement of the reporter(s). The reporter(s) have complete freedom to decline the mediation idea, or to propose an alternate mediator.
Obtain the agreement of the reported person(s).
Settle on the mediator: while parties can propose a different mediator than the suggested candidate, only if common agreement is reached on all terms can the process move forward.
Establish a timeline for mediation to complete, ideally within two weeks.

I think just having a mediation section present has a significant positive influence on the public perception of the CoC enforcement process; bringing additional attention to the goal of bridging relations between aggrieved parties and improving the community rather than dishing out consequences. Also, if both sides have the option to decline it (as is the case in the Jupyter CoC enforcement guide), I don’t see any situation where having meditation as an option would be detrimental. To me, it seems like it could only help.

11 Likes