Stop requiring specific technology experience for senior-plus engineers
mikemcquaid.com
mikemcquaid.com
A technical recruiter, having discovered that that the ways of Unix hackers were strange to him, sought an audience with Master Foo to learn more about the Way. Master Foo met the recruiter in the HR offices of a large firm.
The recruiter said, “I have observed that Unix hackers scowl or become annoyed when I ask them how many years of experience they have in a new programming language. Why is this so?”
Master Foo stood, and began to pace across the office floor. The recruiter was puzzled, and asked “What are you doing?”
“I am learning to walk,” replied Master Foo.
“I saw you walk through that door” the recruiter exclaimed, “and you are not stumbling over your own feet. Obviously you already know how to walk.”
“Yes, but this floor is new to me.” replied Master Foo.
Upon hearing this, the recruiter was enlightened.
Source: http://www.catb.org/~esr/writings/unix-koans/recruiter.html
There also are loose tiles in Algiers that are similar to traps in the first Prince of Persia. You step on them, and they rotate to let your foot into the water.
Master Foo would do well in Algiers. This is not an instance where the master points to the moon and me looking at the tiles.
*disambiguation added
[0] https://en.m.wikipedia.org/wiki/List_of_popular_place_names
Odessa is not and was never the capital of Ukraine.
The fact that I love to walk in Bangkok proves that I am into Walking in a way more regular, more fit, longer-distance, better equipped walkers generally are not.
Dunno what the programming equivalent would be… maybe if you’re into coding Windows apps in Brainfuck?
I'll hook you up with painters here as well.
And of course if you walk without rhythm, it won't attract the worm.
Other people excel at going deep on specificity. They know every detail and arcane quirk about THIS specific language/build system/toolchain.
Both of these traits are desirable, but they will be great at slightly different things and under slightly different circumstances.
Why would one wait to make mistakes on their own time?
But it is a trait I notice in a lot of highly competent folk who are high achievers. They'll see something coming on the roadmap that they feel like they want to prep/educate themselves on, and then they will noodle on it for an hour or two when they get a chance. By the time it comes time to implement it 'for real', they have already gotten most of the learning curve out of the way.
But, if you want access to a larger pool, then the next best is people who:
1) know how to walk and have been walking for years, and
2) have walked on many floors so that you can have confidence that they can walk this particular floor.
Better know those floors goddam well
Not to suggest this all can't be learned.
Is GPU work unique or is it generic programming such that I should be ok to hire a programmer with zero GPU experience for a GPU role?
Similarly, sometimes you're hoping for someone that can be productive immediately, not after 2-6 months of getting used to something new. For example, I trust that a Java programmer could write C# or Swift or Python, but I'd expect the Java programmer to know the Java standard library and common solutions fairly well but not know the C#, Swift, or Python standard library. I get it might short sited not to hire them for long term growth but right this second I might want someone who can hit the ground running?
Yes, there are differences, but they are not fundamental. And with google, it really takes little time to learn things on the go. And with a team sharing necessary experience it will take no time at all.
EDIT: "I might want someone who can hit the ground running" - this is luxury, so one wanting it gotta pay up... And such short projects where such quick ramp up is important perhaps will be a better suited for contracting out the work anyway.
(And if you are such a startup, you want mostly senior generalists anyway.)
[0] Well, this is also probably begging the question. For me that's part of the definition of senior. Based on resumes I see lately it's far from everyone's.
The lat thing I need about any of my colleagues is to learning all gotchas, at the same time as integrating into our team.
Some tech I'll argue against, other tech I will require.
Some tech is fundamental to a domain. Some tech is a nice to have. Some tech is just generic.
My current team will not hire anyone for a senior role, without Spark experience. No matter how good you are in C++...
An example close to my heart. The company I'm currently at had a totally ossified Spark monolith and data eng team because they only wanted Spark developers. Drop one C++ developer in there to start spreading the good news about data-oriented design and suddenly there are a dozen previously-intractable "big data" problems we can rip out of the ball of mud and run outside of the cluster. Drop in another SRE who doesn't know shit about Java but can actually write shell scripts, and hey alerts from bad orchestration from weekly to twice yearly.
Yeah if you have a Spark job, you probably need a Spark dev. But if you have a team of Spark devs, suddenly everything that involves more than 1MB of input data looks like a Spark problem and you're in for a real bad time in a couple years.
C++ programmers know map/reduce/filter too.
Thanks for generalizing Spark engineers to an insulting level, though.
I have no clue how you got that from what I wrote. I even said a Spark project needs a Spark dev!
It really sounds to me like you're the one generalizing from "the one C++ dev we hired couldn't do data engineering right at all" to "senior programmers are dangerous to us unless they are Spark developers" (which imo, is more indicative of serious deficiencies in your architecture / design process), to "all senior programmers crossing subdomains are dangerous."
Sent them on a course and within a couple of weeks they were committing stuff with minimal review needed in terms of language things.
It's now been a year and they're still learning about our code base. For me it took about two-three years before I felt comfortable on my own in the most-used areas.
Sure LLVM or C pro will cringe looking at my code. But the business problem is solved, by someone who is not LLVM/C pro, and there is no need for more of that LLVM/C skills for now at the organization...
I haven’t done C or asm since college but haven’t forgotten the concepts. Probably know more now than then.
Sometimes, the right tool for the job is just a hammer :-)
I would not have taken a C++ role. But that's because I don't like C++. Could I learn C++? Presumably, I assume it'd take quite a bit longer than C# but I don't want to.
A lot of programming skill that's transferable from one role to another is also transferable from one general purpose language to another. Almost everything about programming generally is transferable. All the practical implications of architecture is transferable. All the theory is transferable. Data structures are transferable (albeit if you've got very narrow experience you may not be aware of just what's possible). A lot of high level APIs are transferable.
On the other hand corporate knowledge isn't. So, the fresh graduate hire who is an expert in your preferred language does not know that around here nobody above an Engineer Lead reads their Teams chat, and nobody above Group Manager reads email. They don't know that tweaking the CSS requires a Design Team Lead authorisation because once somebody made the text the wrong colour and branding were furious - and they equally don't know that "Normal Minor" changes take six months to approve around here so they should mark small changes "Urgent Minor" instead and then pester a Senior Engineer to OK them, but never pester a Senior Engineer if it needs a Config change because that is an ops problem and... you are going to need to hire internally if you actually need them to "hit the ground running".
I think more pragmatic question in such situations however, is why the potential employer is requiring $A years of experience in $TECHNOLOGY. For example, why they need someone to be productive from the say day $N and what does it actually mean (for them) to be productive?..
IMHO getting to shared understanding of what drives such requirements can help find a better path forward for both sides.
Would you rather hire a developer with 20 years experience but only 3 in the language you want, or would you rather hire the guy who has 6 years experience in the language you want and that’s it?
Personally, I’d hire the former every single time, even though he didn’t have the requisite 5 years in the language.
Pretty much better to reduce the years on the resume.
I my experience, when working in a programming job, your programming skills rather degrade quite fast if you are not actively working in your free time to work hard against this degradation.
I rather get better in programming almost exclusively by the side projects that I do in my free time.
So, I would rather say that x years of job experience show nothing; what is important is what you do in your free time (if such side projects are possible).
Engineer? Yes.
Someone with a solid track record and a good foundation and background should be able to pivot relatively quickly.
I've often seen organizations spend 6 months or more to find the perfect Foo developer when they could have hired someone right away who had Foo-adjacent skills and was very willing to learn Foo.
Is that the right analogy, or is it more like requiring CUDA experience vs knowing OpenCL (or Vulcan/Metal/etc.)?
There's a reason why you get geographically specialized pilots - little bits matter a lot
The counterpoint is that if I am proficient in Ruby, and senior level in Node, and work well in Java, I can figure out and be fluent in Python or PHP within a week or so.
Sure if you had someone that was working as an aeronautics engineer designing planes for years they probably would require more ramp up before being able to work on ICBMs, but they would do just fine moving from Lockheed to Boeing.
In my experience I've seen very cocksure senior engineers come in with the mindset that "this is just another tech stack, that I can learn in a week"... failing miserably to recognize that said tech stack is exclusively used in a domain that they're not at all comfortable with.
Arguably XHP/React is successful because some senior compiler engineers plied their trade in the front-end world. Or was it senior front-end engineers digging into compiler tech?
How about Servo pulling a bunch of game development techniques into the browser development world?
There are definitely technical domains you can gain or lack expertise in, but "frontend" vs. "backend" isn't one of them. Those are business contexts, not technical knowledge.
This makes a senior developer extremely valuable because they will always be more qualified for any job than someone more junior than them and there is a limited (and shrinking) number of people who are at their skill level or higher.
(to be clear, I don't believe that skills are infinitely transferrable)
You’ve substituted one cost, finding a unicorn, in place of training a good dev that is available. The old phrase, “a bird in the hand is worth two in the bush,” comes to mind.
Not only does your post sound unaware of the trade-offs but quite confident. A very fixed-mindset.
It's also applicable to training vs paying for experience. (paying for experience being the bird in your hand)
It's always a tradeoff, that you have to balance. The idea that you must never require a particular tech is a poor strategy.
Not only that, but a senior's job is to mentor junior. Having a senior dev familiar with another part of the stack brings a new expertise to any team. Like a compiler engineer realizing that the app team is basically writing a DSL...
A competent developer will be decent at month one, an experienced-pretty-good by month three. An asymptotic gradient, if you will.
We once had a senior guy that claimed he was "devops" and worked with redhat, but didn't understand the bash shell, nor what "export" meant. It would be one thing if he said he didn't know unix/linux and was learning because he had been working in windows all of his life, but he was as fraudulent as they come.
It would have been fine had he been acknowledging this, and seeking me, or others out for help, but instead he started sending his PR's to junior people for approval, who just simply assumed his code worked.
It worked great until a prod deployment failed, and I was the one who had to spend a late Friday night figuring out why it failed. Turns out if the guy had just run the script, he would have seen it fail instantly.
A senior engineer that has always worked in the backend won't be able to be up to speed with a complex frontend app quickly and be as effective as a senior frontend.
There's just too much to know about browsers and underlying tech and a myriad it things.
Same for a senior frontend starting to work on a complex backend all with god knows how many interconnected technologies.
Being able to go from JS to TS? Sure. Being able to go from JS to Rust + Docker + (all your backend stuff here) not so much.
Technology is a bit overloaded though so we may be picking up different meanings entirely.
There's an insulting premise in such job postings that engineers are incapable of learning anything new.
When I hire a painter, I don't ask how many years experience they have with pink paint (as opposed to say white or magnolia).
I mean, forklifts are a technology, but I feel pretty confident that three years as a React developer proooobably doesn’t qualify me to just hop on one of those.
Every message in moderation, I guess.
Or so says my wife, who is not a truck driver but can drive a forklift.
From my perspective a HS graduate with a lot of hand-eye-coordination experience is a better choice - than you.
A senior engineer has shown proficiency understanding complex problem domains and swashbuckling through the jargon to accomplish a goal.
If you pidgeonhole yourself in your career to just learning the jargon of one area then this comment might make a little bit of sense. If you keep abreast of words and what domain they're attached to, ramp up speed on any project of any kind has inherently less friction.
Keep abreast of words, all of them. Make toys that have nothing to do with what you're paid to build. Next time you're looking for new work -- don't let anyone strongly disagree with the fact that your experience on paper is in a particular domain. Just be able to walk the walk after you talk the talk.
Lucky you. You must not have been burned and haven't wasted your time on someone that couldn't walk the walk.
I have wasted enough months of my life on people like that.
As time goes on, I've become more and more convinced the skill to really look for in hiring is knowing how to learn. I think I've always thought this implicitly, but as I've been forced to articulate why someone someone is doing well or not, it's become more conscious.
Even if you use 100% popular languages/frameworks/infrastructure, what you do will always be new and proprietary in some (unless it's an explicit open source project that the new hire has already worked on, which is a pretty rare situation in the scheme of things). So there will always be new stuff to learn. Does the person know how to diagnose an issue when they get an error that they can't Google? For a lot of folks, even with years of experience, the answer turns out to be no.
Spot on. That's why you hire people that can learn and think - not robots.
They'd probably make the frontend app faster, less complicated and use less memory.
And while at that, get rid of those nasty frameworks.
- HTML and CSS (facility with selectors)
- JS syntax and semantics, common patterns and idioms, gotchas
- Web APIs
- CORS
- Frontend data persistence mechanisms (cookies, local storage, etc.)
- Critical rendering path
- Service workers (how and when to use)
- Accessibility (ARIA)Most senior backend engineers were generating this in the server response long before frontend frameworks were a thing.
> JS syntax and semantics, common patterns and idioms, gotchas
JS syntax is based on the most common C style syntax there is. You can reach a good enough level just by knowing that. The rest of the idioms/gotchas, well those are not really necessary and are mostly flaws which JS itself is trying to fix it with the new iterations.
> Web APIs
These are well documented, are you saying a senior backend engineer will have trouble reading the docs were a frontend dev won't?
> CORS
Come on, let's be serious here.
> Frontend data persistence mechanisms (cookies, local storage, etc.)
... so a backend engineer will not know how to use state persistent mechanisms? Think about that for a second.
> Critical rendering path
A backend engineer has responses to return in the milliseconds, not hundreds afforded by frontend, they know much more about getting data ready as fast as possible.
> Service workers (how and when to use)
A mini backend in the browser, and you're saying a backend engineer won't understand that?
> Accessibility (ARIA)
Are you talking about learning the available tags, which would take less than a day, or designing for accessibility (eg. color/full blindness).
As a full-stack developer who started off more frontend and leans more backend these days, JS is one of the languages I know best, for better or for worse, and knowing it has paid off for every job I've had so far. Understanding about the prototype chain has been useful for monkey-patching abandoned 3rd party library plugins that I've had to use in a pinch because there was no alternative aside from writing and maintaining my own. Knowing about variable hoisting has gotten me out of a jam when working with legacy code. Also, saying "the flaws of JS don't matter since they're going away" isn't really true since there's still a lot of old, crappy JS out there in the wild that you may be forced to interact with and browsers still have to support; things like there existing null _and_ undefined in JS aren't going away, so you need to know about them and have a plan for dealing with them. As it turns out, knowing one of the most used languages and all of its baggage is useful.
Not to mention you backpedalled away from the original question about browsers and underlying tech and focused on a couple nuances in JS.
An experienced frontend developer already knows how to program. They know how to write parallel and asynchronous code. They know how to deal with network instability. They know how to write and send of queries to a datastore. They know how to profile and debug code. They know how to work with a complex, mutable data structure safely. They're used to working inside of sandboxed environments and the need to use APIs.
These are all valuable skills for backend developers too. The flavors of the various low level components... matters less than most think.
Going the other direction, there will be new concepts, more focus on algorithms and scalability, more focus on ops and infrastructure, etc. But it’s all still in the realm of programming.
Even I, an infrastructure monkey, can follow a design doc with explicit values for widths, lengths, and font colors, faces, and sizes.
Backend engineers deal a lot less with network instability, than frontend engineers. Frontend engineers have multiple ways of dealing with failure. And frontend engineers have a different ways of dealing with parallel and async tasks, than backend engineers.
It's not a massive challenge for a smart person to learn, but we shouldn't pretend that people don't try to apply their previous experiences to future tasks. Which is a cost, when hiring someone without specific domain experience.
If someone has the need for a senior frontend engineer to contribute immediately on a complex frontend app where they are directly replacing a key engineer who left, then what you said makes a lot of sense. Lots of stakeholders are likely to nervous about bringing in a solid developer who isn't already working in the discipline. Often there can be fall out in organizations from this that results in the support systems failing for the hire which compounds problems for them.
When you are thinking about the long-term health of your organization though it is useful to support people in making this transition. Why would they want to stay with your organization long-term if they can't make these kind of changes? They can likely do some frontend projects on the side and go somewhere else combining a salary bump and a discipline change.
Ultimately, you can't guarantee these opportunities for anyone, but it's a case of appearing to be reasonable. That's not the feeling you probably wanted to convey, but it's what came across.
However things in CS changed rapidly and I made the decision to work on operating systems and basically let go of writing user interfaces. The landscape for user interface development was a mess MS Windows, NextStep, X, MacOS, and Sun Window System were all different. The web and especially browser support for JavaScript really accelerated the rate of change and I found it impossible to catch up with GUI development.
For years, I did consulting work for firms helping them with system architecture, but in the last few years I found myself unable to help with the inevitable requests for assessment of companies user interface designs. It's a bit sad for me to know so little about such an important part for so many applications.
Oh well, I've been very happy in my career, but I still remember the "good old days" where it was possible to take on virtually any task without needing a lot of time to ramp up my understanding of the tools, frameworks, and programming languages.
You can't know everything even in one domain. But once you are a good programmer, you can pick up fast most domains.
If you want to do GUI, just try it. You will be amazed that you can actually pick it up pretty fast.
And before being a web developer I worked on desktop apps when they were still a thing.
I did a bit of embedded programming and worked on a few mobile apps, too.
Switching from one thing to another is not that hard as you make it sound.
I'd even argue that doing more than one kind of programming during your career is beneficial and not detrimental to both your skills and your career.
I’ve also worked on web frontend, games and physics, web backend, databases, near metal, very far from metal. I never felt like anything was out of my reach to pick up while working on said thing for the first time at a new company.
I've managed just fine. Switching required reading documentation, specs, papers, blogs, etc. but that's a norm even if you're staying within a single field and don't want to be left behind. It's not even a lengthy process. Reading is this magical process of quickly uploading expertise to your brain.
On top of that a lot of skills are transferable, even between seemingly-far domains. Algorithms, debugging, testing, refactoring, research, project management, and general development wisdom are transferable.
A senior browser frontend developer is likely to pick up mobile development quite quickly.
Likewise someone who's been doing Spring Boot Java backends for years and is proficient with databases, caching, etc. Isn't necessarily going to find it hard to switch to a serverless nodejs paradigm.
The network card person is probably able to handle the embedded microwave oven.
Etc.
It's not that hard to write some code that would do the job, it's hard and cost prohibitive to realize all the initially hidden nuances that might require redesign because of shortsightedness of the original one.
Requires either a really bright fast-thinking mind or just a lot of experience making one's fair share of mistakes. There are geniuses out there who can make perfect models in their heads, but I believe a lot of people just scrape by knowing where them or others had shot themselves in the foot before. And such experience only comes with time.
Of course we can nit pick and poke holes all we want. But the basic premise, to use your example, is that an experienced backend engineer can work in a backend written in C/C++, Java, Go, Rust, Python, Ruby and so on. An experienced frontend can work in Angular, React, Vue, Svelte, JS/TS/Elm/ClojureJS/.....
And, so on...
And I strongly disagree with you, and I have a real life example to disprove it (i know, a single data point is just anecdata, but still).
Our team was doing mostly web front-end (your typical TS+React+Webpack+etc., you get the idea), and we got an internal transfer about 1.5 years ago. Senior engineer, not a "rockstar coder" by any means. He doesn't spend his free time working on tons of side projects, he has other hobbies that aren't related to coding. Just a really solid engineer all around.
Here is the catch: his sole experience for the past 8-10 years until that point was writing OS-level C++ code. Exactly zero experience with anything web or front-end related. In a month, he was already decently productive and pushing significant functionality-related PRs on regular. 3 months in at most, he was fully productive and indistinguishable from anyone else on the team, except he also had back-end skills that were better than those of at least half of the team.
And no, we weren't building a simple CRUD app (not that there is anything wrong with that), it was a pretty complex tool that worked and integrated across a bunch of different Office suite products.
Sidenote: Thought to mention that part about "other hobbies not related to coding" to make a point that he didn't just compensate for his lack of existing front-end knowledge by throwing some ungodly number of hours of his own free time at it to ramp up. The problem is that most people cannot afford throwing that many hours of their "free" time considering other life commitments. And no, there is nothing wrong with throwing many hours of free time to bruteforce a skill, that doesn't take away from the person's ability in it imo. But if the engineer I am talking about had done that, then my point wouldn't have generalized well.
Being an OS-level C++ engineer is definitely a marker for smart and capable.
The fact that he wasn't familiar with front-end tech at the time was just a tiny blip that absolutely no one was even slightly concerned about when he joined.
A more concerted challenge is not whether a senior developer can pick up front-end technologies, but rather whether a strongly backend focused engineers wants to do front-end. I find the latter scenario (which is more about desire and preferences) to be far more important than whether or not they have the ability, experience and aptitude to do so.
Why not? I know plenty of people who have switched domains for new jobs, and unless you are moving into something highly specialized that requires tons and tons of domain knowledge, it should take you no more than 3 months to become productive with the new tech.
The problem is we all like to kid ourselves that we're that guy, and we'd like to kid other people (hiring managers) as well.
So to guard against this, the natural thing to do is to restrict the entry criteria.
I'm not saying you won't turn away any genuinely great people who can learn your system super fast, just that in this case the baby/bathwater ratio seem pretty reasonable, and so that's why people do it.
I would think that in a tight job market like we have now, the criteria are a bit looser, so it's not all bad.
Like let's say I build systems with Yocto Linux. Somebody who uses a competing system like Buildroot is fine. Somebody who's never done embedded Linux but knows how to construct Debian packages might be fine too. I'd also consider an old school Unix wizard.
But somebody who can't use SSH and only writes Javascript isn't going to be a good fit, no matter how good they are at Javascript. An iOS app developer also wouldn't be a good fit. Either could be OK for a junior role maybe, but not a senior/staff role.
> An iOS app developer also wouldn't be a good fit. Either could be OK for a junior role maybe, but not a senior/staff role.
Tangentially related at best, but this is essentially my current dilemma...
Sr Android engineer, leading a team of 8 on a multi-million install app for a well known multi-national (not software) company. No one will give me the time of day for anything but Android work, and I'm really feeling the burnout.
The cost of switching domains is that you loose your "senior" status.
I don't think a React role would be a great fit.
I've been boxed into a very specific field for 7 years. The pay is good and I have no complaints.
I don't think said field is going anywhere, as someone who went though a few evictions as a kid I appreciate having work.
How much time would it take for a smart, competent and self motivated person to get up to speed on this new but related field? Given that number of hours, is it worth accepting that period of relative 'unproductivity' in order to hire them?
That seems like the right heuristic to answer your question.
Hiring someone willing to learn a new field filters for generalists and people who need jobs. Neither of those qualities are bad.
Specialists, or people in love with a stack, don't want to use 'some other tech'. As a senior, I pick the stack, because I have an idea where the industry's at and what's best for the type of software I'm experienced with making.
These hidden filters are interesting.
This depends on the position; smarts are not a replacement for (domain) experience, because certain knowledge can be learned only through trial and error and/or through long-term exposure to a domain (in other words, experience).
I believe that domain experience is the more necessary the higher level the position is (e.g. seniors who can decide on architecture, leads, architects...).
Having said that, I certainly agree that in the (hiring) industry it's common to be excessively attached to the specific tools used; I also suspect that smaller companies tend to think like this more than bigger ones.
I think the more appropriate question is about the relative effectiveness of someone who has been leading Android development teams for 10 years and someone with the same experience but in a different (but related) field.
I assure you a million companies did exactly this ca. 2010. And that was back when it was much more difficult to write one, both devices and the SDK had orders of magnitude more sharp edges and restrictions than they do now.
A senior without android experience is going to have to learn the platform; this will take longer than learning the language. The pace of change updates the best practices often enough to serve as a kind of catch-up mechanic but native mobile does in fact require domain knowledge. I would be comfortable putting a senior iOS dev on native android but certainly not as the lead.
GUI libraries are pretty similar to each other. I have never written an Android app before, but in a hypothetical case when I would want to make one, I’m pretty confident it would take me a week or two to learn these things. I’m very familiar with quite a few other platforms: everything Windows from WinAPI to UWP including phones, iOS, I made my own GUI frameworks even…
If that lead developer does not have _any_ experience writing rich GUI apps in any language, and no experience with computer graphics either, now that would be a red flag for me. That’s too much new stuff to learn in reasonable time: computer graphics in general with these pixels and vectors, Unicode shenanigans, UX shenanigans especially touch screen related, and quite a few others.
The thought might be, how long would it take you to make a great one? An 'expert' might be able to create it by the time someone else has started figuring out lower to mid-level concepts.
Mid.level concepts are more diverse, but not dramatically so. All popular GUI libraries are object oriented, web included. MVC on iOS does have some differences compared to MVVM on Windows, but conceptually they’re still very similar.
What’s that? If you gonna mention Java shenanigans like memory management and garbage collector, .NET is fairly close. Mobile-specific things like multi-touch UX and power management are shared by all battery-powered devices. Many kernel-specific things are shared with all Linuxes including desktop, server, and embedded.
> you probably wouldn’t do a good job building the foundation of a large app
I probably will. I already did a few times in my career. When I found that iOS development job a decade ago, I had zero prior experience with the platform. I had many years of prior experience developing stuff for Windows, game consoles, and some older mobile platforms.
> Much of the job involves tasks unrelated to writing $TECHNOLOGY. True but doesn't negate the point that you want previous experience. Also think the OP is exagerating the other work that most of us do
> Engineers who already have experience can often pick up new ones quickly. Common statement but again, fairly obviously wrong. Are you telling me that just because you know "stuff" that if I wanted someone to do e.g. Elasticsearch, that they could create production-quality work in a short time? How long does it take in real experience to get good at these things? DOes generic experience help? Almost certainly, that much? Not compared to someone who has already produced decent quality e.g. Elasticsearch
> Experience with different paradigms can make them better at writing all kanguages. Completely disagree. Writing Java, C#, F# etc. is VERY different, much more than the superficial similarities. Again, I could learn Java more easily with C# but still not be as good as someone who has written Java already.
> An engineer with other experiences might help you consider future alternatives. And conversely, they might steer you towards what they are comfortable with even if it isn't a good fit.
> You might not be using it in the medium/long term. No. But I'm using it now and my devs might not even be working for me in a years time so why choose someone who might be useful in the future over someone who can do stuff now?
> May not be something that many people have experience of. Maybe not but that is a different issue.
If I cannot find people with the experience then maybe I will have to employ somebody that doesn't have such a matching skillset and maybe it will work. Otherwise, I will definitely start with people who have cut their teeth on what I am using and don't have to learn all of those, "yeah, that doesn't work in C#" things.
The general sentiment seems to be, "Oh, I have XX years of experience and the world owes me my next job with a 25% increment, 4 weeks of PTO and fat RSUs".
I don't agreee that you should not ask for specific senior experience with specific technologies.
It takes years of working intensively with a programming language to really understand it well.
If you are wanting to hire in expertise - i.e. someone who really knows how to get things done with your technology stack - then you MUST select for specific previous experience.
If however you're not looking for someone with expert level skills then sure, hire openly for "smart people who get things done", but in that case, you need to be ready for the people you get to take a good chunk of time to really come up to speed - like six months at least.
Why aren’t managers or directors writing about their views on this?
Unless you mean something specific by “trained”. Like most Software Engineers, I’m not a PE nor did I undergo any specialized training. Pretty much just have Maths and CS degrees and lots of work experience.
That is sad, especially wrt the effects on the team mood.
---
To be fair, same goes with a software engineer turned manager without any guidance, landed there by sheer inertia.
Basically, I never imagined an article titled “yes, experience in a particular stack is probably material to your success at another company” would make for an interesting or even controversial take.
(To be clear, I would and have hired many people with different $technology backgrounds. It’s not a blocker. But I wouldn’t dismiss it either.)
But if you're hiring for a role and have plenty of good applicants, you actually want to reduce the choice down. If you had to pick between 2 good applicants and 1 had experience in the technology and 1 didn't, with all else equal, you'd pick the one with experience.
And if you've got a dozen applicants like that with various differences, but some have experience and some don't, you're going to favor the ones with experience.
Of course, nothing is ever quite so clear as that. But when you're already trying to filter the applicants down to a set you want to interview, broadening the search isn't a good choice.
A contractor is typically on a short(ish) term mission, so they need to be very cost-effective. After all, they're costly yet disposable.
An employee is an investment, so you can take the time to onboard/train them properly.
In other words, there's been significant title creep in the last decade and "Senior" no longer means what the author of this post seems to assume (experience with multiple frameworks, languages, orgs, etc).
Though I would say someone with at least intermediate abilities in half a dozen languages has a great track record for learning new things. Carpenters are not sifted for how much experience they have in soft woods, hard woods, or plywood.
Still. I can see hiring someone with 5 yoe C# to serve as the Senior on a Java project. However, I wonder about hiring someone with 5 yoe C# to serve as the Senior on a Java project. There would have to be some sort of additional major value add (e.g., domain expertise).
At 15 yoe C# experience this starts to make a lot more sense.
Suppose I'm a backend engineer on a team where the production services are all in java, we do some low-scale data analysis in python, and in one corner of the repo there are automation scripts in ruby. If resources aren't available, infrequently do a tiny bit of frontend work in js to unblock my projects. I constantly am reading/writing/maintaining java. I frequently am writing python, in a jupyter notebook, but not building anything large. A couple times a quarter, I need to make a small change in a ruby script. Rarely I write javascript and every time I need to relearn whatever react/redux/whatever else the frontend team has moved to.
I work here for k years. But it's silly to say that in doing so I got k years of experience in java, python, ruby, and javascript, plus a year in each of the frameworks that the frontend team drifted through.
If I tell an engineering manager "years are not a good unit of measure; I have >5 years of overall experience with ruby, but am not a rubyist" they'll probably understand. In general, if I say the same to a recruiter working through a checklist, I'm perceived as being unhelpful.
With an experienced mentor that would patiently review all my PRs for a while? Sure. To architect and lead the C++ project? No.
I figure it'll take up an entire line.
It's also super inconvenient to need to take an entire day for a job interview when I'm probably talking to several other companies and still have a full-time job. It can be worth it for the right offer, but it usually isn't.
Remember, what employers actually want is competency (and replaceability), not years of possible mediocrity.
The other problem with this is let's say you need someone with GQL experience. And everyone in the company knows it. It's not that hard to pick up, but when you get a senior that DOESNT know it... they tend to just grumble about it and want REST instead. It's sometimes better to hire what you know you need.
Within a specific part of the stack, there is a vast quantity of micro-skills that a developer needs to know. The language syntax, the language built-ins, the language ecosystem, best practices, canonical designs, the debugging tools, other development tools, etc.
Many things are Google-able, but searching for answers to problems is like making a network call. It's WAY faster if you can pull from cache.
My specific context is frontend development. I would never hire a frontend developer who cannot clearly demonstrate their skills in the domain. There are ~140 HTML tags, each with different attributes and behaviors. There are ~200 CSS attributes with 2-10 meaningfully different values each. JavaScript as a language is moderately challenging for some developers and there are many hundreds of built-in methods, behaviors and functions to know.
I've seen time and time again the differences between a talented frontend engineer and a senior non-frontend engineer trying to solve the same problems. Given a description of a problem, an experienced FE dev can quickly identify the problem using dev tools and make the necessary changes to solve the problem. It might take them 20 minutes. The "senior" non-FE engineer might spend a full day searching, debugging, experimenting and learning. By the end of the day they might be proficient at Flexbox layouts and able to solve the same problem in 2 hours next time.
But depending on your business, can you afford to hire an engineer who takes 10x longer to do things, with the hope that after 6-12 months they might only be taking 2x longer to do things?
And don't get me started on architecture and design sense. How can you expect a senior to make wise decisions in a domain they know little about? Nearly every time I've seen mostly-BE engineers build FE projects, they create bloated, complex and over-engineered designs that are hard to develop and maintain. There's a thousand little details that you learn over the years when working in a specific domain.
For me, I hire based on demonstrated expertise in specific domains. When I do that, my teams move fast and effectively. It can be hard to hire the specific skills you need, but I've found it to be far more important than anything else.
You wouldn't hire a senior javascript programmer to write CUDA c code, and vice versa. You'd happily hire someone who hadn't ever written web apps in c# but was a senior java person building web apps...
I don't think the argument is that we should pay no absolutely attention to domain expertise for software engineers. Skill in a particular domain of software development (or business) is valuable; an experienced front-end web developer is going to have a large library of knowledge that is just not accessible to someone coming from e.g. an embedded background. If we need a senior front-end engineer, I'm unlikely to be hiring people who have no experience with that area of development.
But I have seen some frankly silly objections to candidates in the past. If we're primarily using React and I've got a great candidate with 10 years of Angular experience, I'm not going to reject them outright. I am way more interested if you demonstrate a clear understanding of the problem domain generally, if you are able to talk about your work and the challenges in it, and are able to communicate effectively about your own skill and experience. My experience suggests that if you can do the above, you're not going to struggle to start writing e.g. Ruby as a developer with a Python background. Or even worse is the inclusion of specific technology – people including things like "Redis" as a requirement in a job posting is baffling.
Related: from a personal perspective, learning new languages and frameworks is by far the single most powerful tool I have ever encountered for increasing my own technical skill. Seriously, it's an absolutely insane effectiveness multiplier to be able to bring together knowledge and standard idioms from different systems and development paradigms.
It may not have occurred to them to lower the speed of their onboarding treadmill and revisit rejected resumes, because I never heard from them again.
I interviewed a guy once who was applying for an architect position who didn’t know what DI was.
Not knowing what DI was meant there was a strong indication he didn’t know much Java either.
At what point do we say maybe he’s just not qualified for the job? Maybe he’s not yet architect material, nor a senior engineer, no matter what he claims.
Most importantly, why on earth would I pass up engineers who do know what DI is for this guy?
I guess the product's requirements and architecture aren't important as things like company engineering culture. While I agree with the rant, it doesn't mention the product anywhere. I must have had it the wrong way around this whole time.
For instance I had "years of experience" with Java and had a recruiter realize those "years of experience" would translate to C#.
Presumably people will be getting hired to do "metaverse" related work. Only a handful of people have any experience now, recruiters will have to settle for people who know what is fundamental and universal.
But I've played around with quite a few other techs since the Raspberry Pi came out and some of them have pretty easy to jump into. Others quite daunting.
I barely poked around with C, C++ and left the building. I felt like a lefty in an all right handed tool shop.
My perspective on this is likely very personal. Nearly 100% of the technologies that we use today did not exist when I was in school and started working as an engineer. I am fond of saying that they only things that survive the test of time are C, math and physics.
I do like people with low level experience. By this I do mean assembler. That tells me they did not come-up in an idealized world that is completely isolated from the underlying hardware. I like to remind people that Bjarne Stroustrup was very much into assembler and microcode before creating C++.
My standard test is to learn what language a person does not know and have them solve a problem using it. These days that typically means something like Forth, LISP or, my favorite, APL. Having used APL professionally for ten years, this is one of my preferred go-to interview languages.
I could not give a shit if someone memorized a hundred interview problems (Fibonacci and palindromes make me want to vomit).
I also find that this instantly relaxes the interview process. I'll say something like "I know you don't know the first thing about APL. No problem. I want to understand how you might approach having to write something in a language or framework that is completely new to you. I know the language well. You can ask me anything you want, google it, or, here's a couple of books for you to refer to." We then sit down, hack and talk.
Computational problem solving is a creative as well as technical job. If you want to hire robots who can memorize and spew out hundreds of trained little problems, by all means, go for it. It might be the case that large companies like Google and FB have no choice but to filter this way, I would not know. I'd rather work with people who can say "I have no clue, but I'll figure this out".
Not saying this is the only way, just my way.
“They won’t do. We need someone with at least $X years in $TECHNOLOGY"
I have never had a anything to do with recruiters, either in hiring or candidate role. That may be related.
Titles are by and large vehicles for promotions, not an indication of skill.
Weird thing is that there are many devs who "know React", but have no clue how to play outside of that sandbox.