"I’m definitely ... going to tell you specialize ... It’s going to be very hard to narrow yourself down so much that you’re pigeonholed into a place where you’re not going to have customers, especially if you’re just looking for a job."I just don't agree. There are plenty of technologies that developers might have specialized in that just aren't in use anymore - the digital equivalent of buggy-whips.
Certainly some specialists have fantastic success, but aiming for that kind of success feels like aiming for a career in the NBA. If you are one of the few who can, that's great. But it's not the kind of advice I'm going to give out as a mater of course.
Specialization has real risks, for individual developers and for teams. For instance, as I mentioned, if I specialize in a technology that goes out of favor, my employability declines, potentially seriously. Additionally, teams of specialists can face roadblocks when a particular type of work piles up faster than the team specialist can complete it. Or worse yet, when a team loses a particular specialist, predictable team capacity, a critical value for project owners, can tank until a replacement can be found and ramped-up (see Bus Number).
My employer, a consulting firm, seeks "Generalizing Specialists", developers who:
- have one or more technical specialties
- has a strong general knowledge of software development lifecycles
- has at least a general knowledge of business and a willingness to gain at least a minimally functional knowledge of their client's business domain
- actively seeks to gain new skills in their specialties and beyond, in technical and non-technical areas
If the team I am on suddenly needs an an extra push in QA, I am comfortable enough with testing that I can temporarily shift my responsibilities.
My advice to developers is: "Specialize in one or two things, stay on top of market trends without following fads, and always be learning, in your specialties, in tech areas you don't specialize in, and in non-technical areas."