The benefits of a diversified skillset
As you progress as a software developer, there are typically two ways you can evolve your skillset: either you go broad or you go deep. In both you can built up a diversified skillset, and I think it’s an important aspect of building a stable career as a software developer. Each have their specific role to play within a project or the software industry in general, and knowing how to play that role well, or enable people in those roles optimally can make a big difference.
A deep skillset
One thing to watch out for when you decide to specialize is to never specialize within technology backed by only one company, because if that company decides to cancel the product and/or stop development, all the effort you’ve put into learning every little detail of that technology is gone. And 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 opensource, but 99% of the contributions come from just one company.
Technologies become obsolete at some point and sometimes quicker then you’d want them to. I’ve had it happen with the Flex application framework, which was backed by Adobe, but got suddenly cancelled when Steve Jobs decided Flash had to die (which was used by Flex to run in the browser).
So if you highly 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 a high number of specialists and that’s where they thrive and be at ease. These projects need them to solve some very specific problems and have the luxury of putting someone dedicated on the task. This is were someone with a broad skillset takes a bit of backseat, still playing an important, but less visible role (filling in the gaps).
People with a deep skillset can also be excellent consultants. They have the skills to make a huge impact in a very short amount of time. When a team is stuck on a problem, or need advice to get started, they hire a specialist consultant.
A broad skillset
The jack of all trades, master of none. Also known as a full-stack developer. My personal 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, were typically you can be the glue between various specialists and teams, as you understand each side. You will have to understand your limits and know when to rely on the specialists. This doesn’t mean that you sometimes can’t dive a bit deeper in certain subjects and learn from these specialists, but when you do, make sure that it contributes to your broader skillset.
The benefit of a broad skillset is that (generally) by default it’s pretty diversified. So in the event that 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 skillset. 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 skillset can shine at the early stages of a project or company, as the number of people on the project is typically limited and a wide range of systems need to be put in place. They will gain a great deal of knowledge about the whole 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 start sharing 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 nonetheless a very important one.
When you have a broad skillset, you are typically engaged for a longer period of 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.
In general, which skillset you choose will come organically and it won’t really be choice, but instead something you fall into based on your interests.