Should You Be a Full Stack Developer?

adminguy's picture
Posted April 22nd, 2015 by adminguy





Image Credit

StackExchange published the biggest ever developer survey sometime back. It was interesting to see that 85% of developers called themselves full-stack developers. I don't think this would have been the case five or ten years back years back, when most people preferred specializing within a silo.
Software development has come a long way in the last decades, but one very significant shift is the emergence of full-stack developers, or T-shaped developers. Some people may argue that they don't mean the same thing. Some think of a full-stack developer as a unicorn, a person who is a ninja in all the layers of the stack. There may be some people who are indeed unicorns, but a vast majority of even really good developers aren't. In a more practical sense I think both these terms refer to a developer who is a generalist-specialist. This is a developer who is an expert at one thing, but can communicate and work (at times with some help) across all layers of the stacks. This person has broken out of their silo and is out in the wild.
DevOps, data science, and even software development are teaching us that nice organizations with well-defined boundaries may be easy to manage, but they don’t get the job done. Siloed development locks you into long and ineffective product cycles; they lead you to build products that are obsolete when they’re finished, or aren’t what the customer wants. The results are inflexible: they are hard to modify, extend, or fix, and it may take months, not days, to get from version 1.0 to 1.0.1. -- Mike Loukides, Burning the silos

Whatever name you use, one thing is fairly certain - you can NOT be only a backend developer who takes pride in not even being able to crawl across a CSS page. No, my dear friend, you cannot take pride in such achievements any longer. What you can take pride in, is being a backend developer who knows enough about CSS and HTMl. Who knows what's HTML5 and CSS3, who know a lot about databases and indexing and also about the recent NoSQL databases and how they differ from traditional RDBMS's. You can take pride in having taken Data Science courses on Coursera and understanding it at the high level. You can take pride in being able to deploy your code with Docker and also knowing a little bit about typography, and design thinking and why good design shouldn't make people think. You should also at least know that something like Material Design exists and why. Then you can say that you are a backend developer who reluctantly crawls across CSS files when he has to. 
This is an important point if you have recently started a career in software development or are planning to do so. Don't think of being a .NET developer or a Python developer or a Java developer. Aim to be a full-stack developer in whatever platform you choose to work with. And very often being a full-stack developer can mean extending a bit beyond the stack as well and embracing to some extent, polyglot programming. 
Now you might be thinking that it's a great aim -- to be a full stack, polyglot programmer -- but in a world where technology sometimes becomes obsolete even before someone thinks of it, is it humanly possible to actually know so many things, keep up with them, and find time to have a balanced life? Maybe, maybe not. It depends on what you mean by balanced, and also what you mean by full-stack. It's certainly going to eat into a lot of your time, but it doesn't need to eat into health, sleep, personal relationships, and vacations, if you are disciplined about it and follow a process of continuous learning. 
What's important here is to understand that you are not expected to be a ninja across the stack (or across the T). But your fundamentals should be strong and you know enough to know what you don't know :-) . Think of it this way - as someone who drives a car, you don't have to know every minute mechanical detail of how a car works (that would be the job of a mechanical engineer), you also don't even need to know everything about repairing the car (that's the job of a mechanic). But you should be able to check the spark-plugs if your car isn't cranking, you should be able to fix a flat, and should know enough about the car so the mechanic doesn't take you for a ride. 
So a full-stack or T-Shaped developer knows a lot (in-depth) about one area of development - maybe Java server side coding - and enough about all the other layers of the stack and processes to have a conversation with members of those teams and know at a high level what goes into those layers.