Welcome!
Hi this is John with this week’s Developing Skills - Skills for Developers looking to develop their careers.
If there is a topic you’d like to see covered, please let me know by replying to this email📧
How to Coach Software Engineers: A Practical Guide
Coaching is a great way to help the member of our teams to achieve their full potential. Unlike teaching or mentoring, where the focus is on sharing knowledge or providing guidance from experience, coaching is about fostering self-discovery and problem-solving in the coachee.
If you’re not sure whether you should be teaching, mentoring or coaching, check out my article that explains when and how to use teaching, mentoring or coaching.
As a leader, coaching involves helping our software engineers find solutions on their own rather than us giving direct instructions. We do that by insightful questions, listening actively, and providing feedback that encourages personal and professional development. By focusing on the engineer's goals, strengths, and areas for growth, coaching helps them become more confident and effective in their roles.
When to Use Coaching
There are several situations where coaching is particularly beneficial for software engineers:
Developing Problem-Solving Skills: As software engineers we often face complex problems that don’t have one obvious solutions, so we need to learn to select the best option for our specific context. It takes experience to learn how to do this and to have the confidence to do it. If we just tell an engineer what to do, they don’t get the change to develop this skill. So, instead of giving them the answer, coaching encourages them to think critically and develop problem-solving skills
Fostering Independence: Early-career software engineers, in particular, benefit from coaching when they need to build confidence in their own decision-making processes. Coaching encourages independence by helping them work through the challenges on their own in a safe environment.
Navigating Career Transitions: Whether an engineer is moving into a leadership role, taking on more responsibility, or switching to a new technology stack, coaching can help them adapt by addressing their concerns and helping them set clear goals.
Improving Soft Skills: Coaching is useful for improving communication, collaboration, time management, and other soft skills that are vital to a software engineer’s success but aren’t typically covered in technical training.
How To Coaching for Software Engineers
Start with a Foundation of Trust and Empathy
Before we can coach people we need to earn their trust. The engineers we are coaching need to feel that they are in a safe, non-judgmental environment where they can share their thoughts and challenges openly.
Building empathy is key to achieving this, show a genuine interest in their work and challenges, and avoid rushing to judge.
Trust can also be built by being reliable and consistent as a coach. If an engineer feels that you're not fully present or that their concerns aren’t important, they’ll be less likely to engage fully in the coaching process.
Set Clear Expectations and Goals
At the start of the coaching relationship, clarify what the goals are. You both need to have a clear understanding of where they are today and where they want to be.
Use Questions to Drive Discovery
The most effective coaching relies on asking good, open-ended questions that help the engineer think critically and explore different perspectives. Do not offer solutions. Coaching is about helping them them to come up with their own by asking questions like:
“What have you already tried?”
“What is the biggest challenge you're facing with this approach?”
“How would you solve this if you had unlimited resources?”
“What outcome are you hoping to achieve?”
These types of questions push the coachee to think deeper, encouraging creativity and self-reliance.
Create Accountability
To get the most out of the coaching, ensure that they follow through on the actions they've agreed to take. During each session, review their progress toward their goals and discuss any challenges they encountered. This keeps them motivated and responsible for their own development.
Common Mistakes to Avoid in Coaching Software Engineers
Mentoring / Providing Solutions Instead of Coaching
One of the most common mistakes managers make is slipping into mentoring or providing solution. Coaching isn’t about telling someone what to do or checking in constantly to monitor progress. It’s about empowering them to solve their own problems. Do not take over the task or provide step-by-step instructions. We coach when they have the skills or knowledge, but are struggling to apply them.
Focusing Only on Short-Term Goals
While it's important to help engineers achieve immediate goals, such as completing a project or fixing a bug, coaching should also focus on long-term career development. Help them think beyond their current role and consider their future trajectory, whether that’s specialising in a technical area or moving into management.
Not Following Up
Coaching isn't a one-time event; it’s an ongoing process. Make sure to follow up regularly on the engineer’s progress and adjust your approach as necessary. Without consistent follow-up, the coaching process can lose momentum, and progress may stall.
Conclusion
Coaching software engineers is about fostering growth over the medium to long term. By helping engineers develop critical thinking, independence, and long-term skills, coaching can have a lasting impact on their careers and the teams they work with. It’s one of the highest leverage activities you can do for them as a leader.
Two Ways I Can Help You Level Up As A Software Engineer:
I write another newsletter, Coding Challenges that helps you become a better software engineer through coding challenges that build real applications.
I run a YouTube channel sharing advice on software engineering.
Thanks, John, great advice!
Accountability and setting clear expectations are the winners in my experience.
Nothing is worse than hyping up someone for a goal that's not realistic. Or setting realistic goals rather than failing to track them or not dedicating the time required to accomplish them.