The Undercover Generalist
ochagavia.nl
ochagavia.nl
While before, you would be a generalist first, specialist second - now it is demanded you are specialist first, generalist second, especially since programming is perceived as this "super hard thing" to learn that most people figure it impossible to know more than a few things at once. While developers understand it isn't, people recruiting them believe such stuff and are thus propagating the myths when hiring (outside a fistful of quality companies).
And this kind of thinking has influenced the dev scene a lot - I've met hundreds of developers that have no idea what goes on on backend, yet are deep in their frontend career and vice versa. And no, I'm not talking about somebody not knowing the latest framework, but about people declining to learn even some basic stuff like SQL, shell scripting or deployment due to "its not my area" thing.
As someone who spent a good part of their career in mobile, but also wrote a lot of frontends and backends, CMS's, dozens of tools, parsers, languages et al., it is hard to find a role that fits - either they want only the specialisation and then give me a silo of "you only work in this role and that's it" or even if they want a "fullstack developer" which means they are looking for years of experience in specific frontend and backend tooling (TS/Node mostly).
It's becoming quite absurd - on one side, we are paying high salaries to adults that we task with breaking down highly complex processes and building the solutions to problems, but on the other side, we do not believe these people can understand a bit different syntax or tooling.
Absurd.
I worked on every technology ever, from C++70s to C++23, all languages (from assembly to Rust ant TypeScript), all operating systems, all topics from web sites to embedded programming, but my new resume will be different this time. I MUST say that I'm the best programmer for backends and compiled languages (C++/C#/Java/etc.), and that I also can do everything else if needed. I don't expect HR or recruiters to read the details of my resume anymore, I must describe myself as a 100x developer on the "compiled/backend" topic in the summary, or I may lose jobs.
Even within the IT org I’m in, people who can do something like this seem few and far between. There are a lot of people who can tweak some existing code, but can’t take an idea and turn it into something.
I often thought I’d be happier in a job outside of IT, but when some basic coding skills. It would be like having a super power, compared to those who haven’t taken the time to learn the skills.
1980s: "Hey, we know you can weld steel but we need you to weald aluminum. We will partner you with one of our guys for a month before you hit the production line. He'll teach you what you need."
2024: "Your resume lacks the following keywords: Aluminum. We are shutting down the production line until we find sufficient trained staff."
If everyone you ever worked with was an X developer, why would you believe that someone could be an (X,Y,Z,A-C,E-F) engineer?
Likely, this divide motivates a persistent separation of groups - when I last interviewed for such a shop,they were stuck on me having professional experience in C/CPP/Java/Rust/Go/Python/Ruby/Perl/PhP. We ended up spending 30 minutes discussing what my strongest language was which likely told them nothing about my skills and experience nor did it tell me anything about the types of challenges they have.
I think I’d feel compelled to try to explain this in an interview instead of answering specific language questions. I’m not sure how that would go. I haven’t been to an interview in years.
It always seemed odd to me that someone specializes in a language like Java or Javascript. That, to me, is neither a specialist or a generalist; I'm not actually sure what to call it.
Well, at least that's often the case for permanent roles. For contractor ones it's likely a lot more about finding the person who can fix their problem immediately, and hence the requirements would be more accurate.
Add this to how the work actually being done in a company often has very little to do with the interview or application process, and well, it's no wonder applying for them is such a crapshoot now.
They then go to the immigration authority and say "Look, we cannot fill this position on the local market, we need to look abroad" and then miraculously just the right candidate shows up.
Not sure how frequent it is in other countries, but if you see a ridiculous/incoherent job ad from a smaller company, it might be for a job that's already filled.
That's a required step in the US for converting a worker from a temporary(ish) work visa (H1-B) to a permanent residency visa (green card). They have to prove they can't fill the position with an American.
Which is stupid and terrible system. By the time that step is reached, the immigrant employee has probably been settled in the US for 5+ years. It would be a giant injustice if anyone gets hired for those job postings, because that would fuck over the immigrant employee, so the candidates have no chance.
Our company is outputting specific role responsibilities based on process mapping and resource sizing. And we are looking into using AI to write job descriptions. But is it ultimately going to be a recruiting problem if we show the exact breakdown of a role on a job description? How does that differ from role to role?
Reading the job description, I had no idea what it was asking for or talking about, felt under qualified for the job, and wouldn’t have applied. I didn’t think I knew anything it was asking for. I told my boss this and he ran with it anyway. I’d encourage anyone to read the job posting for any open positions on your team to see how disconnected from reality they are.
You’d think that experience would make me take other postings less seriously, as the level of BS was off the charts, but I still have trouble applying for anything where I can’t check off almost every box.
However, I've built amazing things for amazing companies when I do get jobs. I've architected and built end-to-end products by myself and within teams. A few projects I've worked on: a web scraping product, data labeling software for machine learning, commercial eyetracking software, a custom learning management system, machine learning models from scratch, high volume image processing, etc. In each of these projects too I did end-to-end work. Development, deployment, infrastructure, ops.
Each one of these products though was with a different stack. JS, C#, Clojure, C++, Java, Python, the list goes on.
Common feedback I've received is that I'm not experienced enough to deliver in a role. Anecdotally, engineers that I talk to where I'm located have spent their entire careers using only JS, building Next.js sites or whatever the current hotness is. Not that there's anything wrong with that, but it does seem like the landscape has shifted to the specialists.
I try to use the successes I have cultivated at multiple organizations in the past with this experience as evidence, but even after hire, most organizations take ~6 months to realize I'm not too good to be true; it's part of why I end up getting promoted a few times in relatively rapid succession at each gig.
I find that working at smaller companies (~125), they idealize those who can wear many hats, whereas companies that are large enterprises do not and are much less likely to hire someone who can do it all, favoring--instead--those who are very deep and narrow. I have carved out a successful niche in the digital marketing space with the experience and success I've had and I will likely continue to do so, helping those same large enterprises who would likely pass me over for a FTE role, but happy to hire me via a consulting firm to solve the very same problems while paying much more for the pleasure.
It's been feeling lately like I'm at a crossroads, I either settle down and "specialize" by picking a stack and an "area," or I build my own product.
I was an IT industry analyst for about a decade and basically brought that background to an internal vendor role.
On the one hand, the company I was with valued a broader perspective. On the other hand, get too broad and you risk getting into shallower trade press takes where some writers have heard various terms and memes but don't have any real deeper understanding of most things.
So it ends up being about developing legitimate expertise on certain related topics while having some conversational familiarity with others--and maybe just admitting you don't have more than a very surface understanding of still others.
I myself also consider generalist with quite a lot of success ranging from improving code performance in .NET and MS SQL to setting up whole servers with AD and best practices to technical hiring.
But I saw maybe one other or 2 really like that.
Other 20 or something „technical generalists” were business people hustling to be managers trying to look technical or outright scammers trying to loook like they can do everything but then delivering nothing.
It usually takes around 6 months to uncover the guy that is BS then another 6 months to convince manager guy knows shit and we have to fire him asap.
If a company is after an experienced person then they want someone who can come up to speed with their codebase quickly. This means they do not want to spend time training someone in the languages and preferably the frameworks used.
Yes for a permanent position they will also try to get people who can do other things and in a year or two's time the person will probably not be doing the same job.
For a contractor you mist know the languages immediately, they need the person to cover a gap in their knowledge or resourses immediately. You won't be expected to know their codebase but would be expected to answer a question on the language or common library in the first few days to help a coworker debug an issue. In many cases you will not be there long enough to learn their codebase.
If you are a contractor then you learn on your own time - the company will not pay you to learn new things, well at least until you have shown you are above average in doing things then they might allow this as they know they will get a payback.
Basically you can't tell during a hiring process how good someone is (you can find out if they are bad) and so the company will look at how well you have done after some time and make a view as to wether it is worth spending resources to get you to do something different.
Unfortunately many companies have this attitude to permeant employees and don't give enough time for training etc.
Yes, you can be productive in python syntax quickly, but I've seen enought people failing at building a sane python project I know that other things take more time: libs, tooling, workflow, typical error, debugging, deployment strats, etc.
So you do want at least one specialist in the team to drive the generalists.
You can't be proficient in a language until you can write programs in to and that includes being able to build and use common libraries, debug in it and use common tools well.
Someone who has been learning for 20 or 30 years probably can pick up a new ecosystem easier. “I can learn it in a day because I’ve been learning for 30 years”, etc.
I have done this for 30-40 years. Yes I can guess better than a junior but still takes time.
I think there's more to it than this - companies want new hires to approximately align on culture things. If I'm a Go shop I don't want someone to endlessly whine about how Rust or Elixir or whatever is better and vice versa
I would imagine that these "generalists" in software/development had some other "specialty" though; perhaps degrees in various sciences/engineerings, quant, linguistics, music, or really anything that demonstrates that the person is up to some analytic rigor and capable of following through on a difficult series of tasks.
I have a Life Science background (PhD and post-doc), and now work as a dev writing data vis toolkits in JS/TS.
I thought people would be clamouring for a scientist who is also a developer, but it turns out they really are not! They want one thing, or the other.
In my experience applying for jobs a couple of years ago, pharma and health-tech companies around where I live were not interested in my background. I was rejected by a couple of places allegedly because I didn't have a CS degree, and in one case because I didn't have a bioinformatics degree.
(Obviously, the truth behind such feedback is questionable)
I wonder if it is really hard for recruiters and HR people to separate out people like you, from somebody who only has seen programming in a very limited fashion.
Lawyers don’t get extra points for not being illiterate, right?
I think we shouldn't assume that there is no place for generalists 'low on the ladder', because with such bellieve we will implicitly ignore the proposals advocated by the 'low level' workers, who are actually the one who have to deal with the workflow obstacles every single day.
And quite often that's how you solve client problems as a contractor. You figure out what the actual problem is (in business terms), the cost/benefits of various solutions and then learn whatever you need to solve the problem. Only then you get to write code.
The funny thing is that you may be a ninja Rust developer, but sometimes all the client needs is a cron job to move data from a spreadsheet to a server. Or even worse, you may need to modify VBA scripts in an ancient Excel file!
I did game development, then embedded development, more game development, back to embedded, then robotics, then machine vision, then deep learning, then virtual reality, then back to game development (with machine learning), then embedded software in healthcare, then game development again, then vr & computer vision, and back to game development (back-end). And there's probably a few segues into other areas in there I have forgotten to mention.
I maintain multiple online profiles, that sell me as a specialist in a specific area. From blogs to single page websites. And why do I do this? Because when you go to a steak restaurant, you shouldn't expect their pizza selection to be great.
In Feynman's words "specialization is for insects." And I agree, but when selling yourself, specialization closes the deal. Specialize to win the bid, generalize when you've won their trust.
Customers, like patients, usually identify a pain point they have, and they want a specialist to take away that specific pain, be it software or medical. You sell the specialization, you keep that customer coming back with the ability to solve all of their problems.
I liken software development, and especially contract software development to follow the first principle of improv (also something I've done): You never so "no", you always follow with "yes, and..."
But I think that this would have been true ever since there were skilled trades in antiquity.
Like the author, this was okay early in my career. But once “front-end development” became a thing, I quickly realized that:
a) I was good at it b) Not many JS developers had a sense for UX
So the rebranding did help with getting more job opportunities. This meant I could be picky about who I said yes to. You don’t really have that choice when you only have one option.
You need to know enough about all aspects of running a software team that builds products. Not many people are such generalists and when companies need that skillset, they pay a premium for it.
It's a way to do really interesting work and if that's not available, it's easy to pick up some senior engineering stints in between.
It's actually quite weird. I got tasked with things I explicitly didn't have experience with from people who knew me several times.
I think even a career change can be engineered more easily like that, within the context of client or employment relationship, and the opportunity comes up.
For what it's worth, I grinded and went back to a state school for industrial engineering and wouldn't you know, my management/architect prospects improved immensely, even as a super senior just now in his 400-level coursework. Obviously not everyone has the resources or opportunity to do such a thing, but if you do, for the love of God consider it deeply.
You're right, but it's still sad that curiosity (aka "lack of discipline") is frowned upon. I have learned Go and Rust because it could be useful in the next five years. HR hates it when recruiting, but management is happy if you do this after you are hired because they think you're some kind of "tech leader."
If you want to actually improve something on your organization, you'll have to solve lots and lots of problems that nobody owns. If you insist, well, congratulations, you are now a generalist.
I'm pretty sure what the GP is calling "discipline" is an euphemism for "passive obedience".
If someone is writing me a check to work an "assigned role" then by God that's what I'm doing.
> I'm pretty sure what the GP is calling "discipline" is an euphemism for "passive obedience".
Realizing that to get further in your career that you need to buckle down and be very good a specific thing is "passive obedience"?
Fun fact, the original meaning of "jack of all trades", even before "is a master of none" was tacked on, meant someone who couldn't master a trade so they tried everything (and given the context of referring to criminals, "and kept failing, so turned to crime"): https://www.phrases.org.uk/meanings/jack-of-all-trades.html
Generally I am against the idea that every one should be a specialist. I caught myself that I even in my head wofo=rust, because you market it in such a way. Even though I know this is not the case.
Funny story I started as Process Technologist in my previous job (studied chemical engineering), transitioned to a Developer and went to a kind of proxy-sysadmin role at the same company.
You talk about generalizing within the same domain (programming), what about if you have additional skills. Something I struggle with, as I managed a Waste Water Treatment Plant, designed Dairy factory lines and now I am Software Engineer. It is all Engineering but oh boy is it difficult to market yourself as both. So perhaps I should narrow it down on my own website as well.
It also might not help that I'm looking for generalists in web development, which seems to be saturated with folks who are only comfortable inside a particular framework or API. As a small company sifting through these candidates is depressing.
To be fair I feel like I'm probably not providing exciting enough "roles" to attract useful candidates, and I don't have a lot of time and resources to throw at hiring. But I feel like I'm doing literally the same thing as this author on the opposite side of the table - trying to craft concrete "roles" but actually just wanting generalists. Although I realise I'm probably an outlier since I'm not a recruiter and wont be thinking like them.
Last time we tried Reed we had to take down the ad because we got spammed with hundreds of low effort submissions who didn't seem to even read the description. To be fair I think this is just a market response to spamming in the other direction.
https://news.ycombinator.com/item?id=39217310
If you mention you are hiring generalists and the location / comp are reasonable, you'll likely get some hits.
https://english.stackexchange.com/a/508907
"1618 Jack-of-all-trades
1631 Tom of all Trades
1639 John-of-all-trades
1721 Jack of all trades, and it would seem, Good at none
1732 Jack of all Trades is of no Trade
1741 Jack of all trades, and in truth, master of none
1785 a Jack of all trades, but master of none
1930 a Jack of all trades and a master of one
2007 Jack of all trades, master of none, though ofttimes better than master of one
The extra-long version of the expression may be considerably older than the 2007 earliest established occurrence might suggest—perhaps even a decade or two older. But it isn't the original form of the expression; and in comparison with the forms that arose during the 1700s, it is quite young."
When I was looking for a job after being Amazoned a few months ago, I saw two types of jobs that I was qualified for - a generalist developer who knew AWS really well and a specialist in a niche of a niche in AWS that I was the subject matter expert in.
I spammed literally hundreds of resumes using the Easy Apply feature where they were looking for generic enterprise CRUD developers and heard crickets.
I applied for two positions where I was a specialist and had two interviews and one offer within three weeks.
I also had two full time offers based on my network FWIW
While being specialist in some area in depth you still get horizontal bar where you cover things that are somewhat outside of your specializations. That is theoretically best employee.
— Robert Heinlein, Time Enough for Love (1973)
It's weird to be pigeonholed when I love wearing so many hats. It's probably why I found the corporate world so dreadful.
More companies in the space, with more staff, building more things?
So naturally you don't want 50,000 generalists engineers in your FAANG. You probably have different areas of practice with different specialities, and recruit more specifically for roles in that area.
It's easy to identify as a generalist. How do you know if you're a good one? How can a hiring manager figure out if you're a good one?
You're being hired to do specific work, unless you're coming through a recent-grad or other entry-level pipeline. You will be evaluated on specific technical competencies, because that's harder to fake. You need to show your ability to master at least one stack, language, framework, system, or technical area.
Your specialized skills demonstrate prior mastery and an ability to do the kind of work they need you for. Your generalist skills will show through in the quality of your work and ability to influence broadly.
So no, nobody's hiring someone who specializes in being a generalist. But, they are promoting them.
Thank You for the article!
A salient is fractal in nature, it creates opportunity at the cost of exposure. If a salient puncture into unknown territory is successful it was worth the risk. If funding, interest, or supply chain is cut off then the innovation is a complete loss. In a culture of innovation with too many salient advances all is lost. In a strategic innovation there is a calculated loss or an exponential gain.
For example, I expect anyone that knows a "modern frontend framework" to be able to learn the others. HOWEVER, if someone has ONLY done React I assume (based on many previous experiences) they will be unwilling or unhappy using something else (Angular / Svelte).
If they look like a fit otherwise I'll probably still do a call with them, but I'll be looking to prove they're very openminded and not stuck in their ways.
Anyone that is married to a specific tech/language/etc is sus to me. Note, this is just an example, it is not specifically an attack on react (although it is currently a common framework that people get married to).
Personally I don't think AI is quite good enough to help anybody but the most unskilled. Its output is less credible than a dubious forum post by a stranger. I'm just making the argument as if it has already improved enough to do what you're suggesting.
I am an expert Python developer with a focus on Azure-based cloud solutions and enterprise development in highly regulated industries.
Sounds about right, even though I've never worked at a place where all 3 aspects were in full force. It stings a bit to shave off the other hundred or so things I can do, but that's marketing for you!
If the company used Amazon rather than Azure you would change your main message to show that.
Any company should also read the rest of your skills and showing say experience of other cloud solutions would be a nice to have but not a requirement.
Your CV will change for each application you make to emphasis the correct things.
It really depends on who(or what) is screening your resume. If it's someone with several years of techinical experience, they might consider the resume based on your generalist work. If it's a junior engineer or someone on HR side, they would just reject purely based on keywords on the resume.
I was once rejected for a python role because the last time I pushed code in python to production was 2 years ago.
Inexperienced developers but also inexperienced PMs have become extremely biased against generalists, due to assumptions and tendency to box others. This is a recent phenomena, it didn't used to be like this. A CTO, engineering director or senior knows better.
Fixing HR is easy, though: just explain it to them what a generalist is and the advantages, and they'll trust you.
Big companies like specialists because they have enough engineers to divide the work and have each one work on one specific aspect only.