Dismantling the Full-Stack Buzz
Historical analysis and revisions
Full-stack terminology is buzzy as an angry bee locked in a tin can trying to attack you with a 10,000-volt taser. I just read an article telling me what a full-stack designer is. It seems that both words, "full" and "stack", have lost their meaning; they are mushed together just to make a cool sound signifying nothing but some general nonsense.
Compared to other buzzwords like DevOps, it’s hard to find any decent definition for Full-Stack Developer, even in professional discourse. It’s time to put an end to this! After reading the article you will have a deeper understanding of how the title "full-stack developer" has been used and how it is used today. I’ll also give my recommendations on how to turn down the buzz as much as possible.
Originally published Oct 12, 2018, on Hackernoon.com
I have occasionally used the term "full-stack developer" to describe myself. I first started to use it when I was asked if I was more of a back-end or front-end guy. I couldn’t make the distinction. After hearing about the full-stack title I started to use it. For me, it just meant doing both back- and front-end without specializing in either.
I didn’t give it too much thought until later when I noticed some controversy around the title. Full-stack prefixes started to feel dirty. It was cool to say the F-word while marketing myself, but with some fellow developers, it caused awkward silence and even some requests to wash my mouth. I was confused and decided to explore the true meaning of the title.
My journey began by searching for a widely accepted definition of the term by reading blogs. I read many of them and ended up even more confused.
I found long lists of different skill sets a full-stack developer must have. On the other hand, I found very loose definitions, some of which could give almost any web developer a full-stack status. Others were thinking a full-stack developer is someone more experienced than a senior developer while others were talking about junior to mid-level full-stack developers.
Some people said that it’s not even possible to be a full-stack developer, but employers didn’t seem to listen. I glanced through job listings and found a LOT of open positions for full-stack developers.
If employers were hiring full-stack developers, they had to know what they were doing, right? I started digging into the job offers for an answer, but there were too many different requirement levels lumped under the same term. I couldn’t get a clear picture of what the common factors were.
At this point, I felt I had to go deeper. When and why did all this begin? My journey took a turn, into history. ← Lower your voice for the last words to get in the mood.
I tracked the history of full-stack terminology back to the following blog post by Randy Schmidt, written in 2008.
It’s a mythical story about three heroes, called full stack developers, who could do “design, markup, styling, behavior, and programming” and could single-handedly spin up glorious websites and applications. Amazingly these people and applications really did exist. So seemingly it wasn’t impossible to be an actual full-stack developer, at least by the original definition.
So, what happened? Why are some people so upset about using the term? I started to understand this, as I went forward. A later influential piece from 2010 is a post from Carlos Bueno who was working at Facebook at the time.
The Full Stack, Part I
engineering.fb.com, December 02, 2010, Carlos Bueno
He refers to Schmidt’s post and offers this definition.
A “full-stack programmer” is a generalist, someone who can create a non-trivial application by themselves.
People who develop broad skills also tend to develop a good mental model of how different layers of a system behave. This turns out to be especially valuable for performance & optimization work. No one can know everything about everything, but you should be able to visualize what happens up and down the stack as an application does its thing.
After this, he gives an example of a performance problem where in-depth knowledge of a technology stack, down to the hardware level, helps to solve the problem better. The post is apparently about large and complex applications not built by one individual. It seems that Bueno’s post has already derailed the discussion from the original definition.
Later posts on the subject use the term in the context of large teams, complex stacks, and millions of users. The original meaning was lost. We see this in the next post by Laurence Gellert from 2012.
What is a Full Stack developer?
laurencegellert.com, August 01, 2012, Laurence Gellert
To me, a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.
Good developers who are familiar with the entire stack know how to make life easier for those around them.
Here’s another influential piece from 2014 written by Mike Loukides.
radar.oreilly.com, April 04, 2014, Mike Loukides
Sometimes, the mythical “full-stack developer” sounds like: “we got rid of the silos, and now we want one person to replace them all.” That’s nonsense. What’s really needed isn’t someone who can replace all the specializations that the silos represented, but someone who can work across those specializations, someone who can work productively with people on other parts of the team. Full-stack development is about exposing yourself to a broad range of ideas.
In the above post, the idea of full-stack developers as “silo breakers” is amplified. Instead of building something by themselves, full-stack developers are the ones solving the specialization problems of large teams and existing products.
And now we land in the year 2017. A recent guide for becoming a full-stack developer tells us that the title has become the most popular developer occupation today! It also offers a following short definition.
A Guide to Becoming a Full-Stack Developer in 2017
Medium.com, April 01, 2017, Daniel Borowski, Coderbyte
A Full-Stack Web Developer is someone who is able to work on both the front-end and back-end portions of an application.
This definition seems quite relaxed and easy to fulfil. It reminds me of my original usage of the term. But if you read forward, Borowski doesn’t give too much slack for poor full-stack dev candidates. There’s a lot to learn, as stressed by almost all recent writing on the subject. It’s not just knowing some PHP, MySQL, and HTML as it used to be.
A lot more could probably be said, and the discussion has more points, but I believe this chapter summarizes the history of the term nicely.
For some people, Borowski’s short definition seems to work as a minimum requirement to start the full-stack buzz. A full-stack developer is just someone “not specialized”. Others would like to add team skills, and interest to learn new technologies, to the mix, but it still sounds quite fluffy.
On the other end of the spectrum, employers and bloggers are chasing for magical full-stack unicorns who know everything from web usability and React to server security and AWS with ten years of Docker experience in corporate team environments. Don’t forget the CSS!
If you compare the above to the original definition, you can notice a significant difference. The original definition is based on what some people are able to do, namely build functioning websites and applications. Later attempts to define the term revolve around knowing technologies or having team skills, can-do-attitude, or a genuine interest towards the whole stack. It seems difficult to find an agreement on that basis.
When I tried to formulate a definition based on what a full-stack developer does, it became clear that two separate concepts can be teased out.
Full-stack developer (I) builds and maintains whole websites, applications or services without assistance.
Full-stack developer (II) implements features and solves problems across a technology stack as part of a team.
The first is the original definition by Schmidt. The second is spelt out in the articles that followed. You just have to read between the lines.
…should be able to visualize what happens up and down the stack… - Bueno
…knows how to make life easier for those around them. - Gellert
…is someone who can work across those specializations, someone who can work productively with people on other parts of the team. - Loukides
The repeating question in the discussions has been when can someone claim to be a full-stack developer. “Am I really a full-stack developer?”, “What does a real full-stack developer have to know in the upcoming year?”, “Is it even possible to be a full-stack developer?”. If we adopt the way of defining the term I showed above, all these questions get a simple answer. If you are doing the job of a full-stack developer, you are one. It’s a separate issue of how skilled or qualified you are, or what is your current stack. Your work is not primarily about what skills you have, but what responsibilities you have.
Because we have two different meanings for the same term, it would be helpful to use different job titles for each definition like Full-Stack Builder for definition (I) and Cross-Stack Developer for definition (II). If you do a web search, you can see these terms already do exist, and that their usage corresponds with the above definitions nicely.
Definition (II), Cross-Stack Developer, could be an excellent replacement for Full-Stack Developer in enterprise and startup contexts. As a stack gets bigger and more complex, one person can’t handle it “fully”, so using the word “cross” should be more fitting.
If we step outside the world of large development teams, there is a huge amount of smaller businesses, organizations and nimble startups that will benefit from one person doing it all. In this context, it’s not so much about technology, but who gets the business problem solved as efficiently as possible. Definition (I) and term like Full-Stack Builder, could be used in these situations.
To be conceptually clear, and faithful to the original meaning, we should use Full-Stack Developer in the sense of the definition (I), Full-Stack Builder. Unfortunately, we can’t fix the situation anymore. The new meaning, (II) Cross-Stack Developer, is too widely spread. So if you are, or you’re looking for, an old-school full-stacker, for legacy reasons, you could use the title Full-Stack Builder instead.
In the context of larger teams, we could drop Full-Stack Developer in favour of Cross-Stack Developer as it usually describes the job better.
This way we could at least raise the question of what exactly we are talking about and tune down the buzz a little bit.
When using the title full-stack developer, it could be helpful to clarify what we mean by it. The current usage is more on the side of the cross-stack developer, so without any additional clarification, I think that meaning should be assumed.
Thanks for following my journey! Maybe you don’t agree with everything I wrote, but I’m sure we can agree on one thing: Nobody listened to Mike.
I sincerely hope that “full stack” doesn’t appear in job titles anywhere.
-- Mike Loukides, 2014
I welcome any discussion, so please comment!