Photo by John Schnobrich on Unsplash

Helping Others to Grow: The Hardest Aspect of Software Engineering?

Thoughts on Being a Mentor and a Protege.

Kuba Karmiński
Published in
9 min readJun 13, 2024

--

This article encapsulates what I’ve learned from over eight years in the IT industry, working directly with nearly a hundred people across various teams and companies. Here is my story and a practical guide to helping others achieve optimal career growth at any level.

Quick disclaimer: Initially, I wanted to include a self-development guide as well, but I realized that it is a broad topic deserving its own article. However, if you’re looking for ways to develop your career, this should be a valuable read for you as well. Enjoy!

The Art of Nurturing New Talent

I was fortunate to have an amazing mentor right at the beginning of my career. I wish I were as dedicated, knowledgeable, experienced, and humble as he is. He not only spent hours with me answering my questions and helping me solve my tasks, but he also arranged 1:1 coaching sessions without me asking; during which he taught me the fundamental aspects of computer science and software engineering. Just being around him, listening and observing how he worked, put me light-years ahead of what I could have learned without any guidance.

That experience, I believe, created a profound desire to “give back” and try to be a mentor myself, but I soon realized it is incredibly hard.

So first, let’s talk about how not to scare people away, avoid wasting your time, and prevent frustration. Then, we’ll discuss how to do it right.

Not everyone has to be a programmer

Sometimes, you’ll discover that people, despite applying for an internship or asking you for guidance, don’t actually have the right attitude or interest in the topic. That’s fine. One of the reasons we take such steps is to figure out whether we want to do it.

It may sound obvious, but I had to learn that it’s not my responsibility to “make” someone good at this job. A certain percentage of people will drop out at some point. In my experience, about half will quit right at the beginning. This should not dampen your enthusiasm for mentoring; it’s just part of the process.

Sometimes, it’s better to relax and wait for your protege to make the first move. Your desire for their success should not exceed their own. I’ve found that you can actually spoil the relationship by being too pushy. Maybe even maintain a bit of skepticism — not to discourage, but to keep a healthy distance.

Be kind and don’t do more than asked.

That’s it. Don’t despair. Don’t spend your time with someone who isn’t self-motivated.

Believe me, it’s easier said than done. I’ve often been asked for help or advice in starting a programming career. My “problem” is that I care and want to help. But from my experience, it’s actually better if I don’t push it. Just try to be kind. Answer their questions when they have any. Don’t do more than what I’m asked.

Don’t get me wrong; sometimes your role as a mentor is to challenge people with tasks that will overwhelm them (we’ll get to that), but they need to show some interest first. If someone asks me for guidance, I like to assign simple tasks and see if they return with questions or a solution. If so, that’s my cue to engage more. With each sign of engagement from their side, I increase my involvement in guiding them.

You don’t have to be a mentor (but you should try)

You may find yourself unable to help someone. With the vast array of career paths in computer science, and our tendency to specialize in only one or two areas, there’s a significant chance you won’t be the right mentor for a particular individual.

It’s wise to address this right at the beginning by asking, ‘What kind of career are you interested in? Gaming, AI, Web, Blockchain, Crypto, Infrastructure?’ If you specialize in Web Development, for example, clarify what they can expect if they choose that path.

Sometimes, those seeking guidance might turn out to be more knowledgeable than you in certain areas. If that’s the case, it’s crucial to acknowledge that you may not be the best fit and communicate this honestly.

However, don’t let this deter you. Almost anyone, at any level, can reveal gaps in your knowledge. It’s surprising how a seemingly simple question can catch us off guard. That’s good — it’s an opportunity for us to grow as well.

Teaching is the highest form of learning

So if you feel you’re not “good enough” for someone, which can happen quite often, especially at the start of your career. That’s perfectly fine. Concentrate on assisting those who will benefit most from your experience. Trust me, those people exist, regardless of your level. I’ve discovered there’s no experience threshold for becoming a mentor. So you should try from the beginning because “teaching is the highest form of learning” as my first mentor used to say.

Maintaining Humility: Avoiding a Patronizing Attitude

I despise being patronized, yet I sometimes find myself (hopefully less often these days) patronizing others. How is this possible? It seems any disparity in power, even if temporary or illusory, creates a risk of one side becoming somewhat arrogant. It’s always unpleasant to be spoken to in a diminishing way, but that may not be the worst part.

The temptation to limit someone’s responsibilities too much by categorizing them as not skilled enough to perform at a certain level can arise. My experience shows that the more experienced I become, the less arrogant I tend to be in mentoring relationships. This leads me to believe that an overly confident view actually stems from an overestimation of my own capabilities, a lack of confidence, or ignorance.

On the other hand, my intentions sometimes seem quite positive. My instinct sometimes tells me to do the heavy lifting myself and “save” someone from unpleasant duties.

Whichever it is, it’s really bad, because it suppresses the other person’s growth.

Having experienced this phenomenon from both sides more times than I can count, I must admit - it’s a delicate balance. As a rule of thumb, I strive to avoid it. Yet, part of dealing with this issue is also accepting that I don’t have to be perfect every time. We’re only human, after all. Interestingly, even bad mentoring experiences can lead to positive outcomes, so it’s valuable to be mindful of this and simply try our best.

