Hacker News new | ask | show | jobs
by IgorPartola 4140 days ago
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.

4 comments

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.
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.
Or to trot out the concise summary, a buffer of "kind of know" helps you know what you don't know. Which can be pretty darn useful.
> "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."

On the face of it, this sounds reasonable but it glosses over the fact that better tooling/frameworks/etc make it much easier to get started. If you use something like Parse/Heroku or their ilk, then you can get away with not having to know much about backend development (or the problems around it). In effect, when you define 'full-stack' as the ability to ship a product, then the 'stack' is actually narrowing over time.

This is just an observation and as I said elsewhere in the thread, I don't find the term particularly useful anyway.

Not only is the stack narrowing, but most people who use the label "full-stack" have fixed the definition of that stack (the set of front-end and back-end components that they have experience with). So the complete definition would be "I'm a full-stack <list one or more stacks you're comfortable with> developer".

To say "I'm a full-stack developer" without that context is meaningless and will inevitably be untrue.

> To say "I'm a full-stack developer" without that context is meaningless and will inevitably be untrue.

Well, couldn't one suppose that it's at least indicative of having touched the architectural groupings at each level.

Whether or not you find value in it (e.g. industry and academia being fairly divergent on this), having worked with a data store layer informs something about an ability to work with any data store layer.

My working definition of "full-stack developer" boils down to "can write a complete web application". That requires substantial skills in the browser (HTML/CSS/JS/jQuery), server (Python/Django, perhaps), and storage layer (MySQL is a common choice).

This definition omits some things that become more important as the application becomes larger, such as cloud deployment, performance optimization, project management, and designing for reliability. But I think of those as more architect or project manager skills, rather than developer skills.

I should add that all three tiers are complicated enough to have specialists of their own. It's perfectly reasonable to be a database expert, full stop. But there seem to be a lot more opportunities for people who know the whole stack.

I echo this sentiment. Full-stack means that you can support all aspects of the stack, and here's the key, that need to be supported by a dedicated person.

For example, most people "out source" their network / system administration to a company like Rackspace or Amazon. I would still consider someone utilizing their services to deliver a product "full-stack".

Right. I find this term most useful in terms of building a team. Do you need to hire one person or two to get the job done?

Now, that's not to detract in any way from people who specialize. A good front-end developer with design skills can often get the job done faster and simpler. A good backend specialist can get performance under control sooner.