Historical analysis and recommendations
Full-stack related 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 end to this.
After reading the article you will have a deeper understanding how Full-Stack Developer title has been used and how it is used today. I’ll also give my recommendations how to turn down the buzz as much as possible.
I have occasionally used a 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 on either.
I didn’t give it too much thought until later when I noticed some controversy around the title. Full-stack prefix started to feel dirty. It was cool to say the F-word while marketing myself, but with 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 for Full-Stack Developer 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 when 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 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.
While doing the research, I realized how vital archive.org is for preserving historical documents. Consider donating!
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 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.
He refers to Schmidt’s post and offers this definition.
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 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.
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.
– Laurence Gellert
Here’s another influential piece from 2014 written by 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.
– Mike Loukides
In this 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 to the year 2017. A recent guide for becoming a full-stack developer tells us that full-stack developer has become the most popular developer occupation today! It also offers a following short definition.
A Full-Stack Web Developer is someone who is
able to work on both the front-end and back-end portions of an application.
– Daniel Borowski
This definition seems quite relaxed and easy to fulfill. 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 this line of definitions to the original one, 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 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 spelled 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… —
…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 discussion 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?”. All these questions get a simple answer. If you are doing the job of the full-stack developer, you are one. It’s a different issue if you are a good or a bad full-stack developer.
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 the definition (I) and Cross-Stack Developer for the 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 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), 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 definition (I). Unfortunately, we can’t fix the situation anymore. The new meaning, (II), is too widely spread. So if you are, or you’re looking for, an old school full-stacker, for legacy reasons, you should use the title Full-Stack Builder instead.
In context of larger teams we should drop Full-Stack Developer in favor of Cross-Stack Developer as it usually describes the job better.
We should avoid using Full-Stack Developer whenever possible!
If we use Full-Stack Developer, we should clarify what we mean by it. The current usage is more on the side of definition (II), so without any additional clarification 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!