Hacker News new | past | comments | ask | show | jobs | submit login
The full stack developer is a myth (growth.supply)
46 points by PretzelFisch on Sept 7, 2015 | hide | past | favorite | 64 comments

My definition of a full stack developer is someone who is able to build and deploy a complete working application with no-one else's help. That means they can write the back end, the front end and configure the servers and of course design the database tables.

That said, as a recruiter I'm seeing employers now who really won't consider candidates unless they are expert front end and back end developers. That's a pity as I'm not convinced that's useful where there are three or more members of a team building a web application. Browser development alone is easily enough to occupy all the available work time of a single developer.

If you can design 1) the database schema, and 2) the application's frontend (either web or native app), you're essentially a full-stack developer. What's left are the operational details increasingly handled by service providers (like AWS).

Really, it's funny you say "operational details" in such a dismissive way. Even when you're in AWS I dare you to not worry about the "operational details" when shit hits the fan, e.g. your database offed itself and you need to figure out what the hell just happened.

How long did it take Twitter to finally clean up most of their "operational details"?

While being able to do a first pass of a working app from front end to back end is something many can do, planning for the unexpected, scaling, understanding edge cases and where things may break (including diagnosing problems in off the shelf components), digging deep into AWS issues, etc. Require a depth of skill and knowledge very few can actually achieve across a wide breadth.

Correct. That is why I agree with this post. The term "full-stack" is meaningless. What people really mean is "frontend/backend generalist" which in the current ecosystem means knowing a framework for the frontend and another for the backend. If you go for the true meaning of "full-stack" then no one fits the description because the modern stack is just way too complicated. Just figuring out what the hell your CPU cache lines are doing is already a full-time job in and of itself.

Really, it's funny you say "operational details" in such a dismissive way.

Is it possible you're projecting? Ops is vital to launching an app, but it also has little to nothing to do with the development of that app. It's a completely different skill set.

I think we can work much more effectively with ops a core part of the development process.

If you spend weeks/months building an app and then launch it and find nobody wanted it then you've just wasted a lot of time and effort.

If you spend weeks/months building an app and then discover you can't deploy it in the way you planned because of an operational detail, you're going to incur a lot of rework.

How long is it going to take you to get your app into production?

If you start right from getting your hello world webapp into a production operations environment, then iterate until you have something you can start testing with users you won't have any of these problems.

You will however, have to start considering operations from the start. There's a lot less waste, it's lower risk, but you can't ignore operational concerns as someone else's problem.

Correct and that is the point. So whenever someone says full-stack they really mean frontend/backend application stuff assuming an infinitely scalable, redundant, fault-tolerant, datastore and compute fabric. The reality is otherwise and I don't see how you can call someone full-stack if they think they can completely ignore the realities of infrastructure. And I forgot security considerations.

what about native Android and iOS? True full-stacks surely handle that operational detail too...

how would you advertise this on your resume? It seems like recruiters are looking for 'full stack' but not understanding what it is. Do you have 15 years of full stack development or devops experience? Shit like this makes me start out the window, at the tiny little pedestrians below scurrying back and forth from their masters, the modern day slavery is masqueraded around in the form of neckties and materialism that replaced meaningful human relationships.

I'm a full stack developer. I exist, and you can hire me for $800 a day if you want.

I've always used the term to mean that I'm comfortable on the back and front end of things, and that I have a wide range of experience that means I'm familiar with most of the technology you're likely to use. It also means that I can build an deploy an application from the ground up, alone if necessary.

A full stack developer is just a generalist. A good one is super useful if you only have a few employees, or if you're building a new project.

At some point, you reach the level where you need dedicated specialists, and at that point a generalist can often transition to a management role.

I don't think I'm alone in this--I can't do this stuff because I started coding at 12, or because I was born a genius. I learned it by bootstrapping a startup--doing everything myself from designing hardware, to web development, to handling customers.

Question: since breadth usually is the inverse of depth, FSDevs are good enough to stay afloat in all fields; this means that an expert (someone who is specialized) is always able to crush a FSDev in his own field of expertise. So, FSDevs are always the rookies in all fields, compared to specialized devs. Does it make sense to put a FSDev in a big team?

You know the saying "quantity has a quality all its own".* Sometimes being able to draw on a wide breadth of experience allows you to see the bigger picture that most people miss. Even in an almost perfectly modular system, you need generalists sitting on the borders.

Take the case of a product that consists of a back end API, a single page web app, and a mobile app. Who do you want designing the API? I think ideally the answer is someone who has some experience with all the systems involved.

