Maintainer's Guide to Staying Positive
Don't let the trolls get you down! Use this reference to avoid open-source burnout and keep doing what you love: writing code!
- Nothing fails like success
- Do's and don'ts
- Action items
- Help, or do no harm
- When all else fails
(You might also be interested in the Guide to Idiomatic Contributing)
3.9 billion downloads/month. This brief guide is a distillation of my experiences as a maintainer.
You might also be interested in other guides I've written.
What is this about?
As it relates to open source programming, this is my own personal reference to help me stay positive when I'm having a bad day, or for whatever reason it's more difficult than usual to stay objective.
Whether it's due to a bad decision I've made myself, or I'm reacting to unnecessarily harsh or negative comments made by a user, I thought it would be nice to have a guide to help me re-center when I'm not at my best. Maybe others will find this useful too.
Why did I write this?
I want to spend more time doing what I love, and less time doing things that I don't love.
I really, honestly love programming. So much so that I look forward to getting out of bed every morning so that I can start writing code. I'm a coffee-drinker, and sometimes I even start coding before I make my coffee or get breakfast. If you drink coffee too, you'll know that this says a lot.
I also love collaborating, exchanging ideas, learning better and faster ways to accomplish things that I'm already familiar with or, even better, learning completely new things that broaden my horizons as a developer or person.
I enjoy getting feedback from friends - or programmers I'm building friendships with on GitHub, hearing their thoughts about my code and what I could have improved. Mistakes I made, or how something could be optimized. I believe this is one of the fastest ways to improve. Not to mention, it's a great way to build lasting relationships.
Nothing Fails Like Success
I learned this concept from reading books by Stephen R. Covey, probably The Seven Habits of Highly Effective People.
In a nutshell, this means that sometimes success comes at a price. For example, it's not unusual for a project to get harder to maintain as it grows in popularity:
- More bugs and edge cases crop up
- More issues are created
- Users want more features
- More detailed documentation is needed
- Protocols and conventions that were "nice-to-have" before, are now 100% necessary
- Your "breathing room" for mistakes gets smaller (no one wants to make mistakes, but it's even worse when you get berated for it by a disgruntled user)
Of course, this is not always the case, but when it does happen it can be difficult to keep up with.
IMHO, these things are all fine and should be expected. They come with the territory of programming and maintaining open source projects. From that standpoint my typical reaction to most problems is: "get over it".
But what shouldn't come with the territory - and no maintainer should have to lose sleep over - is dealing with trolls and negative comments from users who only seem to want to beat the maintainers into submission, while showing no intent of helping to improve the project itself. This isn't programming, or maintaining, it's conflict resolution and PR, and it can be exhausting.
I know a few popular maintainers of highly popular projects who have either completely given up on collaborating publicly on any kind of open source development, or they switched to other languages to allow themselves to "start over" with a new community (specifically because of having to deal with negative people on GitHub). I don't want to get to this point. I'm a positive person in general, and I'd rather find a way to insulate myself from these people so I can continue to find a way to continue doing what I love.
Note on what "negative comment" means
There is a world of difference between a disgruntled user who expresses their frustration in a reasonable way, and a user who seems to only have their own self-interests in mind and wants to make sure that you pay attention to them by insulting you or making disparaging comments.
If you require clarification on this, or find that you need help understanding the difference between a constructive comment and an antagonistic comment, or you feel inclined to debate what "negative comment" means, then please consider reading this section.
Do's and don'ts
If you find yourself in need of a morale boost, here are some tips for staying positive:
- Focus on what you want: Be positive. When you focus on what you don't want, you tend to attract what you don't want. Focus on what you want, and you will get what you want.
- Make lemons into lemonade: look for the best, most optimistic viewpoint possible, no matter how negative the situation.
- Pace yourself: If something happens that makes you want to scream from the top of your lungs, just take a step back, breathe, and give yourself time to think about it.
- Do research: A good way to boost your own morale is to get a grip on the situation. Do some research to learn about what's causing the problems you're dealing with to regain control and find ways to resolve it.
- Add levity: Be careful not to come across as flippant or insincere. But sometimes it helps to just lighten the mood with a smile or nice comment.
- Don't blow things out of proportion: The sky isn't falling. Things are rarely, if ever, really as bad as they seem. Take a step back and get some perspective.
- Don't let others determine how you feel: You are in control of your own emotions and your own reactions. No one makes you feel a certain way. If you are feeling heated in response to something someone has said, take some time to reflect on the situation.
- Don't comment until you're rational: Sometimes it feels like you need to "put a fire out" before it spreads. Whether you need to respond to a troll, or to a flood of bug-related comments, don't say anything unless you can do it rationally. How does this tip help you stay positive? Even if you need to act quickly, saying something insensitive or inappropriate can only make things worse. Doing this will definitely not help you keep a positive attitude, and it won't help your teammates or contributors either.
Sometimes attitude isn't enough and we need to take action. Here are some things that, while extreme, are sometimes necessary in order to keep a positive outlook:
- Block negative users: When you find yourself repeatedly dealing with a troll, there is no shame in permanently shedding the negativity by blocking the user completely. Moreover, you are under no obligation to explain yourself to the user.
- Delete inappropriate comments: If a comment is antagonistic, disparaging to maintainers, distracts from the actual issue at hand, or otherwise does nothing to further progress on an issue, it goes without saying that the comment should be deleted. There is no contract, written or otherwise, that obligates you to retain comments like this. Whatever sense of integrity you feel you might lose from deleting the comment should be regained by thinking about the impact the comment has on your community - and the spirit of collaboration - as a whole.
- Move on: Don't linger on negative things. Stay productive and get refocused on things that are positive at best, or at least neutral if necessary.
Help, or do no harm
This section is for those who just can't find a way to stay positive, and are having trouble keeping their negativity to themselves.
A mentor once said to me, "If I cannot help, I will at least do no harm". I now try to live by this rule, and I suggest you do too. It's only practical. You don't have to be half-Betazoid to understand that other people are more likely to go out of their way to help you when you're nice to them. After all, just because you experienced a bug doesn't mean that it's a crucial bug, or that it's urgent. Only the maintainers have the perspective to make this call. Good collaborators recognize this and do what they can to help - or stay out of the way if they can't.
But if you find that you are so frustrated about a bug you're dealing with that you can barely see straight, and you want to make sure the project's maintainers understand what you're going through, consider the following:
- The (extreme) vast majority of open source projects are maintained by a single individual (I don't have stats on this, but I have a lot of experience in open source and I'd wager it's in the high 99th percentile. Big teams with lots of development resources are very, very rare).
- Based on the first point, it's easy to reason that the vast majority of decisions made on the vast majority of open source projects are at the discretion of a single individual.
- Based on the previous points it easy to reason that innovation, bug fixes and other improvements on these projects will only happen when a single individual wants them to.
Now, we can take this information and do what we want with it. If you absolutely need something to be fixed, and it isn't getting fixed, you have options. The most obvious of which are:
- fork the project and maintain it yourself
- create your own library (but be sure to give proper attribution if your code is based on another library)
If you don't have the time, knowledge, or inclination to do either of those things, unfortunately, that's just too bad. It's your problem, not the maintainers. The sooner you get over this, the happier and more productive everyone will be. Under no circumstances is it acceptable to berate a project's maintainers because you aren't getting what you want.
- It's not okay to "call them out" for taking too long
- It's not okay to point to other issues that aren't being resolved, "just to make your point". This just adds insult to injury.
- It's not okay to sling personal insults when you feel like you're being ignored
Exceptions to the rule
Here are the times when the above things are okay:
- You are paying the maintainer and have a service level agreement that gives you the right to do these things
Use Negativity as a Test of Character
To quote Mr. Kipling:
If you can bear to hear the truth you’ve spoken
Twisted by knaves to make a trap for fools,
Or watch the things you gave your life to, broken,
And stoop and build ’em up with worn-out tools:
If you can fill the unforgiving minute
With sixty seconds’ worth of distance run,
Yours is the Earth and everything that’s in it,
If you can deal with the trolls, the negativity, the setbacks, the failures, and have the courage to start again, to fail again, then you'll embody the power of perseverance, and you'll carry that character with you in all other aspects of your life.
Focus on what is truly important
There'll always be fakes, trolls and (real) imposters. Karma's a bitch, let her deal with them. What's most important are your family and close friends. Work hard for them - they are the only ones who will always appreciate you.
When all else fails
Consider getting yourself one of these.
Thanks to the following devs who have helped make this guide better in some way.
Note: If you'd like to see the most up-to-date and complete contributor information, please visit the contributors graph.
You might also find these guides useful:
- Scaling Open Source Communities: This is an excellent blog post from @KrauseFx (Felix Krause), in which, among other things, he describes some of the challenges of maintaining growing projects.
- github/jonschlinkert: follow me on GitHub for project updates
- twitter/jonschlinkert: follow me on Twitter for the latest news
- linkedin/jonschlinkert: connect with me on LinkedIn
If you'd like to get in touch regarding a speaking engagement or consulting opportunity, please use the email address on my GitHub profile. Thanks!