The term, which dates back to the 90s, with the rise of AJAX and multi-device rendering concerns, remains contested by many. And while the role does have its place, the term itself needs a serious update. It's time to say hello to the generalist developer.
Who is a full stack developer?
The definition of a full stack developer in itself is subjective. To generalise, a full stack developer is someone who works both on the presentational side of software and the computational side. In web development, a full stack developer usually works on frontend and backend concerns of a website. Back in the 90’s to mid-2000’s web developers were synonymous with fullstack developers. As most web projects consisted of simple user interfaces generated solely by servers, it was not uncommon to have all concerns handled by servers. It meant most developers had to know how to work with backend tasks as well as frontend-related issues. So, what has happened since then?
Related: What is a Full Stack Engineer?
Enter JavaScript frameworks and handheld devices
From the mid-2000s, a myriad of phone and tablet devices were introduced. This coincided with the rise of JavaScript frameworks, dealing solely with frontend presentation, which was a result of a new and exciting technique called AJAX (asynchronous JavaScript & XML). Instead of web servers taking requests and returning a full rendered web page, a page could query for specific information and update the relevant presentational part. This meant faster websites (you only request what you need when you need it) and a new approach to web technologies. A new stack was introduced.
Phones and tablets brought with them an interesting concern to web development. Previously, websites were limited to personal computers, paying no attention to different screen sizes. The advent of phones and tablets called for a re-think on how web information was presented and consumed. This also added a new concern to the frontend side of things.
The myth
There are plenty of non-believers when it comes to the presence of fullstack developers in the modern development era. These concerns are understandable. Compared to pre-AJAX web, there are variety of concerns for one to master. Fullstack now involves:
Frontend
Design splicing and implementation
Responsive web implementation
JavaScript
API integration
Framework (or vanilla.js) implementation
Performance optimisation
Unit testing
Miscellaneous
Task runners
Accessibility
Different CSS/JS framework knowledge
Behaviour testing
Backend
General backend model implementation
Authentication/Authorisation
API design
Database
Database design
Query optimisation
Data indexing
Miscellaneous
Data analytics (Big Data tools)
Unit tests
Isomorphic Rendering
DevOps
Continuous Integration
Load Balancing
Caching
Virtualisation
Server security
Smoke tests
All the above, plus a multitude of other business-specific requirements are the concerns of 2016 regarding full stack developers. A frontend or backend developer will be able to master their relevant concerns, but it is almost impossible to find a full stack developer capable of mastering both. However, that is not to say a developer is incapable of knowing and understanding all the concerns listed above.
The reality
Fullstack development is mostly limited to small teams with smaller-focused products. This means that a developer who is familiar with one stack would rarely possess the same knowledge on a variety of stacks. In comparison, a backend developer would typically posse the same level of mastery on two or more server languages. As a matter of fact, most small companies require full stack developers, meaning developers who are equally comfortable on the frontend and backend.
On the other side, most frontend or backend developers are to some extent full stack developers, when we use this definition. After all, a lot of frameworks extract away the nitty-gritty parts of development, allowing us to focus on product delivery. Ironically, it is equally hard to find a developer who is unfamiliar with the stack that is not their specialisation.
The perks and costs of being a full stack developer
Aspiring full stack developers should understand that the title is almost an oxymoron in today’s development. It is much more sensible to aim towards being a well-rounded developer, and with time, and by extension experience, developers end up acquiring knowledge on how the other side works. However, developers with enough knowledge to dive on both stacks are in more demand as far as web development is concerned. They might not have similar knowledge in the frontend compared to a frontend developer, but they are comfortable enough to deliver a final product, and in most cases, that is good enough.
Perks of a full stack developer
As stated previously, full stack developers enjoy a lot more opportunities compared to a developer specialising in one stack. Most companies would prefer someone as comfortable dealing with CSS edge-cases as they are dealing with odd database queries.
Software tend to become a lot more challenging and equally rewarding when dealing with both ends of the stack. It is much harder to be bored when you have twice as many features and bugs to work on. Keeping in mind most full stack developers work in small teams, product ownership seems to come almost naturally.
Some full stack developers will go as far as having two different resumes, one for each stack, when applying for positions. In a way this maximises their chances of a getting the gig, but it might be tricky for some considering most fullstack developers tend to have a preferable stack when applying for positions.
Costs of a full stack developer
Fullstack development means dealing with context switching on a daily basis. The mentality of frontend development is not the same as that of backend development. This often leads to introduction of bugs. It is almost unavoidable when the job involves working with technologies with different priorities. With Node.js, it might reduce some programming language syntax errors, as far as context switching is concerned, but the different environment requirements are still there.
A lot of software development involves keeping up to date with the latest frameworks and techniques. To a full stack developer, this means double the amount of work for their immediate stack. That does not include picking up new stacks altogether.
Compared to frontend development, backend developers have a significantly wider choice in technologies. A fullstack developer tends to be experienced in only a couple of technologies, and the task of mastering several programming languages becomes harder with frontend development in mind. While they might be able to apply to several positions, it becomes harder to stand out when job opportunities demand highly specific domain knowledge3.
There are large tech companies that will outright not hire a full stack developer. They require specific domain knowledge and would prefer someone with enough experience dealing with edge cases. Statistically, these jobs are less common but tend to be more on the bleeding edge of software development.
Final thoughts
The old definition of a full stack developer is almost extinct, and it is much better to refer to them as generalist developers. The best way to become one is by focusing on one stack early in your career, while slowly picking up knowledge on the other stack. It is almost futile to aspire to master both stacks, as the amount of information grows exponentially with each additional stack.
Data science and/or big data is a can of worms on its own
A back-end developer for a video-content site will have different requirements to one working on a photo-sharing product. The same applies to front-end and dev-ops.
Jack of all trades, master of none, but better than master of one.