I believe that one of the most important tasks for a Free Software hacker is to bring new people with new perspectives, backgrounds and fresh ideas into the community. That's why I try to make contributing to my own projects as beginner friendly as possible, that's also the reason I frequently mentor people who take their first steps in developing Free Software with programs such as Google's, or Rails Girls Summer of Code.
Just recently I had the opportunity to implement a mentoring program (hey 101) for one of the Free Software communities I'm participating in (hey openSUSE) together with a couple of friends (hey Chris & Cornelius). That adventure required me to think about what I find important about the whole process. I'd like to share those thoughts with you. Here are my 10 Tips for Mentoring Free Software development.
I believe in putting the mentee's needs first. When I mentor someone I'll make an extra effort to place myself in their position. Empathize! Understanding preferences, requirements and circumstances is important. I try hard to comprehend where the mentee comes from and what I need to do to get them to contribute to Free Software. Mentoring is about their, not about my needs, nor the project's I mentor for.
The most important goal is that you build a relationship based on trust and respect with the mentee. Without this, I believe, everything else you'll do is in vein. Newcomers are overwhelmed and insecure about their skills and it's your job to take that fear from them. Because fear is the path to the dark side! It's the fun times together with you that will matter most to them later on, not so much what code fu-fu you have taught them.
Do not take this lightly. Relationships do not just happen, they need ongoing effort and attention, especially during the early stages. I find that the consistency of the relationship is what's most important. Talking as often as you can, finding a regular schedule where you meet and sticking to it is absolutely necessary, build a routine together.
This might sound like a weird thing from the past and it makes most people uncomfortable but you need to be a role model for your mentee. Free Software development is as much about behavior in a community, knowing what you want, and the ability to convey this to others as it is about pointers, gcc macros and git command line options. You need to ensure that your mentee can follow your example and that you're not passing on your bad habits. You are responsible for developing the competence AND character of the mentee.
Getting into Free Software development can be an overwhelming and daunting endeavor. Precise, reasonable and well-thought-out goals provide a path on which your mentee can take one step after the other into this strange new world. It's your duty that the goals and expectations for the project are actionable, fit your mentee's needs and are technically sound. You lead the way.
I find it important to understand and communicate where the mentee is and how they progress. Setting up regular milestones that I review and we celebrate together provide the opportunity to check and correct the course.
As a grumpy German this is a tricky one for me. But anyhow, I think it's important to sharpen your senses for your mentee's personal achievements. You recall the excitement the first time you succeeded in setting up the development environment? Remember how invincible you felt once you finally got a hold of git? The time of your first merged pull-request? Now for you and me those things first happened a decade ago and all of this is just the daily grind. For the mentee it's super duper exiting. Make sure you recognize and acknowledge those achievements. Praise.
“In the best, the friendliest and simplest relations flattery or praise is necessary, just as grease is necessary to keep wheels turning. ” ― Leo Tolstoy, War and Peace
Whatever challenge you face, remember you are not alone. You mingle on the shoulders of giants together with many other mentors. Make sure you share your experience, your ideas and your problems with them. All of you strive to reach the same goal: getting people into Free Software. Make sure you work together in an open, transparent and friendly manner as part of our worldwide community.
Mentoring requires time, effort and endurance. It will cost you some evening you wanted to go out with your friends, at least a couple of thoughts every day and a lot of nerves because you explain things, that are obvious to you, over and over again. If you are not sure that you are willing to do this then it's probably better that you don't do it.
On the other hand mentoring will give you the satisfaction of being a positive influence in the life of someone else. You will see a new contributor grow into the Free Software community and you will achieve results that matter. You will also get the opportunity to learn something together and sometimes even making a new friend for life.
The only thing that is constant is change! You need to adapt your plan, milestones, time line, the technical details, your behavior and attitude during your time. Respond to change, help your mentee to do the same. Be open, courageous, and committed.
All of this is just my opinion and there are many awesome resources about mentoring in general and about mentoring for Free Software development in particular out there. Don't trust me, inform yourself and make up your own opinion. Here are some pointers: