
Ask HN: What is “full stack” actually? - serverhorror
I&#x27;m reading all those &quot;full stack&quot; topics and can&#x27;t help but scratch my head.<p>What does it describe? Is this some common basic term I&#x27;m actually missing?<p>To me full stack would start way down at the hardware design and end just when the computation has finished and (possibly) persisted to disk. A vast field that I can&#x27;t possibly hope to learn in a lifetime.<p>Dear HN please enlighten me
======
IgorPartola
I define it in practical terms: can you start from scratch and deliver and
maintain a product? This is a term that's often used to describe web or mobile
development, so in this context I take it as being able to do things like
platform setup and maintenance, write a backend, write a front-end, do the
design, etc.

This term really caught on with people who develop for the web because there
actually is a divide here: some people really prefer the front-end work
(JS/HTML/CSS), some people prefer the backend work (sysadmin/app logic/data
stores) and some people prefer both.

So basically, if someone says "full stack", they likely mean that you can
develop and run the entire product, not just a part of it.

Having said that, I strongly encourage everyone to go deeper. Learn some C.
Figure out the difference between a function and a syscall. Understand what
the kernel does and how it works (whichever kernel you happen to use). Write a
toy libc. Program for a microcontroller (try adding RAM to a microcontroller
circuit for added fun). Play some Minecraft. Write a bit of assembly. Create a
data store. Develop a JS framework for DOM manipulation. Create a toy
programming language. Write a malloc implementation. Write a kernel module
(maybe a driver to that microcontroller device you put together). Write a web
server. I find that the more of this kind of stuff you do, the more aware you
become of what `display: block;` will do and how to structure your code
better.

~~~
notacoward
Thank you. I'm sure a lot of people will say you don't really know some of
that stuff, and they're kind of right, but it's always helpful to have a
buffer of stuff you "kind of know" around the stuff you _really know_. That
way you don't get lost as soon as you hit the boundary. You know which way to
turn, how to recognize what's still relevant (to your original problem) vs.
what's not, what phrases to search for if you need to find out where the real
experts hang out. If you've been in the space before, even briefly and
superficially a long time ago, it can really help. Without that you can't even
know what "full stack" really means.

~~~
IgorPartola
And personally I don't. That list of stuff to try, is more of a bucket list,
though I have touched some of it and found it thoroughly enjoyable. Currently
working on a malloc() implementation.

------
amirmc
There's no fixed definition and I've found that people use it when they're
asking for 'broad' skills -- where broad is defined by their own experience
(cf. most of the other comments here). For example, most web developers would
consider front-end _and_ back-end as 'full-stack', whereas an OS/systems
person might consider knowledge of hardware up through kernels into the
application layer as 'full-stack'.

It's about as useful as the term 'Ninja' or 'Rockstar' in that it's used when
people can't articulate succinctly what they mean (or they don't really want
to take the time to do so).

~~~
guan
It should really include hardware and electronics down to the transistor
level, and higher level skills like UI, architecture, marketing.

~~~
ecaradec
it should really go down to quantum physic, thermodynamic and up to
philosophy...

~~~
ethbro
It all collapses down to a figment of my imagination anyway.

(Btw, now hiring full solipsist developers. I'll find you if I'm interested)

------
notacoward
1\. Start at the top of the stack (nearest to the user, furthest from the
hardware).

2\. Keep learning about lower layers until you get tired or things just don't
make sense any more.

3\. Define that as "full stack" and ignore anything still below.

For most people the process seems to terminate somewhere around the
kernel/user boundary, much like someone in a boat who's aware of the vast
shapes moving below but never gets a clear sighting. IMX a typical "full
stack" engineer can manage things like routing tables and logical volumes,
understands that context switches and page faults matter, but becomes
increasingly unable to explain what they really are to others. By the time you
get e.g. to different kinds of cache misses or database/compiler internals
(even those are still out in user space) forget it.

