(This is the third blog in the series “How to train cross-functional teams”, for links to previous blogs please go to the end of this blog)
The question we ask ourselves in this blog is “does every team member need coding skills?”. To answer this, we first want to clarify that there is a wide range of skill levels. Ranging from “not able at all” to “the 1-in-a-1000 expert”. As we state in the intro, the team as a whole must be able to perform any task that contributes to delivering business value for the client of the team. To be a resilient team, the team must never depend on just one team member, otherwise one absent person will jeopardize reaching the team’s goals. So multiple people in a team must be able to perform a similar task. However, not all need to be an expert. Nor does every team member need to perform all tasks. It is also not required that tasks are done by one team member alone. Two people with an average skill level together may perform a very difficult task, and maybe they can even do that better than an expert on their own.
To clarify our point, we distinguish 3 general levels of coding skills: changing code, setting up code, and setting up frameworks. Changing existing code is often not very complex, so if a fix or small value-improvement needs to be made, most members of a team should be capable of doing such minor code changes. The need for new additions to a system will require that every team has some team members that can write and implement new code. Setting up coding frameworks is a task that doesn’t happen very often, therefore not every team needs someone that is capable of it. Because the team can ask a support team in the organization to do this for them.
Roles in a cross-functional team
Quality engineering as a human activity is about taking responsibility as a group. This ensures that the team as a whole is worth more than the individual team members. Of course, people in a team will assume multiple roles, and most people will have their preferred role. The generic roles in a cross-functional team are Business Analyst (who translates business requirements to clear tasks for the team), Developer (who creates pieces of IT, such as program code), Operations person (who takes care that IT systems are deployed and maintained in service) and Tester (who verifies, validates and explores pieces of IT to establish their quality level to support confidence in business value). Other specific roles in teams are also possible, such as architects, non-functional experts (e.g. security and performance). And of course, a product owner, scrum master, agile coach and other stakeholders also play their part.
Essential for a team that wants to perform all tasks, is collaboration between team members. This starts with appreciating each other’s capabilities. Next, team members must be interested in the capabilities of other team members and be willing to join forces with any other team member to perform a task. This is done in pairing (two people) or mobbing (entire team collaboration) sessions. And while working together, team members must be actively involved to learn from each other (where experienced people also must be open to learn from less experienced people!).
How, you may wonder, does the team ensure faults don’t lead to problems in live operation? One important part of collaboration is taking responsibility together for the achieving the right quality level of the system. For example, by using the principle of pull requests where the team member that changed code, asks another team member to review the code and if the change meets the quality standards, then the code is pulled into the main branch. Thus, quality is always a joint responsibility.
Conclusion: Does every team member need coding skills?
Based on the discussion above, you understand that we have a clear opinion: No, not every team member needs coding skills to be of value to the team.
But every team member needs to be interested in the expertise of the other team members and needs to be willing to collaborate on any task. If there is a complex and difficult coding task, that may be perfectly performed by the best programmer in the team working in a pair with a team member that doesn’t have coding skills but has a very open and critical mind, who keeps asking questions to ensure that the best solution is created. And in the process, this team member will pick up new coding skills too.
On the other hand, the expert coders in the team must not mind if the simple coding tasks are done by team members that have fewer coding skills, so that the team as a whole increases their coding skills and becomes more resilient and able to quickly solve problems even when not all team members are available.
This blog has been co-authored by Rik Marselis
(This is the third blog in the series “How to train cross-functional teams”, the first blog of the series is here: How to train cross-functional teams, the second blog is here: How to be a good crossfunctional team member )