The idea of contributing to open source seems to dwell around the all mighty pull request. Everyone seems to believe that contributing to open source is only about fixing bugs or developing new features. Let me say that's not the case.
Over the years, I've learned that there are ways you can contribute to open source that have a really high upside for both the project and yourself.
Write a tutorial
This is so simple and a lot of people out there don't really think about it. Tutorials are crucial for every open source project there is. They help people learn and discover the technology. Maintainers are often too busy to write them.
Writing a tutorial is not that hard. All it takes is for you to use the technology and document (write about) the experience. For a real example that went on to be featured on the front page of a project check out my first Suave tutorial. To be honest, it's not my best work, but it helped the project and maintainers by providing beginners an entry point into working with the library. Win - Win.
Write some documentation
Documentation is hit or miss in open source. The reason is that we all prefer to write code over docs. I get that. You can help improve the documentation of a project and have a really positive impact. A project with good docs is one that has more potential of becoming mainstream.
The way to approach this is to take the project's current documentation and expand on it. There is no need to write anything new if you don't want to. Simply go over the docs and try and improve it. Try to add more examples, write more about use cases, or simply improve the overall tone. You'd be amazed how much people will appreciate these little things.
Make sure to talk to the maintainers before doing so, because they might be pushing some breaking changes and updating the docs soon themselves.
If you write a tutorial, the code you use is typically useful to add to the documentation as well!
Write a sample program
Some years ago, I wrote a sample program for a new API / library project aimed at IoT. The project maintainers were so happy about it that they featured my code on the front page of their project for years (just checked and it's still there). I did not write any docs or tutorials. Just a program that used their project.
Recently, I wrote a sample program for Pybee's Toga (a multi-platform GUI kit). It's not a big program, but it has already helped others figure out how to use the library.
The best thing about this approach is that you don't need to be a writer. Simply share your code with them and post it online for others to find. The maintainers could potentially ask you to add it to the docs or add it themselves.
I hope this helps those of you trying to get your feet wet with open source. These tips are a great way to make a good impression with a project's maintainers and will net you a lot of positive karma. :)