I've been on teams where the back end guys designed the data model and the API and forced the front end to conform to that. And I've been on teams where the front end team ran the show--in my opinion neither situation is optimal.

> this means that an expert (someone who is specialized) is always able to crush a FSDev in his own field of expertise. So, FSDevs are always the rookies in all fields, compared to specialized devs.

I think there's a few different things to say here. First, I think most teams aren't really made up of experts. Mostly because most teams can't afford to be made up of experts, and because most teams probably don't need that many experts.

Second, there is a huge amount of overlap in most developer roles, so a lot of experience in one role transitions very well to other roles.

Third, most good generalist developers probably have some field that they actually are experts in. You've probably heard the term "T shaped developers". Their field of expertise might even be something like domain knowledge or management.

And finally, for most developers, there is a limit to how specialized you can become. To have along successful career in software development you can't afford to become completely specialized. If you plan on writing software for 40 years or more, you're probably not going to be a Rails specialist for the entire time.

In the end, I think a good team requires a decent mix of specialists and generalists to function well.

*usually misattributed to Stalin

> Question: since breadth usually is the inverse of depth

I think you are starting with a false premise: IME, the best developers in any narrow area also tend to be the ones drawing on broader experience bases in terms of application domains, languages, and technology stacks.

Some people are generalists, others specialists. I dont think either fully appreciates the other as much as they should.

Companies that get it right in my opinion find room for both, however in my experience the larger the company the less likely you are to see full stack developers or generalists due to the pressures of organisational structures and high level ownership.

The thing is, this also assumes that job postings are an accurate representation of the employer's expectations. I think it's a common trend for employers to ask for much more than they realistically want, in exchange for weeding out those who feel incompetent and unable to meet certain requirements.

That being said, I think that when employers ask for full-stack developers, they actually want someone more experienced in a certain part of the stack, yet still familiar enough to get their hands dirty with other parts of the stack but not necessarily at the expert level. In other words, candidates who are more well-rounded yet focused in a certain area of expertise will likely stand out the most and meet the employer's expectations.

I'm a full stack. I do front end (bootstrap,bower,npm,etc..), backend (laravel,composer, data modeling with Relational and Nosql, I also webscrap and do api), and dev ops (ansible,apache). Just not master of anything... It's not a myth. The myth is expecting them to be master of every aspect.

The website is pretty bad with Privacy Badger on btw.

I guess I'm a full stack developer, does this mean I'm some sort of mythical creature?

No, my specially is the back-end. I got to know CSS when the designer went AWOL a couple of weeks before a project was to go live. I've grown experience in javascript because I couldn't find a decent front-end developer for the right terms.

Programming is a mix of learning the theory (the same principles are repeated regardless of the technology), and practice (I enjoy programming/ exploring so it doesn't feel like a chore).

I've been doing this [professionally] for nearly decade. Had I not had a deep interest in technology, I'd properly be working on some ancient codebase doing a job I hate.

well, if you make up a definition for the term for the purposes of your article about how it's an impossible definition to meet, i guess you can write that article.

Lol, Excellent point.

I was going to say, although full stack is pretty loose, it isn't that loose.

Full stack means you can touch front end code, backend code, and you can design a table or two or dump a few things into a NoSql Db for persistance. That's hard but it's not impossible at all.

That reminds me of an old boss that got around visa requirement of hiring local candidate first by posting and incredibly specific job req.

Agreed. I've never encountered an employer aiming to find a developer who can handle RAID.

Maybe not, but I've seen developers who fail to fully understand RAID make infrastructure decisions that lead to data loss.

Not a myth, I'm a full stack developer with 20 years of hardware, admin, qa, and software experience, but haven't found it easy to find a new job I'd like. Not sure if the problem is that I only apply for "awesome" jobs, which are by definition hard to get, or I have too much experience?

Also I tend to speak modestly of my achievements, another character flaw. In a recent interview, I told the guy I hadn't used the django-rest-framework package, and didn't think much of it, seeing as I have five years of django experience, and use rest apis every day, and occasionally create them. You could hear a little let down in his voice, though. I haven't been able to bring myself to lie about silly things like that--really would it have even taken me an hour to master?

However, you never know why exactly you don't get a job, maybe they had someone local or cheaper and didn't want to bring in someone from outside the bay area. Usually ask $150k for a full-stack senior dev in SF, is that reasonable?

Not really a myth. I do full-stack development. Anything from Ops (will happily configure and deploy to AWS with various CM tools, will set up centralized logging, will set up and configure alerting and monitoring), to DB (been a postgres user for half a decade, dbs with hundreds of gigs of data) to backend (single-handedly built my own Rails-like framework that we used to service millions of users) to frontend (can sling together anything from raw DOM to Backbone to React). The downside is that I'm not really a hardcore expert at any of these things, so any good specialist from any of these areas will be better than me. My role is best for smaller teams spinning up new projects, not as much where you'd need the top 1% professional in a certain area. Definitely wouldn't hire myself if I needed a specialist in a specific area.

I can (and have experience to):

- size and pick your IC's

- review and debug your schematic

- review and debug your FPGA's

- bring up your board

- port a bootloader to your board

- port Linux to your board and/or custom SOC

- port a Linux userland to your board

- write backend services in many different stacks

- write frontend stuff in many different stacks

- setup a nice ops infrastructure

(And with the exception of some of the OS X specific stuff on his list, that too).

But all of that really doesn't mean much more than that I'm old. Experience matters.

You can be a full stack developer. You cannot be a full stack expert.

Expertise takes focus and time. At some point, you have to make a choice between knowing a bit of everything, or knowing one thing very well. There is no bad choice, both are valid careers.

I'm a full stack developer. Although not an expert in all areas, I'm efficient and productive in almost all of the areas listed.

Then again, I'm creeping on 40 and thus, slowly getting fewer and fewer recruiter calls. This is definitely an industry that prioritizes youth (i.e. low expense) over execution, experience, skills, and breadth of knowledge.

But, also, I'm probably only in the top 10% (sampling over the over 200 developers that I've worked with). And, I've worked with a few exceptional people who would destroy me, in overall comparison.

