Ask HN: Is it better to generalise or specialise as a developer?
I’m a freelancer, and very much a generalist. I’ll often say I can do something I haven’t done before (which has proven to be true) as an excuse to learn something new.
I find different kinds of projects keep me interested. One month web dev, next month apps, the next month microcontrollers, next automation, etc.
I often hear it’s good to find a niche. Wondering if anyone can speak to the benefits of doing so?
Thanks!
70 comments
[ 4.8 ms ] story [ 87.6 ms ] threadI would suggest you find something you like, find ways to contribute for free in forums and code given away for free so people will look to you as an authority and flip that into finding work.
But it sounds to me like being a generalist is working well for you so I change it? You've certainly heard the phrase "a jack of all trades isbetter than none" but the rest of that says "but often better than a master of one".
If anybody ever questions why you don't specialize in one particular facet of your craft, you might remind them that being multi-dimensional in your skill set has often led you to solutions the specialist might not come up with. The amount of cross-pollination between specialties can often lead to better results in the long run.
> A jack of all trades, and master of none, but oftentimes better than a master of one.
If the goal is to ship something without shipping it correctly (technically sound), sure you can "get it done" in the absolute sense.
But you'll potentially end up creating a house of cards or untenable tech debt due to poor architectural decisions due to lack of depth with the underlying technology.
Please note that this is not an endorsement to become outdated but to evolve and specialize in current practices.
I too love all things software but I have learned to conserve it for my own projects, not for my services.
The other is domain specialization - whether that be a coding domain like billing, UI, microcontrollers, or a business domain (IE industry) like shipping, business to business productivity apps, entertainment, etc.
It can be very easy to swap jobs within an industry. Likewise with coding domain. If you’re bouncing around all the time with no focus, it can end up that you will be less of a fit in a lot of places you work at. Still a very strong generalist is still quite impressive.
If you want to work at a smaller company or found a startup, being a generalist is a great asset. It also puts you closer to the top of the hierarchy if you can make yourself invaluable to the business/yourself by being a “Swiss army knife.” By that, I mean everyone wants you around, because you can probably solve upwards of 90% of the problems that arise.
Of course, you can’t be a full generalist, you will end up having some language or tech stack you’re more adept in. That’s fine. You’ll probably end up being “T” shaped.
But to reiterate: if you want to make good money and you love a niche topic, specialize in it. Then go and work at a company with the scale/needs for that specific niche. Otherwise, if you’re a generalist, you’re better equipped to handle a vast multitude of problems, build initial solutions, and then hand them off to specialists as your company/project grows.
Edit: You might also just be a fox and not a hedgehog — that’s what I would consider myself. An interesting read: https://en.m.wikipedia.org/wiki/The_Hedgehog_and_the_Fox.
Strong disagree. Most FAANG dev hiring is through generalist pipelines, and plenty of L5/L6 devs move around between different domains and tech areas.
For example, at a company with 50 people, it might be unreasonable to develop hyper optimized native apps for each platform that necessitate a specialist in memory management optimization in Swift. (This is a real example.)
At a FAANG, jobs like that seem to be relatively common. Scale brings challenges that the vast majority of businesses don’t have to deal with. These challenges require solutions the vast majority of companies can’t afford to build.
The only other field I can think of that requires specialists to the degree FAANG-scale companies do is academia, which is ridiculously hyper-specialized (out of necessity).
I’m not sure about the hiring process... I do know about the prevalence of “leetcode” challenges, though, which I suppose are rather generalist.
They may work on more specialized problems, but only because the corps are big enough to have entire teams or orgs around things most companies can't even do in-house, but it doesn't make the ICs specialists themselves.
To give you an idea, the last offer I got from Google had me choosing between a team developing a proprietary database, a team working on low-level networking problems, and a team responsible for, essentially, refactoring another teams code to make it portable.
Specialist teams, mostly generalist individuals.
In the startup world, being a generalist might mean “Python, Node, Go, some backend frameworks (Express, Django, etc.), HTML/CSS, some frontend frameworks (React, Vue), maybe some experience with cloud and devops, also maybe experience with GraphQL or gRPC, good knowledge of key/value stores and SQL databases, probably high-level knowledge of ancillary technologies like JWT, auth systems, a good understanding of data structures and algorithms, experience in optimizing queries, oh and also a little React Native and maybe Cordova.... <and so on, and so on>” (This is me.)
In a FAANG, one might be a generalist in something like “iOS” or “ML” and then develop a deeper subspecialty in that field.
To me, this looks like a specialist. But I understand that to someone who works at those organizations (FAANG+), a specialist is someone who developed a new language or exclusively builds compilers or does systems-level programming or something.
I suppose these are different vantage points. If you’re specialized enough, everything probably looks “generalist” to some degree.
To me, even a small degree of specialization within software development qualifies someone as a specialist. xyzzy_plugh seems to think many more people are generalists than specialists, even at larger (FAANG) compaines.
That sounds like a generalist to me.
It's important to distinguish between specialist/generalist roles versus specialist/generalist people. Most of FAANG is hiring specialists people for both roles. That's my sense of it anyway.
I suppose I might also just have particularly specialized friends/acquaintances. Who knows...
For most startups I believe generalists are more important since the teams can’t afford to hire specialists in every technical issue they tackler
The overwhelming impression I have about FAANG interviews is that they don't really care about specialty in specific technologies. Unless you're going for a research position, they care about a solid understanding of the fundamentals, data structures, algorithms, good system design and architecture etc...
I remember a fantastic Medium post by some self-taught/bootcamp coder who made his way into Uber and specialized in time-series databases, making himself the resident expert and developing deep knowledge of these databases. This quickly pulled him up the ranks and got him better compensation and recognition for his work. Now he is a uniquely qualified specialist in a deep niche.
FAANGs are full of people with deep knowledge like this, because there are so many niche problems that require strong specialization.
Perhaps you could argue they’re all T-shaped generalists, but then the lines between “specialist” and “generalist” become quite blurred.
There are exceptions, FAANG can have incredibly specialized roles. I just think that generally they are looking for generalists.
From a FAANG company, it's the opposite.
Prior to FAANG I was pigeon-holed as a "junior java developer" My manager (who was toxic but that's another story) couldn't believe that I could also know JavaScript or SQL. I wasn't a "front-end" or a "database engineer!"
In FAANG, you cannot say "that's not my job." In a given day or week, I easily look at code across 3+ languages, frameworks while hoping between design and devops. Even our Front-End Engineers go oncall occasionally.
It is exhausting at times, but helps to make for a more well-rounded developer. Learning new things is helpful if nothing for the confidence to know you can tackle new things. The same could be said for diving deep I suppose.
What I'm getting at, is even when you try to "specialize", you're going to come across side-concerns.
P.S. I really like the fox/hedgehog parable. Thanks!
I felt that over the years of meeting tons of people whom I felt were quite "specialized" from my point of view, it would turn out that these rockstars were also generalists in that they picked up so many things across lanes that they were able to develop their niche or what I thought of as their specialized skill.
Sometimes having a lot of general skills and making them work together in a novel way could arguably be a form of specialization, thus establishing a spectrum or cycle of development
At risk of oversimplifying: Einstein endeavored on his established specialty in physics, but everyone would agree he was also just really good at physics in general if considered by generalists or interdisciplinary scientists, right?
Mind you, that's not a bad idea for generalists, too.
Jumping around is fun (for a little while) but depth is what people really pay for eg how much could you charge if you could squeeze the last bit of latency out of some design that gives a firm an edge against their competitor. I'm sure people will claim that most business doesn't hinge on the margins and maybe that's true but there definitely are businesses that do.
Ultimately what is best is what will motivate you the most. You’re gonna get a lot of opinions here but you need to trust your gut. Do what makes you happy. If you want to learn it all - don’t deny that.
You could be a web developer, you could be a framework developer, you could be a EMCAscript developer, you could be a javascript developer, you could be a webasm developer..
If you like money, find a niche and "specialise" but to be honest you'll ultimately gravitate towards your interests even in that "specialist" field.
Just work on shit you find interesting, the money will follow.
Unless it's video games, in which case pick something else.
It's a good place to work on many projects and learn to not care if they fail.
The correct answer is both obviously but you will need to, at some point, specialize in something.
First, "One month web dev, next month apps, the next month microcontrollers, next automation" that is _incredibly_ generalist. You'd probably be better off specializing at least a little more than that. If you only were doing two of those, you'd still probably count as a generalist :)
Second: I don't think there's one right or wrong answer to this question, but a generalist is in some sense a safer option. If you specialize, take care to specialize in something that will be around in 10+ years. Now would not be a good time to specialize in coffeescript or coldfusion for example, but specializing in Rust seems very safe. Specializing in julia, zig, or dart would be on the slightly riskier side.
> The argument of specialist vs generalist is futile. They simple fit in distinct parts of the journey and evolution of a software product.
> Generalists are highly valuable for many types of orgs and projects especially nascent projects. But sometimes you need the precise output of a specialist to achieve something.
So, whether being a specialist or generalist is better depends on the context. In the end, it depends on what kinds of jobs you want to work on. If you enjoy working on the full stack, then there are still plenty of people who will want to hire you, especially smaller businesses. Larger organizations hiring a contractor are probably more likely to be seeking a specialist for a very specific job.
[0] https://news.ycombinator.cdidam?id=26119087
It's not really about "better" its all about what advantages there are to different things and what advantages do you want to pursue
Sometimes I get bummed at how deep my peers have gone in various subjects. Your brand kind of has to become "I can get production code working in pretty much any domain, but will be less great at hyper-specific areas of work". It's only bitten me once, and I even called out what was going to happen in advance and the employer just didn't listen.
There's always time to change though. I am mostly motivated by making money, so I just learn as much as I can about whatever tech my employer is using, but sometimes I think it'd be nice to reuse some of this knowledge sometime.
> I often hear it’s good to find a niche. Wondering if anyone can speak to the benefits of doing so?
Being more knowledgeable than most people because you've taken the time to learn the stuff that's harder to figure out/more nuanced, is the benefit. Being a mile wide and an inch deep means your expertise is in the wide, but there are problems that need the depth. The job that I did not get was hyper-specific to the JVM, writing high performance Java, which I said prior to the interview I wouldn't be able to do (and I was right).
If you're not interested in going deep on anything, don't. Keep chasing your interests. Just understand that the tradeoff is the lack of depth.