Open Source Enlightenment

(My thanks to Audrey Tang for this lyrical transcript of my talk at OSDC.tw, to Macpaul Lin for the video, and to Chia-liang Kao for proofreading the Chinese translations in my slides.)

Over the years, I’ve started thinking that participating in the open source community is like traveling on a path, toward becoming not only better programmers, but also becoming better people by working together.

You might think of it as a path toward enlightenment, growing ourselves as human beings. So what follows is really my personal philosophy which I’d like to share with you.

The first thing is this: The most important part of every open source project is the people. While code is important, the center is always the people.

There are different kinds of people involved in a project: People who code, who write documentation, who write tests. People who use your software, too, are just as important for a project.

Also there are people who work on the software that your project uses — you’re likely using projects from other people in the upstream, and you might want to send them a patch from time to time.

Or maybe you’re writing a library or a module, and so other people will be using your software, and communicating with you as their upstream as well.

So why do people work on open source software? This is a very important question to ask, in order to understand how open source works.

For people’s day jobs, they may be working with software already. And why would they take the extra effort to work on open source? Part of it is that it involves working on exciting things and new technologies.

Sharing is also a large part of it; as we share with each other, we increase the amount of fun for everyone working together on an open source project.

People also work on open source in a spirit of giving to others; in doing that we’re reaching out as human beings, and this is a very important part of being human.

There are many rewards, too. A big one is respect: As we create something new, draw people in, and share software with them that they can work on too, they recognize who you are and what you are capable of, which gives you a sense of accomplishment.

Conversely, it means that we want to make sure that we show respect to people joining our projects in any way we can, because it helps them to stay involved.

Another important aspect is appreciation; as people publish their work, if you talk with them — Even just a simple thank-you email message saying “this meant a lot of me”, it helps bring about a culture that keeps everybody motivated.

Credit is also important. As you are presenting a project, be sure to mention other people around you, saying “this person did such a wonderful thing”, so we can build a feeling of community together.

One of the things that keeps people interested in open source is that, as we work together, we become stronger and can do more.

Part of it is simple math: 2x people makes at least 2x code, and 3x people makes 3x code, although there is much more to it than that.

When we work together, we can make each other stronger and better — part of that is encouraging each other; as you see people working on a very difficult problem, you can encourage them saying “you are doing great, and I see you will do great in the future”.

You can empower people just by talking and sharing with them.

And then also there’s the fact that, when you have many people together, they’ll have different sets of skills. When you are working together, maybe you know the five things the project needs, and they know the other five things, and so you have the complete set of skills to finish the project, which wouldn’t be possible if either of you worked alone.

So the effect is not only a linear increase in productivity; there’s a multiplication effect when people start working together.

Encouraging each other to look beyond, to look into the future, is also important — We can all inspire others to solve interesting problems. Sometimes just saying “I have an idea” is enough for someone else to make it into reality.

Sometimes you’d look at what someone else is doing — you have not done all the work, but you have the critical idea they needed, and so with that idea they can reach out and go much further.

The key thing about working on open source is that we’re not just standing alone. When you are working with other people, the main thing you’d want to improve is your communication skills.

We communicate about the plans we have: How we want to make the software, personal plans such as a feature you want to work on, and so on.

One of the things I observed in open source communities is this: People often have good plans to create software, but they sometimes clash and fail to communicate with each other about plans. If you work on one plan alone, without communication, you may end up hurting people working on other plans.

So it’s like a hive of bees — a constant buzz keeps us all functioning.

We’ll also often communicate about possible futures: What’s the best way to solve a technical problem? When this happens, you may communicate in a way that’s contentious and angry, making it very hard to make actual progress.

One of the things we’re learning in our process is how to embrace all possibilities. Keep working on the possibility you’ve imagined, but remain fully open to other possibilities other people may have.

And as you make progress, you’ll also be communicating constantly about what you have done — There’s email, there’s twitter… there are many ways to let people know about your progress.

Sometimes we may feel shy, or not wanting to be seen as bragging. But that’s not what it is! It’s good for the project, and for the people as well, because they can learn from what you have done.

Another aspect of communication skills is the ability to ask questions. The advantage of having a community is that some people might have solved your problem before, and asking a question on a forum or IRC may save you days of work.

In the same way, when others are learning, you can be responsive to them too, instead of putting them down like answering with “RTFM” for simple questions.

It’s true that answering “RTFM” maybe save you a bit of time, but it is also teaching that person that they shouldn’t ask those questions in the first place. That is not what you want to teach people at all — you want to teach them to communicate with others.

