There is this kinda big thing in economics called “division of labor”. I believe all of us have heard about it in high school. It’s all about specialization - narrowing skillset to become a true master in one and mostly one area. The question has been around for quite some time already - Plato was writing about it, Carl Marx and Adam Smith were writing about it. So how come such an old question is still relevant in the modern world in the context of such a young discipline as software engineering? Is full-stack dev a real thing? Or is he a master of none?
The main problem
Developers like to argue, boy they are. The actual reason why developers are arguing is complexity. For instance, when two backend developers are searching for a solution on an architecture problem they might have two totally different, but still valid ways, on how to tackle it. Of course, there are lots of situations where a better solution is obvious, but there also are plenty of situations when it’s hard to say. The reason for the latter is because no one can completely put the whole problem in a single brain. Yes, devs have “abstract” and “split the problem” tools in their toolbelt which helps. In an ideal world it would be it. But we have deadlines :). Also, most of the time to be sure something works is to implement and try it (hello Agile). Each separate discipline has its own rabbit hole. Under such conditions, it’s natural to have “holy wars” from time to time. If in the future there will be a reincarnation of crusades then developers 100% will be hosting the party.
Full-stack or fool-stack?
Coming back to the division of labor. The development part of IT world, roughly, has UX/UI designers, front-end devs, backend-devs, DevOps. So can one person possess enough knowledge in each area to be good at them considering the complexity of each one? Back in the day, I was working with a great delivery manager (hi Victor) and he once said “I do not believe in full-stacks”. My specialization at that time was solely back-end development, so of course, I had nothing against that statement.
Specialization seems logical. Time is not infinite so we must choose areas of interest and master our skills there. We can not directly upload skills into our brains like in the Matrix movie. Elon Musk is our hope regarding that issue, but we need to accept the current situation - repetition, effort, and time are needed. So the solution to mastering something as fast as possible is to dedicate as much time as possible. Considering all of this is it full-stack or fool-stack?
The turn
Taking into account time constraints it seems logical that the one who spends more time honing the skill the better he’ll be at it. But life is not that simple (thank God).
While we partly are in economics context here let’s bring what Carl Marx was saying about the division of labor: increasing the specialization may also lead to workers with poorer overall skills and a lack of enthusiasm for their work. He described the process as alienation: workers become more and more specialized and work becomes repetitive, eventually leading to complete alienation from the process of production. The worker then becomes “depressed spiritually and physically to the condition of a machine.” source - Wikipedia.
From my personal experience, I know this is true. After I’ve started working on the frontend, except only on the backend, it became a lot (like a looot) more interesting to work on stuff. Instead of just working on a part of the problem you can implement a solution from start to finish. The most rewarding part of it is that you become closer to the end client, which leads to a better understanding of the project, which, in turn, makes you more valuable for the business.
Diversity in knowledge helps career growth. One can go deep or go wide. Of course, deepening knowledge in one area is great, but if one plans to move up the career ladder then going wide would be more beneficial. To manage a plant one needs to know at least in general how different parts operate, in contrary to knowing perfectly how a single machine tool works.
Diversity fuels progress
Expanding Marx’s argument furthermore - a widely-knowlegable person has more chances to come up with new ideas because innovative ideas are lying at the intersection of different areas and disciplines. And, of course, there is a fancy name for it - The Medici Effect.
If you look at how the frontend was evolutioning over the last years you’ll spot interesting fact. Back in the day JQuery was state of the art. It was when design patterns have already been a thing for a long time on the backend. Code splitting on frontend? Well, there was some, of course, but it was still based on separating script tags in html document, not on the build process. Now look at frontend today - WebPack is even more woodoo than Java’s Spring framework (lame example, I know, but I don’t really like Java and this is my blog, so fuck it). How did that happen? Simple - backend developers started doing frontend. Patterns, processes, ideas started to spread. So, a little bit of inductive reasoning gives us: more generally knowledgable people tend to have more impact on the disciplines they are up to.
The end
Yes, the topic is general and opinionated. Once I’ve heard that there is no such thing as a good full-stack developer so I avoided it for some time. But the truth is that it was only an opinion. If there will be a single thing that you’ll remember from this article let it be this - question everything. You can write your opinion about the matter in the comments section. Just kidding - there is no comments section here. Haha, I fooled you :)
Not taking into account my stupid jokes… If you have any kind of feedback regarding my writing feel free to email me - mykola.kecha@gmail.com. I’ll be more than happy to respond. Cheers.