He finally felt like he could say he was a full-stack developer
Last week I talked one of my closest friends from college, and before we ever had the chance to see each other in person he proudly proclaimed he finally felt like he could say he was a full-stack developer. We haven’t seen each other in years, but I was aware he had moved away a bit from being on the marketing/financial side of startups to the technology side based on the changes in his vernacular. Heck, he practically has the same title as me at the new startup he works for and I made my own title because I own the business!
Is it possible that this friend could’ve become a full-stack developer, this same friend who once asked me “why waste time coding when you can hire someone dedicated the task?” I would’ve said absolutely not had you ask me when I last some him some odd number of years ago, but the guy I reintroduced myself with, he could code. He even taught me some cool tricks he’s picked up and got me interested in trying VIM out again with this cool game that helps teach you. He claims level 7 is damn near impossible, I’m on level 6, so challenge accepted!
But this still begs the question, was he right? A developer is a programmer who creates, develops, tools to be used. In most instances a developer is developing this tool specifically for the end user. That is, they develop and package the tool in such a way that it works independently for each individual, such as an application on your phone. He’s the lead developer of a mobile application, so he’s absolutely a developer. But is he full-stack? If he’s full-stack, what factored into his decision to call himself a “full-stack developer” instead of a “full-stack engineer” as I refer to myself? In order to figure this out we have to first understand the answers to a few key questions:
- What exactly the stack is?
- What skills are required by each part of the stack?
- How much knowledge in each part of the stack constitutes understanding?
- How can we determine a programmers competence in the stack?
- What defines an engineer in a virtual world?
We start with the most important of these questions, which is also the most difficult to understand:
What is the stack?
The stack are the main technologies used to deploy built tools. You can think of them like the tool-belt your friendly neighborhood carpenter Max brings with him on the job everyday. The technologies defining the stack change and evolve over time, just like how the tools in Max’s tool-belt change from site to site. There are key basic components to the stack that full-stack developer or engineer must use on a daily basis and must know how to use them properly to even be considered full-stack. For Max the carpenter, these tools are his hammer, tape measure, speed square, and pencil. You can’t be considered a carpenter without these tools in your belt because you can’t do carpentry work without them. So what are the hammer, tape measure, speed square, and pencil in the stack?
When I began learning the stack in the early-to-mid 2000’s there were four technologies that defined the stack: Linux – Apache – MySQL – Perl/PHP. Also known as the LAMP stack. Fifteen years ago, developers and engineers didn’t know much of any HTML or CSS (two languages that are used to define things like how a website is designed). Knowledge of procedural PHP was nonexistence because Object-Oriented Programming (OOP) didn’t even exist until PHP 5.0’s release in 2004, and it wasn’t until 2008 that 5.0 became the exclusive stable version available (Read about Proceedural PHP and OOP here) until then PHP was still being treated how the originally developers intended, as an extension used to speed up and improve the code already written in a programming language. Things like debugging code, handling form inputs on the web, handing the interactions with a database, and the ability to embed HTML (all of which are still used today). We also didn’t use version control. If you did, you were one of very few who did so, and basically considered a technological genius.
The stack of today is flexible
Now a days, HTML and CSS are two of the most important, basic skills that a developer must have. PHP is a language, OOP is standard, Proceedural PHP dominates the web (WordPress is a prime example), and it is complete incompetence to not use a version control. As such, the stack has evolved. Unfortunately there is no cool acronym like LAMP and none of these four technologies are pillars of the stack anymore. The stack of today is flexible to the vast amount options available for implementation. Linux, Apache, MySQL, and Perl/PHP are technologies used in development, but they’re now under a larger umbrella. The current stack is an array of stacks. There are five separate stacks, each with technologies specific to them, that are all required of a full-stack developer or engineer. They are: System Administration, Web Development, Design, Front-End, and Back-End. We can also take a look at our second question:
What skills are required by each part of the stack?
The technologies within each individual stack will answer our second question:
Cloud (Amazon Web Services, Azure, etc.)
Background (Gearman, Redis)
Search (Solr, Elasticsearch, etc.)
Cache (Reverse proxy, Varnish, Memcached, opcode)
Log monitoring (Nagios)
Virtualization (Docker, VirtualBox)
UX (the experience users have)
Conversion (turning design into code)
CSS3 (Media Queries, Preprocessors)
Web Browsers (addressing different compatibilities)
Responsiveness (flexibility in designing)
Data Communication (AJAX, JSON, XML, WebSocket)
Languages (PHP, Ruby, NodeJS)
Databases (MySQL, MongoDB, Redis)
Now that we have an idea of what the stack is and what skills each part of the stack requires, we move on to our third question:
How much knowledge in each part of the stack constitutes understanding?
To be considered a full-stack developer or you don’t have to have a complete mastery of each individual technology within the stack, that would be nearly impossible, but they have to be comfortable working with them and understand what someone is saying when they talk about them. In laments terms, they must be comfortable working with each of these technologies. In most cases, since these technologies cover a wide array of abilities, it will be immediately observable if someone is not not comfortable with one of them. Their language, navigation, and questions asked – these are all are indicative of their understanding of a technology. If they had ask what one of these meant or for an example, they aren’t full-stack. Think of being full-stack as being a jack-of-all-trades. But maybe they can talk their way around that but don’t actually have the said skill, here we must pose the 4th question:
How can we determine a programmers competence in the stack?
There is a method of drawing a spider web and each spike is a different layer in the stack and you provide the developer with 30 points to evenly distribute among the spikes. Once you limit them like this, they have to decide what they’re best off, and will clearly show their true competence of the different layers in the stack. I’ve provided a picture below taken directly from the article on the method. I highly suggest anyone who wants to truly test a full-stack to have them do this.
And now, finally, the last question:
What defines an engineer in a virtual world?
I get asked something like this a lot when I say I’m a full-stack engineer, “how can you engineer something that isn’t physically there?” This is very simple to answer. A computer science engineer takes the principals applied in engineering to computer science. That is, I approach each problem with the engineering techniques and skills I learned in school. Often the only difference between a developer and engineer is schooling. Many of the things I build are not for the end user, rather they require some sort of a system administrator. A good example is a packaging process.
It’s all or nothing
So, is my friend actually a full-stack developer? If he reads this article and still believes he’s full-stack, then absolutely. If he’s not comfortable with even one layer of the stack, then he’s not. It’s all or nothing. He’s a very critical man and would never say something without first researching it extensively, so, odds are he’ll read this and know to himself he is certainly a full-stack developer. There is still one question that remains though…