The hard truth about the full stack developer. Myths and lies.
In software development (especially web development), we hear the phrase, “full stack developer,” as in “I’m a full stack developer” or “we’re looking for a full stack developer.” Guess what? There is no such thing.
All developers are full stack.*
No developers are full stack.**
The phrase “full stack” is really just a business buzzword, not an engineering designation. Real developers do not run around saying to each other, “are you full stack?… I’m full stack… how about you?… you full stack?…” The phrase “full stack” is just what developers say to pander to recruiters who usually have no idea what that means. It’s what recruiters say to appease managers but usually have no idea why they are saying it. It’s what managers say because of course no one wants a team of half-stack developers, that would be crazy. Ever see a team of half stacks? It’s awful.
So where did this phrase come from?
This unfortunate phrase evolved from a technical descriptor meaning the full set of primary technologies that comprise a complete technical solution. It typically means the database and operating system (aka the “back end”) up through and including the user interface (aka the “front end”). Between those two points, is the control and business logic. This end-to-end solution relies on many ancillary technologies such as the network, hardware, load balancers, firewalls, etc., but typically “the stack” refers only to the database, the operating system, and the languages needed to make a complete software solution (typically one or more back end languages and one or more front end). On the surface it seems logical that if “the stack” is the set of technologies needed to make an end-to-end solution then you would want an engineer who is a “full stack engineer.” In other words, you want one engineer that can complete an end-to-end solution. Seems logical. It’s not. It’s very wrong (with a couple notable exceptions explained below).
So, when you ask a developer, “are you full stack?”, what you are really asking is, “can you work with the database, the operating system, and two or more programming languages?” Of course they will say yes. However the question itself is completely meaningless. Being “full stack” is the very definition of software engineer/developer. There are no other kind of software engineers. None. If you are a technologist but not “full stack,” then you are not a software engineer. That is literally what software engineer means. There are many other professions that are both highly technical but not full stack and they have their own names. Database Administrators specialize in the database, they are not full stack, and that’s why we call them Database Administrators. System Administrators specialize in the operating system and servers, they are not full stack, which is why we call them System Administrators. Web Designers (as opposed to web developers) specialize in user interface design, but not complete web solutions, which is why we don’t call them software engineers. If you’re not “full stack,” then you are not a software engineer. It’s self defining.
Saying you want a “full stack” engineer is like saying you want a “full medical” doctor or a “full fire” fire fighter. You don’t say those things because its redundant. There are no “half medical” doctors. There are medical professionals that are not “full medical,” such as nurses, EMTs, and physician assistants. That’s why they have their own names, they aren’t doctors. The moment you say “doctor” it means you get “full medical.” Being a software engineer means you have a specific set of skills that are required to fully engage in that profession. By definition those skills are “the full stack.” When you ask a developer “are you full stack?” you are actually asking “are you a software engineer?” If you’re talking to a developer and you need to ask “are you full stack?” then you don’t really understand developers or the stack. Want to hire great software engineers? Do it right. The question of full stack is meaningless unless you also ask about your stack in particular, and if you do that, then you didn’t need to ask “are you full stack?” in the first place.
* The first reason there is no such thing as a full stack developer is that all developers are full stack. “Full stack” is a meaningless and redundant designation.
While every developer is full stack, it’s very important to realize every developer is better or worse at one area or another, and some have purposefully specialized in only one part of the stack. Back to the Doctor analogy, while every doctor is full medical, some specialize and are no longer appropriate for other medical purposes. Do you want a heart surgeon doing your brain surgery? I don’t think so.
Even without purposeful specialization in any one area or another, every developer is simply better at one area over another. For example, in my case I have a masters degree in computer science and I’ve worked in dozens of languages, operating systems, and databases over the years. If you ask me, “are you full stack?” and I say yes, what have you learned? Nothing. What you really need to know is that I have different capabilities at different points in the stack. I am decent on the database, my skills are solid. I don’t make any big mistakes, but I am certainly not making the database tables sing in perfect harmony. I’m above average with user interface and design, but I’m not a UI/UX desiner and I can’t compete with those who are specialists in that specific area. However in the back and middle of the stack, my control logic, business logic, and architectural skills are exceptional. While I am “full stack” just like any software engineer, I have an affinity for the back and middle of the stack, and for architecture. I started as a scientific and engineering programmer, doing the control logic for AI systems. Someone else did most the database work, someone else did most of the UI, and my primary job was building the AI engine that drove the software. I could have done the data layer and interface too, but the question is, in an enterprise scenario, should I work the full stack just because I can? No. Absolutely not. I can and do work at all levels, but that doesn’t mean I always should. We all can, but in practice day-to-day in an enterprise environment, we shouldn’t. We each work where we are best. That is, if you know what you are doing.
In a multi-developer dev shop, if you want the absolute best software product, you need to immediately stop believing and pandering to the myth of the full stack developer.
If you think you need “full stack” engineers because you want smart engineers who understand software end-to-end, then stop saying “full stack” and start saying “expert” and “experienced. “ Start asking the right questions. On the other hand, if you need full stack engineers because that is your development model, then you are simply doing it wrong. If you have a team of developers working the full stack in silos, doing everything from the database to the UI, then you are doing it wrong, wrong, wrong. Wrong.
Like most things in life, there are a couple of exceptions; 1) You are a start-up or so small you only have one or two developers, or 2) you literally have no choice because the project must be kept to one person for strong business reasons. In those cases, by all means, talk about the full stack because you have no choice and that is a viable strategy. There are a lot of developers out there that really can deliver in that regard (I like to think I’m one of them). But when you grow, then grow the right way and break the “full stack” lie.
When someone asks me if I’m full stack, my answer is, “I’m a software engineer.” If you don’t understand my meaning, then you probably don’t understand enough to properly ask me any pertinent questions about my skill set anyway.
Still not convinced? Look at it another way, the reason the assembly line revolutionized production is because we learned that although a craftsperson can do it all, they shouldn’t. If you want to build chairs, you don’t hire 5 craftspersons that are “full chair.” You don’t tell each of them to go out and chop down trees, then tell all of them bring the wood back and cut it, then tell all of them carve the wood, etc. What you do is send one out to harvest wood — your best wood harvester. One sets up a cutting station and processes it — your best cutter. One sets up a carving station and carves — your best carver. One sets up and assembly station — your best assembler. One sets up a finishing station — your best finisher. You specialize and you create a flow. You build synergy. Software is no different. At every point in your software production process you should have a place for your specialist in that area to engage, do their best work, and move on. If you tell me your software doesn’t lend itself to that model, then I’m going to question your architecture and your leadership. If you want to run your dev team like its the 1700s that’s your problem, but don’t be surprised when your 10 full stack “artisans” are schooled by three hard driving engineering specialists led by a someone who knows how to get work done in this century.
When you ask for a full stack engineer in an enterprise environment, you may as well say, “I want a jack-of -all trades and master of none.
I know what you’re thinking. You’re still thinking “but I really want full stack developers!” Despite everything I just said you still think that because for you “full stack” means someone equally and perfectly proficient at all points in the stack. Good luck with that. Not only is that impossible, after two decades of software development I can tell you that assuming I could even find that person, I don’t need them nor do I want them. Give me a database expert, a control logic expert, and an artist with the UI, and I will beat your “full stack” team in every way, on every level, every time. Every time.
** The second reason there is no such thing as a full stack developer is that no developer is full stack in practice in enterprise production. At least not if you’re doing it right. They can be. They just shouldn’t be.
If you’re a manager or recruiter asking for full stack developers for a fully staffed dev shop, then I put it to you that you either don’t know what a developer is, or you don’t know how to run a dev shop, or both.
If you’re an engineer saying you are (or are not) full stack; stop it. Of course you are full stack. You’re an engineer.