Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: Is it better to generalise or specialise as a developer?
76 points by desertraven on May 26, 2021 | hide | past | favorite | 70 comments
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!



Neither; or both: be T or ∏ shaped. Have broad, (relatively) shallow knowledge in many domains, and (relatively) deep knowledge in one or two that are complementary to each other, and for which your broad knowledge can be used to work with teams having more specialized understanding.


Ha! Never heard of “ ∏ shaped”, but I think that’s the best way. Two areas opens up more opportunities both in your org/company and elsewhere.


It’s far far easier to be 90th percentile in 2 fields than 1st percentile in one, and you get relatively the same benefits. This applies much further down the percentiles as well.


Scott Adams (of Dilbert fame) refers to this as “talent stacking.”


I agree with this. Also, technological developments, business models, and fashions change rapidly. When the vertical part of your T starts to be in lower demand, you'll be in a difficult spot. If you go for the ∏ strategy, you have the ability to pivot your career towards the remaining leg, and hopefully start building up a new one.


Well done. That's the best I've ever heard that said.


My answer is it depends on what you want to do. If you want to work at a FAANG, specialization is the name of the game. Find a niche like time-series databases or something, and work on that.

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.


> If you want to work at a FAANG, specialization is the name of the game.

Strong disagree. Most FAANG dev hiring is through generalist pipelines, and plenty of L5/L6 devs move around between different domains and tech areas.


I’ve never worked at a FAANG, so I may be mistaken. What I do know is that all my friends/acquaintances who’ve ended up at FAANGs have branched deeper into various niches than would be possible at smaller companies.

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.


As an ex-FAANG who knows dozens of folks at FAANG companies: the vast, vast majority of folks there are generalists, whether they know it or not. The number of people doing anything remotely "hyper optimized" is extremely small relative to the number of employees.

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.


I suppose it’s a semantic difference.

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.


wut


The words "generalist" and "specialist" are relative, so different people perceive the roles of "generalists" and "specialists" differently.

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.


By your definition, I've been a specialist in columnar store databases, high-performance RPC frameworks, compilers and toolchains, embedded firmware and vector graphics.

That sounds like a generalist to me.


you're crazy, I love you, but you're crazy


Scale brings different challenges but most of them have been solved already and been abstracted away (at least at Google). From what I have seen most people work on implementing some kind of business logic.


Despite their stated intentions, the hiring pipelines are for specialists. The leetcode tests are good at selecting for specialists, since the nature of those tests (irrespective of the subject matter) matches the specialist skillset.

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.


Yes, this is my sense as well. Interesting to see the variety of perspectives in this thread.

I suppose I might also just have particularly specialized friends/acquaintances. Who knows...


Leetcode is just a proxy for intelligence, just like SAT is


Actually not quite. L6+ hires (atleast at G) are strongly based on domain expertise and the generalists are relegated l3-l5.


Does this also apply to their SRE teams?


I've worked at Microsoft and Google as well as interviewed at Amazon and Facebook. The interviews are very broad and cover a wide range of topics regardless of what you get hired for. When I interviewed at Google I actually didn't even know what specific division I'd be working for until they gave me an offer (I did know at MS but the interviews were still very general).

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 take your point. Hiring aside, though, I don’t know anywhere in the tech world where people specialize as much as they do in large, FAANG-like organizations.

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.


This might sound jaded but for FAANG just focus on gaming promo process and delivering “business value” (however your org defines value). In fact, business and soft skills start to out weigh tech skills as you level up because figuring out how to communicate across a monsterous org is have the battle.

For most startups I believe generalists are more important since the teams can’t afford to hire specialists in every technical issue they tackler


> If you want to work at a FAANG, specialization is the name of the game.

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!


My experience was the exact opposite. Startup couldn’t afford for me to work in anything but a niche space. FAANG had me working on literally everything.

There are exceptions, FAANG can have incredibly specialized roles. I just think that generally they are looking for generalists.


I'm very much a generalist, though not a software developer. I help out with problems that most engineers either hate, or that are disruptive to normal project planning. I can prototype anything. But... without being active as a production developer or designer in any of the engineering specialties, I'm not up to speed on their tools, meaning that they can run circles around me in project work.

I think very much that moving up as a generalist requires developing "people" or "leadership" skills. If you're going to be thrust into ill defined or critical problems that can't be solved by any single specialty, there's also a much better than zero chance that you will also be dealing with the people who are affected by those problems, and with the specialists who will eventually need to be involved in order to implement a lasting solution.

