I’ve been known to use the phrase “full stack developer” sincerely, even somewhat recently, but it’s a label that makes me feel ill-at-ease. I’ve seen it bandied around a lot lately and it’s got me wondering whether I really believe that such a person truly exists. I’ve heard people I respect argue persuasively that such a person exists and I’ve heard people argue just as persuasively that the idea is sheer fallacy. I think both are partially wrong. A full stack developer can exist but only if a) you define the “stack” and b) (s)he understands both the technology and its context.
Defining the Stack
The phrase full stack developer in the past has, in my experience, predominantly meant a developer who could work on an end-to-end solution in one or more of the popular web application stacks: LAMP (Linux, Apache, MySQL, PHP), WISA (Windows, IIS, SQL Server, ASP.NET), one of the Java variants, and later sundry Rails-oriented stacks. Usually “full stack developer” implied “full stack LAMP developer.” Someone else would do things like move data from an OLTP to a data warehouse for back office use, manage networking systems, or provision infrastructure.
These days there are far more production-ready constituent technologies from which to assemble a stack. You also need to do iOS development, Android development, automated delivery and VM/container provisioning (Puppet, Chef, Ansible, etc.), Hadoop, machine learning, complex single page applications, and more. Just the single page application is often more complex than a full LAMP-based system from days of yore. A full stack developer in 2015 is a far more fanciful notion than it used to be. Of course there is the rare unicorn that can be a fully proficient full stack developer in multiple stacks, but honestly that’s a hard game to sustain. Subject matter expertise requires knowledge and experience. Some of the technologies that come up in these discussions have barely been around long enough for people to have gained significant experience in one, let alone several.
Understanding the Context
And knowing the technology is not enough. A great developer understands the context in which a set of technology is deployed, used, and monitored. To be a full stack developer, one must know what exists at the boundaries of the stack. What are my systems provisioned on, how is the network segmented, where are the single points of failure, what new technologies are going to become important in my system, what loosely coupled systems depend on my system, what external processes share common subsystems such as databases or queue services, how do we test that the system is correct, how do we detect when the system is online but not healthy, how do we know when it’s time to add hardware, how much downtime is too much downtime, what browsers are we supporting, how are we handling very low-end Android devices, and on and on and on.
I have a theory: you don’t see a plethora of full stack developers because the ability to grok many technologies in detail while simultaneously seeing the big picture and understanding context is the right mix that gets people promoted into leadership/management roles and away from day-to-day development activities.