A topic that has intrigued me a lot over the last few months is how to build up a strong community of contributors to projects. When we write plugins or themes for WordPress, we release them under the GPL license (at least the code), which makes it so any one can contribute back to the code base with improvements, modifications, bug fixes, etc. If you have ever written a plugin or theme and made it openly available, you have probably noticed, however, that community contribution to the code base, even when the user base is quite large, is very small, or even non existent.
As WordPress developers, users, support technicians, etc, we all work within an extremely vibrant community full of active contributors to the system we use and love: WordPress. Every person who has written a theme or plugin has contributed back to the WordPress project. Every person that has ever answered a support ticket for a theme, plugin, or WordPress in general has contributed back to the project. Anyone who has ever helped to write aspects of the codex has contributed to WordPress. Anyone who has ever created a bug report or left feedback has contributed to WordPress.
We have this hugely vibrant community of contributors to WordPress itself, but how about the smaller sub-projects of WordPress? Every single theme and plugin is, in a way, a sub project of WordPress.
A lot of people make a conscious decision to actively contribute back to WordPress, perhaps because they enjoy it, they rely on it for their business, or a vast number of other reasons. Well, plugins and themes often play a nearly-as-significant role in the lives of many WordPress users. How often have you heard the phrase “the plugin(s) I cannot live without”, or “the framework that I build every client site on”. These kind of statements come from users that have a heavy investment in on of the “sub-projects” of WordPress: themes and plugins.
What is the most instrumental part of an online store’s website (aside from WordPress)? The e-commerce plugin that powers it. Without that plugin, the store dies, or takes a very powerful hit.
I’d like to advocate for more community collaboration on projects.
If you have a plugin or theme that I absolutely love and use, give back to it in some way. As a developer, try to contribute a bug fix; as a designer, try to submit a UI improvement; as a user, help explain a pain point.
Plugins and themes do not grow and become great by the original creator alone. If we were to list out the top plugins and themes available, I can almost guarantee that every single one of them has a strong community of collaborators behind it. There are a few that are more or less a one person show, but those individuals are still taking bug fixes, enhancements, etc from members of the community, even if they aren’t very transparent about it.
Over the last six months, I have spent quite a bit of time working up ways to help encourage community collaboration, both in my own plugins and in general for everyone. Much of this started with my Easy Digital Downloads project. I started the plugin by myself but was very interested in opening it up and having other members of the community contribute to it. As of today there are over 42 developers that have contributed code to the plugin and many, many more that have opened / closed bug reports and feature requests. The support forum is contributed to by several developers, 2-3 community volunteers, and a couple of paid support staff.
Easy Digital Downloads began as a very, very simple e-commernce plugin and has since turned into a (still very simple but) very powerful e-commerce solution for selling digital products. This transformation has been made possible by the large amount of community involvement.
Remember, it’s not just code and support contributions that help take a plugin forward. Development of third party extensions and themes are a catalyst in the growth of a project within a community. At this time EDD has 85 published extensions, each of which helps open the plugin to more and more users by providing the niche features not available in the main plugin. Helping to market a plugin or theme and assisting on the support forums are also instrumental to the growth of a project.
How do we encourage community members to contribute to our projects?
It’s a very serious question and one that has a multitude of answers. I’d like to briefly discuss a few of the most important ones.
Make a good product.
No one wants to contribute to something that sucks, in design or in implementation. The good and well executed ideas are always going to succeed in getting more involvement than their counterparts, so plan and execute well. If you as the project lead are lazy or uncaring, your community will vanish.
A few months ago there was a patch submitted by a user to a widely used project on Github. The patch itself wasn’t very good but the project lead’s response was a million times worse. Instead of helping the person that submitted the patch and explaining why it wasn’t good and giving advice on how to improve, the project lead said (almost word for word): “This is a fucking stupid way to do this. Learn how to write code and then come back.“. How do you think the submitter felt after reading that? Worthless? Unvalued? Disrespected? All of those. Do you think he felt inclined to come back and contribute more? Hell no! Would you?
Being kind and supportive of the people that are trying to give back to your project, even if the contributions aren’t very good, is one of the most important things you can do. Be a dick and you will be treated and thought of as such. Be kind, respectful, and helping and you will be revered and thought of very highly. People will want to contribute more because of how you helped them help you.
Make it easy.
Contributing to a project should not be rocket science. Ensure that you have an easy to access and use avenue for users to submit their contributions. Locking your code behind a brick wall with chains around it (*cough* obfuscated code *cough*) will result in you never getting any contributions.
Having an open code base (it’s GPL after all) that is easy to navigate and easy to submit to will by itself encourage collaboration. Github is one of the single best tools you can use if you’d like to encourage contributions from the community. One of the lead developers for WP e-Commerce told me that moving to Github was the single best move they’d ever made when it came to getting feedback and contributions from the community.
If it’s difficult for a user to submit their feedback or bug fix, they’re not going to do it.
Publicly track bugs and enhancements.
Often times when there is a project a community member is interested in contributing to, they will go looking for a list of known bugs or planned enhancements that they can work on. Make sure you have a publicly accessible bug and issue tracker. No, a text doc stored on your computer doesn’t count. Use something like Github’s Issue tracker to record known bugs and planned enhancements. Having these out in the open where users can see them is often all it takes to convince a user to give back.
Everyone likes being told “thanks” and seeing their name in a list of contributor credits. It feels good, even when contributions are small and insignificant. By rewarding your contributors with that “oh yeah!” feeling, you will encourage them to come back and continue to help. You will also encourage others to contribute because they want that “oh yea!” feeling.
I’m still working on getting my name on an official WordPress core contribution. See? WordPress core is actively encouraging me to keep fighting to get my contribution into the project, even if for nothing more than the “oh yeah!” feeling.
Credit feels good. Give it.
Ask for help.
This may seem a bit pretentious but it’s really not. There is absolutely nothing wrong with asking for help. I have openly asked for contributions to Easy Digital Downloads several times, and guess what? New contributors popped up every single time I asked. Every single time. Was I forcing them? No, absolutely not. All I did was make it publicly clear that I was encouraging contributions.
Ask your users and developers to give back and make it easy for them to do so and you will be rewarded.
What are your suggestions for encouraging community involvement?
I want to hear what you think. Are their projects you feel inclined to give back to? Why? Projects you tried to help but found it difficult? Why?
What is it in your mind that makes some projects successful in gaining community contributions and others fail?
Do you have other suggestions for encouraging community involvement?