In recent years a new skill introduced itself to the software industry - the full-stack developer.
While back in the days there was a clear dichotomy between front-end and back-end developers, nowadays we find more job positions requiring the full-stack skill, where full-stack means mastery of both disciplines.
This new reality got me thinking -
When talking "teams" the first thing which pops to mind is sport. Sport teams are a familiar model we all know and can relate to. We fully understand how teams should work and more so, how each team member's role contributes to the joined effort of gaining the best outcome.
We can all agree that sport teams have evolved across many years to become what they are now, while what shaped them was the end goal of gaining more points and thus winning the game.
The member roles of, say, a basketball team are well defined. Sure, they all are "basketball players" but each has his/her own role in the team. Each knows where to be in offense or defense time and what's his/her part in preventing or scoring game points. The same applies to soccer, baseball, volleyball and the list go on. Each player, while mastering the basic skills of the game, is specialized in a certain role s/he has.
Comparing this model to the software teams model started raising questions in my mind -
We see that more and more software teams are constructed from full-stack/generalist developers, which, if to refer to the sports analogy, means that each member of the team masters all the roles the team requires.
To make the argument stronger, imagine that the striker of a soccer team will be replaced by the fullback during the game and the team's overall game will not be affected whatsoever.
This just does not make sense, right?
Yes, both players know to kick the ball and fully master the rules of the game play, but we also know that fullback is lacking the required skill and experience the striker has and
if the fullback will replace the striker the chances of the team scoring a goal will dramatically reduce.
So how come we feel that the situation and outcome are different when it comes to software teams?
Each skill of a software development role requires immense amount of knowledge and experience. Although many claim to master both front-end and back-end skills (as a full-stack developer) the harsh truth is that it is never the case, simply because BE and FE are 2 different disciplines which require a different set of skills, experience and some might say - different developer's characteristics.
Is it possible that the software industry started taking the team different roles lightly?
Is mastery not relevant anymore in the software industry?
Can a software team made of full-stack developers produce the same products, both in velocity and quality, as a heterogenic team can?