Encouraging Community Collaboration and Development

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.

Be supportive.

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.

Give credit.

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?

Related

25 thoughts so far

When Chris and me were still actively developing the Blueprint CSS framework, we had a pretty good experience with the community. People built generators, cheatsheets and lots of other really kool stuff. To see those things was overhauling and amazing. Sadly I can’t say such a thing about the WP user community. The normal (non client) mails I get via my websites contact form or via G+ are support requests by users who ask for even more detailed support alongside the one I already give for free on WPSE. All the help and involvement in my projects come from devs that I already know (which are great people).

I hope a lot of people read this post, change their opinion and really try to give something back when they got something for free up front.

You bring up a good point: the majority of users do not contribute but do ask for extensive help (not always a bad or good thing). I have found, however, that with the right treatment and encouragement, it’s not too difficult to get some of the more active users to become contributors. All of the volunteers in the Easy Digital Downloads support forums are users of the plugin, and users that asked a lot of questions. These users were happy with the support / help I gave them and decided to return the favor.

Agree with you. But I have another point of view: in my opinion, user feedback is also a kind of contribution. Users, not developers, are the people who use our products in various ways that we haven’t thought about. They may use in combination with other plugins, integrate with themes, etc. That will create lots of situation of usage and is the best way to test our products. Then people report back to you (or complain) about bugs, and they need fixes. I think it’s valuable and also help us much.

Pippin

February 2, 2013

Absolutely. Getting user feedback and taking it seriously is extremely important. On that note, it’s really important that there be a an easy way for users to submit feature requests and feedback.

As you may or may not be aware, on top of having a few items spread across the Envato network, official WordPress repository, and Github, I also buy a LOT from various Envato sites. More than once (in fact, on almost every item I buy) I have found things that could be improved upon, tweaked, or fixed. I invariably improve, tweak or fix the item and usually end up sending these changes back to the developer explaining why and how I got there and walking them through the changes I have made. In all of the times I have done this, NOT ONCE has the developer in question ever incorporated the changes or even acknowledged my suggestions. Oh well, I’ll keep sending changes in the hopes that there are a few devs out there other than Pippin and myself who believe in collaboration.

Unfortunately it seems there’s a lot of developers that consider “suggestions” and “improvements” to their work by 3rd-parties to almost be an insult to their intelligence. As if it can only be good or worth including if they came up with it.

It’s really too bad as this could not be more counter-productive to the open source movement.

Thankfully there are multitudes of other developers, contributors, artists, and other people that don’t have this mentality and instead embrace the open nature.

Generally, I’ve found that if the developer has chosen to set up a public development space – like a Github repo where I can send a pull request – they’re open to accepting fixes and improvements.

In contrast, when devs have no public repo (aside from wordpress.org/extend), I’ve had far less luck. I’ve tried sending patches via email, via support forums, via blog posts, via blog comments. Rarely if ever have they been accepted.

At one level, it’s anti-community and stuck-up to act this way. That’s a shame. And at another, deeper level, it’s just plain dumb. To ignore *free* development time, especially from a respected dev, is like throwing money out the window, and it’s a way of saying that the quality of your software doesn’t really matter to you. I find this really odd. Why publish software at all if you’re going to have this attitude?

There may be a tippo in your text (If you have a plugin or theme that I absolutely love and use, give back to it in some way) … I think you mean ‘you absolutely love’

I think you speak of 2 distinct communities.
In the beginning of your post, the WordPress community. I think it’s gone so big that it is easy to get demotivated trying to contribute there.
Then, second part of your post, the community around your project (as you are doing here and obviously away from the WordPress forum cacophony). I believe more in this one and I totally agree with your advice to motivate this community.

1. What exactly is the contribution? Is it a new feature that fits right into the core plugin? Is it a necessity? Does it target a niche? These should all be asked when considering whether to put something in core or build it as an extension.
2. How many people will use it? If the number is 80% (give or take) then it should be considered for core.
3. Does the feature potentially qualify as feature bloat if put in core? Probably consider an extension.

I’d do both if possible. Release a plugin that people can use in the meantime while the core patch is being considered. If it’s rolled into core, retire the plugin.

People really appreciate the immediate solution. See the comments of my image crop position solution.

I have been wondering though, what does it take to get a patch into core? My first and only submission is ~15 lines. It got instant swoons and over the past 14 months, a ton of respected developers have added themselves to the ticket. It seems ridiculous to me that all these developers are throwing their support behind this but it isn’t getting done. Am I missing something? Do we have to hire a lobbyist or what?

Pippin

February 3, 2013

Note, we’re talking more about extensions to a plugin, not WordPress core 🙂 But it definitely still applies.

When it comes to a WP core patch, a plugin is often the best way to go because you can get it out there immediately. Then if it gets merged into core (after months and months), you can phase the plugin out.

I have several patches that have been sitting around for months, even though they have huge support.

I think there may be a tippo where you write: If you have a plugin or theme that I absolutely love and use

On the subject of communities, I think there is a definite distinction between the WordPress community and the community you build around your project.

It is very frustrating to take part to the first one (from both standpoints; plugin consumer and plugin developer). The WordPress forum itself is a mere cacophony (questions without answers, answers without acknoledment, opinions without facts)

For the second kind of community, I fully with your statements and advice. It is very exciting when you reach the point you have enough users to call them community

Something I worry about is that my contribution would appear trivial or nit-picky. Someone has gone through all that work and I’ve benefitted from it and I wouldn’t wish to appear ungrateful. If there were a community board, I would feel more comfortable that emailing the author directly, especially since the reward they seem to get for their contribution is support requests.

Thanks for the post, Pippin. I agree with much of your sentiment and would like to add some advice of my own: be timely with your communication. Much like with blogging, people are stoked about what you’re doing if you talk with them on a regular basis. If you ignore them for a couple of weeks, they’re not so hot about giving back. Be active on forum threads and pull requests, even if it’s just to say that you’ll take a look at it in a few days.