I also believe that one way to be a generalist is to specialize in things that are inherently general, like math and physics. My parents advised me that no matter how much technology changes, an understanding of math and science will serve me for a lifetime. They are both retired generalists.


One persons generalist is another person's specialist.

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.


> Just work on shit you find interesting, the money will follow.

Unless it's video games, in which case pick something else.


Also don't work for consultancies for very long.


I've never worked for one, but why not? Is it because you don't work on a project long enough to understand the consequences of design decisions?


They will teach you bad habits, pay you little and never train you.

It's a good place to work on many projects and learn to not care if they fail.


To me, the most important Q is what is a tech's staying power, is it a skill you can still make a living in years to come. In my experience, general skills that can be applied, win here. e:g In 1992 I learned vi (what vim was at the time basically) and shell (csh on Solaris and HP-UX machines). 29 yrs later these skills are still totally relevant e:g bash on AWS EC2, or inside Dockerfiles. Much of what Microsoft had at the time is unrecognisable now. At the same time I learned lots of niche telecomms, which is no use now. I'd go for depth in general skills, rather than niche, unless you're really sure the niche stuff is here to stay. Perhaps some niche academic science solving real challenges, is worth investing in. The fundamental issue is that so many software skills have a short shelf life, compared to other fields of work, and if we don't watch out we get bitten by that


I've never specialized. Each of my jobs has been in a totally different industry, and my role has been very different many times. FinTech/EdTech/Green Energy/Gaming/Insurance, and Fullstack/FE/BE/Hardware/Data/Game/Data Developer.

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.


my two cents: ignore all this advise, and do whatever suites your character best. At the end of the day you have to manage in a demanding job, if you force anything down your throat that doesn't fit your character, then the result may turn out to be increasingly damaging down the road.


The discussion a few months ago on the article "Short Fat Engineers Are Undervalued"[0] was really helpful to me in thinking about this issue. The top comment's perspective resonated with me:

> 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


Unless entering a subdomain diametrically opposes the entering of other subdomains, the way I always approached this question was that of questioning why it's necesssry for them to be at odds with each other.

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?


Two comments:

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.


Don't be too broad, hiring managers won't know what to do with you. I have too many differing specialisations and interviews start with "what would you say you actually do?" People want to know which box you fit into.


Here’s my experience from a different field.

I worked as a freelance translator—Japanese to English—from 1986 to 2005. From the beginning, I took whatever work was offered to me and ended up translating texts in a lot of different fields—business, advertising, engineering, public relations, etc. I didn’t know many other translators at first and just figured that’s what everyone did.

Around 1995, though, I started to get to know other translators through online discussion groups and meet-ups, and I discovered that some were very specialized—translating only chemical patents, for example, or only corporate financial statements.

The issue of whether to specialize or not was a hot topic on those discussion groups, with the specialists being especially fervent in favor of their choice. Their position was both that specialized knowledge is necessary to do good work in their fields and that, by being specialized, they could work more efficiently and make more money. The generalists, while recognizing the truth of what the specialists said, would respond that being a generalist allows a freelancer to respond more flexibly to changing market demand and that working only in one narrow field can get boring after a while.

Looking back, I’m glad that I was a generalist. Since leaving freelancing, my career has advanced in interesting and unexpected ways, and opportunities have opened up that probably would have been closed to me had I spent those twenty years as a specialist.


My take is that you don’t have much choice. You can’t help but find these things interesting, and you’re presumably driven by your day job to excel at the specialties it requires to some degree. The most you can do is to shape your environment so that it requires you to do more specialist or generalist work through your job, or feed yourself with books that give you the urge to focus on more or fewer things in the rest of your time.


This book "Range: How Generalists Triumph in a Specialized World" may shed some light https://www.amazon.com/Range-Generalists-Triumph-Specialized...


My experience is you generalize and clients start low balling finding any number of faults AND demands. You specialize and you can be rock solid and demand solid rates.

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.


Two things. First I'm not a developer. Second thing is I'm a generalist in every sense. And so I'm going to offer my opinion: generalists get things done no matter what the circumstances are. I'm not going to say anything bad about people who specialize because there is definitely room for that.

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.


> generalists get things done no matter what the circumstances are

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.


I’ve also heard:

> A jack of all trades, and master of none, but oftentimes better than a master of one.


Indeed I'm pretty sure I misquoted it. Thanks for the correction.


I think we all start out generalists and gradually transform into specialists.

Even as a specialist, it's good to remember how to be a generalist, keep trying new things.

Your specialty is likely to form gradually, until you realize that you're a specialist one day. It will be based on what you spend doing the most for a few years in a row.


