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
Continue reading %Being a Full Stack Developer%