When it comes to communities, a system is the set of processes you put in place to allow for humans to be amazing. It's the means to empower these humans to contribute to your community, learn from it and grow with it.
These systems are essential for your community to exist. Your community is a system in itself and it functions through the processes that have been created along the way. These processes exist even if you're not aware they do. The processes that help your community function are not some kind of magic tunnel through which things happen automatically. These are processes created and tailored for your community. There are many things that can be shared across different communities but there are others that are simply specific to yours.
The way you merge code, the means through which you communicate in your community, the standards you put in place. These are all processes that allow your community to cope with growth and chaos. These processes are all meant to be created, evolve and sometimes die. If you want your community to survive change, you must change your community therefore you must change your processes.
There's no secret recipe for managing these processes, though. One thing to always keep in mind is that the humans that interact with these processes are more important than the processes themselves. If the way you review code is too complex for most of the humans that are doing reviews, change it. If the way you define new processes doesn't allow other humans to actively participate, change it. If the way you allow for contributions to be submitted ends up frustrating your contributors, change it. Your community is made by humans and the sooner you acknowledge that, the sooner you'll adapt your processes to better empower these humans. Remember that humans react to emotions (you can read more here) but they act based on their cultures.
Culture has been defined in many ways. Some definitions involve long explanations about society, evolution and human interaction. When it comes to communities a, perhaps oversimplified, way to define culture is that it's the way humans in the community actually do things. I heard this definition at Zingtrain in June 2016 and it stuck with me. Not only it makes sense on paper but it's also true in reality.
We spend a huge deal of time defining new processes in OpenStack that would help the community evolve and adapt itself and we see over and over how many of these processes change as soon as other humans start interacting with them. Sometimes this interaction ends up in processes being "officially" changed and many times they are left as they are so people can use them the way it works best.
In other words, the processes in your community will be bent by the cultures in your community more often than not and this is fine. You want this to happen. You want your community to adapt itself to the cultures that it embraces. You want your community to embrace more cultures and to allow for new cultures to be created within the community itself. Different cultures have different ways to solve problems and there's lots your community can learn from this.
Your community must be flexible for it to be able to adapt itself and tolerate the bending of its processes caused by the interaction with other cultures. If the processes in your community can't be bent a bit, then some cultures won't be able to interact with them and this will, of course, affect your community.
For humans from different cultures (even the same culture, really) to be able to interact with each other, they must be tolerant to variance. Putting the tolerance to variance at the bases of your community will set the principle that humans in your community will interact based on. There must be balance, though. Being either too tolerant or too intolerant won't help your community. You can't make everyone happy but you definitely must make enough humans happy.
Eventually it will come down to how good your community is at allowing humans to interact with each other and I believe a good summary of this post could be:
You must tolerate variance in your community, to empower humans, hopefully from any culture, to be amazing.
If you liked this post, you may also like:
If you liked this post, you may be interested in the keynote I gave at Pycon South Africa. Keeping up with the pace of a fast growing community without dying
Flavio Percoco is a passionate developer, with interests in languages, cloud computing and distributed architectures. He's currently working for Red Hat where he spends most of his time hacking on OpenStack. Flavio promotes open source, APIs, humility and loves the philosophy behind software and life. Flavio writes on his blog at flaper87.com and tweets on @flaper87.