I'm in the same boat; only I'm creeping up on 50 and have been working with computers since the early 80's (TRS-80 Color Computer). I have worked on most computing systems that you can think of (zOS, HP3000 MPE, Linux, AWS, Ruby on Rails, etc.) and am constantly looking at the next new thing (Rust vs. Go).

The problem that I seem to be running into is that I'm not a super speedy coder who is able to build a full featured Rails app (with tests, DB, front end JS, etc.) in 8 hours. With age I have definitely slowed down, but I've gained so much experience and knowledge about what will work well and what path you shouldn't take. I guess that experience is really only needed with smaller companies who can't afford to make the wrong decision early on.

Meh, I'm sort of in agreement. I went from backend, distributed systems, and ops, to full-on graphics engine programming, to compilers, and back again.

Even the list he writes isn't exhaustive at all. You're basically either an engineer, or you aren't. If you are, you should be able to learn anything provided you have the math background for the more specialized things.

That's because, for an extremely large portion of the "businesses who employ programmers" market, most of that image is just not a thing they do. I've never seen an ASP.NET consultoware shop do anything with PaaS, containers, load balancing, package managers, automated server management, search, automated configuration management, security auditing, or real UX design.

You usually have one guy or a very small team managing an on-site closet full of hardware, which is running an operating system you're probably not going to like, that is maybe virtualized, if you're lucky. That's all lumped under IT, so the same people are responsible for answering support calls, setting up email accounts, and installing network connections.

Then, on the development side, you have a particular web server, database, programming language, and application framework being used for every project, no possibility of doing anything else. The people who are hired here are expected to be able to make fool-proof instructions for the IT staff to be able to install the programs on the server.

And there is nothing in between. IT owns the hardware were the software runs, but they know nothing about how the software is made or what it needs. If something goes wrong, there had better be a developer on hand to "just fix it". Developers own the software, but they have zero access to the hardware, so preparing deployments is basically a ritual of finding the IT guy who hates the lead developer the least and hope he has time play telephone game on script runs that the developer massages based on his screenshots that he pastes into MS Word documents and emails.

If you're particularly lucky, your team figured out what sort of joke your "Corporate IT infrastructure" actually is and they communicate completely outside of the issue ticket tracking system that you installed to try to measure productivity because you have no clue how to evaluate anyone's work because you only have an MBA and have no idea how software is actually built or what kinds of problems IT departments actually face.

The "full stack" listed in the article was missing growing the silicon and screwing the servers to the rack. Seriously, the list of what the author considers "full stack" was extreme. Otherwise, I know a lot of people (including myself) who can build you a high-performance web-app from scratch, using current tech and what I consider to be a "full stack" (most of what is mentioned in the article).

