What is Full Stack Development?
I generally think labels and hyped up job titles are lame. That being said, they're here to stay, and as such you should be fairly well-informed about what a lot of these titles mean.
So let's start with a simple example: full-stack developer.
Dig the blog? Check out my weekly research newsletter for all my research+some exclusives every week.
Start with the stack
Well, what does the stack in full-stack developer mean?
A stack generally refers to a "tech stack" or the technologies and solutions that you use to build out a product. There are some popular stacks that have earned their own acronyms:
- MERN - MongoDB, Express, React and Node
- MEAN - MongoDB, Express, Angular and Node
- LAMP - Linux, Apache, MySQL and PHP
Those are the main trinity, but honestly tons of software you use don't exclusively use those stacks. Really those stacks are good starting points and you'll typically nail on other tech as time goes by. The stack names are useful in kind of carving out the main technologies that you use, and as such are used fairly frequently to find developers on job sites, but you'll often find that they aren't quite enough. I'm currently working on a fun side project that uses C++, Python, Rust, ReactJS, MongoDB, Express and Node, and I'm thinking about writing some custom Assembly for it just for fun...
... which segues us nicely into discussing what is meant by "full-stack."
What does "full-stack" mean then?
Typically (like, very generally) developers can be divided into two buckets: front-end developers and back-end developers.
Front-end developers are essentially concerned with anything that the user sees. So, in the case of a traditional web application, they are developing the web site landing page, various dashboards and the UI/UX for the user. In the above mentioned stacks, they are using React, Angular, HTML and CSS. I'm learning Typescript as a way of leveling up my front end skills, because that's where a lot of my skills are lacking.
Back-end developers are typically working on the "plumbing" that the user doesn't see. They are setting up databases, writing API's, working on system designs, writing monitoring software, setting up load balancers, etc. For an odd example of some back-end development, you can read this blog on how I developed a malware command-and-control (C2) with Python.
Typically these two roles are divided simply out of convenience: it's fairly easy to decouple the front and back end of most projects, so why not have two different people/teams working on them concurrently? Many times it's also a matter of a difference of expertise: front end developers are artsy designer types that are good at making things look pretty, back end developers are brutes that are good at logic and less so at design.
Before you rage-comment, this is an extreme generalization... for reasons you're about to see, and others.
Now that you understand the stack and the typical division, it's fairly easy to define what a full-stack developer is: someone who does both front and back end work and develops entire applications, or at least parts of entire applications, without worrying about the front versus back end divide.
I fancy myself a full stack developer, but I'll admit I'm trash at front-end compared to back-end programming. My love is in the world of Python and Express, not React. I don't like spending hours trying to center a div when I could be spending hours debugging an API. Many, if not most, full stack developers have a preference between the two and will spend the lion's share of their dev time on one or the other, while being comfortable enough with both to survive on their own.
What does full-stack NOT mean?
Full stack developers are not super heroes. They're not necessarily better than front or back end developers, and they're not some 10x engineers that are going to replace your whole dev team.
They're not even necessarily masters of front or back end development.
They also didn't necessarily seek out the "full stack" title... many times they were faced with projects that needed a front end but didn't have a front end developer, or had a website but needed an API or user database.
Fight the urge to look at full stack developers as some sort of mutant or legendary coder. Instead, recognize they are often creatures born out of necessity, even if they are valuable assets to any team. I think the world has ventured too far into specialization and that we all could benefit from having more of a "full-stack mentality." Specialize in something but focus some energy understanding the other end of the stack as well.