I worked professionally as a software developer for nine years before I committed any code to open source. It wasn't that I didn't want to participate. Rather, my self-doubt and fear of rejection stopped me from contributing.
In 2006, I downloaded the Bazaar version control system and a bunch of Ubuntu code, made changes locally, then abandoned my project. Later, around 2009, Hibernate creator Gavin King gave a talk to our local Java User Group. I was interested in giving back to the project because we used it for work, but after downloading Hibernate's source and looking at the bug repository, I found myself intimidated once again. I was worried the response to my code submission would fall along the lines of, "Who let this woman with the craptastic code ever think she should submit code to us?!?!" Then I imagined a banned list shooting across the open source community IRC channels with my name on it.
Then one day, while I was working on a framework hosted by GitHub, I came across the simplest of errors in someone's documentation: The word "but" should have been typed "bug." I have no idea why, but I forked the project, fixed the markdown, and submitted a pull request. To my surprise, the maintainer accepted it.
After that, I ran into a discrepancy between versions of NGrok and GitHub's documentation. I submitted another pull request, and this time the maintainers came back with questions. I thought, "Oh no, confrontation!" The old docs worked for them, they said, so I explained that the version of NGrok available for download needed an extra command-line parameter. Once that was verified, I had another submission accepted.
I was excited to continue submitting pull requests and support open source projects... until I was rejected. It was a simple error on my part: I left my formatter on in my IDE when I saved code, which changed all the formatting. I fixed the glaring error in my pull request and got another acceptance.
My fear of rejection stopped me from contributing to open source code for many years. But once I recognized the benefits outweigh the disappointment of code rejection, I lost a lot of my fear. I'm so glad I did.
Three reasons to embrace rejection
- You'll learn something: It's the repository maintainer's job to ensure a clean codebase and repository standards. Code that doesn't fix the problem or is a Band-Aid fix should be rejected, but in such a way that the submitter can learn from the mistakes. The same goes for the repository standards. Although a rejection mainly benefits the repository, it is still an excellent learning experience for you. Think of it as a place for you to grow in ways like understanding how the repository works, learning different tools than you are used to, or discovering a different approach to solving a problem.
- You'll toughen up: Rejection will help you by hardening your shell. Take a step back and reflect on the reason the code was rejected. If it was due to a dumb mistake, recognize errors happen, then flex your muscle of self-forgiveness and fix the problem. Was it rejected due to not understanding the codebase or code standards? Make the changes and remember them for future submissions. Grow and learn with each rejection and harden that shell.
- You'll become more persuasive: Another benefit of rejection is learning to turn a no into a yes. One of my favorite stories is about Clayton Anderson, who wanted to become an astronaut more than anything else in life. He was rejected 15 times from NASA before he was finally accepted, and then he was one of the few chosen to go to space. Persistently work towards the solution and then work on turning their no into a yes.
Flip your fear
As a quote often attributed to Mark Twain says, "I've had a lot of worries in my life, most of which never happened." When you recognize that the fear of rejection is holding you back, you can flip the fear. Tell yourself you will do something that risks getting you rejected X number of times per month and push the button. As far as I know, there is no secret "banned contributor list" in open source, and everyone I've worked with has been very supportive.
You may not have noticed it, but throughout this article, I've been careful to specify that it's your code being rejected, because I want to you realize something: You are not being rejected, only the change you're requesting.
In my case, even though I was earning my living writing code, I was so afraid of being rejected by an anonymous community that I was reluctant to do something for them for free. Recognize this fear of rejection, dismiss it, and submit that pull request anyway!