For a long time I had a vague feeling that I should be contributing to open source more, and that it was in some way a Good Thing. And I felt a little bit guilty about not doing it enough.
I used to have this dialog with myself pretty often:
- Okay, Julia, open source is good!
- Yeah, I should go do some open source
- What project? I don't know. huh.
- I use Pidgin! Maybe that
- go look at pidgin
- so many issues! I don't even know where to start
- and it's in C! so many code! how do I even!
- Give up, feel vaguely guilty
I'm trying to stop feeling guilty. Now if I'm going to contribute to a project, it needs to be something that I'm motivated to do. Mel Chua gave a great talk at Hacker School where she said motivation is made up of competence (I know how to do this!), autonomy (I can make my own decisions!), and relatedness (I know why I'm doing this!).
In open source there's pretty high autonomy -- nobody's ever going to force you to work on anything. So what's usually missing is relatedness and competence.
For relatedness, I'll ask myself:
"What do I hope to get out of contributing to this project?
- I want to know how it works! (contributing to Linux could be super fun for this reason! Operating systems are amazing! My gunzip in julia is a project where I learned a ton.)
- I found a bug and I want to fix it! I want to add a feature!
- I want to build up a portfolio of programming work to get better jobs!
- I think this project is doing important work and I'd like to advance it! (Kelsey Gilmore-Innis's work on the Anti-Eviction Mapping Project is a great example)
- I like spending time with the people who work on this project! (When I went to Drupal conferences, all the Drupal devs were totally lovely people and really made me want to contribute to Drupal)
For competence, I'll ask:
Is there anything that will stop me from getting work done?
- Do I know the language this is written in? Is it easy to learn?
- Can I set up a dev environment easily on my computer?
- How complex is the codebase? Is it approachable? Is the documentation good?
- If I don't know something I need to know, will the community answer my questions? Will they be jerks? Is the mailing list active?
why I don't
I usually don't contribute to open source because of relatedness -- I don't know what I'll get out of it! A super great example of this is Drupal. Drupal is a tremendously important project. I've contributed to it before! I could do it again! The community is extraordinarily welcoming! But it's missing relatedness for me right now -- I'm not developing websites anymore.
Most open source projects fails relatedness -- if I don't use it, don't want to learn about it right now, don't know anyone who works on it, and/or don't believe strongly in its mission, I probably don't want to contribute! This is TOTALLY OKAY. There are tons of people who are contributing to those projects! They will be okay without me =)
A great example of a project that fails competence is Pidgin, above -- I might have had some issue with my chat client that I wanted to fix, but the barrier to entry seemed too high at the time.
why I do!
Here are some open source-y projects I have worked on and why:
- IPython, because there was a feature I wanted it to have that it didn't! Now it does! One of my PRs got merged into IPython and it is SUPER COOL.
- A pandas cookbook, because when I learned pandas there weren't as many practical materials as I wanted! Now there's one more! People are learning more about pandas because I wrote a thing! THE BEST.
- gzip in julia, to learn how gzip worked. Now I know! AWESOME.
Working on open source projects can be super fun! Yay!
don't feel guilty
There are so many things you could be doing. If it takes 30 hours of your time over 3 weeks to fix a network card issue, maybe that's worthwhile because you learned a lot and your hardware works better! Or maybe you would rather spend that time with your family or friends or volunteering or playing soccer or watching movies or working to pay your rent.
I sometimes hear people say "you should write open source software!" like it's a universal good. Don't. Do it if it makes sense for you! Do it if you know what you'll get out of it, and you feel that it's worth your time! If not, do other things instead!