TBH I think most "full stack" engineers are half-stack at best. So am I.
Twenty years ago the upper parts of a modern stack didn't exist and I could
explain pretty much everything in the lower parts from tty to network to disk
plus VM/schedulers/etc. Maybe back then I could have called myself a full
stack engineer. With today's deeper stack (and my own career progression) I'm
down to about half, somewhere in the middle. I don't actually know anyone
who's truly full stack any more.

------
FooBarWidget
In my opinion "full stack" is what all developers actually should be.

15 years ago, it was normal that, as a developer, you know how to administer a
server, know how Unix works, know how to setup/debug the database. Maybe know
a bit of C.

Fast forward to 2015. Lots of developers are purely frontend developers and
don't know how to setup a server, or don't know how to administer the
database. This is now the norm. The developers who could do all that stuff (as
they should) are suddenly "full-stack developers".

~~~
casion
You do realize that not all developers work with the web, right?

A lot of us actually don't even touch the web all day long, not even for fun.

~~~
tcfunk
While true, it's probably safe to assume that in the context of a "full stack"
discussion, "developer" can be taken to mean "web developer".

~~~
vonmoltke
The community needs to stop being so imprecise with language. "Developer" is a
broad category, and I shouldn't have to figure out from the context of the
discussion what "developer" means. In fact, I often run into discussions where
the context isn't there.

------
borednbearded
When I hear the term "Full Stack" or someone working as a "Full Stack
Engineer" all I can think is someone who can hack its way through the full
development stack when need be in a multitier architecture. I sometimes joke
around that when a company says they need a "Full Stack Engineer", they mean
they want a "Software Architect" without the title,authority and a higher
salary.

~~~
VLM
The full stack applicant only needs to know a slightly wider view than what
the interviewer knows, which in situations with job ads full of stereotypes
and cliches isn't very much. If the ad asks for a rock star ninja full stack
expert, make an arduino blink a led, draw a pix of your cat in cubist style,
bring both to the interview, its all good. In those situations its usually WAY
more important to have gone to the same school, and match demographically.

------
NDizzle
I think "full stack" is a modern way to say "generalist".

I have considered myself a generalist for some time, since the early 00s. I
can handle all of the normal IT work in an office, in a colocation facility,
networking, power delivery, cooling, server purchasing / configuration, OS
tuning / patching / securing, database design / development / optimization,
application architecture / maintenance, and project management.

Typically I work with people at a very early stage and get everything up and
going, add in most of the automation layers, and hand over the keys to someone
else. Then I do it again on a slightly bigger scale.

------
rman666
This refers to a developer who can eat a large, or "full stack" of pancakes.

~~~
karmajunkie
upvoted.

------
agentultra
It should be called, _full heap_ developer. /snark

It's a pretty generic term watered down by its lack of concrete meaning. There
are probably going to be a couple of hundred varying opinions and fifty or so
disagreements about what it means before this post disappears off of the front
page.

To me this makes it a meaningless term and one I don't feel bad poking fun at.
It's a term used by managers and start-ups to get more for less from a single
developer. We used to call "full-stack" developers, "generalists." Before
that... I don't know, "whiz kids?" "Good with computers?" "Geeks?"

Many people agree that it means someone who knows how the whole technology
stack works from keyboard and screen down to the processor. That used to be
just, "programmer," but I suppose there is quite a bit more going on these
days. I have my suspicions that few people actually know, "what's going on
from keyboard and screen down to processor." Install just one software package
on your machine and try to figure out how many dependencies it has, how many
different languages and run-times, and "APIs" it uses. Then there's the
operating system itself (often in the case of application developers). I think
what we're really agreeing on is that "full stack developer" is a term for
people who are capable of figuring out what broke when things go wrong and
have a broad-enough range of experience to fix it.

~~~
mcintyre1994
Heap? Isn't it a stack because you only really remember what went on near the
top? :)

------
atmosx
If you have the knowledge to:

1) Write an application backend (e.g. Ruby/PHP/Python/Java/ASP/JS)

2) Created a modern front-end (JS/HTML/CSS) for this application

