When a new software project is starting, a new team needs to be put up together according to the client and the project’s needs. Ideally, the team should be composed of highly skilled members with the adequate knowledge in the technology stack as required by the project’s architecture. Taking into account the availability of the developers within the different projects in the company and the recruiting process in place to on-board new hires and the costs associated, teams end up having a mix of highly experienced and junior developers. What usually occurs is that a few experienced engineers with different background join the team while some others less experienced are given the chance to acquire some new skills and knowledge as the project unfolds. The trick here is: how to make those less experienced developers improve their skills and motivate them to become the future leaders in this and other projects? I will try to elaborate on some techniques that in my experience have given good results:
To be able to demonstrate how the company works, the best way is to have the people work on a real project right away. But working on a real project is risky, so we setup a fake project where the people get familiar with the methodology and the environment. This training makes emphasis on the methodology, which is important across all projects no matter the technology skills needed. The fake project help us on-board new hires, they work on user stories, get familiar with general agile and scrum methodology concepts and they actually develop their own user story, it gets peer reviewed, tested, deployed and demoed to product owners.
On demand training
As the initial requirements of the project start to come up and the technology stack is identified as detailed as possible at that stage, we need to match the skills that the team has and the skills the project needs. In order to start the first sprints/iterations with a team that can handle the client’s expectations, team members need to be trained according to those needs. What we usually try to do is find experts inside the company that know the technology the new team needs to know about. It is a good idea to keep track of people’s skill in your company, so everybody know who can they reach if they want to know about something or get help. A small training plan comes up and these experts take care of the training and we arrange the needed sessions to train the team, using different on-hands teaching techniques, such as workshops or coding dojos, among others. If the knowledge is not found inside the company, outsiders are hired to provide the training.
When the desired skills are present in some of the team members, one of the most powerful techniques to spread the knowledge is to do peer reviews. This technique allows less experienced developers get feedback on their work and also allows the reviewers to strength their coaching skills. A good practice to accompany the peer reviews is to do a periodic development meeting, where the reviewers present to the whole team the most common mistakes and/or key concepts that they think are worth sharing with the whole team.
This technique is basically the peer reviews taken to the extreme. Teammates work together in the same task (and on the same workstation), one of them having more knowledge than the other on the technologies and/or the business, so the less experienced developer gets up to speed more quickly than doing it by him/herself. This technique is very helpful specially when we need to on-board people to an existing team very quickly, or when we need to acquire knowledge from the client: we set up pair programming sessions that allow a full immersion in the development methodology, the technology stack and the business model, according to the team’s needs.
Encourage knowledge sharing
So you think you know Docker? or TDD? or even basic stuff like OOP? Think twice! When you want to share what you know with others and start structuring all the information in your head and you are preparing a presentation, you realize maybe there’s a few things you need to clarify first. Giving a talk in your local community or having a scheduled tech meeting, like a lunch & learn, open space, etc., makes you study the subject more deeply and have all bases covered. Encouraging your teammates to give short talks about a topic is challenging and stimulates the person to clarify all concepts they want to talk about.
Making a team acquire new skills is a combination of providing them with appropriate tools and techniques, and their personal will to improve as software developers. You need to provide an adequate and stimulating environment that can be leveraged by all types of developers with any kind of backgrounds.
What else has worked for you?
Post originally posted on medium.