Developing the expertise of software developers is crucial to your team’s success. When your team has the opportunity to learn and develop new skills, they become more efficient and productive, resulting in faster projects, better quality work, and less technical debt to address later on.
What’s more, engineers who are invested in their own growth and development are likely to be more motivated and engaged in their work.
They may be more willing to take risks and experiment with new approaches, which can lead to innovative solutions and product improvements.
At Wealthsimple, we organized a two-day event for our R&D team to focus on their professional development. Before the event, I asked our executive team, engineering managers, and the developer tools team to identify the key skills to focus on.
With their input, we crafted customized workshops aimed at enhancing these skills.
The result? 82% of folk said they learned or enhanced relevant skills for their current roles and day-to-day. To quote one engineer, “Understanding more about the technologies Infraplat uses lets me better self-serve and not burden that team in the future!”
However, you don’t need a dedicated event to develop your team. As an engineering manager, how can you elevate your team and keep your engineers motivated and engaged?
Start by assessing the skills your team needs to improve, or which areas require deeper expertise. For instance, are you migrating to a new technology, with only a few members experienced with it?
Or is your team working in a legacy code base and unfamiliar with the latest features and best practices of Ruby on Rails? Maybe you’ve been encouraging difficult issues to debug, and you need to enhance the team’s knowledge of debugging and observability techniques.
Or perhaps you need to invest in improving performance for the first time, as users are complaining about the experience. Identifying skill gaps is essential to ensure that any learning and development you invest in will also improve your team’s results.
Now that you have a solid understanding of which skills to invest in, here are four methods to help you level up your team and develop its software engineers.
Collaborate with individual team members to identify skills they’d like to enhance that will contribute to the team’s success. Then, work with them to choose suitable books, online tutorials, and courses to deepen their expertise.
Hold them accountable for doing it; they’re more likely to make the time and focus on the areas that are the most beneficial and relevant. For example, one developer at Shopify spent an hour each Monday reading a book we’d identified together on the latest version of Ruby on Rails.
She then used what she learned to review the code of more experienced developers that didn’t know the latest best practices. This proved to have an immediate impact on the quality of the code we were writing.
If you’re migrating to a new language or adopting new libraries and frameworks, consider learning together as a team. Various teams I’ve worked with have established book clubs and lunch-and-learn sessions.
Create a fun name and establish a recurring touch point, either as a meeting or as an async check-in where everyone shares what they learned. One leader at Wealthsimple curated videos and tutorials to help develop his team’s expertise with Ruby on Rails.
They followed these together because previously they’d mostly been developing in Java.
When we hired a few developers with limited experience in Ruby on Rails, a different developer adapted the curriculum to run a Ruby on Rails club open to anyone at Wealthsimple.
They’d watch, read, or complete the tutorials weekly, then meet to discuss what they learned and get help where they got stuck.
Eventually, I invested in getting access to LearnEnough, and they completed the relevant courses together. These initiatives often have an impact beyond what can be immediately seen or measured. The engineer who spearheaded the initiative had this to say:
It deepened our knowledge on our main tech stack and reduced “ramp up time” for engineers new to the company. A side effect was meeting and getting to know other engineers across the org so we had direct contacts to reach out to for cross domain projects.
By implementing a custom program tailored to each team member’s needs and learning together as a team, you can not only deepen individual expertise but also foster cross-domain collaboration and reduce ramp-up time for new hires.
Pair programming is a great way to enable one developer to learn from another that’s more experienced with a specific skill they’re looking to develop. In pair programming, two developers work together on the same problem.
Usually, one person writes the code, while the other person provides input and reviews it in real time. More advanced dedicated pair programming software such as Tuple makes it possible for both developers to control the mouse and keyboard.
This is an effective method for deepening knowledge such as learning the latest best practices, advanced debugging techniques, or navigating a specific area of the codebase that isn’t well documented.
These are the types of things a developer might not even think to research or proactively try to learn about since they have ways that are working for them already.
I can’t tell you the number of times I’ve overheard someone say something about a quick script or hack they learned after completing a pair programming session.
As a manager, if you haven’t used this technique before, an incremental way to get started is to identify someone with expertise in the skill you want to help your team member learn.
If that person doesn’t report to you, you’ll want to vet it with their manager to verify that it’s a good match and to ensure they create the time for it.
Then, ask your team member to proactively set up pair programming for a set amount of time. I usually like to recommend 1 test session, followed by 1 hour a week for 4–6 weeks if they both agree that it’s a good match after the first session.
If you’re an engineer that hasn’t tried pair programming before, an easy way to start is to proactively identify who will likely review the PR you’re currently working on. Then, ask to set up a session with them to get feedback when you’ve completed the high-level outline of what you’re implementing, but are nowhere near done.
If you’re actively working to develop a specific skill, let them know to pay extra attention to it so that they elaborate in relevant areas and don’t hold back any feedback.
Building on the above, mentorship can leverage additional methods to help someone develop or enhance a skill. In a mentorship program, the mentor and mentee are also matched based on their skills, interests, and goals.
To make the most of a mentorship program, I recommend that mentors and mentees have a formal kick-off session where they agree on the objectives of the relationship, how often they will meet and for how long, and whether they will collaborate between sessions.
Mentors can participate in whiteboarding sessions, complete code reviews, and answer questions. They can also provide regular feedback to help guide additional learning.
It’s important to set expectations with your team members that it is their responsibility to lead and take ownership of their development in order to get the most out of the mentorship experience.
This can be paired with other materials, such as books and tutorials, using the sessions to answer specific questions and to review the mentee’s work.
In addition to formal mentorship programs, you can also leverage more informal mentorship to address gaps in skills or context on your team.
For example, when working on draft orders for Shopify, we scheduled whiteboarding sessions with experts on how the checkout component worked to brainstorm and get feedback on aspects of the designs, and then relied on ad hoc code reviews for additional feedback.
This led to one member of the team developing much deeper expertise in checkout and orders, so we didn’t need to rely on another team after the initial project.
What’s more, by building a relationship with the checkout team, we were able to influence the APIs that they were designing at the time and launched more consistent APIs that were easier to interpret and use as a result.
Stretch assignments are tasks and projects that challenge team members to learn and apply new skills. Offering these opportunities helps team members gain valuable knowledge, skills, and experience beyond their current job responsibilities.
Stretch assignments can level up your team by increasing motivation and engagement, encouraging creativity and innovation, and fostering collaboration and teamwork, all while building new skills.
“72% of high-performing teams report that they are given stretch assignments, compared to only 34% of low-performing teams.”
— Deloitte
For many developers, these opportunities exist within the scope of the team and projects or issues that are already on the roadmap. Some examples might be:
These types of stretch opportunities are often great candidates to pair with any of the above methods, to ensure that they have the tools and support to learn the new skills they’re practicing.
For more experienced software developers, you might challenge them instead to solve problems that have an impact beyond your immediate team. This is of particular importance for senior developers that aspire to become staff engineers.
Some ideas to get you started:
Lead an initiative to improve the experience of members of an employee resource group.
Developers often have great ideas for issues and opportunities that can be used as stretch assignments but may need mentoring on which will have the most significant impact, when to work on them, and how to scale them effectively.
For example, our products team at Shopify spent a large amount of time debugging performance issues, which often were solved by optimizing individual queries.
This proved particularly problematic for calls made via our REST API, which used an outdated pagination strategy that translated to very expensive SQL queries.
While improving individual queries was providing short-term gains, we’d eventually need an exponential improvement — one that could be provided by changing our overall pagination strategy.
One of our developers recognized this issue and pointed out that our current optimizations wouldn’t be sufficient in the long run.
However, addressing this problem was a challenging task that required learning when to begin and how to navigate through prototyping, implementation, and eventual release of a major, breaking, API change.
This was a stretch assignment that required the developer to build and collaborate on a solution that impacted over a dozen teams and hundreds of public apps.
Developing the expertise of the software developers on your team is crucial to achieving success in today’s fast-paced and constantly evolving technology landscape.
By proactively assessing your team’s skill gaps and adopting a range of proven learning and development strategies — such as books, tutorials, courses, pair programming, mentorship, and stretch opportunities — you can effectively level up your team, drive greater productivity, boost quality, and foster innovation.
Moreover, investing in your team’s professional growth and development can have a profound impact on their engagement and motivation, ultimately leading to higher retention rates and a more cohesive, high-performing team.
It doesn’t matter what you try. Like all things engineering, just pick one method, and iterate!