How I stay happy making open source software
Over the past month I have become aware of multiple people either stepping away from open source or trying to figure out how not to burn out from it [1, 2, 3,4]. After telling Thomas Caswell -- one of the project leads on matplotlib -- how I cope with open source contributions and him subsequently saying he liked what I said, I figured I would share how I manage to stay positive enough to want to continue to contribute to open source, along with what anyone can do to help show appreciation for other people's work.
Why people burn out
But first I want to explain why people burn out in open source. When you participate in the management of a project that has users beyond the contributors themselves, it becomes very easy to really care about your users. There is an amazing sense of accomplishment when you find out other people out there actually use your work because they find it useful. And then when people start to care enough about your project to actually contribute back, that's even more satisfying.
But this caring means that negativity easily gets magnified. So when someone comes to your project and begins to be negative, it hits you hard. Now negativity can easily range from very minor and subtle like "why the heck did you design it this way?" to "only a moron would do this". It honestly doesn't take much for something to come off as negative, especially when you have chosen to put yourself out there by making your work publicly accessible through open source and most communication is by text where cultural subtleties are easily lost or not understood.
And this negativity becomes an even larger damper on your open source life as time passes. When you start a new project, the fun of creating something new is often enough to keep you going. And if you start contributing to a new project then the excitement of giving back to a project and having an impact can help you get that rush of contribution. But when your project becomes more mature and/or you have been contributing for a while, your contributions often stop being about new code or the exhilaration of getting that initial patch or three in and instead it becomes about maintenance. You end up fixing bugs, answering questions, etc.; the stuff that isn't necessarily glamourous and probably not the part of programming you find fun (put another way: think about what you do at work that you find dull, then think about doing that for "fun" in your spare time at home and you begin to grasp what it can be like maintaining an open source project). That means that the feeling of accomplishment has mostly gone for people who drive the maintenance of a project.Given enough time, the personal positives you once derived from contributing can quite easily get outweighed by external negatives.
How I cope
I was very lucky with how I got involved with Python as a project. When Alex Martelli included one of my recipes to the first edition of the Python Cookbook, I was just about to start a year off from school between my bachelors and planned masters degree (I had not gotten into a masters program yet). So I decided to make getting involved with Python my "job" during that year off and used my recipe as my way to try and give back to Python (which did eventually become time.strptime()
for Python). This was back in 2002 when Python was nowhere near as popular but on an upward trajectory, so you could say I somewhat got in on the ground floor (although Guido first released Python as open source in 1991 so when I started to get involved the project was already over a decade old).
Fast forward to today and I have been contributing to Python at some level for over 13 years. I have had the exhilaration of getting my names in the ACKS file. I have made tons of contributions of new code over the years. I would like to think I have reached the point of a respected member of the Python development team.
What all of this means is that I don't get a huge thrill when I help out the project like I once did. Fixing a bug for someone is not a new experience for me, so I don't get the feeling of accomplishment like I once did. Participating in discussions in Python's design doesn't give me a sense of exhilaration as it once did as I have been around long enough to have either created or influenced multiple parts of the language (I am a (co-)author of 16 PEPs at this point).
In other words, negativity can easily hit me hard. It doesn't take much to feel disillusioned with open source for me when someone is being negative. While it helps that Microsoft lets me spend some of my time on open source as part of my paying job, having to mentally remind myself that I'm getting paid instead of contributing because I want to only gets me so far. And this obviously doesn't extend to when I contribute outside of work hours because I simply want to. In other words, I definitely fall into the category of a long-time open source contributor who can get hit hard by negativity as the personal positives aren't quite as potent as they once were.
So I've tried to develop coping mechanisms to deal with the negativity I encounter. During my PyCon 2015 opening remarks I said that "I came for the language, but I stay for the community", and that's still true. The way that I try and harness that is by taking time at any Python conference I attend to just contemplate the fact that I'm involved in a project that brought together all of these people and that the vast majority of people there enjoy using something I helped create. That helps me because the numbers alone of the amount of people at a Python conference typically heavily outweigh the number of negative people I encounter online.
Now I don't necessarily get to attend a Python conference every time I may be feeling down about open source and I start to question why I continue to give my time and emotional energy to strangers who seemingly don't appreciate that I'm giving up time to work on my own projects, play games, or spend time with my wife in order to help them out. So to act as a stand-in for a conference I bought a collectible coin from the Canadian Mint that has a Python on it. When I encounter some negativity online I try to remember to go and get the coin and look at it as a representation of the entire Python community in the world and how a huge proportion of them are quite happy with Python and how amazing the Python community is.
How you can help
But not everyone gets to work on a project that has a conference(s) where you can go and simply stand in a room and feel some form of accomplishment and to put the negativity in proportion to the amount of positivity. And in all honesty, while trying to keep things in perspective helps, it does require that you are in the proper headspace at the time to step away and think things through and I'm just not always self-aware enough to do that.
What this all means is that external positivity helps greatly. Probably the biggest thing you can do to help people not burn out from open source is to stand up against people who are being negative towards an open source project/developer. It's exhausting trying to deal with negative people. But if other people step in and help to calmly explain things and essentially stick up for you, that helps tremendously. Basically knowing that other people in the community aren't like the person being negative and that other people view the negative person as being unreasonable means a lot (that does mean, though, that you need to react to negativity with positivity because negativity against negativity is still just a ton of negativity).
There is also simply telling someone involved with open source you appreciate what they do. Whether this is by email or over IRC or in-person to some contributor of the project, having someone literally say "thank you" goes a long way. I know this might sound trivial, but realize that people contributing to open source over long periods are basically either dealing with negative people or people who are cordial but still want something from you. Having someone who doesn't explicitly want something from you and still feels like saying "thanks" shows that your hard work is appreciated in general and not in some specific instance where you fixed some bug someone needed help with. Think of it as the difference between when you do something for a loved one and then they give you a hug as thanks versus that same person simply giving you a hug out of the blue just because they care; the former hug is nice but the latter one is what makes you feel truly appreciated.