Around 2011 or 2012, when I first started out as a freelance programmer, I had what I thought was a brilliant idea. Rather than working as a generalist programmer, I should specialize in some industry. For whatever reason, the industry I picked was the real estate industry.
I put a fair amount of effort into the endeavor but it never worked out. I specifically recall having a lunch meeting with some old man who used to work as a real estate agent or something. The meeting felt forced. I didn’t know what we were there to talk about and neither did he. We didn’t uncover any way for us to help each other. I remember having at least a couple interactions like that.
Now, in 2018, I’m noticing as I hang out in various freelancing “watering holes” that a lot of programmers are developing the same idea that I did, that if they specialize in some particular industry (aka vertical specialization), it will lift their freelancing career to a new level of success.
There’s no evidence that this works
Before I move on I just want to say that I’ve never seen any evidence that vertical specialization works. That’s actually a little imprecise. What I mean is that I’ve never seen the following happen:
- A programmer (not a designer or copywriter) starts off as a generalist
- The programmer decides to develop a vertical specialization
- The programmer successfully develops a vertical specialization
What I have seen is non-programmers who have specialized vertically. I’ve also seen one example – only one – of a programmer who inadvertently stumbled into a vertical specialty with success. But there was no reproducible methodology to his case, it was just happenstance.
The reasons why vertical specialization for programmers doesn’t make sense
Reason 1: the bottleneck isn’t domain knowledge, it’s programming skill
It’s of course a very well-known fact that good programmers are hard to find. Not everyone is smart enough to become a good programmer, and even for someone super smart, it takes years to gain enough experience to be really good. Talk to any recruiter and you’ll find that they agree wholeheartedly with the statement that “everybody good is already taken”. The skill of programming is extremely scarce.
The scarcity of the skill of programming means that for any programmer job opening, the bottleneck is in the programming knowledge, not the domain knowledge. I’ve never been turned down for a job by someone saying, “Well, Jason, you look like a great Rails developer but I’m afraid we need someone with more solar power experience.” The employer always assumed the programmer has no domain-specific experience and is always comfortable training the programmer in the domain.
Just to throw things into as stark contrast as possible, imagine the opposite scenario: a solar power company hiring someone as a programmer who knows all about solar power but nothing about programming. Obviously this new hire wouldn’t be able to start being productive nearly as quickly as the programmer who doesn’t know anything about solar power.
Compare this with, say, copywriting. With copywriting, the bottleneck isn’t English composition. The copywriter’s level of knowledge makes a huge difference. If I have a nutritional supplement business and I have the choice between hiring a generalist copywriter and a copywriter who works exclusively with nutritional supplements, I’m going to want to choose the latter. If I’m going to hire a programmer for that nutritional supplement business, the programming skill is so much more important than the nutritional supplement knowledge that I wouldn’t even care about the nutritional supplement knowledge. How much help could that knowledge really be?
Reason 2: automation
The other reason vertical specialization doesn’t make sense is that for the most part programmers don’t provide a repetitive service.
If I’m a designer, it might make sense for me to specialize in designing websites for hotels. All hotels websites probably have roughly the same goal, presumably: to get as many bookings as possible. If I’m a designer, I can get really good at designing websites that serve that business goal of increasing bookings because I apply the same service over and over.
The same is not the case with a programmer. There’s not really a project-based service I could offer to hotels. I could offer the same service as the designer – optimizing the site to increase bookings – but then I’m no longer bringing to bear my years of experience in, say, Ruby on Rails programming. Now I’m working with WordPress sites, and I’m not doing programming, I’m doing design work and marketing work. That’s not necessarily a bad thing but it means I’m starting over with my career. I’m not niching my service down to an industry, I’m staring a whole new career that requires a totally different skillset and throwing out all my valuable prior experience.
There are two programming-related services I know of that are repetitive. Those services are training and code reviews. I myself have been paid to do both. I know others who have made a very good living from training. Maybe it would even make sense to combine training with a vertical positioning (“I train programmers how to build restaurant booking applications”) but I’ve never seen an example of this.
Don’t believe advice without examples
If you’re a freelance programmer, I would advise you: don’t believe advice when there are no examples of others successfully carrying out that advice. If the person suggesting the thing has never done the thing, that’s a red flag. If the person suggesting the thing can’t even produce a single example of success, that’s a really big red flag. Don’t accept advice uncritically. Be empirical.