I was asked this recently by a fellow developer who was at the same web tech conference I was at. This developer had met a lot of new people who literally introduced themselves as full-stack developers sort of the way Bob Vance, Vance Refrigeration would on The Office, but it was Tony Frank, Full-Stack Developer instead.
I suspect the developer asking the question taken from the title of this post already knew the basic idea of what people mean by “full-stack developer,” but was wondering what the heck it’s all about. There was a tone in the question. A tone that suggested this person isn’t exactly in love with the term.
These days, probably a bit of DevOps (e.g. Git, testing, and getting sites to production). The “stack” is all these things combined, so a full-stack developer is shorthand for:
when it comes to building websites, I can do it all.
There are some stacks that have achieved notoriety over the years. Maybe you’ve heard of the LAMP stack?
Linux Apache MySQL PHP
A full-stack developer on that stack means you know Linux, Apache, MySQL, and PHP. (Abstractly: server software, web server, database, back-end language.) This site runs on that stack, and I’m solely responsible for its development, so I guess I’m a full-stack developer in some loose sense.
But “loose” is a generous interpretation. I don’t know the first thing about Linux, except that’s what runs my web servers. I don’t know much about Apache, except that I sometimes use HTAccess directives to do things. I could count the number of MySQL queries I’ve written on my two hands, and I only really know PHP in the context of WordPress.
Looked at that way, I’m barely a developer at all. Full stack, on the other hand, generally refers to tossing front-end tasks into the mix and I’m competent enough in that space that my front-end skill set alone, has allowed me to build dozens (or hundreds!) of sites throughout my career. Full-stack-enough, anyway.
There are loads of other stacks.
LAMP isn’t particularly prescriptive about how you build the front-end. It came from an era where it was assumed you’d build a back end to spit out HTML and that’s your front end.
Another stack that’s achieved notoriety since the Grand Arrival of JavaScript is the MEAN stack.
MongoDB Express Angular Node
It is perfectly plausible to replace parts of a stack. Perhaps you’d use Nginx instead of Apache, or PostgreSQL instead of MySQL in what’s otherwise LAMP stack. MEAN is notable in that every layer of the stack was replaced with new technology. Node brought JavaScript to the back end, which could power web servers, handle routing, connect data sources, run build processes, compile code, and more.
A full-stack developer in this world is writing nearly everything in JavaScript. No wonder there is somewhat of an explosion of people considering themselves “full” stack. A single language, like JavaScript, that runs in browsers itself and is a paramount front-end technology is a widely transferrable skill.
The MEAN stack can have layers swapped out just as easily as LAMP. Perhaps you use a data store like Fauna or Firebase instead. Perhaps you use Vue or React instead of Angular. Perhaps you don’t need Express because you leave your routing to a framework or do it client-side.
Shawn Wang calls another a popular stack STAR:
Design Systems TypeScript Apollo React
That’s JavaScript all the way down.
It’s notable that, while we’re still thinking of this as a stack, we’re thinking less about our servers and server software to the point they aren’t really a key part of the stack. Not that developers and companies don’t take it seriously, but it’s more abstracted now than it has traditionally been. I’d point to the world of serverless as a case in point. The questions aren’t about what operating system our servers should use; it’s what platform is the most cost-effective to run our JavaScript functions.
So, stacks evolve over time. But it’s not just what technologies they use, but what technology we even consider a part of a stack. What full-stack means morphs over time.. We’re in a place right now where knowing JavaScript grants you a full-stack merit badge. You can work with client site frameworks, architect components and piece them together to build an entire front end. You can write web servers. You can write back-end code that talks to APIs. You can do all the state management you need. You can construct build processes and deployment pipelines. You can even bring CSS into JavaScript if you’re so inclined.
Even if you’re largely focused on JavaScript, people’s skillsets are generally wider than that. Throw in some HTML and CSS competency, Git foo, and a little DevOps hobby and you’re a real web powerhouse. You can do it all! A renaissance man! Lord of the seven kingdoms!
I think that’s kinda awesome, actually. It truly empowers developers. While it’s worth considering where the barriers of entrance are for front-end development, it’s also interesting to consider all the places where that bar has been lowered. It’s particularly cool for me to see front-end development grow and grow to the point of nearly swallowing up the entire stack. The All-Powerful Front-End Developer, as it were.
It reminds me an awful lot of how powerful being a WordPress site-slinger feels. You can do a lot, even if you don’t deeply understand every little bit of it.
My conference acquaintance went on:
I suspect it’s just that: Pride.
Pride is a tricky thing. It meant the world to me when my parents ceaselessly told me they were proud of me or something I did. A positive thing on both sides. But, strangely enough, pride is also one of the seven deadly sins and one, as they say, that might be the root of all the rest. I don’t want to over-blow things, but I think there is some connection here. It’s one thing to be empowered and to feel strong and capable, but it’s another to be boastful and not sense the edges of your ability.
We’ve all got plenty of edges, particularly when it comes to doing an exemplary job versus merely getting the job done. Standing out these days requires being exemplary. How is your visual design skill? Are you building design systems or implementing existing ones? How many years have you maintained systems? Do you have a good eye for the most painful kinds of technical debt? How are you at helping co-workers succeed? Can you facilitate a user testing session? How good are you at diagnosing performance bottlenecks? What if there are serious server problems? Does your full stack moniker help you comprehend server logs? Are you versed in accessibility audits? Have you ever dealt with tricky relational data and slow queries?
I’m not trying to convince anyone they aren’t a full-stack developer or don’t deserve that particular merit badge — just that the web is a big place with divergent needs and ever-morphing stacks that all require different sets of skills. If you’re interviewing for a job asking for a full-stack developer, by all means, tell them how full-stack-y you are.
I guess I’m also a full stack developer… but the lack of expertise in some specific topics stops myself from say it. I’m really good at basics as HTML, Sass, jQuery, I’m also really good at php using Symfony, MySql, but I don’t know anything about React.
Would love to hear your thoughts on the use of “software engineer” vs “web developer”. I see so many postings use engineer now.
My concern with the “full stack” title has more to do with the expectations that many companies have around this – they can hire one person to do it all. I worry that this sets a very worrisome standard for web devs, especially new web devs. I wrote about this concern in more depth here
Well spoken, without too much leaning towards any side. As it should be.
As a key point for me personally, there are two major things I highly agree upon, so called “soft skills” which are not knowledge or experience in named stacks, and foremost competence of the person doing interview (where our knowledge is on a test).
Thanks for the article.
There’s “full-stack” and then there’s the “full-stack unicorn.” The difference being someone who can technically do it all, but none of it particularly well (or just one part well) and then the person who can do it all expertly in a particular stack. I hate that a lot of the more well paying jobs don’t give you the time of day unless you claim to be a unicorn…when not many people really are. Splitting the work into front and back end should be expected. Nobody should be expected to learn the ins and outs of it all in my opinion. The “full stack” snootiness has to come to an end because I can’t really say I’ve met a single “full stack” dev who actually is competent in all areas (though I know some exist…they’re just ultra rare).
Great article. Titles are just that, titles. The kind of person you are (hopefully) does not revolve around your title.
When I first started in the industry, I understood “full stack” to be a super experienced developer who could hold their own on every part of the application.
With time I realized that “full stack” is more of a statement of preference than anything else. All of the full stack devs I’ve met have simply chosen to broaden their skillset rather than deepen it. That’s not a bad thing by any means, it’s just a different approach than a “front-end” dev might be used to.
Interestingly, I’ve heard many converts to full stack say they simply decided to label themselves as such and that made a huge difference for them mentally. By calling yourself “full stack”, you effectively get out of your own way and “back-end” becomes more approachable.
The company I’m in now (mostly full stack) is searching for a “junior full stack developer”.
I fell in love programming last month and I search something then landed on the CSS-tricks page, make my first program which was navigation bar. This site is amazing you are doing a great job. This site helps me lot to learn to program. I read articles every single day that increase my knowledge. I just launch my website after learning HTML and CSS
and CSS-TRICKS contribution is 90% in my learning. Now it helps to enhance my knowledge.
Thanks Chris and CSS-TRICKS
To me full-stack means knowing the standards and somewhat technologies from top to bottom – from the web server (proxy, cache), to the api (sql, nosql, rest), the browser with DOM, HTML, CSS… of course JS, but also lua, python, go… and most of all, HTTP (request, response headers: negotiation, cache, security, reporting, policies, cookies…), encryption and authentication (SSL, RSA, JWT). And that’s only a quick list.
It keeps growing tough to identify as anything. I want to call my self a front-end developer, but I can write Node, do a little bit of DevOps, set up a server and all those things. I also design sometimes, read about design and everything that comes my way.
The Web is big and you certainly need to know a lot of little things to get going. Even the so called front-end developer sometimes isn’t a JavaScript veteran, but abstractions empower us. A while back I paid for a tutorial on raw NodeJS because I’d read an article that asked questions about Node and I knew nothing – and I wrote Node. I figured I learnt Libraries not Node. Does it boil down to knowing the fundamentals, or how hard core you are in knowing what you claim to know? I’m unsure of that. But I’m just so brain-stressed trying to find a name for what I am. Is it even Engineer or Developer, or even Designer?
When I wrote C#, I figured the same problem was there – .NET Developer, C# Developer, Windows Developer, Microsoft Developer. Even in large corporations that seems to have everything supposedly organized, it can be tough naming people.
I think knowledge is sparse, and everyone learns a vast amount of related things just to get the job done. But just how well do you know the basic, or how deep you know the advanced. Every time I try to explain to people who I am based on what I do, I figure I’d take a front-end job anytime because I find myself doing that 90% of the time – but just my first week at work when I needed my back-end developer and he wasn’t available, I wrote my own Node. I figure I’m just a Web Developer, on the stratosphere.
Yeah I have heard people being proud of being a Full Stack Developer. Yes it is very cool, to see them at work. I working towards becoming a Full Stack Developer(MERN).
It’s all just words. Just fancy titles, “bullshit bingo” or marketing speech – very unspecific. So if you get a job title as a full stack dev, don’t be surprised if you get tasks you don’t like – or as an employer, that your employee is not an expert at whatever you hoped for.
I suggest to skip titles and just say what you do, or want to do. For example: “I build websites.” And go into detail on demand. Sounds easy right? Maybe not very fancy in other website-building people’s ears, but what do they care? And it’s always more accurate than all those titles.
If you have to deal with people who think in titles, just use them titles randomly, maybe invent some new ones that sound even fancier. To those people this will make the most impression. ;)
So, today I’m a “multi stack engineer”, tomorrow an “all stacks architect” and the day after a “stack design pope”.
And in the long run, after we flood the scene with random titles, they all together will eventually lose any effect and we can get back to actually talk about what we’re doing. ;)
Sooo… What do you call the linux – nginx/openresty – tarantool – fengari stack? the hipster stack?
I’m in love with the design of this website.
Full-Stack-developers do exist, but employers should understand they get a Jack of all trades and a master of none.
Interesting article, thank you very much
Never really considered myself fullstack, since I know that I don’t know a lot of things. But I also see that my expertise is pretty broad compared to a lot. Still, it depends on the stack, the assignment, the work todo. And I’m still more skilled in UX and frontend than in backend and servers, so..
See where you get, pick up experience and call in expertise when needed.
And titles in webdevelopment are only good for a year.. stuff moves too fast
My 2 cents
This is about like asking “Does doing oil jobs at jiffy lube make you a
auto mechanic?”
A true full stack developer can start off with an empty box and create a fully functional, relevant, and modern for the time web application. This means installing and hardening the OS (a Linux server for example); installing and configuring the HTTP service, including interpreter, caches, etc (such as Apache, PHP, Memcache, etc); installing and configuring the database server (MySQL or other); coding and maintaining the backend, including SQL; designing and coding the frontend (HTML, JS, CSS, etc). This might sound ridged, but eventually, someone will come around who knows the difference. You girlfriend’s/boyfriend’s father might not know the difference, but future peers, clients, bosses etc are a different story.