3) Set up a VPS or go with AWS/Heroku/Whatever stack to deploy the app which
means:

3.a) Set up the SQL or NoSQL database(s) 3.b) Set up the CDN for traffic
control/protection/speed 3.c) Deploy a backup strategy 3.d) Write the firewall
rules (if this is a VPN) and secure the host...

Well then by all means, you're a full stack developer. Some badasses use their
own VPN to handle email (setting up an SMTPd daemon), write custom firewall
rules, setup reverse-proxies (nginx) and use chroot, containers or jails
(FreeBSD).

It's extremely hard to be good at all these, especially as the projects get
larger and larger. Usually people are good either at systems administration
(which is complicated and hard) or web-programming (which is complicated and
hard).

Now being average on all of those, might be good for launching a startup-level
MVP but I'm not sure it's going to work in the real world. There people who
_specialise_ in using specific _cloud software_ , e.g. Amazon AWS ... If you
try to work out the documentation and vocabulary it's a brand new world. I
think Azure and Google might (almost) the same level of complexity for big
projects.

------
vertex-four
A full stack web framework might mean a web framework that encompasses an ORM,
routing, templating, email, possibly a built-in admin panel, and pretty much
everything else that you need to develop a CRUD app. Recently, they might also
encompass a front-end toolkit for doing AJAX-y things.

A web developer saying they work on the "full stack" means that they both
write server-side and client-side code.

------
jader201
To me, full stack has always meant vertical coverage, not horizontal coverage.

That is, not necessarily experience in multiple web languages, but rather
skilled in a particular stack from top (presentation) to bottom (database).

I consider myself, and look for jobs that are full-stack development,
particularly because I like to work with JavaScript, CSS/HTML, server-side
code, and database development.

------
barrkel
Full stack software engineer, to me, means knowing the full stack of
abstractions from Javascript / Python / Ruby through C to CPU machine code for
at least one architecture. Knowing hardware design isn't particularly relevant
to software outside knowledge of how cache associativity works, cache
hierarchy, CPU interrupts, page faults, that kind of thing - the API at the
CPU architecture level. If you're writing device drivers, you've gone beyond
full stack software - you've got to know more about specific hardware.

Full stack in practice means knowing where to look on the next layer down when
something goes wrong, and having good intuitions about how things behave and
how you can expect things to be implemented given what's available.

Full stack web engineer is less about depth of abstractions and more about
breadth; knowing the browser, a back end language, a database, and enough
about system administration to put it all together.

------
javajosh
I like the "he can make an application on his own" definition, but this masks
the juicy part of this question, which is "well, what does that take?" Realize
that, these days, you could build an arbitrarily complex program using nothing
more than GitHub Pages with a dynamic shared data structure layered on and
connected with some javascript, e.g. with Firebase. Personally, I'd consider
that to be a kind of a stack.

But yeah, most people don't design software like that yet, so they mean server
rendered pages, which means a server container of some sort, an application
"middleware" process (something like node or PHP or Java), and a database
process, all of which allow the user to, from one perspective, "pan and zoom"
across some data corpus, and gives them the right to poke that data corpus at
a few points.

------
emilsedgh
He could create a (good enough) [software] product alone.

~~~
serverhorror
I really like that kind of definition. Maybe I was thinking about that too
long:

What about running and maintaining it?

~~~
NDizzle
That too.

------
dewey
[http://www.laurencegellert.com/2012/08/what-is-a-full-
stack-...](http://www.laurencegellert.com/2012/08/what-is-a-full-stack-
developer/)

tl;dr Someone who's familiar with

\- Hosting / Server environment (SysOp things)

\- Application development (Front / Backend)

------
beenpoor
Full stack = Frontend + Backend Frontend = Think Consumer. He's the one that
uses the backend, typically via browser. In the browser world, you have HTML +
CSS + Javascript (add stuff like MVC framework, JS library etc). All these
interact with backend to query or persist data on the backend Backend - Think
producer. Typically these are your servers. Bunch of those actually. You will
have servers to simple serve the HTML/CSS and other assets as well as database
to persist data. They can be built on a language of your choice - but these
days Javascript since you can write both frontend and backend in the same
language.