There is more than two options - you can be anywhere in between - there is no need to choose one or the other. I find having a specific technical skill helpful in getting your foot in the door as employers are often looking to have their existing systems maintained. Other than that you can diversify as you want.


I don't remember where I read this (or heard it) but someone said getting rich is easy: either be the best at something or be second best at two things. The phrasing is obviously just a little too neat but the point makes sense to me - someone that knows a few things very very deeply is just as valuable as the most knowledgeable about some (other) niche thing.

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.


I'm very much a generalist freelancer, having gotten to this point by sequentially being a specialist in many different areas - spanning programming, network and hardware engineering, business analysis and project management.

Lately I have found it difficult to get work because the potential clients are looking for very specific skills both in terms of technical and business niches and they don't value my breadth of knowledge and experience.

Hiring managers just can't seem to get their head around the fact that somebody can come up to speed on a specific tech and industry in a matter of days. It's not like I'm ever starting from zero, I'm just picking up how a new thing differs from all that I already know.


There’s 2 types of specialization, and I’d argue it’s good to choose one, and be decently familiar as a generalist on other things. One is technical, along the lines of web dev, systems programming, integrated, etc.

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.


I got very deep into a niche business domain area for over a decade, but got bored with it and more recently branched out to a completely new and broad domain area that uses the same cloud provider and similar tech as the old one. I figured I can always go back to the old one of needed. It's good for job security I guess

Business domain is another dimension to consider besides tech generalist or specialist. What is the problem you are trying to solve, and how do you know it's the right problem to solve? That can be a lot harder to do than the tech side.


Niches can certainly be profitable and stable, but I feel like being a generalist may actually make it more likely that you’ll stumble across a niche or two, simply by being exposed to more ideas.


I will emphasize this — be a generalist until you find a niche or specialization you fall in love with. I have a friend who was a T-shaped generalist, stumbled into cryptography by working on some OIDC server, and then followed his way on to specialize in key interchange mechanisms (not sure exactly what his title is). That’s his job now, at a top ten US tech company, and he’s doing great!


Completely agreed. Cal Newport proposes in So Good They Can't Ignore You that valuable (and therefore rewarding) specialties are only accessible by expanding your "Adjacent Possible" - you can't jump straight into truly niche topics because they are the top of a pyramid which requires a wide base.


If you do specialize, it's critical to develop and follow a serious learning plan to prepare for the time when demand for your speciality lessens.

Mind you, that's not a bad idea for generalists, too.


In the context of a company, the higher up you get (on a technical track), the more you need to operate across different projects, technologies etc. - being able to jump into new things is mandatory/expected. But having deep knowledge in something important to the org gives you a foundation on which to succeed. I would say that specialising perhaps allows you to stand out more efficiently as a lower level IC.


It is a loose loose situation. You either are so specialized no one will hire you because you don't know enough generally or you know too much about too many things and they feel you will be bored doing one thing all day.

I 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.


I'd listen to the signal of the work you're seeing offered, and especially the gigs you're actually getting. That'll tell you if your strategy is a good one or not. If you find yourself having to chose between a few good offers, then clearly it's working. If you find yourself in between gigs for a while, then maybe it's time to re-think your strategy.


You have to specialize in order to progress up the development latter (if you want to go the IC track). You wont get past Senior or even regular Software Developer if you don't specialize is something...unless you work at a place that rewards time-spent versus work product.

The correct answer is both obviously but you will need to, at some point, specialize in something.


Both, but I’d go breadth first and then start going deeper into various topics as you need to. The trick is really learning how to learn and becoming an autodidact.

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.


Do you find yourself doing freelance work in one or two specific industries or is your clientele generalized as well?


Depends if you want a job or a business. Employees do well specializing. Entrepreneurs have to be broadly competent.


when you are a freelancer, having a niche really helps with marketing more than anything else, easier for you to find jobs and for jobs to find you.

It's not really about "better" its all about what advantages there are to different things and what advantages do you want to pursue


I would say to develop the tools of a generalist (get good at learning and being flexible) in order to find the speciality that best suits your personality and also generates income.


Funny story, i used to ask my interviewers for advice. CEOs told me to generalize and learn a bit of everything. Senior engineers told me to specialize.

It really depends on what kind of roles you want next.


It is better to be a developer that ships! That would mean you have some generalization so you can start-to-finish and then you can specialize in one of the steps between.


Depends on your personality and career goals. I prefer to specialize 70% in my primary skill (Ruby web development) and spread the other 30% in other langs/topics.


Whatever gets you the most money or happiness. I would generally say that is specialization.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: