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.
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.
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.
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.
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.
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
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.
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.
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.
The website is pretty bad with Privacy Badger on btw.
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.
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.
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?
- 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.
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.
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.
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.
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.
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 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.
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
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. :)
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.
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.
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.
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.
That said, I'm happy that I don't have to do both. Oh, and right now, nobody's going to poach me. =)
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.
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?
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.
Coincidentally available for contract work right now...
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?