The evolving meaning of terminology
Is it just me, or is the term "Full Stack Developer" becoming more and more overloaded?
It seems the only prerequisite for being a "Full Stack Developer" is that you dabble in both frontend and backend development, it doesn't matter if you're a junior or senior developer, and it doesn't matter if you're proficient in both.
Roadmap.sh actually does a good job of illustrating, a lot of the knowledge necessary to be a "Full Stack Developer", though it is heavily biased toward Web/JavaScript development. This highlights the problem that there is no shared understanding of the terminology. Looking at the bottom, they include "DevOps", oh, here we go....
The "Jack of all trades, master of none" Myth
in reality DevOps was supposed to be a culture, not a role, but I guess that ship has sailed, you can't control how terminology evolves. Nowadays, it is mostly a buzzword that is used as a replacement for Operations / System Administrator roles.
In much the same manner, "Full Stack Developer" has also changed meaning over time. At its essence it is largely about knowledge of more than one "stack", and how it all fits together, regardless of the programming language.
The saying, "Jack of all trades", comes to mind, and the funny thing is that "master of none", was not originally a part of the saying, and I believe that having broad knowledge doesn't mean you can't have deep knowledge at the same time. I mean, of course, some will have deeper depth while others have a broader breadth, but I firmly believe knowledge isn't linear.
Sphere Of Ignorance
You only need to get to a certain stage of knowledge before you hit diminishing returns, so figuring out how much you need to know to figure out what you don't know, if the situation arises, is an incredible strength.
I like to refer to this as a "Sphere of ignorance", where you have a certain radius of knowledge, and you know the boundaries of your ignorance, and through that, if you start pushing on the boundary, you can explore it when needed, but until then, remain blissfully ignorant of the complexity.
An example of this is using a service such as Vercel to host your website and manage CI/CD versus "simply hosting it on S3", because, let me tell you, you don't just simply host it on S3 if you want to do it properly... I've done it, and there is a lot of things to consider.
Stages of knowledge
I like to think that knowledge is gained through time and effort, but it isn't linear, and it's shaped by motivation and environment.
Consider the Dreyfus model of skill acquisition, it describes five stages of skill acquisition. I've given my take on it here:
- Novice: Follows rules and procedures without context, focusing on basic task execution without understanding the bigger picture.
- Advanced Beginner: Recognizes patterns; can handle small tasks with guidance. Still struggles with more complex problems due to limited understanding.
- Competent: Plans and executes projects independently. Understands long-term goals and uses deliberate planning.
- Proficient: Intuitively solves complex problems; applies best practices based on experience. Sees problems wholly and anticipates issues before they arise.
- Expert: Innovates and mentors others; no longer relies on rules and draws on deep knowledge and experience instead. Adapts easily to novel situations.
A great saying that floats around in the industry, is:
Some people have ten years of experience, others have the same one year of experience ten times. - Unknown
A lovely thread on Reddit on the subject - I hereby dub it the "10x1Exp Engineer".
To put it into my context, this would be a result of a way too small "Sphere of ignorance", where you solve all problems with a hammer, because you know of no other tool.
Introducing the "Complete Stack Developer"
So even before a lot of these newer titles, I've always joked that I am a "Complete Stack Developer", as I've been around quite a few "stacks".
During my studies, we did Java GUI development, Web development, and Android development. I was also lucky that at my first job, I got to wear so many hats, as that was just what was "required". We were a small team of 4-5 people, and we had to cover all areas. That meant that, at times, I was doing a lot of frontend work, then some Android, then backend, then administering servers, then provisioning infrastructure in the cloud, then setting up IoT devices. I mean, it never ends, there is always something new to learn or do.
At some point, narrowing down yourself to a "Full Stack Developer" just seems ridiculous, as would calling yourself a backend or frontend developer. It completely fails to encompass the whole picture.
Take, for example, these two radar charts, both of these are possible representations of a "Full Stack Developer", but they are very different.
In my opinion, "Software Engineer" should suffice, (unless you're in Canada, then you need to figure something else out), we're first and foremost problem solvers, and for the time being, we're using software to solve them.
So, I've decided that if we're all playing games, perhaps I should just call myself a "Complete Stack Developer". Maybe then it'll challenge people to think twice, before they try to fit you into their narrow terminology.