What does it mean to have a cross-functional software development team? This week’s letter discusses this in more detail.
❓ Why are my cross-functional SW dev teams not effective?
💡 Cross-functionality is seldom enough for SW development teams to be highly effective.
📚 Cross-functional teams are groups of people with various specializations who work together to achieve a common goal.
This definition might break Semantic Diffusion but introduces further vagueness to SW development teams.
Given the nature of SW development, it is likely not enough that the team is just a cross-functional one. It should also have overlapping skill sets of team members.
Sadly enough, companies often consider that the opposite is true – they simply cram together individuals with disjunctive skill sets and expect the cross-functionality to do its wonders.
Notorious examples include (but are not limited to):
➡️ developers specialized in frontend-only or backend-only,
➡️ having strictly segregated “frontend tasks,” “backend tasks,” or “QA tasks,”
➡️ “developers are not testing” mentality,
➡️ “this is a development task, and I am QA,” etc.
❗️ Having an effective SW development team means not just having cross-functionality, but overlapping skill sets of team members as well!
💡 Fortunately, an SW engineer by definition already has more than enough skills overlapping with other SW engineers, regardless of their specialties.
💡 Tap into those; unlock the full potential of your SW development team!
❓ Why are overlapping skill sets within a cross-functional SW development team important?
💡 SW development teams are a special kind of cross-functional team.
📚 So having overlapping skill sets is crucial for software development teams.
Developing software is, first and foremost, an exercise in knowledge acquisition. Via trial and error through the software development process, the validated knowledge is accumulated, and as a very convenient consequence, the running software is built.
Accumulating the common validated knowledge across specializations, as well as within them, is of great importance.
Having non-overlapping (disjunctive) skill sets inevitably results in a sort of siloed knowledge; trying to break out of those silos requires transforming the ideas and knowledge before they could be transferred between silos.
❗️ Such transformations are always degenerative!
💡 Formulating ideas so they can be transferred from one’s mental model, results in a kind of LOSSY COMPRESSION of data (ideas and knowledge).
💡 Conversely, trying to fit those formulated ideas into another’s mental model requires a great deal of guessing to fill in the gaps required by receiving side.
In addition, the mental models are bound to be different, so this loss is guaranteed.
💡 To maximize the quality of ideas and knowledge exchange within the team, ensure that there is enough overlap of knowledge and skill sets.
❓ My developers claim they are specialists. How can I tell if they have overlapping skill sets?
In order to have a group of individuals with no overlapping skills, a) their knowledge must either be wildly different from one another or b) have an extremely narrow knowledge area or “I-shaped” skill set.
For a group of software engineers, the chances of a) happening are close to zero.
For software engineers, on the other hand, it is unlikely to have such a narrow knowledge area to be considered “I-shaped.” This is something that might be the case for junior students or absolute beginners in software engineering, though, which is most likely not the case with your teams.
Aside from learning the very basics of computer programming, every other concept builds on others, not only accumulating knowledge but widening the understanding. In addition to learning a programming language and/or a framework, there are chances one will learn about protocols, APIs, structures, algorithms, patterns, testing strategies, databases, etc.
This widens the base knowledge in addition to a “spike” in expertise, widely known as a “T-shaped” skill set.
But having a narrow focus on just one particular area is so rare in software development, that most engineers end up with more areas of expertise, resulting in “π-shaped” or “m-shaped” skillsets, with multiple expertise “spikes.”
💡 Instead of yielding to excuses, look for opportunities to harness the knowledge every software developer has in addition to their narrow expertise!
❓ Aren’t multi-skilled developers a sort of unicorn, i.e., impossible to find?
📚 As described above, there are different models describing individual skill sets.
The prevailing view is that individuals within SW development teams are narrowly-focused experts, e.g., FE, BE, QA, and such. That describes the famous “I-shaped” individual skillset – narrow expert skills or knowledge, with little to no relevant ones outside the chief area of expertise.
That, of course, assumes that a “T-shaped” skill set leads to unicorns, i.e., developers who are experts in, for example, both FE and BE (and possibly QA.)
❗️However, this is a blatant oversimplification.
🔎 From one perspective, those respective fields of expertise are so expansive that they form their own skill set shapes.
🔍 From another perspective, skill sets are multilayered, so those narrow areas of expertise build on broader, more common areas of knowledge, which lead to building larger skill sets.
For example, it sounds reasonable to expect that there are at least various levels of knowledge of business and functional analysis, software design, and varying levels of QA expertise among ALL team members.
📚 Everything described here provides a required skill set overlaps within a cross-functional SW development team.