↑ Back to top

Mentoring in Software Engineering

May 23, 2023A 9 minute read

This article is primarily targeting those on the 'mentor' side of the mentor/mentee relationship. If you're a mentee, however, this article can still provide value to you as it should (hopefully) give you some fresh ideas on how to make the most out of your mentorship.

What is mentoring?

mentor ˈmen.tɔːr [verb]
to help and give advice to a younger or less experienced person, especially in a job or at school
Cambridge Dictionary

In the software engineering profession, a mentor/mentee relationship is typically held between a Senior Engineer and a Junior Engineer (or intern) and is formed of regular sessions which are usually spent pair programming.

Mentoring vs. coaching

I've heard these terms used interchangeably and, for the context of this article, I'd like to attempt to articulate my understanding of the difference between the two. In my view, there is a clear distinction to be drawn.

While coaching is a valid mentoring technique, on the whole, it is something different entirely. A coach is somebody who facilitates self-discovery. A coach will listen to a coachee's problem, and aid him or her in arriving at their own solution. In fact, and this is probably the most distinguishing factor, a coach may not even have expertise in the field.

Mentoring, on the other hand, is much more hands-on, and with a much broader goal: to improve the mentee's general knowledge in a wide area by way of knowledge sharing, offering suggestions, and leading by example. A mentor must have expertise within the field because the whole premise is about transfering the mentor's skills to the mentee.

What's in it for me?

If you're reading this article, chances are that you're either in a position of being mentored, or of mentoring somebody else. To me, there are clear benefits for both parties of this relationship.

For the mentee

Knowledge and insight

The obvious benefit from the mentee's perspective is the knowledge that they'll gain during the mentorship. The mentee has unbridled access to the mentor's expertise and experience which is invaluable to their learning and development.

Putting aside for a moment the obvious skills that the mentee will be able to develop through a mentorship, the simple fact of having somebody there to ask for insight by way of suggested focus areas and learning materials can be incredibly helpful.

Career guidance

A good mentor is perfectly placed to offer general career advice as well as insights on specific career paths within the software engineering space. By identifying a mentee's strengths and weaknesses over the course of the relationship, a mentor can provide specific objectives to help guide the mentee down the right path.

Confidence building

Having a mentor who believes in the ability and potential of a mentee will inevitably boost his/her confidence over time. Additionally, a good mentor will set attainable goals which, when achieved, will do wonders for the mentee's self-assurance.

Having confidence in one's ability is essential for progression. Confidence provides the motivation to continue learning and fuels the resilience which is required to bounce back from potential failures.

Networking

A mentor can open doors for a mentee by way of opportunities not only within the existing business, but within other organisations in the future.

You never know which small opportunity you have in life will be the one that expands exponentially.
Sun Tzu

For the mentor

Sense of reward

A huge benefit to mentoring is the sense of reward you'll gain from aiding somebody else in advancing their knowledge and career. Those who have acted in a mentor capacity already know the sensation I'm describing. It's that feeling of seeing the intern you helped out a few years ago being promoted to Senior Engineer. Priceless.

Increase your impact

If you're mentoring within a company, your impact to that organisation will be increased, which comes with its own sense of achievement along with any potential financial rewards.

As a manager or leader within an organisation, the inherent benefit to mentoring would be that you ultimately reap the reward of having a highly skilled engineer working for your team.

Personal and professional growth

For most organisations, mentoring is an essential arrow in the quiver of a Senior/Staff/Principal Engineer. It can therefore be said that the act of learning how to mentor will contribute to your overall career progression as an engineer. The same applies for those on the manager track.

Mentoring also allows the mentor to develop their communication and leadership skills which are essential soft skills for everybody.

Networking

This one is true for both sides of the fence. A mentee could open doors for a mentor too!

A structured approach

My advice to anybody taking part in a mentorship is to take a structured approach.

To begin, the mentee should have a clear idea of what they want to achieve from the relationship. For example, he/she may wish to become proficient in ReactJS.

Then, an agreement should be made. Formal or informal, written or verbal, it doesn't matter. But both parties must have clarity on at least the following:

  1. Topics
  2. Expectations
  3. Time
  4. Check-ins

1. Topics

This should be fairly straight forward if the mentee has a clearly defined end-goal going into the mentorship. Which topics are covered, and which topics are not?

2. Expectations

Be up front about the expectations of the relationship from both sides:

  • What is/are the goal(s) that the mentee wishes to achieve?
  • What can the mentee expect from you?
  • What do you expect from the mentee?
  • Will objectives be set? If so, at what frequency?
  • What does communication look like?
  • How is feedback delivered?

