How we approach software development mentorship
Quality mentorship is the most lasting and important investment that you can make in a member of your team. A good seminar or tutorial can change the way a developer thinks about a topic and boost them a level. But good mentoring can change their habits for the rest of their career.
This article provides a high-level outline of West Arete’s approach for mentorship.
Start with a student who is ready for mentorship
When you plan to establish a period of mentorship, you’re setting up a professional relationship. This means that there’s an art to finding the right pairings.
A prerequisite is to start with the right student (and we are all students in some area) who is in the right stage of their career to benefit from a mentorship relationship. You need an employee with both the raw talent and the curiosity to propel themselves forward.
The other key quality that we look for is curiosity. When a person is striving to understand one particular area of their craft, the presence of curiosity signals that they possess the intelligence to recognize the pattern of what they wished they knew; that person is primed to absorb information.
Next, take inventory of their strengths. Try to identify the personality qualities and programming skills that they have exhibited so far.
Taking things a step further, we like to develop a professional mission statement or professional vision statement with that person. This document describes the types of problems that this person wants to be able to solve three years from now, and it describes their aspirations and motivations in the realm of software development. This document serves as a guide now and in the future for whether projects are “on track” or “off track” for that individual’s professional development.
Find the right mentor
We always look for mentors that are eager to teach. They should derive joy from the process of explanation, demonstration, and introspection. Some people are pleasantly surprised to discover that they love this new part of their job. The best mentors are not necessarily extroverts.
One of the most important qualities in a mentor is someone who has conscious competence in the area that the student is looking to gain experience. This refers to someone who is not only strong in that particular area, but they can describe exactly why they’re strong in that area, and what they did to gain competence in that area. They can describe their thought processes and habits to someone else.
Counterintuitively, we do not believe that the mentor must be an absolute expert in the area that they are looking to teach. In fact, people who have relatively recently acquired the desired skill can often be great mentors, because they are still humble, they can describe exactly where the limits of their knowledge are, they’re usually still curious themselves, and they still vividly remember the same learning process that the student is currently going through.
Finally, if you have the option to do so, try to pick a mentor whose personality and demeanor seems like it would be a good match for the student. It’s not necessary for the mentor and student to become friends, but we believe that the learning process is enhanced when both people enjoy the interactions beyond the technical.
Select the right project for mentorship
Here is one important insight that can often help when trying to select the right timing and project for mentorship: despite adding an experienced developer to the mix, you should not plan on the project in question to be completed any faster.
It’s true though. In our experience, we have found that there is a net zero effect on velocity when a mentor is added to the project. This is because any gains that are realized through the mentor’s experience are balanced out by the need for discussion and practice.
This means that it’s important to select the right project for mentorship; there should be enough budget and calendar time to cover the mentor without an assumption of additional velocity.
The good news is that quality and velocity almost always experience a boost after a few months, or once the mentorship phase is complete and the student is focused on productivity again. And those gains last forever.
The mentorship process
Once the initial plans and goals are set for the project and mentorship experience, it’s time to get to work.
We try to cycle between three different modes of operation for the student to get the most efficient feedback loop for learning:
- Theory learning (e.g. books, articles, tutorials) that is principled and idealist
- Quiet solo work on the project to expose deep questions and “stuckness”
- Pair programming to resolve the junction between theory, practice, and habits
Ideally the student is cycling between these modes throughout the course of each week.
This technique is highly effective because it forces bits of theory into practice, which then experience some form of conflict with reality. This results in questions that can then be quickly identified and resolved during a pair programming session.
Each of these modes obviously have value in insolation. But the interaction between them is simply magic when you get the project, the people, and the timing right.
Transitioning to the next phase after mentorship
Use natural break points such as releases or sprints to reflect on the mentorship momentum and consider whether to continue or whether it’s time for a break.
Ultimately, you reach a point where the student has absorbed the most valuable lessons that the mentor has to offer, at least for the moment. Have everyone take an extended break, especially if it’s possible to pick up the mentorship at some point in the future. Breaks provide some time to reinforce habits and understanding, and to uncover new regions of curiosity.
As the student progresses, look for opportunities for them to start to mentor. This helps to cement their own conscious competence using other forms of communication — speaking, writing, and demonstrating. Consider having them write the style guide. Or have them document high level architectural and design decisions in a project. These activities will force them to explicitly state their position in a way that day-to-day software development otherwise would not. And it will help to reinforce the life long joy of the cycle of curiosity, learning, and sharing.