That said, here are some thoughts and techniques I cultivate to help maintain a humble attitude:

  • I remind myself that individuals entering software engineering often come from diverse backgrounds, they may have passions, achievements, etc., in areas where I might be completely ignorant. It’s not for me to judge their level of experience or maturity.
  • I strive to view the mentoring relationship as mutually beneficial, or perhaps even more so for me, as it provides an opportunity to solidify my knowledge and challenge myself in new ways. When someone expresses gratitude for my guidance, my response often is, “Thank you for giving me this opportunity.” This might leave them puzzled, but that’s fine.
  • I recall how it felt to work under leaders and mentors who were arrogant and/or protective.
  • I remind myself of the times I’ve undermined my mentoring relationships by being that person…

Positive Reinforcement

Another reason to avoid a patronizing or arrogant attitude is that most people need positive feedback to reveal their full potential.

At the beginning of my mentoring journey, I focused a lot on flaws and imperfections. Back then, I thought my job was to point them out so the other person knew what they should fix. It’s not that simple.

The thing is, to achieve any growth, we need to believe that we’re capable. As mentioned before, it’s every individual’s job to find self-motivation and believe they’re capable of doing something. But it’s your choice to be either encouraging or discouraging of that image.

Positive reinforcement helps build confidence and motivation. As Dale Carnegie said in “How to Win Friends and Influence People,” “Abilities wither under criticism; they blossom under encouragement.” Naturally, you’ll see many flaws in your trainees. It’s good to notice them so that you can create an environment in which they can be fixed. But when expressing your thoughts, try to focus on the good things. Make sure to “Praise the slightest improvement and praise every improvement” and “Give the other person a fine reputation to live up to.”

Selecting Appropriate Tasks and Gauging the Level of Protection

What exactly is protectionism in a mentorship context?

It might involve assigning simple, mundane tasks, or tasks unrelated to the industry like trivial coffee making — essentially, not letting people engage with the real stuff. That’s the clear-cut definition of protectionism. There isn’t much more to say about it, except — please, don’t do that to people.

However, protectionism can also manifest in less obvious ways, such as overwhelming mentees with (seemingly anti-protectionist) tedious or excessive challenges that cause frustration and impede growth while keeping them from more beneficial activities.

Balancing the workload is crucial. You don’t want to overload your mentees, yet it’s also part of your role to push them into situations that stretch their capabilities.

Hard Task = Good Task?
Consider my experience: one of my first tasks as an intern was to migrate a legacy Node.js app to ES6. Immediately after switching the language version, the linter showed 972 errors. Wrestling with these was simply painful and not at all beneficial to my growth. One could say that’s the equivalent of making coffee for software engineers. Except it’s worse, in that, it is actually actually a difficult task that requires domain knowledge, decent programming skills, and discipline. Not only it is hard, but it’s a really unpleasant task and I can imagine why someone decided to dump it on an intern.

So, a rule of thumb: Don’t offload tasks simply because you don’t want to do them. If you assign overly challenging tasks, your mentees will struggle excessively and learn little. This, I believe, is a subtle form of protectionism.

Personal Projects
Often, integrating an intern into a team involves hesitation to share the real backlog due to fears of slowing down the process or risks of errors. Consequently, mentees might end up working on isolated projects, which can quickly demotivate them — they joined to learn the real stuff, after all, not to play in a sandbox.

However, starting a project can be very beneficial if done right:

  • Only assign a project from scratch if they’ve never built an entire app on their own before.
  • Encourage ambitious projects destined to encounter problems. The purpose of a project is to experience a wide range of issues and learn holistic thinking about software, not to finish it at all costs.
  • Allow them to make mistakes and poor design choices; sometimes, the best learning comes from minimal guidance. The best time to learn good practices and design patterns comes after experiencing the pain of not knowing them.
  • Let them choose projects based on their interests — it will certainly help with motivation.

The Right Tasks
Choosing the correct tasks is vital for a mentee’s growth. Too much protection or too much freedom can both hinder development. The balance is essential for creating an environment where the mentee feels supported yet free to explore and learn from mistakes.

Here’s my checklist to ensure optimal growth opportunities:

  • Include them in all meetings as regular team members and give them a chance to participate early on. Also, it’s not a bad idea to let the least experienced team members speak first.
  • Aim to integrate them into the mainstream work of your team. Side tasks can bridge the gap between personal projects and team tasks, but don’t sideline them for too long.
  • It’s perfectly fine to take over sometimes and let them watch how you approach problem-solving. I can’t stress enough how important it is to observe experienced engineers “do their thing”; it has been largely beneficial to me. Pair coding is the king!
  • Occasionally, let them solve problems their way, even if it’s wrong. A deep understanding of tools and patterns comes from knowing which exact problems they solve.

Sometimes, doing it the wrong way is the best way to do it.

Conclusion

In my opinion, the factors outlined above are key to a successful mentoring relationship. In fact, my most successful mentoring relationships incorporated all these components:

  • Self-motivation, determination, and high engagement from my protege.
  • Alignment of expectations and my ability to provide appropriate guidance.
  • Humble and grateful attitudes from both sides.
  • Plenty of positive reinforcement.
  • Quality tasks; starting with a simple personal project and gradually increasing in difficulty until full integration into the team’s work.

Thank you for reading this article. I hope you found it helpful or at least interesting. I welcome your thoughts! Everything expressed here is based on my personal experience and is highly subjective. I would love to hear your perspective. Why not leave a comment?

Also, stay tuned for part 2, where we’ll move on to mid/senior-level mentoring and explore strategies for elevating the team.

--

--