(I recently posted a beta version of this advice to the Google Summer of Code mentors list. By popular demand, it now appears for the first time in public. With thanks to Mary Schmich!)
Ladies and Gentlemen of the Open Source community, PARTICIPATE!
If I could offer you only one tip for the future, participation would be it. The long term benefits of participation have been proved by scientists whereas the rest of my advice has no basis more reliable than my own meandering experience.
I will dispense this advice now.
Enjoy the power and beauty of your community–oh, never mind. You will not understand the power and beauty of your community until they have faded.
But trust me, in six months you’ll look back at your version control system and recall in a way you can’t grasp now how much possibility lay before you and how fabulous your roadmap really was. You’re not as buggy as you imagine.
Don’t worry about the number of contributors you have, or worry, but know that worrying is as effective as trying to fix a bug by chewing bubblegum. The real troubles in your project are apt to be things that never crossed your worried mind; the kind that blindside you at 4pm on some idle Tuesday.
Do one thing everyday that you didn’t think would work.
Document.
Don’t be reckless with other people’s patches, don’t put up with people who are reckless with yours.
Code.
Don’t waste your time on jealousy; sometimes you’re ahead, sometimes you’re behind. The race is long, and in the end, you have all the features you can handle.
Remember the compliments you receive, forget the insults; if you succeed in doing this, tell me how.
Keep your old design docs, throw away your old flame wars.
Test.
Don’t feel guilty if you don’t know what you want to do with your project. The most interesting projects I know didn’t know in ’99 what they wanted to do about the Millennium Bug, some of the most interesting projects I know still don’t.
Get plenty of peer review.
Be kind to your wrists, you’ll miss them when they’re gone.
Maybe you’ll release, maybe you won’t, maybe you’ll be forked, maybe you won’t, maybe you’ll be obsolete by 2015, maybe you’ll be powering the White House in 2052. Whatever you do, don’t congratulate yourself too much or berate yourself either–your choices are half chance, so are everybody else’s. Enjoy your community, use it every way you can. Don’t be afraid of it, or what other people think of it, it’s the greatest asset you’ll ever have.
Communicate, even if it’s only with the two other people who care about your project.
Keep the README up to date, even if no one ever reads it.
Do NOT read IT magazines, they will only make you feel angry.
Get to know your fellow projects, you never know what they’ll be contributing to your code.
Be nice to your fellow contributors; they are the best link to your past and the people most likely to stick with you in the future.
Understand that committers come and go, but for the precious few you should hold on to. Work hard to bridge the gaps in geography and lifestyle because the older you get, the more you need the people you knew when your codebase was young.
Write in Perl once, but quit before it makes you $crazy; write in Lisp once, but quit before it makes you (sane).
Travel.
Accept certain inalienable truths: code will get tangled, managers will misunderstand, you too will get old, and when you do you’ll fantasize that when you were young code was clean, managers understood tech and your C64 was user-friendly.
Respect your peers.
Don’t expect anyone else to maintain your code. Maybe you have a docs team, maybe you have some great maintenance programmers; but you never know when either one might get carpal tunnel.
Don’t mess too much with your website, or by the time you’re out of beta, it will look like Geocities.
Be careful whose advice you buy, but be patient with those who supply it. Advice is a form of nostalgia, dispensing it is a way of fishing the past from the bitbucket, wiping it off, putting interfaces over the ugly parts and recycling it for more than it’s worth.
But trust me on the participation.