Specialist vs generalist: The benefits of a diversified skill set
As you progress as a software developer, there are two ways you can develop your skill set: either you specialize or you become a generalist. In both, you can build up a diversified skill set, and I think it’s an important aspect of building a stable career as a software developer. Each has their specific role to play within a project or the software industry. Knowing how to play that role well, or empower people in those roles, can make a big difference.
A Specialist skill set
This means that you become an expert in one type of technology (SQL databases, JavaScript applications, …), field within software (security penetration testing, user experience, …) or sector (healthcare, finance, …). This can be a gratifying career choice, as you will be among the top within that niche. Highly sought after niches can be a very profitable endeavor as well.
Do watch out to never specialize within technology backed by only one company. When that company cancels the product and/or stops development, you’ll have wasted all the effort you’ve put into learning every little detail of that technology. Be aware of this, because it’s quite easy to get sucked into an ecosystem, such as Amazon’s AWS. Sometimes it’s even quite subtle, where the technology itself is open source, but 99% of the contributions come from just one company.
Specialize in a topic, not a technology
Technologies become obsolete at some point and sometimes quicker than you’d want them to. I’ve had it happen with the Flex application framework, which was backed by Adobe. It got suddenly cancelled when Steve Jobs decided Flash had to die (which was used by Flex to run in the browser).
So if you specialize, make sure your specialization covers a range of products within that technology. For example, if you decide to specialize in SQL databases, cover different vendors, open source projects, and languages.
Bigger projects can sustain more specialists, that’s where they thrive and are at ease. These projects need some specific problem solving and have the luxury of putting someone dedicated on the task. This is where someone with a broad skill set takes a bit of backseat, still playing an important, but less visible role (filling in the gaps).
People with a deep skill set can also be excellent consultants. They have the skills to make a tremendous impact in a very short amount of time. When a team gets stuck on a problem, or needs advice to get started, they hire a specialist consultant.
A Generalist skill set
The jack of all trades, master of none. Also known as a full-stack developer. My preference, because my interests go pretty wide and I always want to understand the full scope of a project. It puts you in an interesting role, where typically you can be the glue between various specialists and teams, as you understand each side. Understand your limits and know when to rely on the specialists. This doesn’t mean that you sometimes can’t dive deeper into certain subjects and learn from these specialists, but when you do, make sure that it contributes to your broader skill set.
Understand your strengths and weaknesses. Know when to fall back on a specialist and when to be the glue between them.
The benefit of a broad skill set is that, by default, it’s pretty diversified. So if a technology stops being relevant, or a company stops supporting a product, you’ll be just fine, as you can fallback on any of the other skills in your skill set. Also, you’ve built up a proficiency in learning new skills, so it’s easier to switch to something completely new.
People with a broad skill set can shine at the early stages of a project or company, when a limited number of people are on the project and a wide range of systems need to be put in place. They will gain a great deal of knowledge about the entire project and its technical implementation and will quickly become the point of contact for all kinds of questions when the team grows. As a full-stack developer, it’s important that you share this knowledge early and distribute the load to others while the team grows, otherwise, you will get overloaded quickly. As the project grows, your role will switch from being the one that puts the groundwork in place to being the glue between teams and filling up the gaps. It’s a less visible role, but a very important one.
When you have a broad skill set, you are typically engaged for a longer time. Short timeframes are less interesting, unless it’s a proof-of-concept assignment, which is also something where a full-stack developer can excel at.
Which skill set you choose will come organically and it won’t really be a choice, but something you fall into based on your interests.