Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Scala Community Email Regarding John De Goes

We're aware that a private gist of a final draft posted by a committee member was publicly circulated. This was a private message to select members of the Scala community. We chose to keep our public statement brief out of courtesy to John. The text was authored by the Typelevel Steering Comittee which consists of Christopher Davenport, Alexandru Nedelcu, Ross A Baker, Daniel Spiewak, Miles Sabin, Lars Hupel, Rob Norris, Michael Pilquist, Kai Wang, and Luka Jacobowitz over the last 11 weeks.

For transparency the full text is included below:

Regarding John De Goes

We are contacting you privately to give you advance notice of disciplinary action we will be taking against John De Goes tomorrow.

Effective tomorrow morning, John De Goes will be indefinitely barred from participating in Typelevel projects, with the most relevant impact being on Cats Effect. This writing is an attempt to lay out the facts of the situation, with as much historical context as is relevant, and with maximal openness and transparency. We also want to make it clear that we're here to answer whatever questions you may have, in whatever forum is relevant. We don't want there to be an confusion or uncertainty about what and why.

A Thousand Cuts

To be clear, this is not about Code of Conduct violation. This is a response to a long and unbroken pattern of behavior. This is an action of community moderation, taken after almost a year of discussion and review and internal consideration.

For years now, John has participated in the Cats Effect project. Cats Effect is quite significant in the ecosystem because it defines the tools, operations, and laws which are necessary to interact with the vast majority of the practical Scala FP ecosystem. Middleware frameworks like Http4s, Monix, Doobie, FS2, and many many more are all built on Cats Effect. End users who wish to perform common tasks such as build HTTP services or connect to JDBC-enabled databases with a purely functional style in Scala all take advantage of Cats Effect, indirectly, via these sorts of frameworks. On the other side of things, datatype frameworks such as ZIO and Monix, both of which provide implementations of the Cats Effect classes, can provide their libraries secure in the knowledge that end users can choose their concrete type over some other and it will still work with the oblivious middleware (e.g. http4s, which knows nothing about Monix or similar).

John certainly has a vested interest, both pedagogical and political, in Cats Effect as he is the creator and primary maintainer of ZIO. Without Cats Effect, ZIO cannot expect to achieve compatibility with a vast swathe of the Scala functional ecosystem, while at the same time Cats Effect's own technicalities dictate the terms by which projects like ZIO may interoperate. Thus, John has often participated in technical discussions on the Cats Effect project, frequently and vigorously advocating for his viewpoints and opinions on what should be done and how it should be done. John is also active in the cats-effect Gitter channel, often answering questions with a snippet of code explanation in terms of the ZIO framework.

It is noteworthy that John has never contributed any code to Cats Effect, though he has expressed an interest in doing so in Cats Effect 3.0, provided his design conditions are adopted.

This leads us to the heart of the problem: John's behavior on Cats Effect pull requests and issues has been extremely combative. As one contributor puts it, "He argues until you want to die." John puts forward his opinions in a very strident, "faux objective" style, which is intended (consciously or otherwise) to make the reader believe that anyone who disagrees with him may as well be disagreeing with the laws of the universe itself. Some of this is simply John's style, and can be accepted as such, but when taken to such a consistent extreme, despite repeated warnings and sincere third-party attempts at mediation, it crosses the line into unacceptability.

As an imperfect example (remember, this has been going on for a very long time over a large number of different issues and PRs), consider cats-effect#556. Other issues and PRs in which John is involved invariably take on this tone; the same cannot be said for any of the other participants in this pull request. Another example would be cats-effect#230, where John's technical points are mostly grounded in a very justifiable and accurate position, but his presentation and exaggeration overshadow the discussion and poison any good will. Perhaps an even better example of the latter phenomenon is cats-effect#93. These are only three examples out of the many hundreds of interactions on the Cats Effect project, all of which have invariably taken on the same tone.

Most critically, this has discouraged contributors, damaged the community, led to significant burn-out among multiple maintainers, and stalled nearly all forward design progress on a vital project. In any community, when the actions of one person, well- or ill-intentioned, result in multiple other people being driven off, it is a serious problem that merits action. These are also only the problems that we know of. It is impossible to ever determine how many newcomers to the project were discouraged from ever attempting their first contribution, simply due to the threat of John's attacks on their issues or pull requests. John's own contributions are not more valuable than the combined contributions of all those he has driven off.

It is worth acknowledging that many people have not felt this kind of animus from John within many of his other projects and communities. This is great! We fully support welcoming communities that foster the education and application of functional principles, in Scala and otherwise. This is, simply put, the reason Typelevel exists. John's behavior within the umbrella of Cats Effect, though, has not been welcoming or supportive, and it has led us to today.