The author just cannot afford to pay them. Because that kind of skill comes at a high price. And that's where the bitching starts -- you cannot find a competent, capable "full-stack" developer who wants to work for chump change. People with those skills know what they are worth, and expect to get paid.

> The "full stack" listed in the article was missing growing the silicon and screwing the servers to the rack

This is funny, but I actually know a guy whose last full-stack job entitled just that in addition to his dev duties! Since they self-hosted, he was responsible for data redundancy, etc. The guy's experience was definitely impressive

in my experience (both hiring & getting hired), super-specialists are way more expensive than full-stacks. YMMV, of course.

I recently changed jobs. I've been "Full Stack" since I began and was "Full Stack" at my previous job and am "Full Stack" at my new job. But the author is spot on that "Full Stack" has meant different things at each of those jobs. At first, it was VCS+JavaScript/PHP/HTML/CSS. Then, Jenkins deployments+Apache server configuration+Bootstrap+Foundation+Laravel were tagged on. Now, it includes Nginx+Mongo+RabbitMQ+Elasticsearch. But I don't know that I agree that it's as meaningless as "Ninja". I think of it more along the lines of "here's our stack, we need someone who can tinker with any element within it"

So if you substract the "User Design" list, I'm full-stack from the definition. I'm not a genius but I'm also not pretending I can host an app just because I can push start on a VM. I've worked at senior level in both dedicated frontend, backend dev and ops teams separately. I'm 30 with about 8 years experience.

The thing is there's basically no real advantage to being full-stack. I get paid more to specialise in either seperately. Tons of people see the cross-over as a negative. My competition are guys put apps live without testing them because the PHP server isn't incredibly different and they're totally full stack experts. :)

In my experience when a job description is posted requiring a "full stack developer", they mean someone who can do some UI, business logic, and DB coding.

It doesn't mean they're looking for someone who is an expert in every aspect, or has skill sets in all 18 tiers that are listed in the article.

So yes the definition of "full stack developer" that this article uses means that there are exceedingly few full stack developers. But the definition implied by most job postings I see are a lot more reasonable than this article.

“True” full stack developers exist, but so do geniuses and people who have been coding since they were 12.

Exactly. There's no need for the headline bait. Neither full stack developers, nor geniuses, nor 12-year-olds who can program are mythical. They're just uncommon. No news there. If you think your project needs one of the former, you can find one. I'm sure we all know or work with people in all of the above three "mythical" categories.

In my experience, "Full-stack" usually means knowledge of the web framework in question (Rails, Django, etc), as well as CSS/JavaScript mastery (Programming, Frameworks, and Front-end in the article, maybe some Databases and Security). I've never seen "Full-stack" refer to DevOps or UI/UX design.

Absolutely. "Stack" in "Full-stack" always seems to refer to a Web stack where the back-end is a database, a framework and maybe a service such as ElasticSearch or Redis.

I might be biased but to me, this is web development, not back-end. Back-end is designing distributed systems, data pipelines, trading systems, databases, etc... It has nothing to do with Web development.

Agreed - I always thought it meant you had a solid understanding of both the front and back end stacks, and could work in both comfortably.

I didn't know that. Perhaps I should be more explicit on my resume about Ops and UI/UX experience?

The ends of the spectrum of the shown chart are not what I would consider in the wheelhouse of a "developer".

The top of the list is systems administration and the bottom of it is project manager and graphic designer.

A front-ender needs to know enough Photoshop and Illustrator to take comps and turn them into templates.

I would qualify, I've done both servers and Android at Talkray. It's been a while since I have done both in the same day, but basically, if something broke on our Android client or server, I could jump in and get a fix, same goes for new features, and handle the server deployments.

That said, I'm happy that I don't have to do both. Oh, and right now, nobody's going to poach me. =)

The term full-stack was quickly picked up by other more contrived "stacks" besides the well-known ones (cloud, mobile, web, PC, mainframes, etc) and used to promote their own gimmicky products, and as an excuse to muscle in on their partners businesses and bundle their products.

While I agree that it is unreasonable to expect someone to deeply understand the current state of all of these technologies/problems, an actual "full stack engineer" needs only to be able to learn very quickly about these problems and, ultimately, make things work.

I think this whole debate is just people pedantically obsessing over the word "full". What 99% of job posters actually mean with the term "full stack (web) developer" is that they are looking for someone with _core_ skills on both the frontend and backend.

I tend to hire people for what they will do, not for what they have done. AFAIK, full stack means someone who will be able to work at all levels of our stack to deliver something that works on top of the surface (eg. UI) or edges (eg. API) of the stack.