I think the simplest way to think fullstack is to think of an end-to-end
experience and list all the components.

------
jdmoreira
I'm an iOS Developer. For me going full stack looks like this...

* Develop the app. Let's say, swift + cocoa touch (front-end)

* Developing the backend services. Let's say, Django REST Framework (back-end)

* Setup and manage the PaaS. Let's say, Google App Engine or Heroku (infrastructure)

------
fit2rule
Full Stack in the modern context has been re-defined from what it used to be -
its now more referred to in the context of web software development.

But in the 80's and 90's, it used to refer to someone who could handle
development at any level of a stack of OS/Framework/API's - from either
building their own new API/Framework, to using it, to using others, and so on.
A Full-Stack Linux developer wouldn't have any problems busting out the kernel
sources to add features/fix/debug, compiling libraries (add/fix/debug),
building user-space apps (dev/fix/debug), etc.

But these days you mostly only hear it in relation with web technologies.

~~~
marssaxman
I don't recall hearing the term at all in the '80s or '90s; I first
encountered it some time in the last decade, around the time people working on
web sites started to use "developer" as a synonym for "web developer".

~~~
fit2rule
I heard it in the late 80's/early 90's, referring to Unix-based developers who
could write a kernel module, device driver, user space daemon, user app - in
fact I think I remember it referring to OSI and POSIX at first (i.e. can
develop anywhere on the POSIX/OSI stack). I think its risen to popularity in
the Facebook-era, but it certainly existed as a phrase and a concept in the
80's/90's.

~~~
marssaxman
That makes sense; I had no contact with the posix world back then.

------
aet
An old school example of "full stack" is LAMP: Linux/Apache/MySQL/PHP

[http://en.wikipedia.org/wiki/LAMP_(software_bundle)](http://en.wikipedia.org/wiki/LAMP_\(software_bundle\))

~~~
fit2rule
Thats actually new school. ;)

------
awjr
I call myself 'full stack'. 1) DevOps (provisioning, load balancing,
infrastructure design, code deployment, db backup strategies) 2) Backend Dev
(primarily APIs these days) 3) Frontend (primarily AngularJS) 4) Database
Administration 5) Internet of Things IoT setup, design and deployment. 6)
Language agnostic. 7) System Architect

What I don't do is draw pretty pictures. Don't mind UI design but the moment
we start discussing changing the look and feel and PSDs you get somebody else
cheaper in to do that.

------
Xeoncross
A full stack developer starts out as a kid that is too poor to pay someone
else to do the parts of an application they don't understand.

So they learn databases, linux, Photoshop (wait, if poor; then GIMP),
Javascript, PHRUBYPY, and $100 of free adwords credits.

These poor, full-stack developers try writing their own legal terms, finding
the best examples of good UI to copy, and setting up social media accounts for
their projects.

They also have a friend that is good with Canon/RED cameras and can help
record a promo video.

~~~
serverhorror
I just had to:

[https://www.google.com/webhp?q=getting%20started%20PHRUBYPY](https://www.google.com/webhp?q=getting%20started%20PHRUBYPY)

appearantly Google thinks it's Rails :)

------
bulte-rs
As far as I know, "Full Stack" is a misused term for developers who are able
to do everything from devops to front-end development/ui/ux design.

~~~
Anderkent
> are able to/or pretend to be able

Why would you say this? It's incredibly offensive, and adds nothing to your
argument. A full stack dev might not be as good as a specialized dev in any of
backend / devops / frontend, but that's just the price you pay for being a
generalist. That doesn't mean they 'pretend to be able' to do things.

~~~
bulte-rs
agree... edited. mea culpa

------
jhildings
I would guess it mostly have to do with understanding the complete flow and
parts of a web service or page. From the HTML/CSS in the front end, javascript
somewhere in between and then how the backend language/API talks with the
database.

Then how to configure/update/trouble shoot the web server and related issues
like database performance and mail server errors

------
scotty79
You are full stack basically if given a computer and access to server you can
build and deploy custom webapp in reasonable time.

------
bryanlarsen
I once ported Linux & U-boot to a proprietary ASIC, and then set up the rest
of the stack, including writing my own "database" as a kernel driver,
installing an embedded HTTP server, giving it an HTTP API and AJAX web pages.

Full-stack can mean whatever you want it to mean. Often it just means you're
old.

------
AdrianRossouw
This was my take on it : [http://daemon.co.za/2014/04/what-does-full-stack-
mean](http://daemon.co.za/2014/04/what-does-full-stack-mean)

The term is very difficult to define, because you keep on getting different
answers for what the stack actually is.

It's really a question of scope.

------
Dorian-Marie
Most of the time it means backend and frontend programming skills (eg: JS for
frontend and Ruby for backend).

------
joshcrews
In my context, Ruby in Nashville, full-stack has meant you can do front-end
html/css/js, backend application code AND the hosting/deployment/linux systems
administration stuff too.

------
psaniko
It does not neccessarily imply mastery in all layers of the stack but rather
familiarity and often the skills to understand and fix bugs in other areas
other than your field of expertise.

------
Thaxll
Full stack means you're average at frontend and backend.

------
rvalue
For me, A full stack developer is some one who has knowledge of ML, Web Design
w/ UX, Application Development for web and mobile, Databases and Big Data

------
amelius
"Full-stack" actually sounds to me like a stack overflow waiting to happen :)

------
dublinclontarf
HTML to SQL and all needed in between.

~~~
oe
I'd say PSD to SQL.

------
baccheion
Being a Full-stack Engineer means you have an understanding and can
demonstrate competence at all levels of the stack (database/server
administration, backend, frontend, architecture, design, marketing,
product/user/business sense, and processing), not just one specific layer.
When it comes to web or app development, being full stack means you can set up
the web servers and database servers, administer those servers, design the
information schema, write backend logic for the application (low-level code,
middleware, and AI), write frontend logic, write client-side code, design the
application's interface, conduct A/B user testing and get user feedback,
optimize for search engines, set up internet marketing campaigns, and piece
everything together. Essentially, a Full-stack Engineer can single-handedly
create and market an application.

Full stack knowledge is typically needed and appreciated during the early
stages of a startup, but larger companies dislike people with such broad-
ranging knowledge and do everything to limit them, box them in, and prevent
them from being hired. The typical excuse is that it's not possible to have
knowledge that broad and still have strong depth of understanding in each
area, but this is absolute garbage. Most idiots in middle management don't
like Engineers like these because they'll become too dependent on them (middle
management is obsessed with being able to see everyone as expendable,
something that is not usually the case with a Full-stack Engineer). Also, a
legitimate Full-stack Engineer is rare and special (even though 10-15+ years
ago it was the norm to be this way), and management doesn't like people that
are special.

By the way, while many job postings state they are seeking Full-stack
Engineers, the term is usually just an empty buzzword used by management to
lure in someone that knows Javascript. They don't believe there is such a
thing as a Full-stack Engineer and think anyone claiming themselves to be one
is full of it. So, while it's important for many companies (startups,
especially) to have people with this skill set, they're still playing the same
game of hiring in those that are expendable (no, "specialized"), mediocre
(can't handle anyone that's skilled), and compliant (can't handle anyone
challenging their authority).

I'm a Full-stack Engineer (if I'm not, then that's where I want to be), so
I'll share my skill set as an example of what a Full-stack Engineer would
know: \- Hardware: VHDL, circuit board design \- Backend: Python, Go, Java,
Lua, C/C++, PBASIC, SQL \- Frontend: Javascript, HTML, CSS \- Machine learning
knowledge \- Able to set up and maintain servers \- Can create wireframes and
design a user interface \- Can set up A/B tests and analyze user feedback \-
Can create and optimize internet marketing campaigns (most people don't
realize this is almost 100% an engineering and optimization problem) \- Good
business and user sense

