Poll: What does “Full Stack” mean?

14 points by capableweb ↗ HN
Apparently (https://news.ycombinator.com/item?id=29806385) there is a great divide in what "Full Stack" really means. Since the dawn of man (the full stack developer = man), "Full Stack" just meant frontend and backend development. But now, there is a group of people who seem to be calling it only "Full Stack" if it also includes a set of feature-complete modules for doing the most common tasks, such as ORMs for interacting with databases, a way of handling caching or even reading/writing to queues.

So what is it, who is right, or is there even more definitions out there?

Once this poll is complete, we can hopefully all agree on a common definition.

40 comments

[ 3.0 ms ] story [ 92.6 ms ] thread
Full stack means they don't want to pay for specialists. So you will now be expected to do three people's jobs:

Dev Ops - Backend - Frontend

You'll also be implicitly on-call at all times despite that fact never being verbalized.

Yep, this is expected much of the time. Dev-Ops is basically always on-call.

I've stopped marketing myself as full-stack because I don't want to be on call. I can (and will) still do the job if needed, but prefer to specialize in my old age.

This is not at all fullstack to me.

Imho; a fullstack developer is a person who can develop all pieces of an application (or game, or whatever) and put it in production, maintain it, improve it.

I.e. design the database or other persistence, implement the layers that manages the data, the business logic and the user interface.

It can be very different from different applications, of course, since some may not have an ui, or a persistence requirement.

It is a person who not only knows how to write code, but also understands how code communicates with services and humans.

A fullstack developer understands OS and computing in general.

When I build teams, I like to have a mix of fullstack, frontend and backend developers because the experts (i.e specialized Devs) often handle the nitty gritty details of front- or backend, whereas the fullstack glues together the front-, back- and ops.

Usually fullstackers are the kind of people who say "oh, interesting problem, let's explore" rather than "I don't know this technology, I am a (Fe|be) developer.

You will rarely hear a full stack developer say "I'm unable to continue, because I have to wait for the (dba|integration team|ops team)". They will solve their problems and often has enough experience to do it well.

You confirmed my statement exactly:

> You will rarely hear a full stack developer say "I'm unable to continue, because I have to wait for the (dba|integration team|ops team)". They will solve their problems and often has enough experience to do it well.

There are many of us like this who will never take a fullstack role because the reality is, we'd rather work at places that solve that problem by...

- properly sizing the integration/ops/db team for example?

- setting timelines up so that developers aren't blocked as often?

- account for downtime with things like codebase maintenance?

It's not like in theory a company can't have their ducks in a row and benefit from a "fullstack dev"...

The problem is if they're explicitly looking for full stack it tends to be a negative signal.

But it's not a question of "taking a role". It's a question of where your expertise is.

You should definitely have proper time lines, that has nothing to do with full stack developers.

Downtime? If downtime is an issue for your system, most likely you can build it so it can be live with some parts off and do maintainenance during working hours. (Redundancy, etc)

Integration and dB teams, imo, is an antipattern.

But what I really did not agree with with your original comment was that managers look for full stack devs because of cost.

I look for the right people, and I build my teams with a mix of frontend, backend and fullstack devs. It has nothing to do with cost, it has to do with building efficient and dependentless teams.

In my career (over 30 years now), full-stack in the context of web development has always referred to an engineer who could setup the tech stack and application from scratch. They can manage the servers, administer the network (as it relates to permissions for the various web-related processes), implement developer environments, code the back-end, code the front-end, some basic design skills, experience with developing UX, and is deeply familiar with the network protocols being used.

Anyone claiming to be full-stack should be able to handle light dev-ops for a small to medium sized company for at least a few days without breaking things. They should be able to sit in any other generalist coder's chair for a week. They should be able to work closely with a designer to help develop the look and feel of the application and have an understanding of the domain tools and language. They should be able to work closely with a DBA to help develop the best database for the application. They should be able to debug complex app behaviour with their understanding of how the different sections work, even if they don't have explicit knowledge of specific areas of the application.

A full-stack "developer" may only refer to the coding and design+UX portions of that description, but should still be very familiar with how the server software and network works. A single framework may provide a full-stack development solution (RoR, for example), but a full-stack engineer needs to cover a lot more ground than just development.

(comment deleted)
well, for web it ought to include some knowledge of, and ability to debug, the underlying protocols, HTTP[S], TCP, IPv4/v6. And modern Ethernet switching. On the host side, network sockets and some kernel implementation chops.

At the lower end of the stack, modern processor/memory performance architecture, beginning with a basic understanding of instruction sets. Ability in some hardware design language would be good, tristates, gates, latches and flops.

But that's just my take on the full stack.

In what context would one realistically be able to debug TCP/IPv4/IPv6? Also in terms of network sockets and kernel implementation you're talking about apples and oranges.
Any context where network things don't work like they should. This would include why your home internet is 'flakey', why your load balancer doesn't quite balance loads, why some database connections are slow but others are fine. You may not need those skill but busting out tcpdump and looking at pcaps in wireshark is part of calling yourself full-stack.

With the cloud it may not matter as much if you've never twiddled SACK settings, but there's a large body of knowledge that is entailed by full-stack that can't be covered in boot camp.

_slightly_ tongue-in-cheek, because i'm annoyed by people calling the top 3% "full" stack

But, an example is discovering from the DSACK responses that your network performance sucks because the intel TCP offload firmware is retransmitting entire jumbograms when any packet gets lost.

Also discovering that you can't get near full network bandwidth because some moron attaches a 3-byte SNAP header.

And if you don't have some idea how your programming language works, how do you know what you're doing? When a memory cache miss costs the equivalent of several hundred instructions.

in the last case, a multithreaded C++ backend service where the STL String reference count updates weren't atomic
"debug" may be the wrong term, but 'diagnose' might be a more necessary skill.

a colleague described a recent scenario. they've got a college kid (... 1st year? 2nd year?) doing programming work, and basically dissing on all tech stuff that he isn't intimately familiar with (which... means a lot of stuff). he managed to get some stuff working on google app engine, but some of the stuff doesn't work. The kotlin stuff has a warm up time ("that's normal"), but some PHP stuff takes 8-10 seconds all the time for on every request. "PHP sucks, it's shitty, everyone's leaving it, kotlin rules", etc.

No one else is seeing that same performance. Most other people hit the PHP instance and get 100ms response times with moderate payloads. He keeps insisting that it's PHP that's horrible, and what he's seeing is evidence that not even google engineers can make it work because it's so bad.

My colleague and a couple others have said to him "you have a network problem - some route to that app engine isn't working right for you for some reason".

"oh no, it's not that. PHP is crappy".

So... over the holidays, he goes home to parent's house. Has a week of doing some work, never once mention of PHP being slow. IIRC, he seemed to think google got stuff working (despite PHP being crappy). Then he's back at his regular place, and suddenly it's all slow/bad again.

Hrm... if you're the only person on a distributed team having extremely slow network issues to one server, then that problem goes away when you access it from a different network, then you have the same problem when you go back to the first network... it's not the remote technology. Or... at least not the tech you think it is.

I'm not saying he can actually debug or affect an actual fix, but diagnosing/recognizing the signs of network problems as actual network problems should be a requisite. If 8 people hit a server and get 100ms or less response times, and your requests take 8 seconds from your house, but 100ms from your parents' house... this is a network problem on someone's end. It's not a PHP (or kotlin, or ruby, or whatever) issue.

202x - Full Stack Engineer

201x - Web Developer

200x - Webmaster

199x - Guy with a computer

That's how I remember it.

^ bingo. This is exactly how it's framed in my mind. Mostly it's the same work (In concept. Though it's infinitely more complicated now), just the verbage has changed.
Webmaster is still the best title.
> If Saskia could be guarded by men in bearskin hats riding horses, why, she could as well have a webmaster.

Neal Stephenson, Termination Shock

GitHub would prefer the title Webmain of course.
I recall the term "Full Stack Web Developer" being coined by Randy Schmidt (of Nerd Merit Badges fame) back in June of 2008.

"Over the past few months, I have really started to admire what I call “Full Stack Web Developers”. A full stack web developer is someone that does design, markup, styling, behavior, and programming. Some examples of these types of developers are Jason Tremblay, Geoffrey Grosenbach & Tom Preston-Werner." --Randy Schmidt

The original link is dead, but it's still available via the Wayback Machine. [^0]

I still get a kick seeing people trying to describe what a full stack web developer is and almost every single instance neglects to reference Randy's original post. Let that sink in for a moment and consider the countless job descriptions you've seen in the last fourteen years.

[^0]: https://web.archive.org/web/20110210194715/http://forge38.co...

Full stack means you are doing the work of several engineers for the price of one. And you'd better have NAND-to-Tetris levels of familiarity with all of the hardware and software running the company's web infrastructure, because if something goes wrong, anywhere on the stack, guess who the Boss will turn to to fix it and staunch the bleeding of revenue.
Full stack? Must mean you're able to design an instruction set, design chips, circuit diagrams, pcbs and finally write the firmware for it so it can boot the operating system you'll write, along with the drivers you write, so you can finally write some applications that runs on this new machine ;)

dunno, maybe it goes deeper.. something about sand, and how it's hard to make even a toaster from scratch*

* https://www.youtube.com/watch?v=5ODzO7Lz_pw

but wait the toaster had no electrical wires??
"Full-Stack Developer" is a term derived from the term "Application Tech Stack", which is a term used for a comprehensive description of all the major tech used to deliver an application. A Full-Stack Developer is capable of working through the entire Application Stack. It's a relative term, relative to the technology you work on and the domain you work within. Many components in the stack are off-the-shelf.

It's tricky when talking about SPAs because while we call SPAs "applications" they almost universally are only thin-client frontends over an API. I wouldn't call the Washington Post's frontend an actual application, nor would I call the Mixpanel UI an application. It gets fuzzier with things like Slack and Spotify.

Personally, when I hire, I only hire full-stack web developers and my expectation is that they're just as comfortable rendering HTML on the backend as the frontend (and they have a pragmatic sense for what is appropriate when), they have no problems manipulating the underlying database schema, they can manage the caching system, jobs system, email delivery, etc. Not everyone is amazing at everything but everyone needs to be familiar and moderately comfortable doing most things, and the team is there to backfill anyone's personal gaps.

I've been programming (now mostly prototyping/managing/architecting) since the early 90's, so for me "full stack" includes:

- Embedded software/firmware development in ASM/C/C++ (microprocessors, drivers, RTOS, various on-board and external interfaces and buses.

- Various communication protocols running on top of various wired and wireless topologies.

- Developing front-end applications as mobile apps, desktop apps, and web-based apps.

- Developing back-end systems using a variety of architectures (monolithic, serverless, containers)

- Designing and developing entities, schemas, and API's for the system.

- DevOps

- Gluing all this shit together so that it works.

Cheap developer that can easily be moved to any kind of position? :)
I made a joke on Facebook a few years back about true 'full stack' development. It was a post talking about some code I was writing to do some math computation on a simple OS I had written, running on a CPU I designed using my own custom instruction set, implemented in logic on a physical PCB I also designed and assembled.

Of course even this is really only 'partial stack', since I didn't do the VLSI design of the 74x series ICs I was using. So when I think full stack, I think high level code all the way down the transistors. Anything else is weak sauce. ;) ;).

If you didn't create the universe, set its rules for quantum mechanics, and assign all its constants (including irrational ones -- set them precisely!) you can't seriously call yourself competent at the full stack.
Agreed. We will all just have to live in the shadows!
I'm surprised there's no product called:

"Microsoft Fullstack"

or

"Google Fullstack"

or

"Amazon Fullstack" (formerly "Apache Fullstack", now forked and rereleased)

>"Amazon Fullstack" (formerly "Apache Fullstack", now forked and rereleased)

Underrated comment of the day here.

All of the above:

I interpret "Full Stack" to mean mostly web front-end. It generally doesn't mean mobile or desktop. It does also include back-end development but the trend is to use more off-the-shelf solutions and services so that there's less of it than there used to be. The reduction in back-end coding is taken up with the expectation that the "most commonly used functionality" is now in scope.

+ what other comments say where they want multiple specialists but are hiring one position for flexibility or cost.

It means what marketing teams want it to mean at the time they're saying it.
It mostly means "computers person"/"make me a webapp!" as written by a nontechnical person describing or trying to hire for a technical role.

I'd prefer something cooler like "1337 hex wizard h4x0r g0d first of his name" but the HR people like full-stack better.

I think it's context dependent, so people disagree because they're familiar with different contexts. It's 'can work on all the pieces', but 'pieces' is understood to mean the relevant pieces; so for a webapp that's not hardware, not embedded, but for a smart watch company say it would be.
(comment deleted)
Full stack simply means that company do not want to hire separate resources for front end and backend , so 1 salary for 2 works.
From machining parts to working with motors and pneumatics to microcontroller code to high-level code to machine learning algorithms in the cloud. My dream job :)
i guess it means as much as USB "Full Speed" (1998 USB 1.1 12Mbps)