I also blog frequently on the Yesod Web Framework blog, as well as the FP Complete blog.
See a typo? Have a suggestion? Edit this page on Github
Technical disagreement is not only an inevitable part of software development and community building. It is a necessary and healthy component thereof. Respectful conversations around technical trade-offs are vital to improving software. And these conversations need to be handled with proper care.
I have failed at this in the past, and I’ve apologized for having done so. I’ve strived to do better since. I have encouraged—and continue to encourage—my friends, colleagues, and fellow developers to do the same, and I believe it has been successful.
I think the other extreme—avoiding all discussions of disagreements—is actively harmful. And unfortunately, I see significant confusion in the general Haskell community around what is and is not an acceptable form of technical disagreement.
Outside of my position on the Core Libraries Committee, I do not hold any official position in the leadership of Haskell. I’ve written open source libraries and educational material. I’ve worked on and maintained build tooling. I run a team of Haskell engineers at FP Complete. None of those positions grant me any authority to demand compliance from individuals with any code of conduct.
That said, at many points in the past, I have reached out to individuals whom I’ve been told (or saw myself) were behaving in a non-ideal way. I’ve attempted to remedy those situations privately wherever possible, and have on rare occasions asked people to discontinue such behavior publicly.
I’ve tried to keep this process informal because, as mentioned, I’m not any official authority. The exception to this would be my leadership at FP Complete, but I have a strong policy of avoiding the usage of my position to force those reporting to me to behave a certain way. I do not believe it is appropriate for me to leverage what essentially comes to someone’s livelihood to demand their compliance with my wishes.
There’s been a slow burn of public discussion over the years that has made me consider making a more formal process. But recently, I had a “straw that broke the camel’s back” moment. Someone I like and respect expressed opinions that I think are antithetical to healthy community growth. I won’t call anyone out or refer to those discussions, I’m just explaining why I’m doing this now.
I will not in any way claim to have an authority position for the Haskell community. As a result, I’m not going to make any statement for the Haskell community. As the founder of the Stack project, I think I have more of a right (and responsibility) to speak for that project. So I’m going to refer here to the Haskell Stack community. I’m hesitant to do so given that it may be seen as divisive, but I believe the alternative—trying to speaking for the entire Haskell community—is inappropriate. My intent is not to be divisive.
I also have no ability to enforce any kind of behavior on Stack users or contributors. Stack is open source: no matter what statements I make, anyone can use it. I could ask the rest of the maintainer team to block pull requests from specific people, but I believe that’s also overstepping my authority, and so I won’t be doing it.
Instead, I intend to publish two documents, following interaction with people interested in engaging with me on this process. Those two documents will be:
I am not demanding anything of anyone here. I’m not expecting anyone in other communities (whether within Haskell or outside of it) to participate or change their behavior. And as stated, I’m not willing or able to demand changes from within the Stack community.
What I am hoping is that by clarifying these points:
I’ve created a Github repo. This repo is on my personal Github account, not commercialhaskell, fpco, or haskell. Again, this is my own personal set of content. I encourage others to participate if they feel invested in the topic. I’m considering having a sign-up sheet for the repo after we have a first version, so that people can state that:
We’ll get into far more details in that repo itself, but since I anticipate this blog post itself kicking off some discussion, I’m going to make some requests right now:
This is my first time trying to have a discussion quite like this, and I’m guessing the first time many people involved will be participating in one. As one final note, I’d like to request people make an assumption of good will. Mistakes will be made, but we can try to minimize those mistakes, and move on from them when they occur.