Four Tips for Mentoring Software Team Members
Software teams are composed of developers with varied skill levels. In order to maximize productivity, team members must be willing to share knowledge and mentor one another. Without this type of collaboration, developers may end up in silos working on repeated solutions or struggling with technical problems that could have been easily solved with the assistance of a teammate. Through consulting in agile environments I have found some effective ways to mentor and share information.
Design an on-boarding plan
Design an on-boarding plan and mount it on a wiki or another knowledge sharing platform. Document repeatable tasks such as tool installation, programming standards, or company security policy. Make it a collaborative and iterative effort, gradually collecting knowledge as you go. This reference will be useful to new and existing members of the team.
Teach business domain knowledge
Technology and programming are complex endeavors. The most common challenge is to understand the business domain where the software resides.
For example, financial software consists of complex securities such as credit default swaps, interest rate swaps, and futures. This knowledge is essential to creating quality software and getting the requirements correct. Eric Evans of Domain Language, Inc., tackled the intricacies of software design within the context of complex domains in his book Domain Driven Design. Eric emphasizes that software complexity is rooted in the business domain, and that technology is rarely the culprit.
Do not neglect the need to mentor individuals on the business domain. Domain knowledge is one of the most valuable assets a developer can bring to the table. Offer reference materials, links, and videos to get developers up to speed.
Assign moderately complex tasks
The best way to get a developer acclimated to programming work is to assign him a moderately complex task. A very difficult task would set him up for failure; a simple task would not challenge him enough to reveal his true capability. Peruse the backlog of features and pick one that would challenge the team member—but not sink him. Moderately complex tasks will reveal the talents and shortcomings of a developer, and at the same time enlighten mentors on how to teach in the future.
Don't micromanage technical designs or dictate patterns and approaches. Developers need autonomy to learn. Occasional pair programming can be beneficial in conjunction with this approach.
Allow for mistakes
Allow time and tolerance for mistakes. New team members have a lot to get accustomed to. They must deal with new tools, frameworks, corporate policies, business domains, group dynamics, and personalities. Allow the individual to make mistakes and don't judge progress based on that. Judge on how they respond and make corrections. Evaluate how they apply what they learned to their next task.
These are just a few of the techniques that can be applied to mentoring. The most important take away is to have a plan so that on-boarding is a smooth transition.