Language matters. Giving something a label and a definition helps to take something abstract and ill-defined in our minds and make it "real." Once this abstract concept becomes "real," it frames the terms of the debate by forcing even those who oppose it to argue within the construct that is defined.
"Language matters because whoever controls the words controls the conversation, because whoever controls the conversation controls its outcome, because whoever frames the debate has already won it..."
Erica Jong
Let's take the concept of a "full stack developer." This is a very recent concept but its use has picked up steam lately. There seems to be a constant stream of posts on sites like Hacker Noon or Medium that try to help junior developers or aspiring developers become a "full stack developer." More and more companies are posting jobs looking for "full stack developers."
However, I want to argue that simply by creating the term and using it, we've now solidified "full stack developer" into a concept that is reframing how we (and especially the employers who'd hire us) look at the skills required to do the job. What was once a preposterous list of requirements for a job that many of us used to mock gets lumped under the term "full stack developer"
Let's look at a (by no means comprehensive) list of what are often listed as the "essential skills to become full stack developer":
- HTML/CSS including:
- Front-end frameworks like Bootstrap or Foundation
- CSS preprocessors like Sass
- Responsive and/or adaptive design
- JavaScript including:
- JavaScript frameworks like Angular, React or Vue
- JavaScript toolchains featuring things like TypeScript, Babel and ESLint, npm
- JavaScript testing with tools like Jasmine and Mocha
- Back-end development, which depending on the needs of the employer, may potentially including:
- PHP
- Node.JS/JavaScript
- Ruby
- Python
- C# or Java
- Database development including:
- RDBMS like MS SQL
- NoSQL data stores like MongoDN
- In-memory stores like Redis
- Web application architecture including:
- Leveraging serverless/cloud services for a microservices architecture
- Deployment to various platforms including AWS, Azure, Heroku, etc.
Let's admit that that is an impossible list - even assuming only a minimal level of expertise in some or most of these. I also left out things like understanding web application security, managing version control, configuring a web server that are all essentially assumed skills.
The "full stack" dev is a dying breed. Just keeping up with JS & React ecosystems is a full-time job! Redux, MobX, GraphQL/Apollo/Relay, Jest, Enzyme, Babel, Webpack, ESLint...plus frequent React releases, annual JS versions, and countless npm packages!#javascript #greatproblem
— Cory House 🏠 (@housecor) March 16, 2018
Listed out in a manner such as this makes the requirements of a "full stack developer" seem laughable. However, as an employer, I can still imply all of those same requirements under the acceptable term of "full stack developer." Recruiters and other people training developers in the industry are reading things like the "6 Essential Tips on How to Become a Full Stack Developer" or "What the Heck is a Full Stack Developer?" that attempt to normalize the definition and make it seem more reasonable and palatable.
The net result is that even if companies don't get everything they want on this list, they've still successfully ratcheted up the requirements for being a successful developer - and made it acceptable to ask for everything in the first place. They've made junior devs and future devs aspire to the qualifications of a supposed "full stack developer."
After reading an article on Hacker Noon, I am reminded that I'm not a fan of the term "full stack developer." I think it gives companies an easy way to unrealistically ask for everything and sets a unachievable standard, especially for junior devs.
— Brian Rinaldi (@remotesynth) March 6, 2018
In effect, we have allowed the "full stack developer" term to frame the debate. We should not. It is a term that defines something that doesn't exist - cannot exist because it is an impossible standard. We can begin by refusing to use the term ourselves. We can try to cut through the BS being fed to junior devs and aspiring devs so that they don't see the term as an impediment to future success. And we can ask our employers to not use the term - lay out your requirements, rather than hide them under a ridiculous title. If you have a good job at a good company under the "full stack developer" title, try to convince them that it would be better to use a clearer title that better reflects the specifics of the role.
Hopefully the less we are willing to accept this term, the less we see it used and the more we can regain control over the discussion about what it takes to become a successful developer.
Note: This post was originally published on my blog
Top comments (18)
I generally think of a "full-stack" developer not as someone who is proficient with all of these tools, but rather one or two in each area, and has the necessary background to easily adapt his experience into another toolkit.
For example, someone who is proficient in:
Front-End Layout:
Could quickly learn all the other things in your original list as needed.
Front-End Dev:
Could easily adapt to work with Vue. Babel + Eslint + Test Framework would likely be picked up on accident along the way.
Back-end is likely the one that would be trickiest, mainly due to the plethora of available languages and frameworks, but once you've worked with one or two toolsets, the core concepts still translate fairly well between heavy hitters.
Database:
Once you've got basic MySQL, or even SQLite down, with some focused studying you could probably adapt to whichever SQL-based database your employer is using.
Document and in-memory stores tend to be fairly easy to understand, comparable to any medium-sized library.
Web Application Architecture is, well, a pain. Every platform has its own tools all over the place that may or may not work well together. Occasionally concepts translate, sometimes they don't. But still nothing that good documentation and messing around can't help wrap your head around.
To reiterate, In my opinion a full-stack developer is someone who has considerable experience working at all points in the stack, and feels comfortable with one or two tools. They're valuable not because they know everything you'll be using already, but because they can adapt quickly based on the background knowledge they've accrued.
Based on that understanding, I feel fully confident in calling myself a full-stack developer. However, I prefer the term "Developer" or "Software Engineer" just because they're slightly less maligned, fairly non-specific, and allow me to apply to jobs based on how well I think I can meet requirements.
You have to be careful with the term "engineer" though. It is a title which is acquired by going to and finishing an education. This might not be true in some countries.
I actually perefer FullStack developer over something like Python developer or JavaScript Developer. Languages and Frameworks change, and your skills evolve, and chaving a title based on your technology limits you. (it probably also limits you in what you think you can do, given the importance of language you mentioned in the article).
I think it's fine to focus on frontend or backend, and call yourself a frontend developer or backend developer, or mobile developer, but be wary of tying yourself to a specific technology.
how about Software Engineer :)
In Canada the term Engineer is usually reserved to people chartered as such. This could mean exposing yourself to lawsuit. Be aware.
I think things like Software Engineer, Developer (with Senior or Junior perhaps), Software Developer, Software Programmer, etc. are all good options if you want to keep things more generic. I prefer things like front-end or back-end developer - but every company has their preference for titles (and in some larger companies, the specifics of the title imply a level on a pay scale).
I am not all that bothered by language specific titles - though I do think when people go so far as to use framework specific titles (like Angular Developer for instance), it takes it a bit too far. I don't see this necessarily as being a hindrance to finding a job - I've swapped languages and front-end to back-end over my 20+ years...regardless of my titles. I'd even say, if the title on your resume isn't helpful, tweak it - saying you were Developer rather than a Python Developer is in no way misleading.
Agree 100%. FullStack Developer is the new WebMaster, we stopped to use it because nobody was able to be a WebMaster, why we do use FullStack then?
There was a class in my secondary-technical school called "Universal Electric Maintenance" (or something like that, forgive me if I don't remember correctly). I was in IT class. We asked our teacher what is this class? Those guys had common classes with electricians, IT and CRT television mechanics (yep, this was more than 10 years ago, I'm old as f...). He described:
What the teacher didn't told directly, that's why no one will hire them, because if someone want an electrician in their company, they will hire an electrician. And the biggest problem was, these guys will never have education for CRT television repair and they cannot start their own company (in my country, you need to hold the specific education certificate to start a specific company).
And this is the problem with full-stack devs today. The world has changed, no one care's anymore if the "Universal Electric Maintenance" guy doing 2 or 3 field's job, because it's cheaper. It's okay if you full-stack, because you want to release your pet project. But it's not okay when a big IT company hire you for full-stack. Basically this means: they want one dude for two dude's job, because it's cheaper. Because they still living in the dream that you touch javascript when you making the "final touches".
Usually in little companies, the "full-stack dev" is the IT department itself. Just think about this when you apply.
I think any of those titles would be appropriate and I'd say it depends on the kind of role you are looking for (I tend to use developer rather than engineer but I am not sure there is a huge difference). If you want to focus more on just mobile in your next role, then use mobile developer.
Point is, when it comes to your resume, focus more on the job you want than the job you had. That doesn't mean be dishonest, but when it comes to whether your title is listed as front-end developer or mobile developer, it's just a matter of which part you emphasize most. (Plus the real details come in how you describe your position - I've had developer roles where my actual title was "Systems Analyst", which gives you zero idea of what I actually did)
What if I actually enjoy being a "full-stack dev" and dealing at work with all the topics you mentioned (disclaimer: just a single backend technology)?
I've done the same at times over my career as well...though I always had a primary focus. I may be involved to varying degrees in aspects that were not that primary focus, but that was generally going over and above what was expected of the position.
I don't think a title has to limit you - if you are in a company that offers you the opportunity to explore other areas, do it. However, I am more concerned about the expectations the title sets within the company whereby the company says "why pay for a back-end developer, front-end developer and JavaScript developer when all I need is one full stack developer." There will always be talented people who can go well beyond the scope of their position, but setting that as an expectation and baseline puts unrealistic expectations on the industry as a whole, in my opinion.
I agree with the argument raised here. The term full stack developer can make software development seem overwhelming because you feel like you have to know every thing there is to software. At the end of the day, you are more like a jack of all trades and master of none.
I'd actually argue that the security and web server architecture wouldn't be lumped to the role of a "full stack developer." That's more dev ops/system administrators roles, at least at my company. Actually, our lead developer fulfills all the things you wrote down and he also does a lot of the architectural work for new servers and routes.
Also, most job posting wanting a full stack developers I've seen actually limit the skill set to the dev side; some javascript framework, sql/nosql, and a backend.
If you define a stack as the technologies used in the development side -- and that's implied in my opinion -- the terminology isn't that farfetched.
I think you have a range of companies latching onto the terminology. However, in writing this I searched for job postings and articles on how to become a full stack developer and the skills needed, and I'd say that by and large the expectations for most of these were on the outlandish side as opposed to reasonable.
I'm hesitant to completely scrap a particular term just because it's been abused in the past. To anyone writing job descriptions, I would say a "full-stack developer" role needs to be accompanied with:
This ensures that you're up-front about your expectations and helps potential candidates determine their fitness for the role.