When I first started learning how to develop software I was fortunate enough to be paired with a mentor right off the bat. Then only six months after writing my first lines of code I was asked to mentor other beginners. What I did was probably a little more teaching than mentoring- but it was probably one of the best things I could have done. Not only is the enthusiasm of beginners infectious, but at that time I felt like I was getting even more out of it than the apprentices. The act of teaching everything I was learning forced me to be comfortable enough with those ideas that I could explain them— and the questions my apprentices asked forced me to dive deeper so that I could provide the right answer.
The Teacher's Gap
Some years have passed and I've continued mentoring, and as I look back I realized that when I mentored early on I had one distinct advantage. It was a small gap between where I was and where my apprentice's were so it was easy to put myself in their shoes. I refer to this as "the teacher's gap". When this gap was small, when I'd faced the same struggles as them only a few months earlier, it was easy for me to empathize with their challenges and help them work through various pitfalls and gotchas.
As I've continued further down my own path, and certain things about writing software have become second nature, the teacher's gap between myself and the newer apprentices I work with has grown. When I'm not mindful of this I've made the mistake of answering a question without enough context or providing a challenge that might be so littered with little pitfalls that my apprentice ends up down a rabbit hole (not that exploring rabbit holes is bad, but it's easy for beginners to get stuck there).
Being mindful of the "teacher's gap" requires equal parts empathy and retrospection. I take a step back, put myself in the apprentice's shoes and think about the discrepances between what I know about how to solve a problem and what the apprentice might know. Then I identify what things would be most beneficial for an apprentice to learn on their own, and what things I could provide a little more direction on.
The Student's Gap
The other gap I'm acutely aware of as a mentor is the "student's gap"- that space between where an apprentice is and where they are trying to get to. Their destination could be an app they want to build, a specific problem they are trying to solve, or learning a new language. However, maybe their immediate roadblock is just figuring out a certain syntax or struggling with a design choice.
As a mentor I've found that being aware of the size of the student's gap is even more critical to providing guidance— and this was a lesson I first learned as an athlete and coach in the cycling world. Just because a rider wanted to be a pro didn't mean that they should immediately start doing six hour training rides everyday. Of course, the ambition of many a young rider led them down that path— and then shortly burnt them out of the sport. The same holds true for any of us trying to improve- if we attempt to make too big of a jump the results can lead to frustration, demotivation and time wasted. It's one thing to jump into the deep end, it's quite another to be dropped into the middle of the ocean, but if the steps laid out are too small then the apprentice might not be engaging in critical problem solving skills or seeing enough improvement to keep them motivated.
Whereas being mindful of the "teacher's gap" requires a closer evaluation of myself, being mindful of the "student's gap" requires careful observation of the apprentice. Where are they really at and how big of a jump are they ready for? An apprentice may exude confidence but still only be ready for baby steps. Conversely, an apprentice might be quite advanced but lack confidence— so being thrown into the deep end is just what they need to realize how far they've come.
Constant Evaluation
At the risk of sounding cliché, the one thing that both the teacher's gap and student's gap have in common is their constant change. In software development we are always facing new challenges and learning new things. Plus our community is so valuable because every developer understands something a little bit differently than someone else.
There will always be a gap between what a mentor knows and what an apprentice knows— and when the relationship between the two is at its healthiest the apprentice is even teaching the mentor a thing or two. And developers always want to learn about and build new things, so we all have a constantly changing student's gap between where we are and where we want to be.
As we often re-discover after spending any length of time on a single code base, the developers we are today are never the developers we were a few months ago. In order to help each other succeed- as a mentor, co-worker or a kindred spirit- it's important to evaluate the current state of both the teacher's and student's gaps when providing guidance.