June 18, 2020
I was recently at a (socially distanced) high school graduation party. Like most graduation parties, the older adults doled out a big helping of partially solicited career advice. We mostly encouraged the poor graduate to enter our fields, which included software development, accounting, science, engineering, and skilled trades. Given all the conflicting advice, she’s probably going to end up as a Star Wars themed life coach. The contradictory information made me think about some of the career advice that folks in the developer community dispense and why we should be skeptical about it.
For example, one of the perennial debates in the developer sphere is whether to be a generalist or a specialist. Most of the developer career gurus recommend specializing. The common refrain is “the riches are in the niches.” Ideally, the tiniest niche you can get away with.
Specializing is excellent for getting people to pay attention to you, but does it make you a more productive developer? Would you rather have someone on your team who is the master of one tiny domain, or would you rather have a resourceful generalist who is good at “just in time” learning? Unless my team lacked knowledge of that one specialty, I’d go with the generalist.
Additionally, technology changes constantly. While a narrow specialization might be awesome during the time a technology is widespread, most technologies fall out of favor within five years. A robust general base of skills allows you to jump on whatever the next train is without much fuss. Resourcefulness is the ultimate developer skill, and it’s a lot easier to cultivate as a generalist.
Regardless of your stance on the topic, the reality is that specialist vs. generalist is a false dichotomy. You have a portfolio of skills, and you need to manage them. You also have a personal marketing strategy (even if it’s non-intentional). These two things overlap but are different. Use a specialization to break through the noise, but generalize to be effective.
We could spend considerable time on this topic, but let’s look at a more interesting question: Why do people recommend specialization?
Having a narrow specialty is better for personal marketing. It’s a lot easier to break through the noise if you’re a big fish in a small pond. Most specialization advocates will admit that general skills are essential but downplay it because it’s easier to signal boost specialization.
Depending on how you define “generalist,” having a specialization makes sense. While knowing how to contribute to the whole stack of an application is useful, spending three months learning the basics of every backend language isn’t. It’s crucial to collect skills that mesh well with each other. Another common career advice trope is to learn a new programming language every year. While this is a good career strategy in the first few years, it’s a career strategy with diminishing returns. Once you learn a couple of languages from each paradigm, you can usually pick up a new language with little effort.
Most people on the Internet tend to take extreme stances on things. It’s a lot easier to grab attention by staking out a radical claim than saying the truth, which is generally some flavor of “it depends.”
That’s not an exhaustive list of reasons, but I’d like to point out a few things about the list. First, there are some situations when you need to specialize more and other situations where it might be better to generalize. The truth is complicated and different based on your career goals. You could draft some general principles, but it’d make for a lame soundbite.
Second, part of the reason people recommend specialization is that it’s easy to make that recommendation. The Internet is a noisy place. It’s harder to enumerate criteria and use cases. Simple messages are more comfortable to digest, even if they aren’t 100% accurate.
Finally, the people who recommend deep specialization don’t follow their advice. Most public-facing developers have a ton of non-development and general software skills. Even if they pitch a specialty for marketing, that specialty is based on a ton of general software development and technical skills.
While most career advice is well-meaning, we need to remain skeptical. Don’t reject everything you read, but here’s a few questions to ask yourself to think deeper:
It’s great that many developers want to share advice with people who are entering the field. The fact that the Internet makes this easier is fantastic. However, you need to be careful. Think about what’s being presented, who’s giving the advice, and why. Internet culture encourages simplifications, and those simplifications can distort the truth.
The next time you read some career advice, dig a little deeper, and figure out the details. A little skepticism will vastly improve the quality of the information you hear from others.