DEV Community


What is more valuable in software, specialization or generalization?

jaketothepast profile image Jacob Windle ・1 min read

As a software engineer that has been working for a few years, specifically within startups, I've picked up multiple skills and am comfortable in many different areas. This is mainly because I had to become comfortable, because at any of the startups I worked for I needed to just get something out the door. As a result, I've built several DevOps workflows, developed and deployed machine learning models, written React components, developed features for Rails and Django applications, and now I'm doing embedded systems work in C. Is this valuable? I am not "expert-level" at any one skill, but definitely intermediate at all of them.

I'd love to hear the community's thoughts on this, just to feel a bit better about not being an expert in anything (though this could just be impostor syndrome...). Is it better to be a specialist, being an expert at very few things, or a generalist, being competent at a lot of things.

Discussion (5)

Editor guide
gsto profile image
Glenn Stovall

Talk like a specialist, walk like a generalist.

Think about it like college: You take a variety of courses, but you still pick and focus on a major. I think of the T-Shirt shaped model of skills: You find a primary focus, build expertise there, but you still have other skills that can apply elsewhere.

In addition to specialization, it's important to also think about positioning. By that I mean, how do you answer the question: "What do you do?" You could say you are a full-stack developer, or that you develop in React.js. You could also say you specialize in writing DevOps work in C. All are true, but all affect how people think about you, and the opportunities you'll be presented.

Being viewed as a generalist can be harmful to your career long term. If you are intermediate at everything, it is difficult to move beyond intermediate positions. You're better off focusing on something and working towards it, even if you shift focuses later. Take it from someone who used to be an "AngularJS expert." 🙂

Just because you say you do one of these doesn't mean you can't or won't do the others. For example, most of the work I do is in React/Redux these days, however, I've also written my share of Ruby on Rails applications, done BI analysis, and studied related fields like usability and copywriting. All come into play when it comes to building interfaces that help people solve problems, and convincing them to use them.

Specialization is not a constraint on what you learn, it is adding focus to your craft.

georgecoldham profile image

Specialisation till you are comfy/established, then generalisation. At the beginning of your career more general with specialisation over time. I feel like there is little point being an expert in something without the context necessary to make it useful/usable.

amorganpd profile image

It may depend on where you work or where you want to work. I used to be in the same boat, but found that having a specialty is how I provide the most value at my job.

Though I still do side projecs in tech stack X because I want to learn and am curious by nature.

At some point I'd recommend to focus on a specialty, but having general or above average experience in multiple areas is a good thing also.

My specialty is the merge of embedded systems and user experience design (wait that's two things :D), and everything I have learned up to this point and my desire to learn has made me better at it.

jaketothepast profile image
Jacob Windle Author

Thanks everyone, I really appreciate all of your responses. I think the right thing to do for me would be to pick something, focus on it, and shift focuses later. I can become an expert at a lot of things, but deepening my focus and limiting myself to one thing at a time is the first step to getting there. A gripe I've always had about my career is that it feels like I never can advance to senior software engineer, so this may be just the advice I needed.

killerontherun1 profile image

Hey Jacob,

Thanks for posting this. I found myself relating to this a lot. I'd just like to introduce the point of a career goal.

To give a background, I was not a computer science student ever. But I did morph into a data scientist and subsequently into a PM. Personally I began developing to account for a Dev shortfall and also because I loved to code. Years later when I look back somewhere along the line I streamlined my scattered approach to learning by narrowing it down with a career goal. What do I really want from work in general. And then I began streamlining my learning curve so that I could ship POCs/features fast. My end game is to definitely build something in the tech space. But I'd rather not clutter my head with stuff I could hire someone to do. Hence for me, from the point of view of coding, it's a mix of being a specialist and a generalist.

This may vary as per the individuals career/life aspirations.