How the Fox and the Hedgehog Can Make You a Better Developer
“The fox knows many things, but the hedgehog knows one big thing.”
– Archilochus, Greek poet
This ancient quotation has divided a class of thinkers into two different categories. Popular culture portrays foxes as clever animals that use lots of different strategies to survive. When applied to thinkers, foxes view the world through many lenses.
Hedgehogs, on the other hand, have only one main defense, which is to roll themselves into a spiky ball. This defense mechanism protects them from predators, but it’s their only trick. Thinkers who are hedgehogs have one central idea.
This idea of foxes versus hedgehogs applies to software developers and how they specialize.
There is no shortage of people encouraging you to specialize. Whether it’s John Sonmez on Simple Programmer, famous developers like Cory House, or business authors like Jim Collins, these folks encourage you to niche down and develop a speciality. Be more like the hedgehog. Learn one thing and learn it well.
There’s also no shortage of people who favor being a generalist. Advocates of this include self-development guru Tim Ferriss and psychology expert Phil Tetlock. Many technology leaders are polymaths, including Bill Gates, Larry Page, Steve Jobs, and Elon Musk. They advocate collecting skills and talents and learning new things. Be more like the fox. Learn a bag of tricks.
So who’s right? Should we be like the hedgehog, specializing in a single niche, or should we be like the fox, wielding a bag of tricks? Ultimately, this choice is a false dichotomy. To succeed as a developer, you need to be both a specialist and a generalist. In this post, we’re going to add some nuance to the specialist versus generalist debate and gain the best of both worlds.
The hedgehog knows one thing. In the developer world, that’s the specialist. The specialist knows one thing really well. Whether that thing is a specific library, like React.js; a specific technique, like asynchronous programming; or a specific platform, like iOS, the specialist has their domain and doesn’t step outside of it.
The domain of a specialist can vary in scope. Some people specialize in a platform or stack, while others specialize in a very specific technology. How far you niche down depends on your preferences and the size of your market.
The biggest advantage of being a specialist is marketing. It’s much easier to market yourself as a specialist than as a generalist. Companies tend to standardize on specific technologies, so specializing in a particular technology puts you ahead of the pack. Building your identity around a specialization makes it easy for companies to find you. If you are considered an authority on a specific issue, then it’s easier to get invited to speak at conferences and write articles.
Outside of the technology world, hedgehogs also have it easier. With their easy-to-understand sound bites, people who rally around one big idea find it easier to attract followers than folks who say “it depends.” An example of this is the “10,000-Hour Rule,” which was popularized by Malcolm Gladwell. The 10,000-Hour Rule is that it takes roughly 10,000 hours to become world-class at a particular skill. The original research was done with musicians, but it gets applied everywhere. This rule is easy to remember and lots of people subscribe to it, but the actual research is more complex than this simple rule would indicate. The real research highlights the value of deliberate practice in creating expertise. You need to chase constant improvement. In some fields, that’s 10,000 hours, but it could be more or less.
Another big advantage of the hedgehog mentality is that it allows for depth. Developing deep expertise sets you apart from the generalist developer. Some companies have problems that are so complex, they can be solved only by people with that deep expertise. Because they are rare, specialists can command high rates.
The biggest potential downside to being a specialist is the risk. Whatever technology you specialize in may be sought-after now, but the field changes quickly. Think about the platforms that no one cares about anymore: Palm OS, Microsoft Silverlight, Flash, Windows Phone, etc. If you bet your career on one of these dinosaurs, you wasted your time.
Another disadvantage of being a hedgehog is that you can get tunnel vision. The fact that you spend all your time in one corner of the technical universe means you can miss trends that appear elsewhere. You can get trapped in the idioms of your universe and miss out on interesting new techniques. If you don’t have a good idea of what’s happening in the field as a whole, new technologies can blindside you.
The fox knows many things. In the developer world, this would equate to the generalist. Generalist developers go by several different terms, including “full-stack developer,” “polyglot developer,” or just “developer.” Regardless of the title, generalist developers have some skill in several different areas of development.
Depending on how you manage your career (or don’t manage your career), you can easily become a generalist developer. You pick up different skills as you move from job to job, without going big on any particular platform.
As with specialization, the scope of generalization can vary. You can be a full-stack developer who works primarily in one platform, or you can be a generalist who has a lot of different languages and skills in your toolbelt.
The biggest advantage to being a generalist is that they are often more effective at building complete software solutions. If you can take an application from idea to finished product, this makes you more powerful than someone who has mastered only one part of the stack.
You often don’t need deep knowledge to get something to work. Most companies don’t need to use the advanced functionality in a particular technology. If you have a goal of building your own software product or want to work in a small shop, it pays to be a generalist.
Generalists also have a wider variety of jobs they can fill. For example, if you’re a generic .NET or Java developer, there are tons of jobs that you are qualified for. While these aren’t the most lucrative jobs, you can find work in a variety of markets.
The final advantage of being a generalist is that you can innovate by taking ideas from one area and bringing them to another area. For example, if you follow the history of ASP.NET, you can see that they borrowed practices from different developer communities. ASP.NET MVC borrowed heavily from Ruby on Rails. ASP.NET Core borrowed from the Node.js community.
By picking and choosing from other stacks, Microsoft found ways to move their own platforms forward. A big part of being innovative is having a large pool of ideas that you can recombine into new ones. Being a generalist gives you lots of ideas you can bring into your development practice.
In a one-on-one comparison, the generalist is always going to lose to a specialist. If you’re looking for a React developer and you have a choice between a generalist and a React specialist, you’re going to pick the specialist.
Generalist developers typically can’t command the rates that specialists can. They also may find themselves becoming a commodity in the marketplace. Currently, we as developers have the advantage of being in demand, but that may not always be the case.
As a generalist, you can fall into the trap of spreading yourself too thin. I’ve interviewed people who held IT generalist roles who couldn’t answer technical questions because they programmed only part-time. There’s a minimum level of skill you need, and if you’re “one inch in a thousand directions,” you won’t be effective.
How Can You Be Both?
The line between specialist and generalist is blurry. There’s no such thing as a pure generalist or specialist. We all fall somewhere in the middle.
Here are a few strategies to navigate where you fit on the spectrum.
Be a T-Shaped Person
The T-shaped developer has a base of general skills, while maintaining a specialization. This allows you to capitalize on the marketing aspects of working as a specialist while also being able to bring insights from other areas into your main practice like a generalist would. In a lot of ways, this is the best of both worlds.
As a developer, your specialization area is limited by market forces. By taking the time to build up a set of base skills, at worst, you can fall back on being a generalist developer while you pick a new specialty.
Stack Your Talents
Scott Adams, in his book How to Fail at Almost Everything and Still Win Big, explains that in order to succeed as a specialist, you need to be in the top 1 percent of the market. This is not an easy task, but there is an alternative path. If you can master several skills, you can combine them into a unique offering that allows you to stand out. His heuristic is that every new skill you master doubles your chances of success.
This sounds like being a generalist, but it’s not quite the same. Talent stacking is being in the top 75 percent in several specific skills versus a generalist who’s passable (+25 percent) in a dozen or more skills.
For example, developers who master public speaking or writing can rise above the crowd by writing for blogs or speaking at conferences. Learning how to communicate well makes you much more useful than the “basement coder” who just turns requirements and pizza into code. If that same developer can add media production or some business domain knowledge, then that would increase their value even more.
While there are lots of people who are good at any one of these skills, there are few people who can combine them.
Learning about business or the industry you’re working in can also increase your potential value. Being able to connect the needs of a business to the code you’re writing makes you rise above the pack.
The key to making this work is acquiring enough depth in your secondary skills. It’s not enough to scratch the surface of the skills in your stack. You need to become solidly proficient within each part of your stack.
Layer Your Speciality
To build my specialty, I’ve combined several different areas of technology. This specialization is a little broad, but it works for me in my market. It’s also robust. In order for my specialization to become invalid, several major technologies would have to become obsolete.
Specialize for Marketing
You can build skills like a generalist while marketing yourself as a specialist. As long as you can do the thing you claim is your specialization, you can work on as many other things as you want. Your employer will be pleasantly surprised to find out you aren’t a one-trick pony.
Specialize Around a Problem or an Industry
When crafting a specialization, you don’t have to specialize around a technology. Maybe you’re a generalist developer, but like a specific industry such as insurance, agriculture, or music. By learning how to apply technology to the problems facing that industry, you can gain the benefits of being a specialist without limiting yourself as a developer.
Learn How To Channel Both the Fox and the Hedgehog
The technology industry is a complex place. Navigating between all the different technologies and career advice is not easy.
You don’t have to go one way or the other, though. Ditch the false dichotomy and make use of the best that each of the modes of thinking has to offer.