Bring Kindness back to Open Source
When you're rude/crisp/sharp/whatever to someone in a PR or Issue, your meanness may have turned off the next generation of open source committer. It's that simple. When folks are just starting out as Code Newbies their initial interactions in this new world matter.
I've been doing this for over 20 years. There's knowledge and (hopefully) wisdom that I've gained in all that time, assuming it's not the same year of experience twenty times. Along with all that time that I (and you!) put in comes great responsibility. We need to think as a community about stewardship, sustainability, and successor management.
There are folks in open source - successful folks - that think that all this talk of "niceness" is overrated. "Talk is cheap, show me the code" is a fun thing to say. But no, talk isn't cheap. It's not cheap, yes, it takes time and patience, but it IS important.
As we try to move towards more representative teams and expand the leadership beyond the old network, this somehow controversial idea of being welcoming and patient to new people is even more important.
There are many folks out there with skills and knowledge that are not joining open source because their initial attempts to contributed were rebuffed.
Jesse Pollak posted two great tweets last week that really point out what's wrong with open source, especially for new people just starting out.
What’s wrong with open source software communities in one DM. Let’s change this. pic.twitter.com/ydCkWae3sl
— Jesse Pollak (@jessepollak) July 18, 2015
Jesse pledged a "no meanness" rule. I join him in this pledge and encourage you to also.
New rule: no meanness on OSS libraries I help maintain. Even people asking not-so-informed Qs should be met with kindness and gratitude.
— Jesse Pollak (@jessepollak) July 1, 2015
I've thought similar things before.
Be kind to amateurs, there are more of them than professionals and they're looking to all of you to see how to act.
— Scott Hanselman (@shanselman) April 14, 2015
Sound like too much work? There are ways to built a welcoming culture into the process. Here's some ideas. I'm interested in yours also.
- Make a contributing.md.
- Gently point folks to it.
- If you get a lot of newbies, write a kind form letter and funnel them towards forums or mentors.
- Create a Getting started friendly FAQ.
- Tag issues with "up-for-grabs" in your repositories.
- Classify by difficulty. Easy, Medium, Hard, Insane.
- Point new people towards samples, easier parts of the code, docs, tutorials, etc. Grow your enthusiasts.
- Join http://up-for-grabs.net
- Consider applying the Contributor Covenant or a similar CoC to your project. Enforce it.
- Make an issue and "only accept a PR from someone who has never contributed to open source" just like Kent C Dodds did for his project!
Have you helped with an open source project? Did you had a bad initial experience? Did it slow you down?
Perhaps you had a great one and your first pull request was awesome? I'd like to hear your story.
Sound off in the comments!
Sponsor: Big thanks to Infragistics for sponsoring the feed this week. Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls. Get super-charged performance with the world’s fastest HTML5 Grid - Download for free now!
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
I don't do either anymore it's to much stress, how will the project maintainer react, how do I not upset somebody, how not to come over arrogant and condescending. Do I really need it? Can't I just create my fork and maintain it.
Yes sure you learn, but maintaining a popular OSS project all by yourself on your spare time can lead to burnout really quickly. Having to explain time and time again why you used winforms and not WPF and ...
But you also learn from the experience, just do it once or a few times and learn. If it ain't for you than that's fine, if you can cope with the added stress, I salute you, all of us are different.
Oops, sorry for the long comment.
There are others in the community however that just sap the energy from everyone else - Poisonous people. The thing about poisonous people is that they don't realise it, they're usually well intentioned.
You need to identify these people as soon as possible. Sometimes harshness is justified as part of the disinfection process.
'Patches welcome!' is the most common phrase in OSS for a reason.
I wholeheartedly agree with this post. Be nice to people giving their time, skills, and energy to something for free. If they have gone down the wrong path, say so and give guidance, but don't try to shove people in a given direction - point them - and never belittle their contribution even if it is unusable.
To make things clear: I really try to be friendly, I try to point people to where they can find their questions answered, I try to assume that if someone asks a question to which there is an answer that from my point of view is obvious, it might not be obvious enough and I try to find the time to change that.
BUT... I can also tell you that a large part of requests I get hint at unbelievable laziness on the part of the person asking. I have a CONTRIBUTING.md file that is automatically added by my bugtracker (on Github) on top of every "new issue" form. I have a full fledged bug reporting template with detailed points where to find the information I'm asking from people - not because I want to bully them but because I can't help if I don't have the information necessary to be able to help. I have an FAQ I keep adjusting with the actual frequently asked questions and their answers, and it's linked from CONTRIBUTING.md, the bug reporting information, the wiki, the webpage, and basically everything else. I even wrote a bot that processes new issues and posts a comment directed at the OP if the ticket doesn't match the template, linking to all of the above.
And people just don't bother to read any of that, or if they do, just ignore it. In fact, I recently had a user who literally told me "too much effort" when I asked him to provide the information I needed to help him solve his problem. I have people who get a ticket commented on by the bot, then instead of adjusting it with the info I need to help them just either never react again or become nasty about being asked that kind of info. The bot used to only comment and tell the users to please provide the info within 14 days, or the ticket would be closed. No reactions. Not even when I personally pinged them again too. I then changed the bot to directly close the ticket and ask for a re-open after the info has been provided. I STILL don't get any reaction from a lot of people.
Have that happen a couple of times per day on certain occasions (e.g. just after christmas, after everyone got their shiny new 3d printers) and you can't help but start to feel like a broken record if you still try to help the newbies and be friendly and point them to the docs etc etc. And that can really make you angry, especially when you'd rather spend your time helping people who DID provide the necessary information or fixing bugs or *gasp* adding functionality ;)
Same goes btw for pull requests - I state in my CONTRIBUTING.md to a) always create those against the development branch and b) if they are larger, to please consult with me first to avoid frustration if the changes don't fit the general architecture/vision for the product or if they wouldn't better be fit for a plugin (and the real changes to the core code should be adjustments to allow for that plugin to work). Not many people follow that either.
tldr: Yes, a lot of open source communities are a quite hostile environment for newbies. I hate that and I really try to do my best to provide a friendly environment. But it's not all the fault of the maintainers either. We have a culture of entitlement among the users of open source software that can drive you absolute insane as a maintainer. Maintainers are only human too - if someone lashes out at you, it might be because you are the tenth user today asking the same question which you'd noticed if you'd gone through the provided docs/tickets/support venues first. My guess is, if more people using open source "did their part" a bit more thoroughly, more maintainers would become more friendly too.
Sorry for the wall of text, still not over though, because I also want to say: Thanks for the heads-up regarding "up-for-grabs". I might adopt that, that's a great approach to get people "eased into" giving back.
It's particularly difficult when you find chunks of projects which are really shaky, with a bunch of bad stuff which you know will lead to later problems, but the maintainer dismisses the best-practise guidelines as 'stupid', or just throws another random Sleep or exception handler in to paper-over the problems.
At that point, I tend to just fork the code, sort out my own branch without worrying about other peoples' regressions, and forget about the original stress.
I am under no illusion at all that it's also pretty much impossible from the other side too - after public request I threw a bit of very rough junk up on GitHub for someone to have a look at - next thing I knew someone else had modified it, made it into a Nuget library, and published it on Nuget.org with my name still on it. Difficult to get rid of that, too.
Closed-source, paid all the way. That's the future...
Quite a while back I opened an issue on popular project. I immediately replied saying that I would fix it, but would like the maintainer to validate the approach I planned to take. It was going to be a few nights worth of work. "Looks good, make the changes and open a PR." So I made the changes and opened a PR. "I don't think this is the right approach." Another maintainer was bought into the discussion and the two of them proceeded to discuss how they wanted to solve it. After a few days and dozens of comments it occurred to me that they never even read the code. It was blindingly obvious that the maintainer hadn't even read the one paragraph explaining how I intended to make the fix in the first place. PR closed, fork deleted.
Contrasted with this type of response. jdan is an excellent example of how to appreciate contributions. No reasonable person couldn't have all the time in the world for a maintainer with an attitude like that.
Issues and PRs are a gift. It seems as though people forget that.
There are others in the community however that just sap the energy from everyone else - Poisonous people.
Awesome talk David, thanks for the link! Haven't fully watched it yet but the first 10min I squeezed in over my lunch break were promising.
Issues and PRs are a gift. It seems as though people forget that.
Jonathan, let me extend on that: "Issues, PRs and the Open Source Projects they are filed for are a gift. It seems as though people forget that." It's not like the typical maintainers of such projects just spend their whole time slapping themselves on their shoulders, twiddling their thumbs and waiting for contributors to move the project forward ;)
But yes, good issues and PRs are a gift. And what you describe sounds like it was a very good PR and something I love to see in my project(s), especially since you tried to get in touch about it first. Bad issues and PRs (e.g. "It doesn't work, please fix!!1!", 3k lines of code without comments, tests or even a description what they are supposed to do, or just a discussion worthy PR at a time people are swamped with other work) are or at least can be a curse that sucks a lot of energy out of maintainers. And even a good PR can be a problem if it happens to not fix something but add a feature the maintainer then has to, well, maintain too but might not even have the means to - there's a lot of "drive-by" PRs out there that can make a code base complicated.
That's all I'm asking people to keep in mind too please. I agree that there's a problem with the tone (and also the egos) in Open Source, I too have been known to bang my head against flat surfaces due to that from time to time when wanting to contribute ;)
I wrote a comment (which scored me a mug) about an old professor who argued that a body of literature was a defining characteristic of maturity in a professional discipline. I then suggested that OSS, GitHib, et al., could be that body of literature indicating professional maturity of software programming.
Based on this post, maybe we're still in junior high.
I must to agree with @foosel there is a mix of two worlds. I have been the mantainer of FileHelpers for more than 10 years
I´ve met a lot of cool people that makes the library shine and help with docs, ports, new features. I now consider friend of lot of them.
But.. somethings there are people filling bugs just because they can use the library because don't know how to iterate over an Array, or convert an Array to a List<>.
At first I tried to help, but after some time of doing that, you realize ta you are helping to solve trivial problems, using a ton of energy for a task that don't adds nothing to the library and is frustrating
There are also many people that said mails like this:
"I have this csv file, what code I need to read the file and import it to Sql Server table"
The best solution I found is to point them to StackOverflow, add the FileHelpers tag and they got their responses and the contributors to the library can help newbies to understand how the library works.
Just added FileHelpers to up for grabs !! Thanks
Yeah, that's nice. I feel better about myself now.
What I learned along the way is that cultivating a community of users and contributors takes a lot of fertilizer and just a tiny amount of pesticide. Fertilizer in the form of encouragement and praise. Being accepting of contributions - even those that are far from perfect. And in general making the community a place that people are attracted to.
Beyond learning through experience, which can often be an expensive way to learn, I learned to improve my community management skills was by talking to and observing how other successful OSS communities are run. I love the attitude that Nik and Anthony have in building the Glimpse community. They go out of their way to encourage contributions and ensure that every contribution is recognized and celebrated.
OTOH, Microsoft's forums.asp.net is very friendly.
Discussions at Linkedin also work for me; i've only encountered one nasty person there.
Scott, until this article of yours, i was not aware that nasty people are to be found in the OSS community ... my expectations of the OSS community is that sharing people would also be caring people.
BOTTOM LINE: Life is too short to be nasty on purpose.
I'm sure that some people who contribute to open source expect to have their butts kissed by the owner/maintainer of the project. If the maintainer dares ask for unit tests or for the contributor to follow the project's established coding style the contributor's attitude is that they are being harangued, bashed, criticized, etc.
On the other side, perhaps maintainers are being overly critical. I recently made a small contribution to an open source project. The owner took my contribution and completely re-wrote it. I barely recognized the code when he asked me to take a look at it and let him know whether it still met my needs. Yeah, it's a bit of an ego thing, but if my contribution is going to be tossed and rewritten I might as well just put in a change request or grab the source and create my own version of the package.
So, as with most things, both sides need to be a little more reasonable instead of treating it as adversarial relationship. Contributors need to be willing to follow coding, architectural, and testing requirements of the project, and maintainers need to be willing to accept that not everyone is going to write the code exactly the way they would have but if it works and follows the aforementioned requirements/principles they accept it and say "thank you."
Now, I know a lot of Java guys, have deep respect for them and even work with some of them on mixed teams... but I still have a bad taste in my mouth for Java. Bad interactions can leave a lasting impression, even beyond the point where it is rational.
The challenge we face in the tech community is marrying technical skills with people skills. We need to be better at this task.
Part of me thinks the root cause of some of this is arrogance. Maybe it is my own arrogance, but even though I am a senior level architect now, I still don't contribute to OSS partly because I don't feel like having some guy I don't know yell at me.
Frustration happens, especially when you're faced with a high turnover rate and an almost constant flow of junior devs. But I've found that kindness and a willingness to help them out is far more satisfying, and eventually helps reduce my work load once they're vetted.
Great post!
Its funny but IT and Coders have typically had a bad reputation just like the picture of "Nick Burns." People almost expect to be met with jerks in the IT world and are surprised when we can actually be helpful and kind.
I appreciate you bringing this up, even though its a pretty specific example, I think its something as a whole field does need to be addressed.
Josh was so patient, walking me through getting the project and getting it to build, answering my questions on the etiquette of pull requests, and even sitting with me to unsnarl and cherry pick the commits I'd made on the wrong branch, not realizing that a pull request applied to a whole branch instead of a snapshot in time. There's no way I saved him time over doing it himself. He never made me feel like an imposition nor an idiot. I learned a ton.
When I finally had a merged contribution under my belt, I was so proud! It makes me continue to be a fan of that library, HtmlTags, and we still use it on new projects at work. It bolstered my confidence as a developer considerably, and I'm very grateful.
Like most things that involve people, we need to be vigilant against stranger-danger.
Those aren't even trolls. Trolls are people intentionally trying to get a reaction. Most of those people are simply oblivious.
They're seemingly, if you look at the issue tracking of any widely-used OSS project, the majority, as well. And growing each day.
----------
Re: The blog post:
http://weblogs.asp.net/alex_papadimoulis/408925 is still one of the best articles on the subject of "kindness in the community."
All too often, the only thing people will accept as "kindness" is doing their work for them. Adding FAQs and .MDs is fruitless if no one actually bothers reading them, and do you really want people who can't even be bothered to read the project documentation on the front page contributing code?
Someone mentioned Linus here. If anyone goes back and actually reads his comments on the infamous PR, he starts out being pretty nice, but doesn't stay that way when someone argues with him about the standards He set for His project. When you have to coordinate hundreds or thousands of contributors, you can't waste 5 minutes with every single one of them explaining the basics.
But I always thought this was the "Geek Filtering Factor" where these people filter incoming words, not outgoing words. Their words are curt and obnoxious, but rarely malicious. Sadly, this is fostered in some colleges and communities.
The best teachers/mentors/leaders will assist you, set an example, then challenge you to do the work. As an mature adult you should be able to research and explore with guidance. You should also know well enough to not assume a person or community is your servant or minion.
Two key points come to light in the latest discussions: Technical ability and external actions.
If I'm a leader of a community project that develops software for UHF radio propagation and you join and do not have any technical background and will not educate yourself in the subject or supporting materials, it's not my job to educate you in possibly years of acquired skill and knowledge. You might be a distraction. Some times the cost to join a community should be greater than just having computer access and a GitHub account.
If I participate in a project that develops software for DIY crock-pot and sous vide control and I'm also a game hunter, does a vegan or PETA member have a right to challenge my participation in the project, just because it disagrees with their values. (Or vice versa...) Especially if we don't thrust those views on each other outside of the realm of recipes.
As a past OSS user group leader there is a balance between dealing with trolls and beginners. There are awesome contributors and those that need a manners class. And hopefully the effort is rewarding to all that join and work together in good faith.
I've made both experiences. No surprise with so many people and projects out there.
By far the best experience I'm having with the ToDoList community (http://www.codeproject.com/Articles/5371/ToDoList-An-effective-and-flexible-way-to-keep-on). :)
Less fortunate I have been with some people (high up the food chain) on the mailing list for Jitsi. No doubt, an outstanding project, but the quite arrogant, cocky, know-it-all-better behavior of only one person (as I said, high up the food chain) made me step back. :(
People submitted patches that would not compile, and we should have ignored them earlier.
A lot of the problems I find is that people don't make sure their commit is clean, i.e People put up whatever happens to be in their workspace and I see this done by "Senior" developers inhouse. I can only imagine the nightmare for any project maintainer when you get patches from people that aren't professionals.
Everyone does tutorials about how to start of with <insert tech here> but nobody does tutorials about how to do revision control properly. They are few and far between, because the subject isn't sexy.
https://github.com/Froxlor/Froxlor/pull/28
The end experience was very encouraging to always make concise commits in any VCS.
I notice in the everyday that few people care about commits. Not everyone cares to keep separate changes separate or not commit things that could be generated on demand (in compile time or by a script).
Committing binary files on source repositories and always letting 'merge from upstream' on pull are also common practices I always avoid. First by not committing binary files or using different repo for that, second by (ab)using the rebase function of git.
The other project was run by a very arrogant and mean person who chewed me out for using technology in "his" program that would cause the exe to be a little bigger but solve a significant problem. A month after he removed my contribution, he reintroduced it as his change, completely leaving me out of it. I haven't contributed anything to OSS since.
Attitude matters and how we treat other people will significantly impact the success of future OSS projects. People will be attracted to the friendly projects and avoid the unfriendly projects.
My experiences since then have never been negative, but none very positive either. I haven't found rudeness but certainly terseness. A lot of repos don't describe the process they want for a PR so I don't know if I should log an issue then go ahead and submit the PR myself, or hold off and wait for the maintainer to advise.
Thank you to report and talk about it. Thank you for sharing your comments and thoughts.
Thanks for a great article that has opened my eyes to the challenges of open source. In the end I think its worth it but somehow we developers have to learn to be nicer to each other it seems.
If I get a terrible response it won't put me off contributing in the future. If there is a nugget of truth to what the developer says I'll take it on board and be humbled by it. I think what's worse for new developers is being told "No." or having their work completely disregarded without constructive criticism.
I recently started a new job in a development house and I'm constantly having my ideas rejected. The good part about it is they will tell me why it won't work / it's a bad a idea. I'm growing and becoming a more conscientious dev because of it.
http://wptavern.com/why-you-shouldnt-be-worried-about-screwing-up-when-contributing-to-wordpress
Cheers
3日間限定 100%新品セールス中 http://www.fnps-society.org/?list218=24373
一部予約販売 中古品に限り返品可能 http://bickhamgrange.com.au/?list173=24860
超人気新品 一部予約販売 http://jakubfurst.com/?list218=24114
店内全品ポイント10倍 安い卸売,即日発送 http://www.arrangementgiethoorn.nl/?list209=24776
Comments are closed.
BUT: there where many nice people, I learned a lot of good things. Hope the unfriendly ones and the trolls don't take over too much.