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.
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."
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.
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.
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.
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.
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.
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.
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?
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.
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.
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
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.
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.
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..."
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.
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.
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!
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).
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!