Full Stack Developer, Master of None
In my previous post, I was asked:
Is it reasonable to look for a developer who knows all the complexities of backend development (Particularly for the enterprise, at least while designing distributed applications or Micro-Services) and expect them to know React, Angular, TypeScript, and many other front-end technologies on the same level?
In my experience, it is absolutely possible to have someone who is fluent in both front end (React, Angular, etc) technologies and backend technologies (databases, k8s, distributed systems, design patterns, etc). I can point at two or three of them without searching too hard. The problem, however, is that while it is possible, it is also rare. The people I have in mind who qualify for the full stack developer moniker are also people with about a decade plus of experience in the field. And make no mistakes, I don’t include myself in that category. I can use a user interface, but don’t ask me to build one.
For the most part, I see people who exists on a spectrum, and are typically strong in certain areas and have passing familiarity in others. For example, you may have someone who is very strong in building client side user interface and calling back to the server, with some ability to create their own server side endpoints, but without the capabilities to build a full server side solution from end to end. On the other hand, someone who is capable of building the server side, maybe do some client side work, but is stumped on the more complex issues on the client.
Now, I’m speaking in generalizations here, because I’m talking about large segments of developers, not individuals. But this seems to hold true for large swaths of them. It also make sense, there is quite a bit to learn, and you can either be a butterfly and skim through a lot of subjects, or you can dive deeper and become an expert on a few topics.
Either option has its value, but it is important to remember that each also has its costs. If you have dipped your toes into many areas, you don’t usually have the depth to actually handle the more complex and non trivial stuff. For example, I would generally not expect someone who spent most of their time on the client side to be aware of everything that needs to happen for a proper server side caching solution.
When talking about skills in an area, I’m talking about being able to develop, support, debug and maintain such a solution. Everyone can write code in most areas, but it takes effort, skill and knowledge to take a piece of code and turn that into production software.
The term full stack developer is a way to punt. It usually says “I do a little bit here, and little bit there”. There is some meaning here, in the sense that these are the people you’ll turn to when you want to build a full application from scratch. The problem is that they are usually only able to deliver an application that does OK across the board. When you need to do more than OK (and I’m willing to admit that in many cases you don’t), you start to need to specialize. And that takes time, and effort. I would rather the term application developer, rather than full stack. If seems to be more accurate and it doesn’t ping my spider sense about false advertising.
Comments
I totally agree and I simply doesn't understand why this is becoming so usual recently.
The implications of what "Full Stack" means is very different from what it was ten years ago. The number of languages, platforms, libraries/frameworks, preprocessing, postprocessing, build tools etc have proliferated to the extent today it is simply not possible for the average dev to become expert on the same level.
Application developers should be able to handle the whole application - if a developer can only touch a part of it then it's not an 'application developer'. Or maybe there are too many frameworks in the mix?
Congratulation for the post! I completely agree with you!
I will only do full stack development, if I will also do all management tasks myself, so no managers around! (If I can do everything development wise, a company should trust me enough so I don't need any management at all ;) ). This my only condition to any company requesting Full Stack.
There are always many ways to provide robust, efficient, user friendly solutions.
The tools that last are well supported, maintained and documented. What you don't know, you can learn, quickly. Sadly(?) nothing is quick enough, or cheap enough, for most clients.
They have been spoiled with powerful tools that took years to build, and are shared freely or available at very "competitive" prices. So have we. Our tools do almost all the work just by plugging them in. It is the little bit that doesn't quite fit that makes us necessary, keeps us busy, learning, frustrated &or entertained. The little bits that provide the challenges, and learning opportunities that make projects worth the effort.
That's why we have coffee, and "enthusiasts" who need challenges ☕😁.
Being full stack or being an expert in one or two technologies does not really matter. Are your skills more than sufficient to get the work done effectively and are you open to learning new technologies ? If so , then you fit into the right environment at this time and should be able to move to another in the future.
After 40+ years as a programmer, designer, data architect, analyst, manager and consultant I have found that on-the-job requirements don't always repeat themselves very often. So, my experience tells me that when I encounter a task, I should do the appropriate research on the issues and existing solutions that are out there anyway regardless of what I think I might know.
Knowing the issues, tradeoffs and lifetimes of certain approaches is the most valuable to me on all assignments I may encounter.
The technical details of any task always change (not always for the better) and full-stack to me means that I have had hands-on exposure to these elements at sometime in my career.
I always ask "What do you mean by full stack, or how do you define full stack" when ever I interview for positions calling for one
Kinda like the way I ask for their definition of Architect
@Charlie: that is exactly how I think after 32 years of coding.
@Oren: Yes Oren nobody is an expert in everything as there is always more things to learn... now this post is more whining to me then anything else as we all have some issues with hiring whatever experience some have. For example as I'm a self employed developer I only work from home and most of the companies are really afraid of that even if today there are sooooo many communication options. And yes this is my "whining", but who cares, my search continues and there are always companies who are more interested about the product, then about controlling the personnel... and yes there are always pluses and minuses everywhere. :)
And just a side note... I've meet a lot of programmers working only with one language and they didn't know anything.. they didn't want to learn more about it... "the if, switch and for are all I need". So in the end maybe 'full stack' means that this person is willing to learn?
Mostly agree with statement of @Waldemar. What i found that "full-stack developer" corresponds to a software developer who "never stop learning new technologies and employ them in projects", and able to produce a MVP (minimum viable product ).
In other words, full-stack developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology. That would also assume that application will not be production ready on its first release.
There is also "Full-stack die-hards" - well that are the once that @Oren refers as few :))
I disagree that everyone needs to specialize, or that necessarily that's where they have to get to in the end. Not everyone has a one-track mind, as one could say. Some of us think better when able to construct an entire concept in our heads end-to-end. Some are better off specializing. Some of us are better when we can see the bigger picture, some don't really care.The best way to work pulls all those different skills together in a team, so specializing is fine, as is "multipotentiality". The only thing I agree with is that all full-stacks will inevitable fall somewhere on that spectrum with some areas stronger than others before hitting a certain amount of experience.
I'm capable of editing files that can interpreted by many JITers. ;-)
I joke, but I find the boundaries are elsewhere. Building a backend and a web or mobile based front end is trivial compared to coming up with a decent UI/UX design for the front ends. More than the look and feel, a design that actually informs, or mandates, the entire application flow.
Comment preview