A Mentoring Mentality
One way to ensure our software quality, technical skill, and throughput continues to improve is through mentoring. At Integrity Inspired Solutions, we have consultants who are familiar with mentoring and the power it can have on a team. We strive to help instill that mentoring environment with our clients. By teaching these tools, their teams will continue to grow and succeed far after our engagement ends. As a developer, embracing mentoring can greatly impact the performance of yourself and your team.
Who is the Mentor and Who is the Student?
In many fields the answer is always the person with seniority and the most experience under her belt. In software development, the answer is not always so simple. Software development is a vast field with many different tools and techniques at our disposal. Expecting to know it all and always be the most knowledgeable will gain you a quick lesson in futility. A good mentor knows that at any moment they may become the student. Not only should you accept that fact, but you should embrace it. More than a few occasions I've been in a teaching session (be it pair programming, lunch and learns, or a formal presentation) and a coworker will bring to my attention something that I didn't know that raised my own expertise.
I have a hammer, everything is a nail
It's tempting to gain a great level of expertise with a certain tool and then apply it to every problem, but we should resist this temptation. Yes we may be able to solve the problem with our tool, but there's always another way to do it (in the case of software development, 10+ different ways). It's critically important to keep an open mind to tools that may be able to solve the problem in a better way, as it is important to recognize there are costs associated with training an entire staff on anything new. The personnel you employ on your team here is key. Don't hire for specific skill sets, hire people who have the mentality that they can accomplish anything with the right tool (even if it's one they're not familiar with). As a mentor, expect that even though you're presenting a well-thought out solution to a problem, you may end up with something better that didn't come from you. You're mentoring to share knowledge and help everyone make informed decisions, not to dictate solutions.
Share your work and accept criticism
A good mentoring environment is one where all developers read each others code on a regular basis. Pair programming, code reviews, and ping pong programming are fantastic practices for getting a development team comfortable with reading and writing code together. Getting involved with open source software is also another great way to become comfortable with sharing the code you write. A good mentor is not afraid to share their code, along with all its warts. If you're waiting for your code to become a perfect, polished gem, that day will never come. Exposing our weak areas is one of the best ways to improve. Getting over the fear of other people seeing our code is one of the first, most important steps, to becoming a good mentor.
Where to go from here
In order to maximize the potential of a development team, both collectively and individually, it's time to embrace mentoring. It's not always easy at first, especially with the introverted nature of many developers, but it gets easier with time.
Mentor in large groups - have developers host lunch & learns or other sessions where a group of developers can share knowledge.
Mentor in small groups - peer program, ping pong program, and perform regular code reviews.
Everyone mentors - even junior developers. The best path to learning is often to teach.
Drop code ego. Your code isn't perfect, nobody's is. Learn to accept and encourage criticism. Remove the personal attachment from the code you write, and mentor through example.
Go outside your organization - work with open source software, host a session at a local user group or conference. Mentor the larger crowd.
I can tell you that mentoring has been a real struggle for me in the past (I write code, why should I have to spend time talking to people?). This attitude has changed completely and it's been an extremely worthwhile journey. Teams that I've worked with that have embraced the "mentoring mentality" have been incredible examples of achievement and a joy to work with.
How has mentoring gone in your organization? Are there things you can do through mentoring to raise the bar higher?