Warnings, Mediation, and Perspective

These are not new problems. Several people in Typelevel leadership roles have known John, personally and professionally, for over a decade. This is simply how John behaves in almost every context, and it isn't something we expect to change. Despite this, several attempts have been made to reach out to John to attempt to work with him and help him see how his behavior is outside acceptable bounds and how it can be moderated. We are aware of three specific instances of private correspondence over the past two years, from three different sources (within and without Typelevel), all attempting to explain these problems to John and sincerely reaching out to help him moderate and evolve his behavior. In each instance, John's reaction has been humble and welcoming of the criticism (to his credit!), but no meaningful change has been observed. In the end, actions speak louder than words, and John's actions have been consistent and uniform as long as he has been a member of the Scala community.

Of course, by simple virtue of knowing someone for such a long span of time, a great deal of objectivity and perspective is lost in judging their actions, positively or negatively. In an attempt to adjust for this bias, several third-parties (non-programmers, entirely outside the Scala and even broader tech ecosystems) were consulted. In each case, information was presented as clearly and comprehensively as possible, attempting wherever possible to admit possible bias in the presentation and clarify perspective. Each such individual came back with the same conclusion: John should be banned. In some cases, the judgments were even harsher; "he's a troll", was a common refrain, as was "he's just thriving on the attention". The fact that third parties, having no prior knowledge of the history or individuals involved, came to this kind of unambiguous and blunt conclusion, is very telling. At the least, it speaks to how newcomers to Cats Effect are likely to view John, and how they are likely to view the previously-tolerant actions of its maintainers.

Final Actions

At this point, it is our view that John is simply not going to change, further mediation and warning will have no meaningful effect, and John's continued presence is causing significantly more harm than good. His technical insights are valued (when distilled out of his extensive arguments), but they aren't worth the price paid in stress, burnout, and contributors.

To that end, an email will be sent to John informing him of the ban, the reasoning behind it, and the avenues now available to him. In the interests of transparency, the contents of that email are reproduced as follows:

As of today, you have been indefinitely barred from participation in Typelevel projects, meaning that the Github account jdegoes has been banned from Typelevel organizations on Github and on Gitter. A description of our reasoning has been publicly posted.

To summarize what led to this, you have exhibited a consistent and long-standing pattern of aggressive and combative communication. Your contributions to Typelevel projects have never been in the form of productive work or implementation, but rather taken the form of often-negative and belligerent arguments and obstructionism. While insight and valuable perspective can almost always be distilled out of your volumes of text, the immense stress and effort are simply not merited.

To make matters worse, these constant wars have discouraged maintainers, resulting in very real burnout, and prevented countless other contributors from stepping forward for fear of reprisal at your hands. This is a completely unacceptable situation for any community.

You have been officially confronted on this subject on no fewer than three occasions by separate people. Your responses have been understanding and contrite, but your actions speak louder. Your actions are unchanged. The primary reason we have withheld this action, to date, is we wanted to give you the opportunity to change and improve. That opportunity is now at an end, at least in so far as we are concerned.

Sincerely, The Typelevel Steering Committee

Additionally, the following post will be made publicly available, outlining the points we feel are most critically relevant:

Effective today, John De Goes has been indefinitely barred from participation in Typelevel projects. This most directly impacts Cats Effect, but applies to our other repositories as well. The cause is John's combative style of interaction in Typelevel channels. His interactions when in agreement are always cordial, but when he disagrees with something or someone, the results are inevitably drawn out, intensely aggressive, and stressful. We have tried for the past three years, via one-on-one discussions and multiple warnings, to arrive at a style of respectful collaboration that we can all live with. These attempts have consistently failed, despite considerable time-consuming effort.

Our overriding goal is the well-being of our contributors. Too much of their energy and enthusiasm is being drained away by these conflicts, and we're concerned about the potential chilling effect on new contributors as well. While we appreciate John's technical insight and expertise and the time he devotes to sharing those things, neither outweigh the well-being of our contributors and community.

We are very much aware that, particularly with actions such as this, a lot of questions and concerns naturally arise. We want to be as open and as transparent as we can be, and we invite anyone who has concerns to engage with us in the Typelevel Admin channel on Gitter. If you prefer private correspondence for any reason, please feel free to directly contact the Typelevel leadership directly at

As always, we're here to answer any questions or concerns you may have. Please feel free to reply-all to this email (it will only hit the CC'd recipients, which are the committee members), or contact any committee member privately by any medium with which you are comfortable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.