The full stack developer is a myth

Well, that’s not completely true, but you’ll never find one. “True” full stack developers exist, but so do geniuses and people who have been coding since they were 12.

Well, that’s not completely true, but you’ll never find one. “True” full stack developers exist, but so do geniuses and people who have been coding since they were 12.

I see this job title / description too much, and the only way you’ll ever find the person you’re looking for is to poach them. Unless you’re extraordinarily lucky, every one of the people who can fill this position for you is already happily and gainfully employed.

The job description describes a few people I know, but the few people out there that do have the “full stack” skill set are highly sought after and only propagate further this myth that your startup will be able to find such a person.

It’s as meaningless as a job title like “Genius” or “Person who can do everything in [insert desired field here]”.

To explain this a bit further, the following illustration represents a non-exhaustive version of “The Stack”. Note that typically your skill set would only need to contain one or two components from each layer. Some of the skills can be learned in a few hours (basic usage of GCC or a VPS), some will take years to master.

Non-exhaustive list of a technical stack layers and components

What’s expected of a “full stack” developer is far beyond the capabilities of an ordinary human. They need to understand how to scale an app to handle millions of hits a day (or hour?), what “pets vs. cattle” means and why it’s important, the reason they should choose MongoDB over MySQL (or vice versa), the CAP theorem, PaaS’s, IaaS’s, a dozen configuration management tools, whether it makes sense to built an app in Rails, Django, Wordpress, Swift or a combination based on the requirements, micro services versus monolithic apps, and two dozen other things.

This means that the full stack developer needs at least a solid enough understanding of each component of the stack to be able to make educated decisions on the use of them and to be able to explain it, ideally in plain english, to management. That’s right, on the very top of this stack is an expectation that the full stack developer has strong english skills, can work well with others, and can explain highly technical concepts to middle / upper management.

Every year there are new components added to each layer and every couple of years there’s a new layer added to it. Is it really reasonable to put out job applications asking for a full stack developer? It’s not only unreasonable, it’s stupid. Particularly when you start looking for one person who’s an expert in security, web development, UX, and servers; and this isn’t at all an uncommon expectation.

To top it off, since it’s often a startup looking for a full stack developer or engineer, that person is also often required to project manage and gather user requirements.

Oh ya, and then when the CEO is in the office, to get his printer and file sharing on his brand new Windows laptop working again.

As I’ve mentioned, there are people who are this capable, I know some of them. But I know many more amazing developers, designers, and project managers, who don’t even come close to full stack and then even more who call themselves full stack but can barely define more than half a dozen of the words in the stack I posted above (which arguably even misses layers, such as where the JRE or Node.js would sit) let alone judge the interaction between two or more of the components. And this is where the problem comes in.

In almost all the cases I see full stack used (particularly in job postings), the actual meaning of what the company is looking for is simply “someone amazing”.

The earliest definition of a full stack and full stack engineers seems to be a post from Facebook engineer Carlos Bueno who defines it as a generalist with a deep knowledge of performance implications.

A full stack engineer or developer probably shouldn’t be writing code at all, but rather act more as systems architect or integration engineer. Someone with a knowledge of the full stack is someone who can identify and avoid problems and inefficiencies in integration before they happen.

Even then, you still need to define which “stack” you’re talking about. The web stack, the mobile stack, native applications? Even still “full stack” is not a skill, it’s a suite of skills and more importantly, a low and high level understanding of all of the concepts integrating each layer in the stack and the implications that an action in one layer will have on the others.

A full stack developer is a myth not because none exist, but because the term is meaningless. It’s no different from a coding ninja or rockstar, but at least everyone knows those terms don’t actually mean anything.

Are you looking for a jack of all trades, an integration engineer, a performance expert, someone who can quickly pick up new skills and technologies? Or do you legitimately expect to find someone who can do all of that expertly? Really?

Posted by Scott Hadfield on Medium