I’ve had a successful 27-year career so far as a generalist. There has always been a great need for a professional “employee #1” to come in, triage the situation, figure out the best path, and execute. Having a breadth of knowledge and experience has meant I could do that for auto parts companies, toy retail companies, bespoke industrial design, minicomputer companies, financial services companies, internet game studios, and streaming video companies without missing a beat, despite radically different goals, architectures, plans, languages, frameworks and systems between any two of those.
I love specialists, and they are often an incredible force multiplier on a team, but a world of specialists would get very little accomplished.
I’ve loved doing the “generalist” thing so far (I’m 8 years into my career, turned 30 last july, to give some context). In some situation I was a one-man show, so I kinda had to be all the things and wear all the hats, but as I started working for bigger companies, it just means that I’m familiar with all roles, and if I have to pick up the slack (because a dude got sick, got died, found a better employer, what have you), I can actually step in and do something concrete about it. I have preferences, I’m mostly doing “backend web stuffs”, but that’s not preventing me from doing all the other things when required.
Just this week, I unmessedup all of the complex vm setup for everyone who needed that setup, because people were prevented from working because of that. I now need a drink, a shower, or both!
Being a specialist and generalist aren’t mutually exclusive. I prefer to follow Valve’s T-shaped model approach or Kent Beck’s paint drip people. Specialize in at least 1 area and have broad general knowledge in others. This way you can gather more specialties from peers/experience, help out on general tasks, and let your peers grow by sharing your specialty knowledge.
They both have traps and I don’t think that there’s a clear answer.
If you’re a generalist, you’ll be pushed into management. Software companies don’t have many “smart programmer who gets to work on what she wants” roles, and haven’t since the Death of R&D decades ago. If you take the management track, though, what usually happens over time is your technical skills decline (and you can no longer call yourself a generalist) so you become a specialist in executive politics.
These days, companies “run too lean” (i.e. are too likely to have cost-cutting psychopaths) to tolerate people who are perceived as dilettantes, and are not, at the top, staffed by people smart enough to tell the difference between unfocused dilettantes and genuine generalists (“renaissance people”) with deep knowledge.
The danger of being a specialist is that it gets hard to protect a specialty, especially as you get more senior. You’ll be changing jobs often and at risk every time there’s a re-organization. Employers are inconsistent (if not outright hypocritical) in that, when they’re hiring, they want people with unblemished track records and a monotonic increase of work experience quality. Yet if you insist on having this as an employee, you get called a “prima donna”. You can’t say, in most roles, that something you don’t want to do is not in your specialty. At some point, you end up at a level where there are very few companies interested in what you do. Every job search becomes national (or even international) because there are so few positions, but your field has the sociology of a small town insofar as making one enemy can kill your career. So it’s like academia, but you still have a boss. And, of course, there’s no tenure so if your specialty goes out of style, you now have 20 years of unmarketable work experience.
In other words, generalists risk being seen as unfocused, while specialists risk being seen as “not a team player” if they try to protect their specialties by dodging low-quality, career-incoherent work. Speaking broadly, companies are biased in favor of hiring specialists (“plug a hole” positions) but keeping and promoting generalists (who tend to be seen as “team players” because they don’t have to spend political capital to protect a specialty).
I think that you lose if you let others define you as one or the other. It ties in to my dislike of Agile and open-plan offices. Whether I’m working 2 hours per day or 15 hours per day, it is a fact that I lose if other people know how hard I am working on a day-to-day basis. Whether for a notionally good thing or a bad one, being pinpointed and labelled is never to one’s advantage. Familiarity breeds contempt, and in some things it’s best to be mysterious. So I think that the winning play is to be known for general competence, have a few hints at specialized capability, but make it clear above all that not everything you can do is out on the table. This is also why I will never submit a resume/CV that is more than 1 page. I am firmly against the concept of multi-page CVs.
So in short, I would say that it’s valuable to be enough of a generalist to be adaptable, to cultivate at least one specialty and maybe a few, but to have an air of not putting all your cards out and therefore making it impossible for a counterparty or adversary to label/typecast you as either a specialist or a generalist. You never want to be “Just An $X”.
I’m not even sure it’s a conscious choice with most. As far as I can tell, for most of my peers their careers grew organically. You’d start at some job, then move on to a better offer, then yet another.. The path is mostly dependent on circumstances of your job market and personal network rather than to any kind of grand plan you devised when you were 20.
[Comment removed by author]
Well I was talking solely about career path, not personal development/interests. A lot of people branch out on hobby projects. However, while you can put them on CV, they rarely have as much weight as your official employment trajectory.
Generalize on principle, specialize when necessary. In software development, the terrain changes very quickly. You’ll need to quickly specialize in whatever is “hot” right now, but you can only do that if you have a general foundation that allows you to quickly build the skills required to be a specialist.
Why not both? Valve pushed the concept of the T-shaped employee in their handbook. Broad-range generalist with a deep focus on a single area.
I think the best approach is to be a specialist early in your career (first 5 years) and a generalist later. Get a firm grounding in one coherent set of languages and tools, then once you’ve gained mastery in them branch out to the next thing that builds off of that expertise. Also, eventually those who remain specialists in one thing tend to get left behind by advances in technology. Plus, after doing the same thing for a decade or more it tends to get boring. Our vocation has pretty endless depths to explore, it makes sense to me to take advantage of that and enable yourself to have a more fulfilling career.
I find general programming and development to be extremely boring. If i wasn’t able to specialize to some degree, then I wouldn’t be at my current job. My dream job is to be a research scientist (extremely specialized) but it’s not very easy to find those jobs where you get good pay and good hours.