Since July 2019, I've been working on Avenue Code as a Front-end Intern. When I started there, I was introduced to mentoring: a guidance system, where one shares their knowledge, skills and experience, to assist another in their own development. In this post, I will talk about my experience as a mentee, as well as my impressions on it.
As the interns got introduced to the company, they also got to know the technologies that would be used. The project had its front-end built using React, Redux and Sass and its back-end was built using Java and Spring.MVC. Most of the newcomers had never had contact with any of those languages, libraries and frameworks, hence the mentors had two missions: Teach the mentees and ensure everyone is at the same skill level. To do so, they sent challenges, reading material and research directions to us. That was a nice start because, although the instructors gave a helping hand, the rookies were also able to learn by themselves.
The team made his first sprint after two weeks of learning. In the iteration end, we had to present the results to our client and, then, receive feedback. There were appraisals and, most importantly: constructive criticism. I think no one is a big fan of bad reviews, but it helps to improve and to create a debate about things that went wrong. However, Criticizing is like walking on eggshells, where the eggshells are someone else’s feelings, because it can easily be misinterpreted as an offense, so be careful.
Robert Martin talks, on his book ‘Clean Code’, about the traits needed to be a professional developer. Professionalism is a topic rarely discussed in software development companies, but is a very important one. Being professional is not about wearing a suit to go to work, nor to use a fancy vocabulary, it’s about commitment and knowing to deal with expectations. This was taught by the mentors both voluntarily, when we read and talked about Uncle Bob’s title, and involuntarily, when they acted accordingly, thus being role models to us.
One thing that mentors should always keep in mind is that they are not tutoring mentees to be obedient. Discussing about techniques and technologies is the key not only to learn about its advantages, but also about its downsides. A good thing to do as a tutor is to question the approaches used by the apprentices, encouraging a debate between you, so that you all put your selling points on the table to choose an optimal solution. There are a thousand ways to solve the same issue when developing, so engineers should be able to come up with the best way out as possible. Remember: There’s no one size fits all in programming.
The true goal of mentoring is to prepare the mentee to stand on his own. As the Internship Program was rolling out, the mentors were also becoming less necessary, the team was able to make decisions, meetings, reviews and everything else that they learned throughout the journey. To be honest, it was really hard to let that helping hand go, because no one would be there anymore to help making better choices, however this is how it should be, some things gotta be learned from your mistakes, and that’s OK.
Mentoring is great. However, it can be a wonderful experience for both sides when done right. I learned way faster by having an expert with me who gave me guidance when I got lost, helped to avoid common pitfalls and to take my first steps. Mentors, on the other hand, can learn about human interaction and will have someone new to debate ideas and solutions for problems.
Finally, tutors shouldn't be bosses. Avoid giving orders and ready-to-use answers, always question the mentee's decisions and encourage discussions between you. Remember, you are not meant to instruct them to be like you, but to think by themselves. Of course, mentoring isn't the only way to learn, but it is one of the most efficient for sure.