Also, learn how to make answers that are helpful to people, and help them see that they can also walk down the path as well, and take the path further in the future.

Sometimes you do have to criticize people; we should be open to many ways of doing things, but sometimes one technical solution really is more correct than others. However, the best way to get people to change their ways is to answer them kindly, so they can be open to learning from you.

You have to show some grace, even to people who do not respond very well. Some people may be harsh with you, but this is also part of the path. Sometimes it helps to have a thicker skin, and even in situations when other people should have said things nicer and better, maybe there’s a bit of truth in what they are saying, and you can still learn from that.

From this perspective, even if they speak in a way that is not polite, you can still respond politely.

The other half of communication is not talking, but listening. Instead of telling others what we think, sometimes all that’s needed is just sitting very quietly, and let others talk.

It’s not just listening, though — it’s important to have empathy. As the saying goes, “If you really want to understand someone, you have to walk a mile in their shoes” — perhaps so you can get the blisters they have experienced.

Now, some people think you have to be a genius to work on open source software, but that is simply not true. There are people like Larry and Guido and Linus, yes, but there are also so many different kinds of talents that any projects needs, too.

And no matter how smart you are, it’s important to stay humble. Because with humility, you will be open to other people, and see new ways of doing things. Humility lets you welcome other people into your project. Pride, on the other hand, is essentially telling people “I don’t need you; I can do things my way.”

By being humble, we also welcome people with diversity of genders, of different cultures, creating a richness in open source by opening to different kinds of people.

The diversity also appears between different projects; it’s almost like languages and cultures of different countries. For example, the community around Linux, Perl, Ruby, and Python all communicate and collaborate differently.

And by being humble with each other, maybe we can see that our project is not the only way, and maybe we can appreciate the ways of other communities.

Now, open source is not all about fun — it’s fun, of course, but it’s also a responsibility. When you agree to participate in a project, you’re taking a weight on your shoulders, and it’s a good thing, as it teaches us to improve ourselves and become better humans.

But life can get in the way — significant others, parents, children, jobs — we may accept responsibility for a time, but there may also be a day where we can’t carry so much responsibility anymore.

So there is a cycle, where you start by assuming more and more of a role in a community, and as life goes on, you gradually take on less and less responsibility. This is entirely natural, and it’s bound to happen in a project’s life cycle.

So it’s worth keeping this question in your mind: “Who will continue my work when I no longer have the time?”

To make sure other people can continue our work, we can think of it as a continuous process: Teaching and sharing the knowledge we’ve learned, and at the same time learning more and more from other people — a continuous process of gaining and sharing knowledge.

Finally, as you work on open source, please be happy, with a smile on your face, and make other people happy! Because this happiness is what gives us the power to make great things.

Do you feel happier now? :-)