Welcome to the what it means to be a start up founder. Not only do your customers expect your product to be high quality, but you dont have enough resources to dedicate to running, maintaining, or developing any given layer of the stack in isolation.

It's not a myth. Or you are specialized in one or more complex skills in one field. Or you are specialized in knowing as much as you can in every field to build something out of it. So or you are specialized in a field like deployment (AWS, boto, Chef, docker, kubernetes, Mesos... and the list goes on), or like front-end (React, bootstrap, CSS3 reactive design...), or iOS app, back end, databases... Or, you are specialized in connecting all these dots. And this is a full stack developer.

Just knowing how to do the "operational details" is a job in itself. It's a job to work on very specific things at Google/Apple/FB, and it's what they need the most: developers who are the bests in their field. On the other side, it's also a full time job to know how to build a website with RoR with a RDBMS db and cache db, maybe on AWS, and even with some React in it. It's already quite a lot. And this is more what startups wants. Or at least a few of these people as a team leader or working closely with every person in their team to connect their dots, to design the app/web app/web site as a whole.

Now yes ask to a full stack RoR dev how to design and code a database and he won't know, ask him even how to do specific things on AWS and he may not know either. But he will know how to design and build the whole product from A to Z, and to manage people doing what he can't do. And at the opposite ask an expert in iOS apps how the back end really works when he sends a request to their Restful API and he won't know. Same thing for someone specialized in the back end and you ask him something about React. Both are specialised in one stack.

Or you want to master specific tech/stack/field and you become specialized in one of them, or you become broader and broader and you become a full stack developer. It can be full stack dev in iOS (so maybe with some NodeJS in it to do Restful API), or as another example a full stack dev in big data (so I guess: Python Luigy, MapReduce, Spark, Redshift, Scala, Java, AWS...). At the end of day our time is limited and we can't be specialized in everything so if what we love the most to do is to use

Personally as a full stack dev, I am like a small CTO and can be one. I love to have the whole picture in my mind and to know how everything works together on a higher scale. I love all these tech around (AWS Boto, Docker, Vault, Consul, Spark, ML...) and I am like a kid who with a new toy when projects like these ones come out. I prefer to read an articles on Highscalability.com about Airbnb or Uber and do the same, rather than crunching SQL requests.

Gcc and make? Server management? Interesting.

Anyway, I could never understand the meaning of this new buzzword. Can anyone explain what does a "full stack" developer mean? Is it something from the web world?

It usually just means "Javascript coder with a decade of experience in <random frontend framework that exists for 6 months> and nodejs"

Hehe. I'm currently working on a "full stack" contract as a solo developer, where the mandated stack is AngularJS on the frontend and NodeJS on the backend. I like it a lot. The only thing I'd swap on the gig is MongoDB.

Other than that, I've been programming for 35 years (started on 8-bit micros when I was eight). At the last reckoning, I've racked up over twelve different languages on four different operating systems. I've programmed IBM mainframes, DEC minicomputers, PC servers, Linux set-top boxes and smartphones.

I've caught a tan from the glow of IBM 3270's, Wyse 50's, DEC VT220's, and am currently very happy with NodeJS on my Macbook with AWS as a deployment option (which I refer to as "the mainframe").

You should be careful before labelling people.

Not labeling anyone, just the use of the buzzword - not sure why you drew that conclusion (edit: your current gig fits exactly the "lazy caricature". The irony!)

So what did you mean by the lazy caricature? A lot of developers are solely responsible for the presentation, server and DB layers.

The article should say "Full stack web developer" considering there's plenty of domains where you can be full stack without hitting any of the listed technology.

Im a full stackoverflow developer ;)

Hi, I'm a full stack developer, I can tick every box on that list, and I've been programming since I was 7, not 12 :). All this stuff can be mastered given enough time, effort and by choosing projects which broaden your technical horizons.

Coincidentally available for contract work right now...

Ah, I have committed the cardinal developer sin of self promotion and am being duly punished.

It's interesting that self promotion is so frowned upon in our community when failure to adequately promote ones self holds back so many careers. Why do we applaud those who promote their startups as "hustlers" but not those who advertise themselves?

By tick every box, do you mean every layer or every component?

Every layer, I don't think anyone is an expert in all of those components, but I've worked with about 80% of them.

Yeah, becoming an expert on one or two components per layer doesn't seem particularly hard, given a few years of experience. Except for a couple of layers, I'd consider myself well-versed (not an expert) in at least one component per layer, and I'm not a particularly studious person.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact