Software development is our core business. Like me, many people at Future Processing have been programming since their early teens – you could say it’s in our blood. Clients often ask me for advice on how to create or improve their in-house development teams. My response is almost always the same: there is no simple, magic formula. Creating great teams, in any discipline, relies partly on trial and error.
Having said that, there are some key things organisations and their leaders can do to help their teams perform better. Cutting across all these suggestions is that all-important word: team. I may have been programming for decades, but what counts is what I can bring to, and how I will work in, a team.
Skills are the most obvious starting place. Each software team member needs to demonstrate expertise in one core technical skill for example, technical analysis, design, programming or test skills. Further, they should also have a solid understanding of the software process, coupled with good “domain knowledge”. Underpinning these technical skills is flexibility and the ability to be a team player. People with different expertise – say architecture, coding, or testing – need to be able to work together effectively. If the team is an agile team, then the same team members will need to be able to work together over the sequence of sprints for several release cycles. However, with each release cycle their teamwork should improve. I also believe that team members should be part of a single team and not work in a cross-matrix structure. The single, dedicated team approach encourages commitment and focuses their attention on the project. We find that this delivers better, faster results for our customers.
There is another important requirement for team technical skills: ideally each team member should be an expert in one skill area, but have a working knowledge of another. This means that if one person is off sick, or incapacitated in some way, then there are still enough people with the right knowledge and skills on the team to keep the project running.
Technical Skills, however, are just one element of a great software team. In previous posts I have discussed the importance of softer skills – they are crucial to the success of any software team. The team leader has a vital role to play here, not just setting the style and culture of the team, but also helping to develop the soft-skills of the team.
A good software team is made up from a mix of personality types. The team leader needs to be equipped with the skills to be able to manage this mix, encouraging everyone to work harmoniously. As the team pulls together, trust, empathy and job satisfaction should all increase.
Building this trust requires communication. Team leaders need to spend at least 50% of their time with the team. During this time, as Kimberly Wiefling, the famous US project management coach and author says: “You have two ears and one mouth, so use them in that ratio!” One thing we have found that works well is having frequent whole-team meetings where we encourage every team member to share their thoughts and ideas.
Get the communication right and team-collaboration should be a cinch. As well as straight-forward working together, team leaders and more experienced team members should be willing to mentor junior level developers.
Strong software development teams are also those with a culture of delivery. Much has been written about this, so I will simply provide one tip here: ask team leaders to always commit to deadlines and get all members of their team to do so too, so they always know when everything is due.
Much of this emphasis on skills feeds into creating a strong ‘developer culture.’ My experience with Future Processing, where we have created this kind of culture type, is that it attracts high-quality developers. Plus, perhaps because they believe in our culture and know that we value them, they tend to want the company to succeed and stay with us for longer. And all of this helps to strengthen our software development teams.