These are just a handful of ideas. The objective is to be as up-front as possible when it comes to expectations in order to ensure that both parties are going to be happy for the duration.

3. Time

This is a big one. You need to dedicate enough time to your mentee that you can provide a meaningful impact, but not too much that it affects your own work. Be transparent from the start about time commitments, and stick to those commitments as much as you can.

4. Check-ins

It's also important to ensure that regular check-ins are made between the mentor and the mentee. This introduces consistency to the relationship and gives both parties the opportunity to discuss topics, deliver feedback, raise about any issues etc.

Some thoughts on questions to ask around time commitments:

  • How much time per day/week/month is the mentor willing to commit?
  • Are there any days that are off-limits?
  • At what cadence should a regular check-in be made? Daily/weekly/biweekly? What will be discussed at those check-ins?

Commence the mentoring

Once an agreement has been made, it's time to begin the mentorship.

The onus to provide a starting point is (typically) on the mentee. Are they facing a particular problem that they need guidance on? Do they simply have a list of questions to which they're looking for answers? Whatever it is, ask for direction in advance so you can make any necessary preparations.

During the first session, try to gauge the mentee's skill level on the topics that are being covered. As you go along, take note of areas on which you feel he/she can improve. This will make great material for future sessions and will be useful for goal setting later on.

Remember: you're there in a supportive capacity. Let the mentee drive the sessions as much as possible.

Mentoring techniques

Let's now discuss some techniques that you, as a mentor, can leverage to ensure the mentee gets the most out of this relationship.

Pair programming

The typical approach to mentoring in a software engineering context, particularly when it comes to remote work, is pair programming.

Again, the driver of the session should be the mentee. Have them walk you through a problem or a project that they're working on. Listen attentively and try not to take control. It's easy for a seasoned engineer to see the solution instantaneously and jump immediately to resolve the issue, but the learner won't gain much from this experience.

Instead, guide the mentee to the solution by asking leading questions. Try to encourage them to arrive at their own solution. Sound familiar? Yes, this is coaching!

Encourage curiosity

Sometimes an inquisitive student can be frustrating, particularly if they're a little too inquisitive. But, curiosity is the driving force behind learning, and is a vital personality trait of any good engineer. Foster this behaviour by listening to questions intently, and try to answer those questions patiently and pragmatically.

Foster autonomy

It's easy to fall into the trap of spending too much time with a student, leading them to become reliant on you. Counter this by limiting how much time you spend with them, and encouraging independence. At the end of a session, suggest some areas of focus that could be looked at autonomously. You can start the next session by asking the mentee to present their findings and answering any questions that arose from their self-study.

Developing independence is also a great confidence booster which, as we've already discussed, is a key learning tool as confidence prevents discouragement.

Lead by example

A good mentor is a role model as well as a teacher. Identify qualities that you want your mentee to emulate, and demonstrate those qualities yourself on a daily basis.

  • Do you communicate effectively within your organisation?
  • Do you remain calm and composed during production incidents?
  • Do you demonstrate a meticulous attention to detail?
  • Do you exude confidence when speaking to other individuals and teams?
  • Do you engage in team-wide discussions? Are you vocal in those discussions?

Role modelling as a mentor helps the mentee build a clear view of what is expected of them within the organisation and/or team. The simple observation of your current actions will actively (and passively) influence a student's future ones.

Provide feedback

Provide regular feedback in your recurring check-in sessions.

  • Is the mentee behaving in a way that is frustrating you, or hindering their development?
  • Is she not spending enough time on self study?
  • Do you feel their focus would be better placed in a different area?

Be as transparent as possible with this. Beating around the bush will only lead to frustration and wasted time.

Be human

Learning is difficult. It can be emotional—we're all susceptible to that. Sometimes we have a good day and feel on cloud nine. Other days, something discourages us and we come crashing back down to Earth.

A good mentor leverages these moments to help navigate the emotional rollercoaster of learning, particularly at the low points of the journey.

When those low points do arrive—and they will—offer words of encouragement and remind your student that setbacks are a natural, and necessary, part of the learning process. With this continued guidance over time, they will gain the resilience they need to overcome these dips.

Conclusion

Mentoring plays a vital role in a professional software engineering environment, and goes beyond simply transferring knowledge. It's about cultivating a relationship over time, building confidence, and nurturing resilience. And there's plenty in it for the mentor too!

Have you ever had involvement in mentoring a more junior engineer? How did it go? Did you encounter any difficulties? Ping me at contact@terryharvey.co.uk with your story. I'd love to hear from you.


Profile picture

Written by Terry Harvey, a Senior Software Engineer and software leader with over a decade's worth of experience.

© 2023 | Terry Harvey