10 thoughts on “Open Source Enlightenment

  1. This is a really nice article. For some reason this morning I was doing a little “surfing” from the daily Code Project email, and came across this article. I’ve been yearning to participate in community and have had my eye on open source for a long time. Many years ago I bought a bunch of copies of “The Cathedral and the Bazaar” and gave to a number of friends. I subscribed to a Linux magazine that at that time had the subtitle “Chronicles of the Revolution”. Later they dropped it. I got the feeling that open source had become co-opted by large companies and had begun really being part of the mainstream culture in a different guise. So I somewhat tuned out, pursuing my “day job” of writing courseware on Microsoft .NET. I’ve thought occasionally about changing my whole business model and making courseware open source. What would be my revenue stream then? But the spirit conveyed in your article is something that resonates with my heart, and I have some food for thought. Many thanks!

    Bob Oberg (Object Innovations)

  2. I have to firmly disagree about your statements about pride. Pride is essentially defined as ‘self-respect’, according to thefreedictionary.com.

    I will assume that you’re an American. Let’s use the example of your citizenship as an example of how pride doesn’t automatically yield the essence of egocentric sentiments towards others. People from Sweden don’t have patriotic pride in their country, but many Americans have such pride in their country and flag, such that will fight to the death for their country. This doesn’t mean they don’t want to adopt foreign economic or social models (such as what has happened due to the acceptance of homosexuality in the military). This doesn’t mean they are wrong for having pride in their country, either. It is just a different way of thinking.

    The way I see it, you are being very one-dimensional about programmers, and in people in general who would consider working on an open source project. You have to remember that you’re trying to instill the ‘hacker’ mentality in OSS coders, as it had in its roots. Psychology can run deep. VERY deep. Your thinking in absolutes about pride makes me think about your possible experiences dealing with community participants that have exhibited relatively immature emotional development constructs.

    On the face of it, I observe that you are trying to spin humility as sort of a package deal to try to get people to try to see things a certain way across the board. I wish you would not try to sterilize the human element of pride, as I begin to think certain things of you.

    Open source does not have to be such a self-sacrificial lamb. People can also gain pride from excellence in a completed product, and respect from their peers as a motivation. Like partners working on a scientific paper, they become cited experts in their chosen software development pursuits.

    • I’m certainly not advocating self-hatred, that wouldn’t help anyone. A calm confidence in your own abilities is a wonderful thing. But, an attitude of “I’m better than you, and you should know it” is pretty destructive (and also often a sign of poor self-esteem).

      Like most things in life, there’s a balance. It’s important to talk about the work that you do, so others see it and learn from it. But also be open to the ideas and accomplishments of others.

      • >But, an attitude of “I’m better than you, and you should know it” is pretty
        >destructive (and also often a sign of poor self-esteem).

        That’s an interesting point you make. But, you make poor self-esteem sound like a character flaw.

        I can understand how some people don’t want to stroke egos, because an inflated sense of self-esteem is the only thing that they have going for them.

        Personally, I would rather prove a person wrong than harbor resentment. This is a scientific field, after all.

        • Let’s put it this way. I agree that women are not like men when it comes to self-esteem, and they have been probably hearing this same thing (“I’m better than you, and you should know it”) their whole lives when it comes to scientific endeavors. It isn’t fair for me to judge your concept of humility when feminine genetics tend to be obsequious rather than competitive. My apologies for spouting off without thinking in context.

          • Thanks for thinking of context, it’s incredibly important.

            Maybe gender is relevant here, I’m never really sure, since I break most gender stereotypes. On my own personal path, I have sometimes used aggressive “alpha” leadership patterns to good effect, and have sometimes been overly aggressive in ways that obstructed collaboration or even harmed other contributors. Live and learn.

            I do know that culture is relevant. Western cultures generally favor extroverted expressions of self-approval, but other parts of the world don’t. It’s important that we don’t expect all open source contributors to adopt Western cultural norms. You might even take this whole talk as a few things that open source collaboration could learn from a non-Western culture.

  3. It’s been a long time I didn’t hear such encouraging and humble word in the FOSS community. Through out years of using and advocating FOSS, I found people with great skill being rude and arrogant when communicating with others who try to give opinions and as well as who try to seek for help from the community. They think others are stupid and they are smart with the skill they have in the tools and codes and OS. To be honest I’m quite disappointed seeing the spirit of ‘helping and sharing’ being ignored totally in many FOSS experts, as if those are some value not worth passing down to our children and spread in the daily life and world we’re living in. The reason for us to posses the skill set and the intelligence, is to help the others and to make the world a better place, not to hurt the others.

    I’m glad to read your word today, it at least make me think there are still good people in this line. Thanks and I’m grateful there is voice of such from the FOSS community.

  4. Regarding communication and asking questions, there’s a threshold of accomplishment and regular involvement a person should pass before which more caution, or downright shyness, seems justified. Our emotional cues regarding feeling like an outsider aren’t to be distrusted here IMO.

    So I, like a lot of people, have been watching all this for years and Walter Mittying contributions in my head through all that time. It’s peculiar. I can think of nothing else for which I’ve sustained such enthusiasm for so long without actually being a part of.

    But trouble would come if hordes (and I think there are hordes, er, little hordes? well, enough to be potentially overwhelming anyway) of people like me jumped in saying, “hey, I’ll do it, I’ll port the hammer file system to OpenBSD,” or “I’ll write a new garbage collector for parrot, where should I start?” My fingers actually do reach for those letters often enough as much as I know better. So maybe it’s not all bad this RTFM tone. It’s nice if there’s respect from the project outward but respect the other way also matters as does maintaining one’s self-respect by not being too foolish in public.

    There’s also a weird thing I’ve discovered where people with more welcoming approaches can turn out in the long run to be more dangerous to wannabees (or at least self-critical wannabees with fragile egos) in terms of not protecting them from themselves and the shame that can develop when one finally learns enough to see how stupid what one wrote earlier was. But maybe that’s neither here nor there regarding success of open source.

  5. OSDC.TW 2014 Day 1 | Wei-Li's Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s