Contributing to open source projects as a new developer can be difficult for a number of reasons, including feeling under skilled for the currently open issues or feeling overwhelmed by the size of a project and I’m no stranger to either. If you want to contribute to a project and there doesn’t seem to be anything you feel comfortable with, there are still a number of things you can do to help a project whether it be with code contributions or even outside PRs.
We All Start Somewhere
As a developer, you may get the bug to contribute to an open source software(OSS) project, pick one you want to help, get SUPER jazzed up to do something, and then when you look at the Github issues, you end up like our friend John here when looking for something that fits your skill level:
Don't worry, I know the feeling! While I've now managed to get a couple hundred commits merged across the Cucumber ecosystem, I can also say: There are more ways to help than just code! If you're not ready to help with code that may come in time, don't sweat it. Let's go over some things you can do to help out that are just as valuable. (Some may also have the added benefit of helping get you ready to tackle some code changes in the future, too.)
Some of these points are taken directly from my personal history with the Cucumber team and its ecosystem, but really are applicable in other projects. :)
If your project has a Slack community set up (Cucumber does!) environment, Gitter chat, IRC, Google group (Cucumber's, or something else), join it.
Don't stop there though- have conversations, answer questions if you can, ask your own, and so on. You may feel overwhelmed by seeing folks chatting that you may call experts. That's okay! Please know you don't have to be an expert to help. Learn from them and also keep in mind that you may happen to have knowledge that someone else may be missing. You could ask a question that ends up being a catalyst for someone more experienced to make a new connection in their knowledge due to your fresh set of eyes. That type of process could lead to a neat new feature that may not have happened if it wasn't for YOU. You may even find a mentor or perhaps a future coworker all because you've made yourself part of a community.
I had an experience or two (sorry Cucumber community) where I was trying to help and actually prompted those much wiser than me (:cough: Aslak :cough:) to step in and set things right. I would advise you to try to be as certain as you can be before trying to help, but if things start to go sideways, there are those around who can help you get back on track helping others.
In time, with your increased knowledge, you could also end up looking like an expert in someone elses eyes.
Whatever you do, know that being an active and supportive part of a community helps make it a much more vibrant place, and we're all made better for it.
Ever Written Documentation?
No? No problem. I'm sure you've got experience using documentation that's frustrating, confusing, or otherwise been challenging, right? Right. Here's your chance to help make one corner of the internet a better place and do so in one of the most valuable ways I can think of.
Seriously. Documentation is one of the most important things and can help make or break a project. Think about it. If you're new to a project and want to know how to use it, where's the standard place to look? The documentation. It's a project's ambassador and if it's too sparse or difficult to use, users will get deterred and go somewhere else.
You don't have to know a project inside and out to help with documentation, either:
- If you find something that's missing, add it.
- If the tutorial you're following is out dated and you can figure it out, (which is really common on the internet) update it so that others after you can benefit. (Side tangent: if you write tutorials, try to include data around the version it works with to help inform future users.)
- If there's spelling errors, fix them.
- If you find confusing phrasing, rewrite it.
- Ask team members about aspects of the project that are non covered or are coming up and could us write ups.
All of these things may seem small and insignificant when you look at them in isolation, but together they can help make some pretty awesome documentation and help it stay that way!
How About Writing Of Another Type?
If documentation isn't your thing or you'd prefer to help in another way, why not do what I'm doing here and elsewhere write about something? It could be a tutorial, it could be a recap of something you did/used at your job, or something else. You could chronicle your journey of learning a new tool for others to follow along with for instance. Learn a new trick that you think others could benefit from? You know what to do. Write about it! Answer a question for someone? Chances are likely they're not the only person who has or had will have that question, so share the knowledge you have.
The available topics are near limitless, you've just gotta decide what you want to do!
Roll Up Those Sleeves and Dive In!
If the time comes for you to take a crack at some code, have fun! If you're working on a branch or a fork and you get lost, mess things up, or somehow manage to delete your code directories, that's okay! (I don't recommend the last one. Just... trust me on this.) Projects being in version control systems mean that you have a safety net in case you suddenly realize you're not in Kansas any more and need to get home.
What if you want to contribute code but you're not sure where to start? Try one of these:
- Tried and true: Check the issue tracker for the project you're working on and see if there's anything that looks like you could do it. It's common to see tags on issues like "good first issue" that mark issues the team thinks could be a good entry point into the project. That's how I got into committing to the Cucumber Ruby project!
- Tests! There's probably always some part of a project that could use more tests or perhaps fixing test builds for specific operating systems. Tests not only help get you familiar with a project, but in some cases can also have a lower barrier to entry. Tests are great.
If you find that you're stuck somewhere don't be afraid to ask for help and ask questions. A lot of people would love to help others learn and contribute to a project but they can't if they don't know you need help. I actually asked to do some pair programming to get some more info around a code change I had volunteered to do and I got it. It was awesome!
What Will You Try?
If you've been wanting to help contribute to a project but have been stuck, try something above and let us know by leaving a comment below about what you did and how it went. If you've got some additional ideas about ways to contribute, let us know too.
Thanks for reading!
A version of this post originally appeared on Jayson's website. You can also follow him on Twitter here