I've been a team lead and software development manager for many years. I've coded, architected, and managed many web development projects, mostly large scale SaaS applications. There are obviously many things I look for when interviewing candidates. There's one particular quality I'd like to talk about today: jack of all trades while being a master at some.
Full Stack vs Single Tier
There's often debate in each organization if it's better to hire full stack developers or people specialized for each tier. There's pros and cons to both approaches.
Someone dedicating themselves to one or two technologies is able to spend more time learning them. We all know how time consuming it is to learn the wide array of web technologies.
But having a good understanding of the whole architecture means when problems come up that span tiers, a full stack developer is more capable of solving them. They can be involved in more of the conversations that drive the product. For example, there are times a back-end team needs direction from the front-end team to satisfy UI requirements. Those front-end developers who can speak with understanding of the complete stack will be able to contribute best.
Also consider the pure managerial problem of assigning developers to projects and teams. A full stack developer will have more places they can contribute across the entire product. This opens career paths and also lets you move easily if you get bored or want to learn something new.
That said, my experience has shown me the best developers are those who are true experts in a set of technologies while having a good understanding of the entire stack. They are generally the best problem solvers and also the most successful as they move up in their careers.
Library vs Language
Similarly, the most successful developers I've known have a deep understanding of the programming languages they focus on. They grow expertise in various libraries and frameworks but know the fundamentals of the platform they're running on.
Anyone remember the Prototype JS framework? Then script.aculo.us which was built on it? Most readers here probably don't because jQuery became more popular when it came out. And now we have additions to JS and frameworks like React which are replacing jQuery.
Libraries and frameworks come and go. Most programming languages stick around far far longer. And the fundamental concepts that span programming languages have existing for decades. Become an expert in the foundation and everything built on top of it is both easier to learn and quicker to master.
Conclusion
There's a balance to being a great developer and a value to your employer. Don't just be a generalist or you'll never be the go-to person that people can rely one. And don't be so focused on one thing to the exclusion of everything else or your contributions will be limited and you'll spend more time catching up with the next big technology.
This is just one person's opinion. YMMV.
Check out my current project, SocialSentiment.io, an application which performs social media sentiment analysis of stocks.
Top comments (2)
There's also the risk of becoming the sole go-to person for too many things, which can lead to job fragmentation. I've been there, because I've always been the guy who actually reads the documentation (shortly after I graduated from college(back when dinosaurs roamed the earth), I was actually reading IBM mainframe manuals for leisure reading)), which meant that when anything new came up, I was the one who was typically given it. This can be enjoyable for awhile, particular if you're the type of dev that enjoys learning new things, but there comes a point where you're pulled too many directions at once.
Absolutely agree. I also started back before Google when books were the primary source of information. I became the one who was usually able to answer my coworker's questions on various technical topics, so of course they often came to me first. I enjoyed it but after years it can get tiring.