Over the past couple years, I've had the fortune to coach engineers through their career journeys, including people currently in coding bootcamps, to startup founders, to people bored at their BigCo job. Fortune, because it's entirely as much a benefit for me, as I synthesize patterns for the first time to improve my own career and spot opportunities.
One pattern that's common, especially for new college grads who go straight into a FANG, is becoming specialists early. Certainly, being a proficient machine learning engineer right now is quite lucrative. However, it comes at a cost: specialists are highly qualified to solve certain problems, but may not be able to adapt outside. People get holed into certain roles, and don't have the opportunity to explore beyond. They often regret not trying more things early on.
“Modern work demands knowledge transfer: the ability to apply knowledge to new situations and different domains. Our most fundamental thought processes have changed to accommodate increasing complexity and the need to derive new patterns rather than rely only on familiar ones. Our conceptual classification schemes provide a scaffolding for connecting knowledge, making it accessible and flexible.” David Epstein, _Range: Why Generalists Triumph in a Specialized World_
I'm biased. As an engineer, I am a generalist that has worked on UI, machine learning models, and scaling servers in the same day. As a manager, I try to focus on what would deliver the most value, no matter what “it” is, which is often not code. In fact, I'm motivated by the variety and exposure of having a broad skillset; of seeing holes of opportunity and filling them.
The value of a good generalist is being able to bridge disciplines and adapt to circumstances. These engineers are the some of the most valuable when building new products or innovating. For careers, generalism buys optionality: people have the ability to have different roles, work on many kinds of projects, and focus on providing value. For employers or investors, generalists provide diversity of experiences that have been shown to encourage synthesis of new ideas.
Costs of generalization
Merely avoiding specialization does not create this. Instead, there are true risks. Specialists make most of the breakthroughs. They can create security for themselves, by being “the only one who knows how it works”. Generalists may struggle with collaboration, because when surrounded by specialists, they are never the best at anything. Generalists can easily fall into a trap where they know casual amounts of knowledge of a lot of different areas, but not enough to synthesize them together.
While, as a generalist, you may not be the best, you'll be able to adapt as needs arise. A key to avoiding “master of none” entrapment is to go deep on subjects, maximizing the Pareto slope as much as possible. Be better than median, but don't worry about the last 10%. When mastery of a subject is approached, force yourself to bridge out and be a beginner again.
It's entirely fine to not know things. Be tactical about specialization, focusing on providing value and synthesizing something unique.
When starting out, this advice may feel near useless. However, “be good at everything!” is hardly the message. Instead, pay special attention for deficiencies between specializations. Examples: a designer who is great at frontend. A backend engineer who understands UI principles. A frontend engineer who understands consistency tradeoffs. Over time, you'll find what you enjoy the most, and may even find specialities that you would have never considered.