Since Facebook’s Carlos Bueno wrote the canonical article about the full stack in 2010, there has been no shortage of posts trying to define it. For a time, Facebook allegedly only hired “full-stack developers.” That probably wasn’t quite true, even if they thought it was.
Is it reasonable to expect mere mortals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it. And many other companies also have job descriptions for software engineers mention “full-stack programmer”
It seems as though everyone in tech today is infatuated with the full-stack developer. Full-stack developers are talked about and wanted nowdays because Developers who understand the whole stack are going to build better applications. What does the term “full-stack programmer” mean? Shoud I put my defensive tendencies on high alert when I hear that magic phrase?
Full stack developer definitions
Wait, Wait… What is a Full-stack Web Developer After All? article says that a full-stack web developer is someone who has honed skills in both front-end web design/development and back-end/server coding.
Outside the traditional web development the stack is somewhat different. A full stack developer developing mobile applications needs to know both the software system running on the smart phone (native app or web app) and the back-end running in the cloud.
- Server, network, and hosting environment
- Relational and nonrelational databases
- How to interact with APIs and the external world
- User interface and user experience
- Quality assurance
- Security concerns throughout the program
- Understanding customer and business needs
- Ability to write quality unit tests.
- Understanding of repeatable automated processes for building the application, testing it, documenting it, and deploying it at scale.
- An awareness of security concerns is important, as each layer presents its own possible vulnerabilities.
Is this possible in Web 2.0? Or in the era of mobile apps? In a TechCrunch article, Peter Yared made the argument that “it’s becoming virtually impossible for a single developer to program across the modern full stack.” It’s virtually impossible to be a true full-stack developer that knows all those areas very well. Is it reasonable to expect mere mortals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it.To me, a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology.
How skilled are you in each discipline? The basics of the languages/frameworks we learn today can often be picked up in a matter of hours: we simply download some code and start hacking through tutorials and demo code. You do not become expert in shoer time, but om this way you can learn enough for many needs.Nowadays programmers must know a range of technologies across multiple platforms in order to do good work. A full-stack developer doesn’t need to master all of the areas and technologies he needs to work it, because that just makes it nearly impossible, he just needs to be comfortable working with those technologies, and that’s a lot too.
A “full-stack programmer” is a generalist, someone who can create a non-trivial application by themselves. You can count on a full-stack web developer to design, code, implement and maintain a fully functional modern interactive website on his/her own.
People who develop broad skills also tend to develop a good mental model of how different layers of a system behave. This turns out to be especially valuable for performance & optimization work. These skill sets in combination would help in becoming a system integrator or system architect.
Basically when people are asking for a full-stack programmer they’re looking for the all-singing, all-dancing technical wizard. Or at least someone who won’t complain too much when asked to do some work outside their normal comfort zone.
Perhaps most respectable about all people who claim to be full-stack, is that is conveys ambition and persistance. The ideal developer should be willing to have a go at learning anything, but also acknowledge when they need help from a specialist in the team.
Full stack challenged
Full stack may have been possible in the Web 2.0 era, but a new generation of startups is emerging, pushing the limits of virtually all areas of software. From machine intelligence to predictive push computing to data analytics to mobile/wearable and more, it’s becoming virtually impossible for a single developer to program across the modern full stack.
There are very many layers in modern stacks. Stacks are a lot bigger than what they used to be, and being able to claim one has acquired refined skills at every layer of web development is certainly not a small claim. It means a person who can work with databases, servers, systems engineering, and client work. Depending on what kind of client is needed that can mean a mobile stack, web stack, or native applications. And some posts really push “full-stack” developer into Unicorn territory: Laurence Gellert writes that it “goes beyond being a senior engineer,” asks for “familiarity in each layer, if not mastery.”
We are in the midst of a rapid shift to more complicated technologies that, as in days gone by, require experts at each tier. In this brave new world, it is critical to have at least one person with at least a functional understanding of each of the composite parts who is also capable of connecting various tiers and working with each expert so that a feature can actually be delivered. Welcome, full stack integrators, in addition to engineers with deep technical skills in particular areas.
A new breed of developer: the un-stack developer article points out that the “stack” typically refers to developing for modern applications: Web and mobile. But what happens when you’re developing for desktop apps, legacy application or embedded system?
Un-stack developers look at a given stack and figure out how to write code that solves problems up and down and across it — especially in startups. The un-stack developer uses only the stack technologies that make sense for their software project. Thus, it’s entirely conceivable that a single person can add features across all parts of the chosen stack. This new breed also doesn’t necessarily have an “advanced level of knowledge” of the technologies in the stack.
Let me be clear: an advanced developer is not the same as a good developer. Certainly every good developer should have advanced skills, but not every developer with advanced skills in technologies is a good developer for a startup. Rather, startups need nimble coders with the kind of education that trains them to learn quickly, test often, and get an idea out the door quickly.
The lesson for startups is that you often don’t know what you are going to need until you finish iterating. The truth is that most software developments don’t need the full stack. And even if the installation requires a full stack, it doesn’t always require an advanced developer in all technologies of the stack, especially if you are a startup. Good developers can write code and architect systems both for the current state and the unknown future. Given the speed of change at which all companies, from startups to enterprise, operate, developers need to keep reading and never stop innovating and learning new technologies — so that they can develop simple solutions that work well and endure.
What would be a Full Stack Web developer in IoT era?
Full stack developer for IoT would need even wider knowledge on the stack than web era full stack developer. In addition to what a full stack web developer need to know, a full stacks IoT developer needs to know embedded systems development, a large set communications technologies, networking protocols, M2M/IoT communication protocols, sensor technology, typical “maker” technologies (3D printing, proto-board prototyping, Arduino, etc.) and electronics design. If your IoT application involves wireless communications (they usually include), understanding basics of RF technology would be very useful. In industrial IoT applications understanding of legacy industrial protocols is often needed when devices need to communicate with industrial automation devices.
Solid C/C++ programming language fundamentals is important in most embedded systems applications. A few years of working with real-time embedded microprocessor and microcontroller systems is good. Experience working and troubleshooting HW/SW systems is essential. Knowledge on several scripting languages is good to have, because embedded IoT applications use nowadays more and more parts that are implemented using scripting languages (Python, Perl, Ruby, Bash, Lua, PHP etc.).
There is also need to know how to do Full life cycle development – design, code, test and release new products, add cool software functionality to existing products, and work with the team to take our products to the next level.
In addition to this the full stack IoT developer needs to understand the involved processes. With this I mean that the developer needs to have understanding on the physical process the IoT device is measuring and/or controlling. In addition the developer need needs to understand the business processes and needs of the companies working on the field the product is aimed to.
Full stack developer IoT era description could be something like this: Full stack engineer with broad skills, experiences and enthusiasm from hardware to software, from engineering to operation, from infrastructure to applications. Good at finding and solving problem. Love to learn, fast to learn. Love designing and building elegant, powerful and inspiring products. Experience in Embedded system, Network protocol, IoT, Web Application Front-end and Back-end, DevOps.
Who needs full stack developers?
Is there truly a need for engineers that have exposure to all these skill sets? Large and small companies two completely different environments, but it seems that both of them need “full-stack developers.”
For a time, Facebook allegedly only hired “full-stack developers.” But large traditional companies typically hire people to work in only one area: they tend to separate embedded engineers by disciplines such as firmware, hardware, interface software, and PCB layout. Very large and profitable companies may gather experts from each field in their team. But even in them , it is critical to have at least one person with at least a functional understanding of each of the composite parts who is also capable of connecting various tiers and working with each expert. These skill sets in combination would help in becoming a system integrator or system architect.
Smaller companies and startups NEED full-stack developers. Especially it important for early hire for the team as work typically involves multiple hats. Basically when people are asking for a full-stack programmer they’re looking for the all-singing, all-dancing technical wizard. Or at least someone who won’t complain too much when asked to do some work outside their normal comfort zone. Developers are often forced to acquire new skills when the resources simply aren’t available. In the smaller companies engineering people usually get involved in everything: hardware design , PCB layout, firmware design, hardware/firmware testing of said board, and hardware design/layout/firmware design for production test equipment for high-volume manufacturing. You do need the skills to pull it off. At later time when company has grown these skill sets in combination would help in becoming a system integrator or system architect.
If you know that you need a full-stack developer, there is one problem in getting it: The changes of of finding a really good full stack developer is low. Really good full stack developers are rare, and usually well employed. And when you are looking for talented full stack developer, you need to be careful who you employ, because real multi-skilled developers are often lost in a sea of douchebags, claiming they know it all. You need to know how you separate real full stack wizard from someone who just claims to be such.