This popular article has been updated in June 2017 to include modern technologies.
A full stack developer who can get from a prototype to full MVP (minimum viable product) is often considered a jack of all trades, master of none, and with good reason. To define the modern full stack developer, we first need to focus on what the full stack developer used to be.
Full Stack Developers Then
Long ago, circa 2000 (in Internet-time, 17 years is a very long time ago), a full stack developer was someone who could:
- whip up a web page in some Adobe tools like Photoshop or Fireworks
- turn this design into HTML, CSS, and hotspots on images (aw, remember those?)
- write some basic PHP 4.0 scripts (no object oriented PHP was on the horizon back then) to handle the server-side of the logic
- store all dynamic data into MySQL, maybe do a bit of optimizing
- upload it all to a server via FTP and collect the paycheck
Note that we’re talking about PHP here – a full stack Flash or Coldfusion developer had a different (but only slightly different) workflow.
Those were simple times, life was good. One-man agencies were a dime a dozen, and people still had time to spend with their family after work.
What about now?
What Does a Full Stack Developer Need to Know Now?
These days, we have horrors like these happening – how did it come to this?
To succeed in a now-saturated market, we developers – who are often perfectionists – hesitate to delegate and often live by the “if you want something done right” motto. This forces us into a corner where we have to learn everything, so that being a full stack developer often ends up encompassing the following.
Server Admin / Devops
A developer must know how to do basic server management. This includes but is not limited to:
- connecting to remote servers through the terminal, in non-GUI environments
- basic shell scripting
- managing users and groups on a server
- managing server programs like Apache and Nginx for serving apps
- managing firewalls and permissions
- installing new software and updating the distribution
Apart from these basics, a developer should know how to create good, healthy, isolated development environments, in either Docker or virtual machines like with Vagrant. If all of the above is something you’re unfamiliar with, we have an excellent book about it for sale here.
The developer should also be intimately familiar with version control systems in order to be able to reliably produce backups and shareable, collaborative collections of code, tracked for changes across time. No modern developer workflow is complete without version control these days. We have a fantastic video course about this for purchase here.
Apart from actual managed or virtualized servers, a developer might need to know about the cloud – hosting on platforms like Heroku, Google Cloud, Azure, AWS, and others.
There’s a fair bit to be said about platforms and tools that are more hype than immediately useful, but being familiar with the services everyone is talking about can come in handy in the long run – a client could demand a switch of providers any day now, and it pays to be ready. Luckily, we have the ultimate guide to deploying to all these cloud hosts.
On the back end, apart from knowing the language of choice – in our case PHP and its multitude of frameworks and CMSes – a developer needs to be familiar with:
- web servers like Nginx and Apache which ties into Devops above
- unfortunately, NodeJS for compiling JS, CSS, and other assets into statically hostable ones. Fortunately, there are ways to avoid NodeJS by using PHP.
- tools like Composer for package and dependency management in PHP itself – no modern developer’s environment is complete without it
- good API design, since most new websites today are API-based and merely talk to a detached front-end (more on that below).
- search engines like ElasticSearch (introduction here) are really important for performance
- cronjobs and background jobs with tools like Gearman or libraries like Crunz
- knowing about caching with Varnish, Redis, and similar powerful tools that slice hosting costs into the single digits will often make or break a project
The database is a separate section because apart from a good grasp of relational databases for data the schema of which won’t often change (like MySQL or PostgreSQL), a developer needs to know about noSQL databases like MongoDB, Redis, or Cassandra – not to mention graph databases like Neo4j.
What’s worse, these are all on the server, under the control of the developer. There’s also several remote solutions like the Mongo-like RestDB or the Google-owned Firebase, etc.
On the front end, there’s true chaos.
- NodeJS and NPM
- Preprocessors and transpilers (like Babel) for things like Typescript, ES6, LESS, SCSS, SaSS
- Builders and task runners like Grunt and Gulp
- Frameworks like VueJS, React, Angular
- Module bundlers like Webpack, Browserify, Rollup
In design, a developer needs to know how to sketch out a prototype of an application before converting it into a usable format like HTML and CSS. This can then be made interactive with some JS, back-ends can be simulated with fake JS endpoints, and only once this shell app is done and its user experience design and interface design are ready can true development begin. This in and of itself is a huge undertaking and warrants a special set of tools like:
- Photoshop and/or Illustrator or an open source alternative like Gimp / Inkscape – find out all about this on the Design channel
- a good, fast editor like Atom or Sublime Text (here are 10 ST plugins for the full stack dev)
- pattern pickers like Subtlepatterns and color pickers that match colors to one another
- grid systems for CSS
- ways to deploy a prototype online for customers to see it and give you feedback – Ngrok is very useful for this
To effectively keep an eye on an app’s health, a developer will need to be able to track error and access logs and extract valuable information from them. They’ll need to be able to recognize and flag trends, as well as notice upticks in CPU or I/O usage in order to prevent downtime on time. This ties into Devops a little, but demands its own particular set of skills.
We have an excellent post about the ELK stack that’ll get you as ready as you need to be for all your logging needs – it combines ElasticSearch for searching logs, Logstash for collecting them, and Kibana for a dashboard in which to show them into a fine stack for user-friendly monitoring. There are even hosted solutions that take care of this for you, like Logz.io.
Finally, there’s mobile to consider. With webview on both iOS and Android becoming more and more performant, and the advent of PWAs (progressive web apps), native apps are losing their charm because of the complex process of developing them. A full stack developer thus has to be familiar with either PWAs, or go with something like React Native or a full on webview like NativeScript, Tabris, Cordova, Phonegap, or other implementation to get a good “client app” going for their API (see back end section above).
Is Being a Full Stack Developer Worth It?
So after all this, is it worth it?
First of all, it should be noted that very few full stack developers are this full stack – many focus on just most of these technologies and aspects, not all, simply because it’s not possible to pay good attention to them all.
Secondly, knowing at least a little bit of everything might not make you a master of a specific craft, that much is true, but it’ll make you capable of understanding what goes into a project and which ones of these technologies a project actually needs. This is a priceless skill when delegating, opening an agency, or just guiding an existing team back from a lost path onto a well defined road.
How about you? Are you full stack or specialized? Whichever it is, do you feel like it’s worth it?