Specialist vs. Generalist: which is better for your career?
One of the decisions you’ll need to make during the course of you career as a software developer is whether you should become:
- A specialist, an expert in a certain subject.
- A generalist, able to take on a wide variety of different work.
Miquel Beltran argues that specialization is the path to choose. At the end of his essay he suggests:
Stick to one platform, framework or language and your professional career will be better on the long run.
I think he’s both right and wrong. Specialization is a great career move… but I don’t think being a generalist is bad for your career either. In fact, you can be both and still have a good career, because there are two distinct areas in which this question plays out.
Getting hired is not the same as getting things done
Getting hired and getting things done are two different tasks, and you need different skills to do each.
When you’re trying to get hired you are trying to show why you are the best candidate. That means dealing with the company’s attitude towards employees, and the reason they are hiring, and the way they approach their work. It’s not about how well you’ll do or your job, or how good a programmer you are, or any of that: it’s just about getting your foot in the door.
Once you’re in, once you’re an employee or a consultant, what matters is the results you deliver. It doesn’t matter if you’ve only spent a few weeks previously writing iOS apps so long you do a good job writing an iOS app after you’ve been hired. And if you’ve spent years as an iOS developer and you fail to deliver, the fact you specialize in the iOS apps isn’t going to help you.
Since getting hired and doing the work are separate tasks, that means you need to separate the decision to be a specialist or generalist into two questions: which will help you get hired, and which will make you better at actually doing your job?
Specialization is a marketing technique
If the question is how you should get hired then you are in the realm of marketing, not engineering. Specialization is a marketing technique: it’s a way to demonstrate why you should be hired because you are an expert in your specialty.
Because specialization a marketing technique, specialization doesn’t necessarily need to map to specialization on an engineering level. Let me give some examples from my career.
In 2001 I started contributing to an open source Python project, a networking framework called Twisted. I have used this experience in a variety of ways:
- In 2004 got a job offer from a company that was writing Java, because I had recently added multicast support to Twisted and they wanted to use multicast for an internal project. I had a little experience writing Java, but mostly they wanted to hire me because I was specialist in multicast.
- I turned that job down, but later that year I got a job at ITA Software, writing networking code in C++. I didn’t know any C++… but I knew stuff about networking.
- When I left ITA I spent a couple years doing Twisted consulting. I was a Twisted specialist.
- At my latest job I got hired in part because I knew networking protocols… but also because I had experience participating in open source projects.
While all these specializations are related, they are not identical: each job I got involved being a specialist in a different area.
It’s not what you can do, it’s what you emphasize
Now, you could argue that the reasons I got hired enough are close enough that I am indeed a specialist: in networking or distributed systems. But consider that earlier in my career I did a number of years of web development. So back in 2004 I could have applied to web development jobs, highlighted that part of my resume, and relegated my open source networking work to a sentence at the end.
You likely have many engineering and “soft” skills available to you. Instead of focusing on one particular skillset (“I am an Android developer”) you can focus on some other way you are special. E.g. If you’re building a consulting pipeline then maybe it’s a some business vertical you specialize in, to differentiate yourself from all the other Android developers.
But if you’re marketing yourself on a one-off basis, which is certainly the case when you’re applying for a job, you can choose a specialty that fits the occasion. Here’s how my former colleague Adam Dangoor does it:
Pick one thing from what they talk about that you think is probably the least pitched-to aspect. E.g. if they’re a Python shop everyone will say that they know Python well. But you can spot that e.g. they need help with growing a team and you have experience with that. It could very well be that 10 other candidates do too, but you just say that and you’re the one candidate who can grow a team.
Specialist or Generalist?
So which should you chose, generalist or specialist?
When it comes to engineering skills, or just learning in general, my bias is towards being a generalist. When I went back to school to finish my degree I focused on the humanities and social science; I didn’t take a single programming class. You may have different biases then I do.
But engineering skills are fundamentally different than how you market yourself. You can be a generalist in your engineering skills and market yourself as a specialist. In particular, when applying for jobs, you should try to be a specialist in what the company needs.
Sometimes a technical specialty is exactly what they want: you have some set of skills that are hard to find. But often there’s a bit more to it than that. They might say they need an Android expert", but what they really need is someone to ship things fast.
They’re looking for “an Android expert” because they don’t want a learning curve. So if you emphasize the times you’ve delivered projects quickly and an on schedule you might get the job even, though another candidate had a couple more years of Android experience than you do..
In short, when it comes to engineering skills I tend towards being a generalist, but that may just be my personal bias. When marketing yourself, be a specialist… but there’s nothing keeping you from being a different specialist every time you apply for a new job.