If software engineering is in demand, why is it so hard to get a job?
betterprogramming.pub
betterprogramming.pub
In many other fields (medicine, law) people study a standardized body of knowledge, take a standard test and then get a license so they can do something others cannot.
However, this doesn't prevent a lot of awful and a lot of great people getting through. You would still need to interview a lot of them. I wonder if it sets a minimal level.
I assume it actually works pretty well but there's obviously a huge amount of gatekeeping involved.
This is more a random fluke as much as sampling bias. Akin to someone either getting lucky or someone who is coming from a very similar environment. This isn’t a measurement that guarantees someone is competent, rather it’s a guarantee that someone is coming from just as incompetent an environment as you have.
These results may be "curved".
If you give the same easy test with no pressure and everyone is sufficiently good, then it was a waste of everyone's time.
In such an approach, you do something that is sufficiently hard that you're able to identify the people who are the better performing ones along with a reasonable idea of how well they work under pressure (because that will happen at some point).
Is it testing the right thing? Probably not. However, we still haven't found "the right thing" that is able to scale, respectful of the time of the candidate, not too intensive on the interviewer, and minimizes biases in hiring (same set of questions to all candidates, same grading scale).
Maybe because the concept of a test is flawed? It seems to me like every company that uses a whiteboard test gives out the same tests anyways.
What are they really trying to test? If someone understands common algorithms and data structures? I dont see why that couldnt be determined by a simple interview with an engineer. A test might be useful for a HR recruiter who doesnt have a computer science background, but those tests are usually conducted by other engineers anyways.
The whiteboard thing just seems to me like an arbitrary hazing ritual.
My experience has been that this applies to recruiting, hiring, BD, sales, fundraising, etc. Anywhere that there's a systemic principal-agent problem.
I am wondering if the entire interview process should just be pay them for 2 weeks and see if they stick.
I've heard that advice in various forms but I must say (anecdote incoming) - in my own 30 year career, the best jobs I've ever had were the random ones that I just applied for and the worst ones were the ones that somebody I knew from before recruited me in from outside.
Speaking only of ICs:
From principal engineers down, there's a technical screening. Distinguished engineers? Maybe. But then you're speaking about Guido van Rossum, James Gosling types.
Am I on the top of my game right then and not stressed about anything and the questions out of the random million possible questions that could come up are ones that I just happen to have had on my mind recently? Then I ace the interview.
The last time that happened it was in a big international consulting company, they then put me through 5 other interviews afterwards, each one telling me I would hear something back in the next couple days.
The last one I got told couple more days, they didn't call me back for nearly two weeks. Then they call: Hey Bryan, we would complete the offer process now hope you're still interested?
Uhm unfortunately I got an offer last week for a 6 month consulting project, sorry but I had to take it because they said they couldn't wait to see how this turned out.
on edit: clarification.
I have over 20 years of programming experience, am a founder, and have worked for multiple venture backed startups. That includes hiring countless developers, so I get both sides of the situation. And my partner is also a tech recruiter for a top tier HFT / market maker, so I know what a demanding but respectful hiring process looks like.
Reddit’s hiring process converted me from a fan of the site into someone that thought the entire organization was second tier - which obviously it is in terms of monetization - but also in how they treat people compared to the FAANGs. And a year later the role is still open.
When the interview was over I thought, "Is this how working with these guys is going to be?" If I ran into a problem and went to them for help, would they just stare at me, waiting for me to figure it out on my own?
They didn't extend an offer to me and, based on my performance in that interview, I can't say I blame them. I'm not sure I would have accepted if they had, however. That experience really left me with a bad taste in my mouth and a low impression of that company.
We as an industry really REALLY need to figure out a better way of conducting interviews.
Unfortunately, yes. Young engineers are terrible at communication and working with others. Partly due to workplace incentives and partly because you must realize that entire generations have grown up with computers and not people.
A good friend of mine worked with a young developer recently who was excited about what he was able to generate with a single npm command. When my friend, who has been writing software longer than this guy has been alive, calmly pointed out that the npm command had just generated 400 files and thousands of lines of code that didn't actually solve their problem, this guy got mad and went to complain to their manager.
"Wow! I can do so much with so little!"
"Everything you just generated is wasteful and meaningless."
The right way is to encourage that enthusiasm and guide them toward doing more useful work with the same power they just discovered.
In your interview case, they should have given you hints, even if they want to not hire you later.
Looking back there's no way I would have fit in there, but damn did that interview screw me up for a while.
You’re making the same mistake at vetting them that they’re making at vetting you
Which is exactly why they do irrelevant interview brainteasers as well
This problem is a two way street in the tech sector, in case anyone wanted to fix it. The candidates alone are making the same mistake and bringing it to the company
Similarly, a false positive is something that was accepted, when it should have been rejected.
If you have a sufficiently high candidate pool. you can (for a while, at least) live with an interview process with a relatively high false negative rate (that is, x% of the time you don't hire people you should have).
If it is typically quick to go from "in through the door" to "is a productive member of the team", it may be that you can live with a high false positive rate (that is, y% of the time you hire people you shouldn't have).
The technical competence check is all retrospective, hearing them talk about prior projects and what the design and implementation process was like, how decisions were made, what the challenges were and how they were handled, any regrets/learnings. And most of that is just digging in far enough to confirm that the person was actually a first-class participant in it with a deep understanding, and not a bystander. Any whiteboard stuff would be "show us how the system worked" as a last-ditch check on basic communication skills.
This all requires that the interviewer be willing to interact deeply with the candidate. Our profession has a (well deserved, I think) reputation for having a high percentage of people who really don't like interacting with others on a peer level.
Is it likely that a large part of the problem is that we have people doing interviews who really shouldn't be? I mean, if your typical response to talking to another technical person is immediately to try to one-up them, then you're going to be a really shitty interviewer. And that's exactly the personality type I see being described over and over in these anecdotes.
I can tell you, with quite substantial sample size from me directly and from people I deeply trust that every time we encountered an interview like this, we later found out that the company culture was really bad.
Those are not the kind of people you want to work with.
> I had a similar interview with a different company last year. Three guys and me on a Zoom call with me sharing my screen trying to solve a coding problem that in no way resembled anything I have ever encountered in my 25 year career. When I got stuck they just stared at me. They would not give me any hints whatsoever. They just stared at me.
English has this expression too, except it's "The fish rots from the head". (Which, when you think about it, makes more sense.) What's your first language?
The psychological reality behind all this is even worse.
The interviewer is not looking for new colleagues, he is looking to improve his own self-esteem and rank. The reward for rejecting a candidate is a feeling of superiority and an appearance of being irreplaceable.
The interviewer and the candidate have opposing goals, and the interviewer can randomly change the rules at any point.
But then I've always been interviewing for my own future colleagues/boss/reports. I guess the dynamics could be different if you're in a huge company and just generically interviewing for new cogs that might get slotted anywhere.
If the person is smarter than me even better! Instead of spending time teaching them maybe I can learn from them and get into their network so that if I ever need a job in the future they can help me out.
It only later dawned to me that our industry has a non-trivial fraction of people for whom empathy is a foreign concept. They're not sociopaths, because those folks can at least feign empathy - we're talking about individuals who can't see themselves in another person's situation at all. On top of that, we don't really provide actual interview training to engineers either. Out of all the people I personally know in London, only one (1) has received formal interview training.
Is it any wonder that the interview gauntlet is such an awful experience for pretty much everyone?
Which is noble, I suppose. But clearly lots of people still felt that it was unfair and alienating; closer in spirit to a hazing than a good-faith evaluation.
Here's why https://blog.codinghorror.com/why-cant-programmers-program/
- Tell us about the approach you took with the take-home coding challenge. Why did you break up the functionality in the way that you did (modules/classes/functions)? What kinds of constraints or requirements would cause you to make a different call here?
- Tell us a debugging war story. What was the bug, how did you discover it and come to eventually understand the root cause? Any challenges with reproduction? What steps were taken to prevent it from happening again?
- Pick a feature of XXX programming language and explain how it contrasts with approaches taken in other languages. What do you like about it? It is more productive, efficient, safer, more explicit? What are the tradeoffs and how do you balance these? What kinds of projects would have you prioritizing using a language/ecosystem with this capability?
Someone incapable of writing a fizzbuzz program is not going to be able to bluff their way through an interview like this. Obviously you need to be committed to listening and exploring the space with the other person as opposed to flexing and looking for the "right" answer, but that's just part of the discipline of being a good interviewer and not a jackass.
Coding exercises entirely miss the point, because writing code is the easy part. The hard part about good software engineering is being able to rapidly acquire problem domain expertise and knowing which engineering design choices enable rapid, scalable, and maintainable development to solve the problem. That's why companies using code exercises to screen candidates are generally not worth the interviewee's time to work for - it indicates that the interviewers don't understand the problem domain, either, and (by extension) that company is mired in mediocrity.
I've had code exercise interviews. I'm quite happy that I have never had to work for one of the companies that used them. I have never given a code exercise interview, and I've been quite pleased with the candidates that have responded and worked with me.
"How would you pull in data from an arbitrarily long -- maybe never-ending -- source of data in Python?"
me : "What kind of data? What is it used for? How should it be represented afterwards?"
Silence on the other end , followed by "Well that's up to you."
I then fumble out a few ways to do it (verbally), to a recruiter that doesn't seem to understand anything that i'm saying -- he's probably reading a question from a script and pattern-matching what I say to the supposedly correct answer given to him in the same script.
Finally it ends with "Oh, that's interesting. ...We'll get back to you." , and the interviews that go this direction -- they never get back to you; you've already lost.
I'm not spouting gibberish, i've been at this for a long time; i'm just not spouting out whatever tech-jargon that their company supports and is needed to conform to his script, and quite honestly the person on the other end of the phone call seems to be universally under-equipped to judge anything remotely CS related.
It's a really weird/ephemeral/surreal experience. Imagine a surgeon being appointed to a position at a hospital because the secretary quizzed him on some flash cards (flash cards provided by Acme Sharp Scalpels), and the surgeon -- by chance -- prefers Acme Sharp Scalpels, and so mentions that brand. Instant hire according to the flash cards.
That's a lot like what it's like when a technically-accurate developer gets passed over for one that blithely mentions popular software packages (pandas/tensorflow/whatever is popular this week) without any real technical knowledge on how to achieve the goals wanted by the hiring party.
The answer to this question is to use a generator. If you don't know this, then both people are going to wish that they had that half hour of their life back.
Is this a good question? If you want somebody with a lot of Python expertise, then knowing about generators is a good thing.
If I was interviewing a candidate, and they didn't know this, then I would just find a pleasant way to move on after a minute or two. If this is the only interviewing question, then that makes me happy, because this company has a flawed process, and is leaving some great talent for me to hire.
It's not a big deal if you didn't know this at the time. You might not have known what a generator was, and the person interviewing probably wasn't very good at interviewing people.
I think that's only applicable if you are reading from a socket. Although I don't know too much about asyncio streams.py, so I'm not going to get a job at this company.
> The answer to this question is to use a generator. If you don't know this, then both people are going to wish that they had that half hour of their life back.
That's funny...I've implemented more than my share of such things in a long career, and my first intuition for an answer to the question, as phrased, was to implement stream sampling. It never even occurred to me that the answer might be a syntactical feature of the language (and yes, I know what generators are).
According to you, I'd be so wrong that I'm a waste of time.
Do you see the problem yet? It isn't theoretical. I've hit this kind of situation with so many interviewers that I'm actually more nervous when I'm sitting across from someone who is clearly on their first or second job out of school. They're asking (unclear) questions in the "python syntax" category, and I'm thinking about the engineering consequences of consuming an endless stream of data...
I don't think so, because you actually know about generators. If you were hiring for people who had a lot of Python experience, but didn't know about generators, that would be a bad sign. You would probably want to ask a some other questions, so you would have a more complete picture of what the candidate knows.
My main point is that the company's interview process is flawed.
Sure, but will the OP give me a chance to demonstrate, or simply flip the idiot bit as soon as I don't give the expected response? In the context of a phone interview, I probably wouldn't get anywhere near discussion of python generators in an answer to this question. I'd probably say something like:
"For an infinite stream, my main concern is system resources, which are never infinite...I'd want to use something like stream sampling to calculate the desired metrics, but it's hard to know the right solution without more information about the problem."
Far too many interviewers hear that as weasel-wording, and simply disengage. It's even worse when the interviewer thinks they're asking a clear question about python syntax. It takes a high level of self-awareness to know that you might be the problem when you're the interviewer.
An experienced interviewer might engage with that, but many folks don't have the patience to listen to an unexpected response, nor the respect for the candidate to give them the benefit of the doubt. As I said, this pattern isn't theoretical. I've been on the interviewer end of this kind of pattern many times before.
> My main point is that the company's interview process is flawed.
Agreed on this.
This is a...youthful...industry, and a lot of junior people (with "senior" titles!) are out there doing interviews. It takes experience to become a good interviewer, and if you've never had that experience, you don't know what you don't know.
It surely matters if the data source is push or poll or something else, matters if it's a lot of data or a trickle, matters if you need all of it or if you can miss some (and how much), if the source buffers it or doesn't. I'd expect discussions about message busses, queueing, buffering (maybe ring buffers), data stores (maybe SQL or No-SQL), as well as concurrency or parallelism expecting the question could move to "and what if there was 1000x more data?". "Process stock market data" needs more than "read a temperature every minute".
Or at least for a candidate to ask about some of them and be told "this isn't so complicated", not "it's up to you". If it's only asking whether you can loop over a generator instead of trying to read all the data up front, the question could surely be more focused?
I still answered the question in my head on a whim, half-expecting it to be false, it's a really vague formulation. Sounds like the interviewer was randomly browsing language features and cutting and pasting random descriptions from whatever tutorial. Or maybe the company was using python generators in a really specific "data pulling" niche that the answer seemed extremely obvious to the technical team writing the questions and they forgot that outsiders are not wired to think of the same patterns.
Wrong answer.
The heap data structure would be a right way to go about representing such data.
>>If you don't know this, then both people are going to wish that they had that half hour of their life back.
Same in your case now.
that describes 2/3rds of the 'codility' tests I've been given in a few scenarios (toptal used it to weed me out). The couple of jobs I've been in where I was explicitly barred from ever asking any clarifying questions, or talking to business/SME folks about the problem at hand... I left those pretty quickly. I guess it serves to weed out people who have some hard-wired dependency on talking to people to clarify requirements.
I've found that the ability to receive and act on guidance with a certain degree of humility is a much better signal of someone's potential than how many algorithms they've memorised.
It takes a lot of practice to know what level of assistance to provide at what time. A coworker once showed me a technique of keeping a google doc with the problems, as well as a step-by-step of the solution and the times at which they should be at that step. It always seemed to work out well for the candidates, as even a poor candidate would finish the problem at like 55 minutes into a 60 min interview.
Even with that, getting a person to see what they should be doing next, without telling them explicitly, is definitely a skill you develop with practice. I think you're right in erring on the side of too much assistance. You get to see much more of how the candidate works if you can skip over the part where they are getting stuck on something.
Actually being able to take a hint and work with the interviewer is a strong signal that a candidate, while maybe not the best for the job, has growth potential.
(I am hesitant to describe my idea, but WTH, I'm currently not in a position to act on it, and they say ideas are dime a dozen so...):
For those of you for whom English is not your first language, you surely know what TOEFL is: Test of English as a Foreign Language. The private company provides a test where they evaluate a person for proficiency on different sets of English skills: Reading, Writing, Speaking, general comprehension. At the end of the test they give you a score for each of those and then a general score.
Now, the nice thing about the TOEFL score is its reputation: When you are going to study into a University (from Oxford to Liverpool, from Harvard to Queensland), if you are not a native English speaker, the university asks you to take a TOEFL (or equivalent) and get a score higher than X. As long as you provide that score, the university won't ask any questions. They don't doubt your English proficiency skills.
I want to do something like that but for development: Sure, University thought you CS101, CS201, etc. But what companies are looking for are specific skills (similar to say, https://sijinjoseph.netlify.app/programmer-competency-matrix... or https://docs.google.com/spreadsheets/d/131XZCEb8LoXqy79WWrhC... ). These very concrete skills that can be concretely measured.
I want this becase I've been dealing with recruiting, interviewing and also being interviewed for most of my career. And in my experience setting up a "recruiting wheel" in a company or startup is very painful. Most developers don't know how to perform interviews. Or don't care (who has time for that?). As an Engineer manager, having to comb through 400 resumes a week is time consuming and unproductive.
So I imagine a scenario where, there is this proverbial "Full Stack Developer" certification authority which is independent, very reputable and unbiased: They won't tell me if X or Y developer will make it into my team. They will tell me how does the person score in "Algorithms/Data Structures" or "Micro Services development" or "Frontend development" and then I will choose whether I want to hire them or not (according to my current requirements). That way, I only have to do a culture-fit interview and that's it.
In the past I have dealt with "Sourcing Agencies" that try to do something like that: They do the 1st technical interview, and they say that there will be alignment to what I want. But that was not the case: They send me 2 candidates and get very surprised when I reject one and not the other. And I feel our objectives are not aligned, so everybody is frustrated. Moreover, I don't want to have to deal with hiring agencies. And paying 1 to 3 salary months is too fucking expensive.
Now, as a candidate/developer: I would love to have a "TOEFL" like certificate that I can show, with my proficiency. That way, I can "look for a job" passively. I don't have to be making countless of code interviews showing one time after another what I know. I only do it ONCE for an authoritative company, and everybody else can check my qualifications there.
Companies like Microsoft or TripleByte have tried to do something like that, but the problem is again that they do other things: Their interests clash. Why would I trust LinkedIn? That's why TOEFL monetization make sense: The candidate has to pay for it.
I am aware there are some certifications: Oracle whatever, Microsoft whatever, AWS whatever. But those are either too specific/niche (WebLogic Server 12c administration exam) or they are only a "badge" (AWS Cloud Engineer) that doesn't tell you that much.
There is opportunity here for disruption. And I know that the problems that I've faced are faced by countless of other CTOs/Technology Heads.
That is a big ask. There have been many attempts at CS-adjacent certifications, some of them government sponsored, but none of them find widespread use. The ones I've personally encountered were grossly out of date (e.g. a C++ assessment that didn't mention templates at all, in 2012), and weren't even mentioned during interviews by the company that demanded them.
It's not just a matter of trust, either. Our industry is incredibly conceptually diverse, despite the common current of abstract patterns that underlies everything. There is no specific or generic skill test that won't be out of date in a year, and forcing the required degree of standardization on our industry to make that possible would effectively destroy it.
In the mean time, the only organizations incentivized to keep their assessments up to date are the vendors themselves, who as you note, have conflicting interests. And at root, if you want to be even slightly more generic than a vendor certification, you are basically trying to test for intelligence and adaptability.
They should. My university had a minimum TOEFL score requirement. The number of grad students who passed that requirement, but then couldn't write a coherent English sentence to save their lives was still incredibly high.
Already exists. https://news.ycombinator.com/item?id=27662804 Don't you have apprenticeships in your country?
First, there are wrong incentives at play, good guys currently don't need that as they mostly are employed and look for jobs passively. Good guys don't care about certificates and you want to certify good guys so your certificates mean something and can build trust. Weak guys will be spending money to cheat their way around just to get passing grade, which will cost money to prevent.
Then you have hiring managers that will not use this exam as good enough just to hire a person unless there is big company that would do the same. So you have chicken and egg problem, because no one will trust your certification and to get the trust someone would have to use it.
My idea is that you cannot effectively hire at scale. I could hand pick maybe 5 devs/year for my company, getting to real numbers in my small company I can see that we can hire maybe 2 developers per year. When We hire someone it worked for me with simple questions and attitude check. I don't see a way to hire 100 good developers in 1 year, that is not possible. Maybe at a scale you can hire 10-20 good developers a year but you have to have 3-5 people involved full time - and ideally those 3-5 people should be nice and technical - where in the end you don't want to use them only for hiring because those are probably your best developers with soft skills.
For that competency matrix - that is something you can do when you have developers inside of the company and you can observe them for at least 6 months. Good luck getting that in practical testing setup for 2 or less hours. I also find those kind of matrices terrible and not useful for evaluating people or projects. I work on a project where we were not fitting in anything of what was in the matrix .. yet we were delivering good quality for business all the time, while teams that were stuck on their "competency matrix" trying to improve meaningless points ended up disbanded and not working anymore in the organization.
One interesting thing about TOEFL is that it is, arguably, correct and complete. I.e when using the English language you use 100% of the skills the test measures, and the test measures all skills necessary to thrive in English. That's why you only need do it only once (every X years).
Engineering skills as defined by those matrices are so much more open ended that you'd need specific matrices tailored for different positions. E.g. a front end developer doesn't need to know what a linked list is. Then you end up moving away from the idea of ONE authoritative test.
Also worth noting that wherever I've seen it used, TOEFL is usually a mere checkbox to tick, and there are other, more thorough measures of skill involved.
> We as an industry really REALLY need to figure out a better way of conducting interviews.
maybe i'm naive but, how about just ask the candidate to make a mini version of what they would actually do irl?if your an app dev: make me an app that does x, you have 60 min
if your a rails dev: make me a site that does y, you have 2hrs
if your a pdm: make me a spec and tickets for a system that does z
maybe i'm missing something but it shouldn't be too hard should it?
For example; "Make me a site that does x, you have 2 hours" Do I need to build the app in front of you? Problematic because how often does one build an entire web site in a couple of hours, while someone is standing over their shoulders scrutinizing every keystroke?
Do I take it home and do it? If so, how do I prove to you that I did the work?
Do you care what framework I use? Do you care if I use Open Source code?
What design should I use? Where do I get the site assets from?
If I'm building this site for you, are you paying me for that time?
Then there's the non-technical parts missing from an interview like that:
How does such an exercise tell you that I'm the kind of person you want to work with?
How does such an interview provide me an opportunity to ask you question? It tells me nothing about you or your company which is every bit as important as you finding out about me.
https://alexgolec.dev/reddit-interview-problems-the-game-of-...
I'm interviewing you too, so give me something that reflects the problems you solve as a team, otherwise my assumption is your office is full of white boards containing puzzles of the day and your tech is all 3rd party libs.
It may also be that anything work-related is actually too long to fit into a limited interview time.
Now, a trivial, brain-teaser, question would be "you have an NxM matrix, and you can either go left or up. How many paths are there from the lower left, to the upper-right corner?"
I consider it a brain-teaser because if you write code that contains any matrix manipulation or searching, you have basically failed. There is a closed-form expression for the number, so...
[1] By "non-trivial", I basically mean that there are multiple correct solutions.
The way I would apply that problem interviewing someone is: We have 1 hour. Here is this problem (to which of course I know the solution to already).
How would you solve it? Let's solve it together so that I can see your decisions, your code, do you use exceptions? do you use specific type of exception for different errors? do you split functionality in a lot of functions? do you know nifty language tricks (maybe a bit of code golfing or functional constructs if JavaScript or Ruby).
The problem comes when the "interview problem" is passed from the creator to the "mid-level" Engineer who now has to do the interview. For them it becomes: "Ok, you gotta implement this in one hour", and they don't know the nuances or reasons for the problem.
I've seen this first hand with an equivalent problem. I had all this nice interview process that I applied, and the first time I shadowed one developer so that he could do the interview, he was just looking at the poor interviewee fail due to nerves, with the aim to evaluate him only on the merits of how far a set of working code did he had.
It was quite weird.
As an interviewer your two objectives are:
1. Ensure the candidate has an excellent experience
2. Collect data points
In that order. Sometimes we run into candidates who make the second item difficult. They fail to complete the specific technical problem. They can't speak about their experiences in detail. We need to drag data out of them screaming. It doesn't matter, your priority is to ensure they feel respected, and leave thinking they WANT to work there.
Do you want a pat on the back or something?
I thought I nailed their code challenge and expected to continue through the process, but after that session that was pretty much the last I heard from them. It was pretty disappointing.
It's too bad your experience was so negative. That's going to be a datapoint in my mental dataset of companies to consider when the time comes.
And from a completely non-technical persons perspective Reddit is incredibly disorganized at the executive management and corporate level. The amount of turnover, controversy, business model revamps, etc. for a 16 year old company with the hype they have is unique and unprecedented. It's not surprising whatsoever that their hiring practices are similarly disjointed.
I come in. The front-end guy starts asking me questions to try and solve something he is working on. No-one else is there yet. He is asking me about why a JS compiler is removing his comments, I say I don't know, I have never had that issue before...I make an off-hand comment that I use React and most of my JS code doesn't have comments because I am just working on projects by myself, and I don't do a lot of library code...the manager comes in at this point, and proceeds to berate me about why commenting is essential. I say: I use comments where they are needed. Off he goes, again.
Interview starts. Manager proceeds to go through a series of questions designed to expose my ignorance. None of which are related to the job. One classic was him explaining to me that database normalization made no difference to the size of the database because "the data is all the same on the disk" (which is, ofc, not accurate...I tried to explain, he just kept repeating that over and over...he actually said as I was leaving "make sure you understand databases for your next interview" with a massive shit-eating grin). For some reason, there was also a back-end guy there who, upon hearing that I built something in Java, proceeded to launch into a series of questions on internals of Java (for example, he asked me what the difference was between certain versions of Java and the size of the heap...perhaps unsurprisingly, he also got some of this stuff wrong but began laughing when I said I thought X was Y).
The only two questions that I had about front-end dev were: the front-end guy trying to ask me to help solve an issue he was having (before the interview, when no-one was there), and a question about the value of this in arrow functions (which I got wrong, but is also an excruciating thing to try and explain, so I don't think the guy knew whether I got it wrong...it is a terrible question). That was it.
Huh ? language parsers remove comments because they're comments, that's literally by definition. Are you (or your past interviewer) using "comments" in a different sense ?
(Also, not trying to be a pedant on you I swear, but technically JS is traditionally interpreted. Most mature runtimes have compilers but it's not part of the API. It's just a juvenile pet peeve of mine when language implementations are generically referred to as compilers.)
>he actually said as I was leaving "make sure you understand databases for your next interview" with a massive shit-eating grin
I sincerely hope from my heart of hearts that company or department is in it's well deserved position in the depths of the toilet now, or at any rate that specific person.
Actually can't find him at the company anymore. But the company isn't doing too well (although they seem to have moved into a nicer office). Revenue down 50% last year (from a small number to an even smaller number), costs up 60%, losing substantially more money than they have revenue, the operations guy who did my interview isn't there anymore either...true "tech company things". I didn't the impression that the company was that bad, they were more "much steam, no fire".
I'm really sorry to hear this, that sounds incredibly stressful. The worst part about stress in technical interviews is that even under good interviewing conditions (which you clearly didn't have) it can really hobble a candidate to be stressed.
I hope this experience (or this HN post) doesn't scare you away from programming or interviewing at software companies in general. Those guys sound like jerks. There are good companies and decent coding interview routines out there.
I've ran into "OMG he didn't know that!" responses when one dev disapproves of a candidate. Inevitably I ask "Really how often do you need to know that? and if you needed to wouldn't you just google it and be done?" but we assume it means so much more and there you go.
Then someone else gets hired and they knew the trivia, but can't apply it or worse only really knew the answer and not the ramifications... or they just can't wrap their mind around / don't care to think of second order effects or whatever.
Credentialing organizations already exist[1], but none have lobbied the US government to prevent the uncredentialed from practicing.
Perhaps it's time. If none of the existing orgs are good enough, start a new one.
1. https://www.computer.org/product/education/professional-soft...
Many devs are not good at their jobs. They mean well, but they can't solve basic problems without looking at stack overflow. And by "basic", I don't mean leetcode, I mean iterating over a collection.
> Anyone can trivially study and pass
Yes! At that point, I would know that the guy sitting next to me did at least some amount of studying of the fundamentals.
I doubt hospitals interviewing senior doctors need to ask them basic anatomy questions, or law firms needing to ask candidates the difference between tort and criminal law. Tech could benefit from this minimal minimal bar.
One wonders what the history of how the credentials in medicine or law were forged.
Sure, but what credential exists that both is reliable enough to support that use and would remain reliable enough once it became used that way, even in a specific narrow subfield of development?
https://www.nspe.org/resources/pe-magazine/may-2018/ncees-en...
I looked at it briefly but realized that I would need to study a significant amount of engineering aspects (how much water can flow through this pipe type engineering) to be able to pass the first exam.
For people who are developers, while the ethics, principals, rigor and similar type aspects of the PE exam process are useful, that it is still focused on being a PE first and a PE with an Software specialization second means that most people who are software developers would not be able to pass it or find use in the additional engineering principals that it provides (you wouldn't want me to sign off of a building design... well, maybe if I studied enough to pass the FE exam first...)
So, first I'd have to take the FE Electrical and computer exam... https://ncees.org/wp-content/uploads/FE-Electrical-and-Compu... or go with the other disciplines exam - https://ncees.org/wp-content/uploads/FE-Other-Disciplines-CB...
Either way, there's a lot of material there that I don't know and I don't imagine most CS new grads would have a clue on.
And that's just the FE exam. After four years of under a PE, then the PE exam - https://ncees.org/wp-content/uploads/2015/07/SWE-Apr-2013.pd...
It's just not worth it.
They even do this crap to people with CS degrees. If a 4 year CS degree isn't enough, then people who do this have no idea what they are doing.
I started in this field in 1997. The interviews were more old fashioned, a few tech questions, see if you were an oddball, then they'd get back to you. If you didn't work out, they would just fire you. Pretty simple.
If it's not enough for an employer, it's because that employer devalues what's taught in most CS programs. Granted, there's a significant mismatch between CS degree work and real world work, but that's true in lots of engineering. Ask any engineer in whatever subfield how much time they spend solving differential equations. I mean, great that I learned how to balance a binary tree and write a heapsort in my DS&A class, but have I ever needed to do that at work? Other than to pass some stupid coding interview?
Not all CS degrees are created equal I'm afraid.
I’ve interviewed many people with 4 year CS degrees who can’t really code. I’m not sure how this happens, but it definitely does. I disagree that having a CS degree should excuse candidates from coding interviews.
Becoming a specialized divorce lawyer still requires you to pass certification on things like criminal law and constitutional law (among many other things), you won't be permitted to practice law if you know just your specialty, no matter how well you know it.
Becoming a heart surgeon still requires you to pass certification on pharmacology and gynecology (among many other things), you won't be permitted to practice medicine if you just know your specialty, no matter how well you know it.
But for software workers we do accept that you can ignore many related (and even relevant) fields and just learn only one niche of technology - we could make an all-encompassing bar, but it would be a major change and I'm not sure if we would want that.
My focus is security, and so the second time around I got Travis Ormandy as an interviewer. I was able to impress him well enough with my IPSec foo to make it onsite. Then I got asked a question I had already been asked in another interview with another company, and I was able to knock that out of the ballpark (I mentioned I already knew that question, but the interviewer wanted me to answer it anyway). Then I got asked a question that used recursion, and because I took a graduate course on induction and recursion within the past year, that was effortless for me. Then I got asked a question that involved a kernel feature, and because I happened to recall the Linux kernel list macros and semantics (something I couldn’t repeat now over 10 years later), I really impressed that interviewer.
I ended up having a really successful part of my career at Google, even though I ended up not really writing much code when all was said and done. However what code I did write was highly impactful.
Looking back, things could have gone very differently if I had gotten a different set of interviewers and/or questions. The questions I got just happened to coincide with what was “paged in” to my “working memory,” so to speak.
I've never even heard of a Bloom filter, so I know how I would have done.
I had an technical interview with a company early last week, we did a shared session using VS Code. The interviewer wrote the function signature, and I filled out the implementation. I did great, according to the interviewer, and moved to the next set of interviews.
The next interviewer, which turned out was also technical, ended up opening up a shared Google Docs to write code it. I asked if I could just share my screen in my own editor, but they couldn’t give me permissions to do that. I was given an extremely vague question. When I asked questions, he told me to stop because he was holding out for next iterations of my implementation (again, in a Google Docs). Given no structure and an absurd environment, I completely bombed it. And to top it off, instead of getting an email saying they were not interested in me, they just ghosted me all together. A complete waste of time. I wish them luck in their endeavor to find the best engineer to write code in Google Docs, since that is apparently what they are interviewing for.
it was like sitting in a confusing nightmare for an hour
either way I ended up getting a cooler job somewhere else so maybe it was a good thing in the end
Frankly the most annoying interviewer I ever encountered. Served as a low water mark and inspiration for me to be as helpful, thoughtful, and kind as I could be in the next 100 phone screens/interviews I conducted for my employees.
FWIW, I've been to many a Google campus and know many employees there, so I think this was an outlier.
I really dislike when companies do this. It's very time consuming and psychologically/emotionally draining.
I mean, we have things like the SWEBOK (https://www.computer.org/education/bodies-of-knowledge/softw...) that could be used to build a set of interview questions and acceptable responses, but does anyone use it for that?
The best interviews I've had, either as the interviewer or the candidate, have been when there was a discussion and a free flow of information in both directions. Unfortunately, it seems that in a lot of places, this degrades quickly into a hazing ritual.
I haven't participated in technical interviews in a long time, but when I was asked to do it, I made it a point to throw as many lifelines as I could until I got a satisfying answer. For instance, if want to know if the person understands generics and they can't answer the question outright then I'll ask them about C++ templates. Similarly, if someone can't describe the term "idempotence" I'll ask them "can you tell me what makes a function pure".
Mind you those terms aren't interchangeable but if you catch one it should be trivial to understand the latter.
He asked five or six questions related to C and C++ undefined behaviour, a very open-ended one about a technology I'd never used. I answered as best I can, but always opened with "I'd be referring back to the C standard and opening a JIRA task to fix the code". We got on to how I'd fix the code -- remove the UB, but only if there's a unit test covering it. What if there are no unit tests? What if there's no JIRA? Lots of what-if-maybes.
A few days later I was on a 3-way call with the recruiter and one of the guys that interviewed me. They spent the whole thing telling me how "any decent developer" should have known what the UB would result in, shouldn't have to refer to standards or books... and on and on. But as a courtesy, they'd be happy to make an offer.
Half the minimum posted salary, no benefits. It was right in the middle of the minimum wage and the "living wage" lines.
I declined politely, and the recruiter hung on the call...
"Wow. I don't know what to say. That's never happened before... do you mind if I share the recording of that call with my manager?"
They were still advertising to fill several positions when I last stumbled across them on Glassdoor a few months ago...
Someday soon we may accept that what gets classified as software engineering is actually an amalgamation of skills from an entirely different set of titles/careers, most of which treat software creation and management as a tool and means to an end.
I don't generally consider a blacksmith and a welder to be the same occupations. You can lump them under metalworker, but would you really expect the interview process for these roles to be at all similar?
In other words, there flipside of what you said is that sometimes you'll excel and be offered the job on very attractive terms.
Or, why did the screen just scroll down and lose my place in the paragraph? Oh, they loaded an ad in the middle of the document and the page re-rendered itself causing jerks and fits on the screen. Nice job FAANG site!
Or try performing a sort of items by price or whatever other criteria … doesn’t work because the website wants the user to see the “suggested” items no matter what search criteria was desired y the user.
And …
Sometimes, people who you think are not capable to do the job, often outperform expectations too. It is all about taking a risk on a person and giving them respect and a chance. We could have done leetcode, or pair programming session. It takes more energy and effort to do it from both sides and probability of finding a good candidate is more or less the same.
With a traditional interview and job offer process, a new employee can ramp up without worrying their job is on the line. And I think this is important, because it can take awhile to ramp up to full productivity, which can be stressful if the new employee feels like they're being evaluated already.
Where I've worked, my new manager told me "Hey, welcome to the company. Please feel relaxed and take your time ramping up, you've already passed the interview and we're happy to have you here."
With your process, how do you deal with people getting stressed out during ramp up or feeling imposter syndrome?
1) Wow, very interesting company. I didn't know so many things can be done in different ways than I'm used to. Very smart ideas out there.
2) OMG, this company is full with idiots. Everything is done the wrong way but somehow it has not collapsed yet.
3) Yeah okay, some stuff is the way it is because it would't be feasible any other way due to the quirks of the business. Other things are the way it is because of historical reasons and it doesn't make sense to re-do it at the moment.
4) You know what, I think I understand what this company is all about. It's not perfect but people are actually doing great things here.
5) OMG, this business is crime against humanity. It shouldn't exist, I don't know how I'm supposed to do this anymore. Money can't buy me.
6) Well, the world is not perfect and I understand the imperfections and I can function. It's not like they are doing it any better anywhere else. I grew to appreciate upper management, now I understand our business and I'm happy to do my part.
3 months should be enough for a nice honeymoon stage. Both sides can know that longterm relationship is achievable if they have a nice honeymoon stage.
I definitely agree with the taking risks part. Hiring should not be about the most talent or experience, but the best mix of qualities (including their own personal goals) to fit what you're hiring for.
Could you expand on how do you evaluate the cultural fit?
A bad hire can set everything back significantly more. Not only do you have to deal with new missed deadlines or poor quality work, but you often have to deal with the fallout with team members. Plus you're using up a lot of management/leadership hours dealing with it.
The impact is even more important the more senior the role. Hiring a bad manager or lead can impact way more than hiring a bad fresh-out-of-school grad.
The final straw was during a meeting when it was brought up that they were using take home projects to evaluate candidates. We're drowning in work and you're delaying us adding resources AND wasting bandwidth on take home projects? Not to mention wasting that candidates time and contributing to the "all hours" mentality that made the job miserable for me to work in.
Contract work is a great way to find good talent, but it's a different candidate pool. Lots of good candidates can't or won't give up their full time jobs to take a time-limited contract job.
Those who can take contract work are often more talented and more in demand, meaning they're less worried about finding another job if the contract isn't renewed. Contract work (without benefits) is not an option for a large number of developers.
Changing jobs can be a hassle. It means learning new names, potentially changing private healthcare provider, getting new equipment and setup, learning new company politics.
Is it the case you can earn (quite a bit) more as a contractor, compared to full-time employment in NL? At least when I was doing contracting in the UK contracting roles could earn me almost twice as much as permanent roles (without the benefits of course).
The rule I have always followed - though I don't remember where I picked it up - is that contracting should earn you twice as much as your full time salary - that way the risk etc. evens out.
Sadly this is not the case any more; with the new IR35 rules it's common to get a contract that is taxed as salary, except it does not include any benefits. Contracts outside IR35 exist, but they are very rare and pay even less.
I guess this just sounds weird to me. I would have to be pretty desperate to take a 1 year contract from a company that only paid me full-time wage as opposed to a contractors wage.
I have to assume the Netherlands has a lot of developers seeking employment for this to work.
You don't really get any less security than in a country like the U.K, where you can't claim unfair dismissal under two years of service.
As GP says, it's because taking an employee on an indefinite contract is a huge responsibility, and you basically can't fire them unless they set your office on fire.
In France, there's a huge temp ecosystem that was built because of that. Companies don't hire developers, they subcontract to temp agencies for limited time. The advantage for them is if they need to downsize their team, they can simply terminate the contract without risking liability.
The temp agency obviously takes a big cut on the developer's salary, until (at least in my individual experience) the developer decides to fuck off and do contracting directly instead and starts thinking, you know what, the French job market for developers sucks, I should probably send resumes to american companies instead.
You can be fired for basically any reasonable reason though.
I again have a hard time believing you need to set fire to the office before they fire you, don't French companies ever downsize?
Probably should be...? You're typically getting paid more because of "no benefits". (I HATE the word 'benefits', FWIW).
Buy your own health insurance - it's more accessible in the US via ACA. Yeah, you might miss out on some 401k matching. Save it yourself?
It is a full-time position with all the benefits therein, except at the end of a year the employer can choose not to renew it. It is not equivalent to US 1099/freelance work.
It might happen, but every long-term contract gig via a contracting house has offered approximately equivalent benefits to some regular W2 employer. Those sorts of engagements typically have you as W2, just with the contracting house, not the end company. I've worked a handful (6mo, 12mo), and known people who stay in those situations for years - they accrue PTO and get 401k matching, just all through the contract agency. I suppose there are some agencies that don't offer that, but you'd likely get a higher rate.
But... this is all from a US perspective. I've done all 3 - direct W2 employee, independent consultant/contractor, and 'contracted to large company to resell my time to someone else'. In the last case, W2 or 'corp to corp' was an option as well (though not always).
Also had that "can choose not to renew it" - worked out 6 month contract, didn't renew.
I guess I'm not sure what the reply was for...? I quoted "contract work (without benefits) is not an option" and you're telling me "Contract...is a full-time position with all the benefits therein".
I think there's some talking past each other going on here...
There's the consultants who make the big bucks. They come in to solve a particularly thorny problem that an org has and then the contract is done and they move on.
There's also the staff argumentation contracts. We need six devs, but because of how accounting works, we can only hire two FTEs. However, contractors are part of an operations budget rather than a engineering budget... and so we can hire four devs as staff argumentation instead.
Another example of staff argumentation would be some place where there's a flex in the amount of work to be done. Long ago, I worked tech support. About 25% of the staff was FTE while the remaining 75% weren't. It was claimed that it was so that it would be easier to flex down (or up) when demand for the tech support slacked off or if it shot up (it did a few times go up with new OS releases).
The staff argumentation dev role is not as prestigious as a consultant.
augmentation?
I think everyone, employers and employees get too caught up in requirements and forget that humans are very general purpose. And in particular, highly capable and intelligent humans can rapidly acquire skills.
In particular, if you are hiring someone for a potentially lengthy career, capacity for change seems incredibly more important than immediate skill.
Given the chance, motivated people can improve at great rates.
The other thing that could matter is deep knowledge. I think I heard it from Steve Jobs, in one speech he was talking about hiring people with deep knowledge in a topic and not only because you can leverage that but because the person will know what it takes to acquire deep knowledge.
> "Google originally set its hiring algorithms to sort for computer science students with top grades from elite science universities. In 2013, Google decided to test its hiring hypothesis by crunching every bit and byte of hiring, firing, and promotion data accumulated since the company’s incorporation in 1998. Project Oxygen shocked everyone by concluding that, among the eight most important qualities of Google’s top employees, STEM expertise comes in dead last. The seven top characteristics of success at Google are all soft skills ..."
> "Project Aristotle analyzes data on inventive and productive teams. Google takes pride in its A-teams, assembled with top scientists, each with the most specialized knowledge and able to throw down one cutting-edge idea after another. Its data analysis revealed, however, that the company’s most important and productive new ideas come from B-teams comprised of employees who don’t always have to be the smartest people in the room. Project Aristotle shows that the best teams at Google exhibit a range of soft skills ..."
Source: The surprising thing Google learned about its employees — and what it means for today’s students - https://www.washingtonpost.com/news/answer-sheet/wp/2017/12/...
Politics never goes away unless you're the only employee, but the ratio of politics to technical ability that defines success changes drastically the smaller the company.
It's worked out well so far, especially for those tasked with doing the hiring.
We didn't get into deep technical questions. Rather, we asked questions meant to figure out if the person excited about the work or not. I can bring somebody up to speed on our language, but I can't train my way into curiosity or interest.
For example, we asked what source control software they'd use if they were starting a project. Ultimately I don't care what they're into, so much as that they have used something and see enough value to have an opinion to offer - even if they've only ever used one tool.
They do it because they can't do honest work that will pay comparably to their scheme.
The only way to deal with them is to not let them in.
This manifests inflated job vacancies because so many firms have an evergreen job posting for "Senior Full Stack". Because talent is scarce these roles rarely get filled (hiring managers expect million-dollar candidates to accept $100-200k compensation).
Also, because lots of software requires specific expertise, there are vacancies that can't be filled because of a knowledge gap (novel industries / projects, etc). For example, how could SpaceX possibly fill all their engineering roles? Surely money is not a limiting factor, but rather the limited supply of qualified expert rocket engineers?
I've seen all of those things happen at a single company before (and relatively quickly, over two years), and several of those things happen at several companies.
Oh and it's not that easy to even find a "trainable" junior. Even if you have a fairly strict hiring process, at least 1/3rds of the people coming out of the edication system will be draft busts if using sports terms
And because it doesn't take a full two years before that junior is a valuable contributing member of the team; because they'll likely refer other qualified and/or educable applicants; because they might not jump ship, but be happy to get promoted if you actually reward them comparatively to what another company would pay them.
But sure, if you're not willing to invest either time or money in your employees, then no, you shouldn't hire juniors.
A junior dev hire involves sifting through many resumes, and then interviews, onboarding, and then three to six months of lower productivity for the mentor.
All of that represents losses against the current status quo. The current status quo is predictable.
This completely discounts the "accept and renege" that also is common with juniors looking for a job which can reset the job search back to square one even when you do find a good candidate.
Taking six months or a year to hire a senior has fewer resumes to sort and fewer interviews to conduct. When the person is hired, they've got a much shorter onboarding and has the necessary skills to be able to become familiar with the codebase without causing a hit to the productivity of the rest of the team (or other seniors).
In this situation, hiring a senior is likely a much better outcome with fewer seen and unforeseen negatives and an eventual positive.
yes - assuming the senior also doesn't leave.
Additionally, even if it is the case that they leave in a year or two, the org has likely spent less time on going through resumes (fewer resumes applying) and overall interviewing (individual interview may be longer, but again - fewer overall being done) and less time on onboarding.
You're likely able to have productive contributions from a senior in 3 months rather than 6-12 months for a junior.
So even if the senior does leave in a year or two - the org is still better off trying to hire a senior than a junior.
---
It really boils down to "if you can't compete with big tech salaries, there likely isn't a way to hire a junior dev that will be a net positive to the organization.
Junior salaries are low because they're a huge gamble. If after two years you know they're a decent engineer that has learned a lot, then you need to pay them like it.
It's something I see a lot of. Your "junior" that has been there for 2 years should be getting the salary you'd be paying a new hire that has 2 years experience. If they've been there for 3 years, and you've only been giving them 3-7% raises every year, you deserve to lose that engineer for someone that will pay them 50+% more.
Thats because most roles aren't the core of the business. Most are supporting the core. You don't need to be a flight engineer to build the system that tracks parts during manufacturing. You don't need to know how swaps work to build an order management system for traders. You don't need to know how to do surgery to build a scheduling system for the surgeons.
I currently work for an agtech company, the domain-specific stuff is just context for the generic numbers and equations, or a reason to choose one over the other, to the extent that I need it it suffices to have a colleague who's a domain (but not software) expert.
You might say that's the other extreme, aerospace is different, but I don't really see that it is. I don't think anybody's claiming SpaceX doesn't have or need aerospace engineers, but once they've, idk, specified a formula for a parabola representing a flight path say (yes, I don't know what I'm talking about!) then the domain doesn't (needn't) matter to the software engineer implementing it.
Basically nobody in any of those places had any domain knowledge outside that which was learnt during the act of developing and, in some rare cases, some "familiarization" courses during a day or so.
Is this a euphemism for an employer overworking and underpaying their talent?
i.e., did it seem like a lot "for an intern"? Did it seem like a lot when you take into account what was expected of them? I mean, if interns get hired to jobs that seniors (for the sake of argument) should be doing, and the interns are getting sub-senior pay, then they are underpaid.
Their intern pay was also in line with this. I got paid a little bit less as an intern at NASA, but much more as an intern at a non-aerospace (also non-FAANG) tech company.
how are senior engineers supposed to be created if very few companies are willing to train junior engineers? Why aren't these companies offering paid apprenticeships if they are so desperate for workers?
As a plumber, you pay your apprentice usually 60% sr/journyman salary with a 5% increase every 6 months to match the value of the skill up.
There are also industry standard, industry funded classroom settings, that teach things like building codes and industry standards and some adjacent trade craft.
Instead you just throw a Jr to an overworked mid/Sr and they can help with some design and questions and code review but that takes 10-20 hours per week so you have to pretty much have one or more per Jr. Position. Then, after 18 months when the Jr hasn't received a 15% pay raise to reflect the enormous amount of time an knowledge you've sucked out of a Sr position, they go elsewhere for a 20% raise and it looks like you've waisted your time.
In truth, it wastes the talent you've built to not be aggressively increasing their comp to match the skill increase you're providing.
Having a base of expected/certified knowledge would take a lot of that away.
I'm not really sure how you test for a base level of that, besides proven demonstration on your resume and doing semi-correlated coding quizzes.
This is why we don't have a base of expected knowledge in the field and why we do strange coding tests to try to guess if someone is competent.
The issue is that we don't quantify what hiring someone actually costs. We're willing to spend $20k on finding a candidate for 160k yet the people in the same position are sitting at 120k and getting a 3-4% raise.
The new person needs time so expect at least a month of training, yet no one quantifies that as well.
I'm fine with an annual cost of living adjustment once I get to a SR level because I'm not increasing skill at a rapid pace, I'm exercising my skill in the expected way. For a Jr path, that doesn't make sense. getting a cost of living adjustment and being twice as good as you were last year means you're a flight risk and that will cost the company more than just paying people what they are worth.
But industry standard groups, unions, people who have a vested interest in having a supply of quality labor so they can do business. Some of the classes are sponsored (especially in smaller places where there's not enough support) and in return, they get to train you on a specific product or just hang a banner and give you a 10% tools coupon.
Wait, not even that.
Even if you are senior you can get that job (because, for example, you are from another country and suddenly you are "cheap" even if senior).
That's a red flag. Because we all know the top of the market, no matter where, is working at SV rates.
The reason they jump ship is because the firm refuses to re-evaluate them for what they are worth, and keeps them on work meant to free up the company's existing senior staff (i.e., dead-end grunt-work that results in burnout). If you, as a junior developer, want to be re-valued, you need to jump ship.
This creates a feedback loop. Companies view juniors as a cheaper developer you _might_ get 2 years of low-cost work out of (after training) before they'll leave, creating a self fulfilling prophecy.
I've watched (and experienced) this loop multiple times. It's utterly baffling how firms would rather go through the cost and drain of finding and replacing talent rather than re-evaluate and pay their existing, proven talent what they are worth on the open market.
Workers would rather not move around. Workers would rather have a stable position in a job they like, in a community where they can purchase a home and build lives and/or families. Once you get past 35, playing the required musical-chairs needed to advance your career is a real drag. It does not need to be this way.
I really disagree. These junior engineers you're talking about are mostly in their early 20's (even if they're older and switching from a different career track, they're by definition new to the industry and still have a lot to learn). In my experience, they definitely do want to move around. And even if there is a great track for internal promotions and the compensation is going to be the same whether they stay or leave, it honestly is usually in their best interest to move around every couple of years anyway early in their career. They'll meet more new people to grow their professional network faster, work on new problems, see different ways of how teams operate and what works better/worse, and gain more experience faster.
I do think that for the very top performers, most companies should probably be much more aggressive than they are. If someone is really crushing it, like in say the top 1-5% of performers, be ridiculously proactive and promote them from junior engineer to Staff Engineer within 18 months or something. I've seen a couple of people over my career that actually were performing at that level, and no external company is going to give them that big of a boost, so it's a good chance to use your inside information to be more competitive. Otherwise, for the majority of folks that are learning/advancing at a more normal pace, I don't think there's really much a company can do to keep them longer. (Not that you shouldn't even try, it's still a continuum and if you do a really bad job at career growth internally you'll lose even more people faster. But you shouldn't expect to be able to keep most people beyond 2-3 years).
It's interesting that the worse the interview process, the less the Junior will want to go through it, the more the company benefits. You make your process painful so your competitors make their process painful so both of you hold onto your Juniors for more time.
If you can fix the externality problem this goes away, but that's not easy.
I do however, agree with your sentiment, those junior folks that are getting all the work done only get rewarded with more work to do.
Most of them still want to move on, usually to change technologies or gain more responsibility even faster.
Sometimes they want to move cities for almost random reasons, and they're willing to just find a new job and do it.
So while I somewhat agree that devs don't want to move jobs, juniors devs often do, and I think they're a lot more likely to move jobs than senior devs.
It's not that they don't want to hire juniors, it's that you need a solid ratio of mentors to mentees.
I've worked at a LOT of companies, and for the more well known one, the ratio of junior resumes to seniors was easily 1000:1.
We hired entire cohorts of juniors, often interviewing HUNDREDS of them in a couple of weeks, hiring dozens. That still meant that from all the resumes we got, only a few % made it through.
What choice did we have though? We can only train mentors so fast, and hiring them is hard and expensive. You can't ask someone with 5 years of experience to train 30 people at the same time.
People often underestimate just how many people are entering the field right now, vs how many were 10-20 years ago. Add in people who EXIT the field, as well as people who are poor fits to be mentors, and it gets really dicey.
Also why companies will hire someone with 3 years of experience into a senior position.
At some point I actually reminded the manager that I was a junior, which resulted in them acting shocked and saying something to the effect of "well, let's hope that's not the case", and was basically flat out told they have no time for a junior. This was the manager who interviewed me, read my resume, and recommended me for the position.
I was replaced by a university undergrad student on summer break when I quit. I don't think people realize how the problem here often isn't you. Organizations with deep dysfunction are more common that you'd like.
Happy ending though. Got a new position the week I quit, and all turned out well.
Juniors write a lot of code. Often significant amounts for a company's products and services. They're the ones who are implementing all the decisions that seniors spend their time making in all their meetings.
Most senior engineers I've seen have most of their days filled with meetings with very little actual coding time.
The seniors are valuable, making decisions, coming up with solutions, building frameworks etc, but it's the juniors who then take that and run with it and build everything on top of it.
So while some will still code, it's far less than what the junior engineers are creating.
Yes they require some more training, and clear direction, but they are the ones actually creating and executing the vision of the company informed by the seniors.
What companies really want, like others have said, are senior engineers who are willing to accept a junior salary.
> Most senior engineers I've seen have most of their days filled with meetings with very little actual coding time.
Is actually a symptom of the shortage of senior engineers. Big companies that can afford to hire as much talent as they want actually will let seniors write code all day (my company does) because they have the economies of scale that lets them afford doing so; no one else can.
At a lot of non-tech companies, the trick is to get hired as a consultant.
Or many firms want to hire senior-level talent at junior-level prices.
If you could review someone's code from their previous jobs, I think it would be quite easy to vet applicants. And it would be much easier to move from job to job.
Instead we have to simulate work samples through whiteboard coding, pair programming sessions, take home coding projects, coding knowledge tests, etc. We know that none of these methods are particularly good, so we err on the side of failing candidates when we are on the fence. They also take a long time to complete, so software engineers are reluctant to change jobs because they know how much of a pain it will be to go through interviews again.
It is much easier for product designers and product managers to pass interviews. You can see their work product.
At my company we're working on a way to create standardized coding projects that can't be faked so you can use them across job applications. If you are interested in this space, shoot me a message: robert at facet dot net.
With software you can write a TODO app with a million lines of code or 7.
Fundamentally though I think that system of high priests and laypeople who are barely allowed to code at all can't be sustained. I strongly suspect all professions will eventually require a little programming, and certification will be hard for those cases.
That, and the field moving so quickly and being so broad. I interview for ML. I assume interviews for front end are extremely different.
This exists in Canada for some areas of software development that falls under the requirements of being a licensed software engineer.
Many people, including CS graduates in Canada, think it’s ridiculous. The requirement for certification is pretty strict in that you need a computer engineering undergrad degree or a degree in software engineering from an accredited program. This is probably how most people would be accredited, but there are some other ways too. All of them, as far as I can gather, require formal educational credentials.
You then need to go through a formal apprenticeship while working under someone who is licensed. It’s probably an 8 year process in total.
Further to that, there is a limitation on what you can practice. There are different disciplines (e.g., mechanical, civil, electrical) and there are fields and scopes of practice within each of those disciplines. What this results in is someone who is licensed in, for example, embedded systems wouldn’t then be able to go and work on websites or back end databases.
The field is further divided into technologists and technicians that require less education than engineers and have much less autonomy and scope of authority.
I'd hire that one over anyone pushing horse de-wormer, anti-malarial drugs, or homeopathic remedies.
As a software engineer for 20+ years, I've talked with my sister, who is an ER doctor about this often. Most folks outside of engineering think our interview processes are crazy.
Keep in mind, there's significantly more training that goes into the medical field, so there's more emphasis on the institutions. Where did you go to school? What hospitals or facilities did you work with? Your resume and references speak more strongly.
Other hurdles in software engineering hiring:
- It's both a technical and (often) a creative field.
- Most work requires teams to complete and there's very little insight into who contributed what into a project.
- You don't have many of the signals from other fields, such as published papers, law cases, or hard numbers such as sales, certifications, etc.
Long story short: we don't have good mechanisms within companies to measure engineering productivity, let alone measure programmers outside of an institution.
I'm reminded of Steve McConnell's intro to "Software Estimation":
"Meanwhile, the typical software organization is not struggling to improve its estimates from +/-10% to +/-5% accuracy. The typical software organization is struggling to avoid estimates that are incorrect by 100% or more."
We have certs in software engineering, but in my experience, they've largely failed as an indicator of qualifications. Some hiring managers see them as nice to have, but I've also met hiring managers who are actively skeptical of certifications.
We also don't have differentiation of software levels or skills. If you're a programmer, you could, in theory, go program anything from web to AI to robotics. You don't have to be certified to work in nearly any industry. And we don't have formal hierarchy of skilled work, such as EMTs, nurses and doctors.
We're a relatively young industry that just hasn't worked things out yet and, to be honest, in the United States, there isn't pressure by employers to get our act together. The engineers themselves are in charge often and we're skeptical of boards and authority. We have too many stories of folks making it big with no formal education. Those with the money aren't demanding change because the current system "works."
It's possible software engineering will someday evolve into a boring respectable profession, but right now it's still a creative field of fads, trends, rock stars and super stars (let alone ninjas and wizards).
To me they are a red flag. Someone couldn't get a good job in a bull market straight out of undergrad and felt the need to get additional training...
> We also don't have differentiation of software levels or skills. If you're a programmer, you could, in theory, go program anything from web to AI to robotics. You don't have to be certified to work in nearly any industry. And we don't have formal hierarchy of skilled work, such as EMTs, nurses and doctors.
It still exists, it's just that it's informal.
Hi I'm Ed Barns I'm here for the interview of ER Physician.
QUICK Put on your scrubs we've got a patient here with a bone dangling out of his arm.
No you don't understand I'm just here to interview.
THIS IS THE INTERVIEW HURRY UP.
It's also a big part of residency (having to treat patients with diminishing supervision from senior doctors). So it's not that far fetched.
They do, but not for the reason you think.
A hospital administrator would be mad to hire some rando from the street who calls himself a doctor, who has no formal schooling in medicine, a dropped two-year degree in chemistry, but who reads a few medical blogs, on nothing more than 'They have four years experience working at a startup and a good reference and they can answer some second-year whiteboard questions about the lymphatic system.' [1]
Other professionals front-load the interviewing effort into a rigorous schooling, testing, and accreditation process, that costs hundreds of thousands of dollars and years of your life. Meanwhile, software engineers grouse about whiteboard interviews.
[1] Despite the highly dramatized performance by Leonardo DiCaprio as Frank Abagnale, that's not generally how doctors get hired.
Meanwhile in Software there are initiatives for "Gender X of Minority Y can Code" and "Everyone can be an Engineer after 3 months of BootCamp".
Instead we have to simulate work samples
through whiteboard coding, pair programming
sessions, take home coding projects, coding
knowledge tests, etc.
Very small sample size but we've had good results skipping coding exams entirely, and simply talking through some scenarios with candidates.- give them a hypothetical problem ("the page is loading slowly") and role play how they'd troubleshoot it - do they understand how different bits of the stack fit together? have they ruled out network issues before digging into the code? etc.
- "tell us about a tricky technical challenge you solved"
- ask them what makes a for good code review on a pull request / what makes good code review culture in general
- ask them about things the team did well at their previous role(s) and things they'd improve, and how they'd improve upon them. (not looking for "correct" answers or opinions - but they should have some opinions)
- what are some technologies/frameworks/languages you'd like to learn next? again there's no "right" answer. but if they don't have any - red flag, right?
- etc
This of course presumes that some minimal screening has been done to make sure they're actually a software developer; an initial Fizzbuzz screen etc.
At each step of the way we discussed relevant technical bits in a natural and conversational way. For example if they mention that they "optimized" or "refactored" or "fixed" something at a previous job then naturally we ask them for the details and usually wind up swapping some stories as well.
If they passed this conversational interview, we usually extended an offer to them within 24 hours or less. Sometimes we waited longer and they got snatched up by another company.
Of course this sort of interview doesn't tell you about their work ethic and how reliable they are and so on. But, neither does a lengthy coding assignment-based process either. And the "conversational" method gives you a sense of how they'll fit in with the team.
Considering how quickly good candidates are snapped up, doing "fast" interviews like this can be a big advantage for your hiring efforts. If worst comes to worst, and they don't work out, you can part ways. It's not like either side is locked into the employment agreement. Depends on your specific locale a bit, of course -- and at my current employer we're helped by being a remote team, so it's not like we're asking folks to relocate or anything.
I don't know. I think I'm pretty good at troubleshooting on the job (since I can be the one to troubleshoot & solve the trickier bugs) but thinking about doing it in an interview setting makes me nervous. It feels too fickle & up to the biases of the interviewer that day, not to mention that any serious production bug relies on knowing how the software stack operates & which things are relevant, all things that are ambiguous in an interview the interviewee would just be stuck grasping in the dark to try to figure out which scenario you might be describing.
The rest seems fine, but I'm curious about your experience with the live debugging & if you've considered cutting it.
If it's not a network issue, it's probably the database, right? Generally you've got an n+1 and/or some individual huge slow queries. I'd interested in knowing how the candidate would zero in on the database possibility and how they might narrow it down from there.
Just today I discovered the biggest issue we've been encountering on our platform, and I'm not even in a developer role here. The developers didn't track it down since I got them involved, but here I am coming in and figuring it out, and it didn't even require access to the source code or how the platform works.
At the end of the day these types of issues come down to creativity and outside the box thinking than it does knowing how the specific software platform works. Looking at bugs and issues in a way that isn't subject to preconceived ideas and existing knowledge.
Sounds like a fun interview for someone like me lol
Especially if you're junior and your current job sucks and you've never (yet) passed an interview for a better job.
This is counter-productive, but the brain doesn't always work how you'd want it to.
1. Do they understand the basic machinery of a web application (assuming the job is about building web applications)?
2. Can they take a vague problem ("the page is loading slow") they might get from an actual non-technical user and drill down to identify what precisely the issue is? Is it DNS? Is it a proxy server/load balancer? Is their latency at the DB layer? How would you tell the difference between all of these?
but thinking about doing it in an interview setting makes
me nervous.
I felt it went pretty well in the interviews and didn't seem to introduce any extra stress.Personally, if I was being interviewed, I'd really prefer this to coding exercises as those really crank up the anxiety for me. (But of course everybody has different preferences!)
not to mention that any serious production
bug relies on knowing how the software stack operates
& which things are relevant,
Oh, I think maybe I didn't communicate this aspect properly in my post.There's no right answer. We're just looking for their thought process and how they might look up and down the stack to zero in on something. Of course they would need to ask questions about the architecture along the way. We do communicate all that up front - it's their questions that we're looking for.
The rest seems fine, but I'm curious about your experience
with the live debugging & if you've considered cutting it.
Well it's only been a handful of developers, but I felt it was helpful.I think that kind of exercise is good for distinguishing "recent code school graduates" who are smart and can write code for one or two parts of the stack, from more experienced devs who have experience understanding how all the pieces of the stack fit together in a production environment.
I have so much trouble remembering previous challenges I've overcome. I don't ruminate on them, I just move on...
Makes it way easier in interviews or ever just in a normal performance review where you can refer back to things.
I'd be fine if you had to skip a few questions like this and did well on the rest.
That's a fairly common interview question, though, so it's a good one to rehearse!
it is really testing a particular set of social skills
I need my engineers to have strong communication skills, so this is intentional and desired. ...which have minimal bearing on an engineer's ability to do their job
In positions I've held, communicating and remembering are pretty desirable qualities. For engineers and others. I need my engineers to be able to do those things. You obviously don't. That's fine. We'll hire different engineers. Everybody wins.Namely, if you've had only boring, uninteresting jobs so far, you might not have a truly interesting "tricky technical challenge you solved," and similar gaps around the other questions. Like, you can't name many of the ways a big, high-traffic site might slow down, because the internal tools websites you work on don't need caching or proxies or load balancing or...
Whereas tossing an algorithm question or two at them too to see if they can figure it out at least potentially screens for potential in a way this conversation doesn't.
So I always make sure we do both on interview loops, because I don't want to reject you just for lack of good past jobs, OR because of lack of studying algo problems recently (the good senior candidates crush the conversational one even if they're rusty on the algorithms).
Like, you can't name many of the ways a big,
high-traffic site might slow down, because
the internal tools websites you work on don't
need caching or proxies or load balancing
I feel like it would be tough to spend any amount of time developing web apps, even if they're just internal tools, without hitting a basic performance issue like an n+1 query situation where you accidentally write a page with 500 queries or something. But maybe that's me... maybe devs are better than me these days. I hope so =)There are of course innumerable network related reasons an app could slow down and we wouldn't expect a software dev to dive into them... I'd expect them to just be able to do some ultra basic stuff to rule out a network issue and zero in on the application stack.
I disagree, somewhat. In positions where I work with a medium or large team, any code of mine you reviewed would give you an idea of how the team leads want code to be written, not really how I as a candidate write code. I've often disagreed on design/architecture but was forced to go through with it because I really didn't feel like arguing and getting on the shitlist of a high-ranking engineer with influence in the company.
If you want an idea of how I would design something, it's probably best to have me write something specific to the job. I'm not talking a whiteboard red-black tree implementation, but something that is actually indicative of the work I'll be doing.
No one looks at open source work, just as no one cares about your resume.
This helps us look for good signal around their communication skills, mentoring skills, empathy, reasoning skills and software development skills.
We used this review as a diagnostic - there are no wrong answers since we know they’re not aware of our style guide and conventions.
It worked for us. Maybe it could work for others.
In the interview, I'm checking of problems that the applicant notices and see how he approaches the problem.
So far I've been satisfied with all hired who passed that test. And they liked not having to solve stupid whiteboard problems.
I pose a situation and introduce the v1 code. They look for bugs and propose fixes. Then I add on a new feature, and they look for more bugs. I've maybe 4-5 levels overall each having different classes of bugs, some of more or less subtlety. Fits on one whiteboard / single piece of paper in the end.
There are no syntax errors, just logic. Errors are in categories like: robustness, failure handling (internal or external), data/thread races, unforseen side effects, etc. The more experienced you are, the more problems I expect to be found. A "I don't know" is just fine (and often the following discussion is MORE informative).
Thanks for sharing.
> It is much easier for product designers and product managers to pass interviews. You can see their work product.
You don't see any more work of a product manager than of an engineer. What you see is always the finished product, and you have no idea who contributed what parts. If the overall product that can be publicly experienced is good, then some engineers in that team seem to have been doing a good job. You won't easily know which ones - and you especially don't know whether a product manager on the team really a lot of influence on this or whether the products vision and execution was mostly driven by engineers.
And the second point:
> If you could review someone's code from their previous jobs, I think it would be quite easy to vet applicants. And it would be much easier to move from job to job.
Sometimes employers can - because candidates have open source code. But experience has shown that these datapoints are not used, and employers still fall back to the default process of assuming nothing and doing whiteboard/leetcode style interviews.
The top comment seemed to capture the problem best:
"What is in extremely high demand is programmers with 20 years of experience in a technology that has been around for 5, no older than 19 and working for 20k a year.
And that demand will be high, forever.
Pay more and you get more. Pay this and what you get is code monkeys that couldn't find a better employer"
The process seems completely random and based more on pedigree than on anything else. If you have a signal like an Ivy League school, an older friend in the industry who can refer you, or a FANG on your resume those seem to be the only ways to be picked from the sea of resumes.
The best way to get an interview if you didn’t go to Stanford or MIT (I didn’t) and haven’t yet worked at a famous company is to get a referral.
Which requires somehow making a friend or connection with someone at the place you want to be.
What worked for me was that I had been studying Kubernetes and was probably the cheapest guy on the market with that skillset :)
The first part is the University Hiring recruiters determining whether out of the 1000+ resumes they have read you are likely to have the basic skills required to learn to be a FANG engineer. In this part they don’t actually care much about what you did at your internships or what technologies you’re interested in all they care about is whether you know how to code in a language, know how to manage time and be managed by a superior, and know how to learn to do your job independently. If you pass this, great now you’re off to the races that was the hardest part due to the volume.
Then there’s a second part in every FANG university pipeline where University Recruiting and different hiring managers bounce around your application to find an intern for their team. In this part your demonstrated interests, prior work, and skills are important you’re way more likely to get a deep learning internship if you have deep learning on your resume at this part.
I posit that most university hiring advice focuses on the second part whereas the first part is the most difficult to pass. Think about it is the person with 4 hackathon awards and 3 deep learning side projects more likely to grow into a FANG software engineer than someone who has 2 internships?
Do your side projects involve reporting your progress to your team? Writing design docs and getting feedback from your team? Thinking about maintaining the code base and providing documentation to your coworkers? Those software engineering skills are learned not taught and you learn them on the job even though to other software engineers we would value the candidate with hackathons and side projects more than the one with 2 internships in terms of ability to grow.
I’m probably going to write a blog post or something about this cause I feel quite strongly about this after my experience following everyone’s advice.
I had no open source contributions, no hack-a-thons, and no side projects with users. No experience or internships whatsoever, I had work experience in the service industry that I didn't put on my resume. GPA barely above a 3
All I had were side projects on github, listed prominently on my resume, that showcased skills. My side projects were all toy projects- things like a tiny Go API with a dockerfile and Kubernetes YAMLs, an arduino project that creates a CSV based on inputs from a GPS sensor, etc.
When my interviews went well, it was because I had demonstrable expertise in Kubernetes
Also since I’m writing advice, don’t ever stop applying to places. You might feel demoralized after everyone gets offers and you don’t have a single one in May, or in my case getting 149 oddly similar rejection emails from different companies, but I applied to a place in June and got an interview and offer a week later its never too late and in fact you might find a company/team who also thought it was too late to get an intern for the summer.
That said of course the modern coding interview is I think only very loosely correlated with quality.
Of course, every business likes to pretend they're the top and can only hire top talent.
Besides all that, mediocre literally means average. You (collective) should be fine with average and stop overloading terms making general life more difficult than it needs to be.
I have no clue how the term 'mediocre' has come to mean essentially bottom of the barrel proficiency that is still the minimum hiring level quality. The top dog companies can be elitist, but when the company is "MegaCrudSoftware Inc.", it's just plain narcissism. Many Reddit/HN posters exude this in the individual sense and believe they're god's gift to the keyboard and it's just as narcissistic.
Edit: and that similarly goes for how you define mediocre; I think my toptalents are your mediocre. I'll have your mediocre please!
Interesting, I associate 'latest framework' more with trying to keep the monotonous job interesting (or perhaps misguided attempt at keeping sharp) than with 'new challenges'...
That {something} can be web, embedded, ML, etc... it doesn't matter.
The problem is twofold.
First, your skills in {something} are appreciating more than the other skills. If you're a web dev trying to transition to embedded, the skills as a web dev will let you get a more senior spot than going back to a lower experience embedded.
As a $150k/y web dev, would you rather go to $175k/y sr web dev or $125k/y embedded?
It's not that its hard - just that the skills that you've invested time into don't have value and you're going to need to go back to being "just" a competent programmer who needs to learn the domain for anything you switch to.
Secondly, there's the "why are you switching" problem.
If you are switching from web to embedded, the question will come up "why are you switching to a different domain." When that question gets asked, many candidates exhibit a more whimsical or capricious nature of just wanting to do something different. At which point the interviewer is looking at "competent, but likely to leave in a year or two because they got bored" vs "less experienced, but interested in the domain." The second candidate is probably a better choice.
The way to solve that is the personal project and demonstrate that you're interested in the domain at more than a "I'm bored with what I currently do."
Are they mediocre developers? Yeah, absolutely. But under the right guidance they can absolutely be valuable to a company, and our turnover tends to be low because we have a 9-5 culture. It’s less about being a mediocre company versus a company that can’t compete for talent on price, so our talent strategy is to keep it a nice place to work so people want to stay.
The mediocre app/system quality and performance and mediocre security for customer and business data that results creates a (sub-)mediocre customer experience.
What's so bad about... mediocrity? For obvious statistical reasons, most companies, most jobs, and most people are mediocre (or worse).
That's assuming companies exist on a one dimensional spectrum. The more prevailing wisdom is that companies will be mediocre or bad at many things, and good at a couple of particular things, and those couple of things are what make the company viable. This is the essence of a "unique selling point".
But to the point: most companies don't need great developers. Nowdays most medium sized businesses employ some tech staff, but IT is not core to their business.
And if someone mediocre ends up being able to do the job, the company's management may face the fact that they're just a bunch of lame yuppies spending their life in the office to make someone else richer, not changing the world/making the world a better place/any other bullshit eaten from the trashcan of ideology (sniffff).
Well, perceived value rather than actual value. Which might be pretty much equivalent in a field like Sales where it's easy to track figures, but much harder in fields like software.
And in the end, most people are near the centre of the bell-curve of talent, and still manage to produce plenty of value for themselves and their employer. Not everybody has to be extraordinary to keep the society ticking, and the perception that we should always be excellent isn't just counter-productive, but actively harmful (see what magazines did to people's body image).
Nothing, if company managers would admit it.
Instinctively, they know it. The old cult of management-as-a-profession believes that by skillfully directing the activities of replaceable cogs, a company's managers can achieve outsized results.
But they can't admit it because they're afraid that knowledge would demotivate the replaceable cogs.
Nothing, but engineers are expensive, so if you can spend a couple thousand dollars to get better value for the money, you might as well.
Of course, some companies spend far more than that, which is probably not economical.
I have seen enough software projects that certainly didn't fail because the devs lacked ability, there was always another reason and mainly that is leadership not knowing about the problem they try to solve.
A bit of an exception might be more artistic topics like video games. Here marketing and chance play a larger role than management.
Sure, maybe you do cutting edge research, here ability is important again, but that is truly exceptional.
That said, I don't think it is hard to get a job currently.
Because of this, the interview process is not designed to efficiently handle a minority of qualified candidates, but rather efficiently weed out a majority of horrible candidates. It is therefore a terrible process for the people actually qualified to pass it.
How is hiring a mediocre developer worse than hiring a charlatan?
Every state in the US is an "at will" state, meaning a company can fire you with no reason as long as it isn't discriminatory towards a protected demographic.
https://worldpopulationreview.com/state-rankings/at-will-emp...
Even with at will, the company can get into difficulty with unfair dismissal and other issues.
The few times I've seen someone fired (and fired fired not PIP or layoff) have been for clear and undeniable issues. The "your work isn't up to performance standards" without a PIP falls into the rare bucket (and more likely at the small companies than the larger ones).
Firing sucks, but it’s hard to truly tease out quality during interviews. So most companies go for false negatives over false positives. Generally this means that of the 3-to-6 interviewers, all have to have strong positive opinions of the candidate for the hire to happen.
Because of this, as a candidate, it’s a bit of a number’s game. You can be a great candidate, but still not get hired on any individual interview, because companies heavily bias towards allowing lots of false negatives to avoid the odd false positive.
I'm not sure I agree here. I doubt most interviewers have actually given much thought to what they are actually trying to look for in a potential candidate. The widespread practice of over-focusing on algorithmic whiteboard questions is a symptom.
There's got to be better processes in assessing candidates' qualities beyond solving algorithmic puzzles (which perhaps is 5% of a software engineer's job at best).
It’s just really tough to figure out in 2-3 hours how someone is going to perform in a given role over the next few years. Interviewing is an inexact art, not an exact science, and it’s very much my experience that companies compensate for this by favouring false negatives (not hiring possibly strong candidates) over false positives (hiring weak candidates).
So we fight against increased barriers to entry like credentials (but that Stanford/MIT degree is still a golden ticket into the interview). We try to give as objective an interview as possible, meaning it’s explicitly technical, rather than just talking about past projects open endedly and going with the feeling you get about the candidate.
I’d bet if we collectively decided not to try to be a meritocracy, we could make tech interviewing a lot easier, but I wouldn’t like that. I came from a nontraditional background too. I only got in the door because whiteboard style interviews let me demonstrate what I knew despite my total lack of credentials.
We suck at being a meritocracy, but I’m glad we try to keep the barriers low and unbiased. I bet we’re better than most other fields that pay this much.
Front line recruiters tend to be non-technical, and can't pattern match for good candidates outside of very narrow criteria. (ex: They won't know that a person with strong C# skills will likely be just fine with Java.)
Just getting your resume in front of actual people doing the hiring is hard. My experience is that if you want to make it easier to hiring talented software engineers you need to make it easier to get the right candidates in front of the actual hiring team.
I agree it's not very meritocratic, but it DOES get people in front of people more qualified to pattern match their qualifications more quickly.
The problem with getting more people in front of the actual hiring team is the "charlatans" other people have mentioned in this thread will effectively waste the (very expensive) time of said team. Using a (less expensive) recruiter as a first stage seems rational until you discover the high rate of false negatives.
I've mulled this problem a lot and I still come up empty on a new, more effective way to solve it.
I think the explanation is quite obvious. People who gravitate to this industry are not as social as those who gravitate to other industries, hence the disdain for (or rejection of) the process that leans heavily on something that doesn't easily come to them, that feels like something they shouldn't have to be dealing with.
Sounds like a problem with the job description, rather than the recruiters.
Sometimes you really do want an expert in a narrow domain, using a specific framework/language. Other times you don't. This needs to be communicated to the recruiters.
Engineers love to lay the blame on the recruiters. In my experience, the recruiters are usually just a mirror for what the hiring managers are asking for. If the hiring managers do a poor job of defining the role, then how do you expect a recruiter to find good candidates for that role?
If Java and/or C# experience works, communicate that to the recruiter. Don't just assume they will know. Even as an engineer, if someone asked me to find a Java candidate, I would find a Java candidate. I would not make assumptions about what other experience would fulfill the requirements.
As far as filtering being the problem, I highly doubt it. Most of the complaints I hear from people are about the interview process. I know a few engineers that can't get hired, and it's not because of a lack of interviews. They just can't pass the interviews.
Now I do regular practice problems so I'm always ready. I actually recommend this.
It looks something like this:
Sunday - Stack | Queue | Priority Queue (Heap)
Monday - String | Math
Tuesday - Tree | Dynamic Programming
Wednesday - BFS | DFS
Thursday - Graph
Friday - Linked List
Saturday - SabbathThe more I interview people the more empathy I have for good candidates who can't get hired. I've seen so many potentially good candidates passed over because someone in the hiring chain didn't find them good. Usually this has to do with "lacking experience with X technology."
This is incredibly frustrating because usually the person doing the rejecting didn't know X when they were hired, but they were paid to learn it by the company.
On the flip side, I've been forced to re-interview obviously poor candidates because a hiring manager liked that they had "experience with X technology." Even though I was pretty confident that they were lying. Usually this ends up being merely a waste time, as I've never changed my mind and usually bring along another interviewer who concurs.
I think the hiring process is 50% luck, and 50% having experience with the right tools. My new strategy, after working in the sausage factory, is to look at prospective jobs, find the tools they are looking for, and find a reason to use them in my current role. Read all of the documentation so you really sound like you know what you're talking about, then interview. I'm not sure if this works in the SV startup culture, but it does seem effective in my situation.
If you have a 90% chance of getting everyone you meet to like you, but any one of them has the power to veto your entire candidacy, then after 7 "rounds" you are not likely to get the job.
The people hiring people SUCK at finding people and waste everyone's time in the process.
The amount of Java / JavaScript confusion that persists among the people who are involved in just finding people reeks of incompetence / and maybe worse.
Head hunting corps, even random company recruiters / HR seem more interested in bringing in mass volumes of names / resumes / warm bodies regardless of how qualified they are. Then they filter and I guess justify their work?
I think of it as the Hiring People Industrial Complex where it feels like the end goal is not actually having even the slightest chance of getting a job, rather the goal is to have a process, go through it, and that's it.
I get so much spam for jobs that aren't right for me, not even in the slightest. I'll even do calls with them and explain that it doesn't really fit, and they still want to move forward to some other inane level of the process, but I know I've got zero chance.
It just eats so much time.
There are exceptions, but they are rare, and they don't work for the big recruiting firms. They are just body pushers.
And yes the recruitment process can be very tedious, illogical and sometimes even unfair.
On the other hand, there are leagues of junior engineers (or just self-taught people after bootcamps) applying for all these jobs, so the process is hard for both sides.
Most engineers need no more than half a dozen interviews to get couple of options to choose from.
Unfortunately, there is population that grossly overestimate their ability, don't prepare effectively at all and take as many interviews as they can thinking it is numbers game. Then blame "broken system".
It reminds me when I went for exam for driver's licence. There was a group of people complaining at the examiner and broken system after one person failed their 27th attempt due to some "silly" problem like almost running a pedestrian. I had fun noting they already all know each other and then I passed on the first try.
The people who complain the loudest are mostly ones like that. Clueless about what they are doing wrong, not willing to honestly retrospect and evaluate their situation, learn from mistakes.
This is their modus operandi. If you always try to find external cause of your problem where a lot of other people clearly succeed, there is a systemic problem with you that prevents you from effectively learning anything.
If this is you, I don't want to work with you. I want people who if they encounter same failure over and over again will eventually stop to think what they are doing wrong. Or who will not start by blaming compiler for their broken code (I had a coworker like that - total disaster).
The first step to solving a problem is admitting there is a problem.
The whiteboard problems we give are nothing out of ordinary. Unfortunately, they are also biggest filter as a lot of candidates who seem to know basics of Java can't write a simple function to specification. I understand some are due to stress even though I try as much as possible to relieve stress, give hints, etc. My boss once tried to listen to popular "advice" and get rid of whiteboard tasks. The next two hires were total loss and we had to fire them within 6 months. We are again giving whiteboard problems.
I worked at facebook, when I started looking for a new job, I had to start grinding leetcode again to prepare for a new job. Take a step back and realise how ridiculous this is.
Big companies that have prestiege and pay alot of money use it to eliminate false positives, not to actually recognise true positives. If your at a big company that can afford to throw away many true postives, sure use leetcode, but the rest are hurting themselfs by blinding following the mantra of FANG.
If you need to grind to be able to write code you are doing something wrong. Like spending too much time at work copying code from stack exchange or relying on running your code to tell you if it is correct.
Never had to "grind" to get any software development job I wanted even though I am always expected to demonstrate my coding ability.
Actually, I wouldn't let myself be hired by a company that does not verify if their candidates can code. Too much of a drag working with people who can't pull their weight.
Good for you. Either you are quite gifted or you're not talking about interviews in FAANG or other similar companies like Doordash, Instacart etc. but rather other "easier" SF startups.
I think you seem to be assuming two things: 1. Most interview questions are intuitive and one should be able to organically come to an efficient solution within 40 mins without any prior practice. 2. Anyone who can't do that, is not worthy of being a software engineer
In my experience, both those assertions are false. If you look at the difficulty of questions companies are asking, I can assure you that no reasonable software engineer (unless they do competitive programming as a hobby) would be able to solve them. On the other hand, even a mediocre engineer who has been "grinding" on Leetcode will have a far better chance on solving them since they have seen them before. In short your prep of interview
At this point, it appears to me that the companies know that Leetcode exists and that their questions end up there and they still ask the questions marked as "hard" since most serious candidates would have already prepared for the "medium" ones.
After all what I want to learn is how a person approaches implementing something and not whether they have good enough memory and luck.
If those FAANG companies do something else, it is their problem. There are so many companies you don't absolutely have to work for them.
The only reason they can get away with this is exactly because a lot of developers think either FAANG or bust.
I've changed jobs twice in the last 6 years and in none of the interviews was I asked any coding questions. There were sometimes broad questions about design and concepts "how would you handle situation X"), but no actual coding or whiteboarding. In fact, going back 15 years to the start of the previous job, I don't recall coding questions then either. They were more concerned about my general capabilities and knowledge of useful algorithms that I would use on the job than the actual code.
But then, I'm mainly an embedded systems developer. Sure, I do the odd webapp or desktop application or tool, but controlling hardware is where most of my time is spent. Maybe in this field there's less of a culture of "interview by whiteboard?" Or perhaps it's because I was applying to higher level team lead positions that were more concerned with architecture & design than the framework of the month?
Or is it mainly the web guys (admittedly the largest section of the pie) that are being asked the odd algorithm & whiteboard questions?
Since there is no gatekeeping (for better or for worse), you get a large pool of people with wild variety of skills, so these silly interviews are the laziest way to assess people as an alternative to having credentials such as that of a Civil Engineer, Doctor or other professions.
I don't know of any other industry where the interview is this silly, but studying for it for a few months top could get you a 6 figure salary (not everyone makes it, but the chances are quite high) if you know what you're doing/skilled enough.
I started to play the game as well and actually got a lot better at solving this type of problems than say few months ago. My confidence is high and I'm a lot less intimidated by this type of interviews, but so is my I-take-no-shit-ometer since even if I aced some of these interviews recently and the interviewer(s) was/were acting in ways I didn't appreciate, I can just say no. I mean, I can play your game, but I'm not gonna put up with your shit.
What is in demand is cheap labor that can churn out low-quality web applications, label them MVP, and use them to convince investors to pour in money to hire more cheap labor.
The biggest tell that this is true is hiring for a specific library/framework/platform.
If you wanted a software engineer, you wouldn't care what particular thing they have worked with most recently. Maybe you would care about the general category of work, but mostly you would care more about practical experience and past achievements/results.
A decade ago my region of the country would produce maybe 50 fresh CS candidates a year, now it’s closer to 500 spread across multiple different educations. This may not sound like a lot, but in a region of 1 million people it’s actually quite a lot, and those are the technical CS/SE types not the myriad of soft IT/design/communication educations which produce a further couple of thousand each year. It’s like this because we (as in the employers) have been telling everyone we needed more and still need more for that same decade. But this is a half truth. We don’t actually need more people to become CS candidates, we need more trained plumbers who are proficient in X technology that we can use for 5-10 years until they leave us or we replace them with someone cheaper. And how do you get cheap labour? Well, one way is to make sure enough people are educated in what you need them to be, and while it may have been the case that the world needed more CS candidates a decade ago that is no longer the case, but it’ll take a while for young people to realise this.
Well that’s one part of it, the other part is how the educational organisations educate our young people by giving them the wrong kind of skills. I’m not exactly sure why they’ve abandoned teaching people actual computer science, but the part that the most students fail on and the part that shrinks year by year is now computers work. I can see how the fundamentals aren’t as necessary as they were in the 90ies when I got my degree, and I also remember how much some of us hated that stuff even back then. But it’s what’s required to fill the best paying jobs, like running the cobol systems for a bank. Cobol itself isn’t hard, a cobol system is hard because it came with nothing and was build in a time where everyone invented the wheel their own way. So what you need to become a good hire for such a system is all the basic CS knowledge that nobody no longer teaches so that you may understand and reverse engineer whatever all those cobol programmers did in the 50 years before you arrived.
It’ll be sort of interesting to see where it lands us though, but I’d frankly get into actual plumbing if I was young today because that’s bound to be a better career for most people who aren’t aces in either the technical or the financial/management side of CS.
A degree is not the same as “talent”. The degree doesn’t even mean you really “learned” the fundamentals, so much as you were able to regurgitate information and pass exams.
I’m a Principal at Amazon. One issue I see among CS graduates is a lack of understanding in very basic CS fundamentals. On paper, these candidates have CS bachelors degrees. On the other hand, they struggle to pick the right algorithmic approach when something is clearly a graph or tree traversal problem.
Even if you don’t “need” a degree you still get one because it would be a serious handicap if you didn’t and our educational system doesn’t cost the individual money. In fact we pay you $1300 a month for 6-7 years while you work on your higher education. I’m sure we could debate the system, but the result is that almost everyone in CS/SE get a degree of at least academy level once they finish the mandatory 10 years of school + 3 years of gymnasium granting them access to the higher educations, and as such the number of educated is a very strong indicator of how many new programmers are entering the field.
But this doesn’t mean these graduates are skilled? From your explanation, it sounds like there’s an incentive to get a degree - both cash payments from the government and an opportunity to avoid labor work.
> as such the number of educated is a very strong indicator of how many new programmers are entering the field.
But “educated” in this context means they passed. It doesn’t mean all or even half of these graduates understand the discipline sufficiently to be productive employees or even work at a FANG tier company.
I guess my point is - the market might be saturated with these graduates, at least on paper. But that’s not the same as the market being saturated with talented programmers, engineers, admins, or whatever the job title is.
The hiring percent was below 0.5%. There are a lot of candidates, but most of them could not fulfill our core requirements a new team member must be able to accomplish. In our case it was TypeScript itself, unit tests, integration tests, working in a Linux environment. Salary requirements for the same position varied $1000 - $20000/mo. Because there is a lot of supply side (read: developers available), one can be picky.
More details and statistic here:
https://www.linkedin.com/pulse/hiring-remote-angular-nestjs-...
This is just how I look at it, but if I reply to a company about a position, I'd like to know about the position before you make me jump through hoops. The exercise itself is okay, and a brief test like this is much, much better than making a candidate fill out an assessment, but why would I invest that kind of time if I don't even know whether or not I want the job. Think about it from the candidate's perspective, some people in this thread note having done 10s/100s of interviews. Imagine how much time they would spend doing menial coding exercises before even getting to know about the actual position other than the JD.
Again, its probably just me, but last year I literally thanked companies for their time because I didn't know anything about the job and their company and they were already asking me to do take home assignments. Sorry but I have a life, and critically to anyone who's hiring; plenty of people reaching out to me not trying to make me jump through hoops. Maybe if you invited more than 24 people for the exercise or just spoke to some people first, you would've gotten a better pool of (potential) candidates.
I wrote another post for another position later which has more juicy details like country breakdown
https://www.linkedin.com/pulse/angular-typescript-frontend-n...
Somewhat related, In the interview, the first question I asked if the candidates had tried to sign up on the website and what they thought about it. It is not encouraging if a candidate had not tried to figure out the company product himself/herself at all.
the price floor for really talented engineers is also high so high in the sense most startups can't afford those 300-400k salaries.
I know a number of folks who work either as developers or on an IT team for a publicly traded company. 300k+ is a stretch but a lot of them pull an extra 30-80k / year more than working at a non-publicly traded company simply because of the stock options they get every year as part of their compensation.
Having publicly traded stock is nice because once you've gotten past the vesting period you can hang onto them for >= 1 year and sell them on demand for 15% long term capital gains tax instead of the usual 35%+ you would have to pay on income tax. Getting an extra 25k to 68k extra post-tax income every year on top of an average dev salary is a big deal.
I wouldn't be where I'm at today had I not had my lead help me out during my internship. My school was just trash at teaching programming. Not only was it basically self taught, but everybody got A's so long as they just submitted code that compiled. My lead actually taught me how and why this stuff works.
My salary is above $100k and I could probably find a job doing what I’m doing for $150k or higher. My next choice is do IT consulting or try to find a management position but I don’t want to be tied to a vendors platform. Plenty of people have made entire careers on the backs of vendors like Oracle and others but I don’t want to be a crusty old dev keeping things alive until I retire.
What the people who insist on giving these interviews don't realize is they are extremely hackable most of the time. The people who give them often aren't bothered to make up their own tests, so they go to the google and type "whiteboard interview questions for bla bla." I suggest you do the same and study up.
This year I became a co-owner of the company that worked at for the past three years. It's a small development and consulting company and we're currently struggling to find new developers. At the same time, my girlfriend is trying to get her foot into this field. Since she's interested in a completely different tech stack than what we use, hiring her through good ol' nepotism is not going to happen. This situation gives me a small glimpse into both sides of the whole equation.
Before I continue, I want to point out that no side is at fault here. It's just market forces at play.
So why don't companies want to hire newcomers? It's simple, really. It's never worth it.
Even newcomers want competitive salaries because bootcamps, popular media, etc. paint the picture of a career in software-development as being extremely well-paid and with great benefits. This picture is absolutely true -- for senior developers. Meanwhile newcomers need to be trained and built-up, often with intensive mentoring from senior staff. In general, there's nothing wrong with that. I had a great mentor and in turn I love mentoring. But once they've gained know-how and experience, they will look for a different company hoping to use their newly acquired commercial experience as leverage to get better compensation. And that's exactly what they should do! Trust no employer that talks about crap like loyalty. Leaving your first job after max 2 years is something I would recommend every new developer. It is what the legendary Andrew Hunt (author of The Pragmatic Programmer) recommends in this podcast episode. If your first employer gives you a hefty competitive raise to keep you, use it as the new base for negotiations and still try to switch because, as Hunt puts it, at the beginning of your career it's crucial for you to expose yourself to different technologies. Maybe you'll start out as a web developer only to find out after your first job switch that you're much happier in embedded systems. Switch jobs often. Forget loyalty.
But what does that mean for employers? Let me explain it with a few of our cases. In the past, we tried hiring newcomers multiple times. In the most recent case, I was the senior responsible for the new hire. I spent up to 16 hours per week on one-on-one training in the first 6 months to get them up to speed in anticipation of a big project. They left us after 14 months for a different job in the middle of said project. I do not blame them, it's the exact right thing to do. For us, this was our third failed attempt of hiring newcomers and it was frustrating and extremely costly.
Since we're a B2B company creating software for IT departments, I asked around to see how our clients approach this whole situation. And the consensus is, "We refuse to train the future employees of our competitors. Hiring newcomers is a waste of resources. Paying the premium to get senior developers is always better." Especially small IT and software departments/businesses cannot afford training people who will just ditch the place within 2 years while big players like the FAANG companies can and have their pick from the very best newcomers.
As a result, entering this field is incredibly difficult and one has to essentially hope a company is dumb or desperate enough to take the gamble of hiring someone trying to get into developing.
So how can this be fixed? Well, I don't think there's a fix. Most newcomers will never find a job and quit trying to enter this field, the lack of senior developers is going to hurt small and mid-sized companies in the long run and many of them will eventually disappear from the market as their current developers are reaching retirement and cannot be replenished. Only newcomers who give the impression that they don't need extensive training will ever have a chance to get hired. As such, my recommendation is portfolio is king.
Small, not tech heavy companies like simple webshops, small crowdfunding platforms, etc will need someone, ANYONE, to keep working on their giant stack of legacy PHP/Rails/whatever code. The business does not support hiring very senior people and the founders are not technical at all so they don't recognize the troubles inherent in hiring a full team of juniors.After a few years the business may fold, but at that point the junior devs have gained some experience and move onwards and upwards. The attitude of "We refuse to train the future employees of our competitors.", while not un-true, fails when you can't even hire seniors.
First there’s a code fluency wall you have to get over.
Then there’s a tech debt/spaghetti lesson that needs to be learned (IMO this can only be learned the hard way)
I did this with 6 months working on my own stuff 12 hours/day, then 6 months working for nothing but equity in a never gonna happen startup.
Once someone is over those two walls, they can be useful to a company. Absolutely never writing greenfield stuff, but maintenance, matching style, very clear start and end type stuff for at least a year.
Before you’ve internalized code as a fluent language and developed basic code hygiene, you should not look for a development job. Even if you get one you will be an imposter.
In what other technical field are you expected, post-school (which probably hasn't taught you a ton of practical skills), to spend a year on your own making yourself employable?
The closest comparison I have is professional musician.
you’re supposed to love the language of music. If you don’t, good luck.
And very little in common with how most people treat other technical professions.
The reason is because — between the people with the genuine love of the field plus those drawn in by the lure of the high-end pay — there is such an oversupply.
Software also sits at this technical/creative/implementation intersection where unless you're doing something very specific, you're going to need to push/pull in different directions.
A lot of software doesn't do anything exciting, standard office CRUD, dashboards, back office tools can be banged together by a single developer as long as they can connect to a database, render a UI (web/desktop) and take requirements from the business.
There's a lot of software jobs which aren't at software companies but regular businesses who just need to track something domain specific and can't afford to tender.
I will say that I've hired a couple of newer developers and in some cases they've moved on, but in other cases they've stayed with the company I was at when I hired them, in some cases for 3+ years. So not everyone leaves after 2 years.
I think that companies need to be really explicit about their training and goals and try to make employees happy. Yes, that bootcamp grad is going to be super happy to work for you for the first year, and grateful to have the experience. But, yes, they are going to start looking around. So plan for how to meet their needs as best you can. Some folks will simply be on the hunt for difference and comp, others will be happy to stay at the same company if you can challenge them and continue to let them grow.
> ... at the beginning of your career it's crucial for you to expose yourself to different technologies
This is one reason I feel like a small consulting shop is the best place to start a software development career. You matter (because it is a small shop) and you'll get exposure to many domains and technologies (because it is a consulting shop).
The second part is that the trade has a bonded period. Depending on how that is written, this becomes more difficult to enforce with at will employment. It can also lead to companies taking significant advantage of their bonded juniors. I mean... if you think this is a good model, revature is out there.
The trades face the same challenge. Over the past decade, I've gotten along well enough with my HVAC guy (one-man shop who brings on a rotating cast of apprentices) to talk with him about this. He reports the same experience ("no matter how much you train them, don't seem to be able to move beyond...").
This isn't a case of "can / cannot solve problems", either. For hobbies they delve in, that cohort appears to problem solve extremely well. I suspect the challenge is finding ways to communicate a mental model of the same problem domain that "clicks" with different personalities.
The "skilled trades" with hvac, electrician, plumbing, carpentry and such where the apprenticeship is more appropriate do have that issue again.
While it is often argued and parts of it have been refuted - The Camel Has Two Humps ( http://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf ) is applicable here.
There are people, for whatever reason, can't accept a different mental model than what they've got in their head. Software development is about twisting how you think to that of how a computer works.
I've presented this very light model of "levels":
A junior follows instructions
A mid completes tasks
A senior solves problems
There are people who plateau at each level and never go beyond that for whatever reason. In many cases it is a failure of putting the proper problem solving / learning skills in place to be able to think in a way that isn't the easy way.
* How do we prevent a predatory apprenticeship?
* How do we ensure that a non-predatory apprenticeships are able to keep their staff for a long enough duration that they're not losing out?
There is a part B to the first question on preventing predatory apprenticeships. There was an anecdote told on reddit of a person who was trying to get out of tech support and so signed with Revature for becoming a software developer, went through their bootcamp and then got placed at a company. That company found that he was rather skilled at doing tech support (rather than as a junior dev) and so moved his contract over to do tech support... getting paid less than he was getting paid doing tech support prior to joining Revature. Furthermore, the locked in two year contract meant that he did tech support for two years. At the end of this, he's got two more years of tech support on his resume that paid him less than what he was making before and no additional software development accomplishments.
So yea... Predatory apprenticeships are a problem.
The way that the "stay around long enough" of old was a signing bonus. When I started in '96 with Taos ($54k/y), I got a $5k signing bonus and $1/mile moving bonus (Mapquest was a new thing - HR was amazed at how much easier that was going to make their job in calculating the moving bonus). If I left before a year was up, I'd have to pay it back.
That works reasonably well enough when salaries are about balanced overall. But it works poorly when there are some jobs that can either offer a much larger bonus or the new pay can quickly repay the bonus. If you're making $75k/y and have a $10k bonus to repay and then get a job for $150k that bonus can be repaid within a month or so (by the time accounting sends out the "pay us back" the bonus is ready to be paid back with the increase).
I disagree here, and I think this is the main reason we're having this conversation. If someone has been trained up or learned on the job such that their skills are more valuable, then their employer should treat them as such and give them a raise. I've seen time and time again that good employees leave just to get compensated fairly. Alternatively people get disgruntled and leave when an experienced outside hire is brought in at a higher pay band to struggle to do the same work that they've spent years learning to do.
This is crazy. If the junior needs more than 1 hour a day to be net positive (= do more work in the remaining 7 hours that you would do in that lost hour) then I would say they are a lost cause.
This is also so easy to filter at the interview level - give them homework to learn some new skill, junior candidates are generally willing to spend significant time on that and it gives you much better picture of their abilities than whiteboard puzzle.
That's what my experience says, including the conclusion.
That means that the true cost of a junior candidate vs a senior candidate isn't just their 1st year salary difference on paper, you have to count in the cost of training _and_ retaining the junior hire. That doesn't necessarily mean the math doesn't work - especially if the market for senior developers is much tighter than for junior developers.
Also the idea that you'd be mentoring for 16 hours a week one-on-one seems like it is either inflated or there was a problem. Maybe the candidate was a bad hire even for a junior role, or the mentor is micromanaging, or the work product expected was never appropriate for a junior developer - but something seems off there.
I did a technical, live coding screen for 45 minutes. It went well enough that they were interested in moving forward. 4, one hour long technical interviews and another hour with management, all spread out over the course of a day. I'm already working full time with a family and I'm expected to burn through an entire day of PTO? And to add to it there was no response as to what would be covered during these 4 separate technical interviews.
What's really maddening is that it's our fellow software engineers that are doing this to us. We're the ones that think it's okay to do "take home assignments" and essentially work for free. We know how awkward and stressful live coding exercises are but yet we do them. We value our time and work/life balance but yet think it's okay for every candidate to go through 3+ hours of interviews.
The one thing that's helped keep me sane through all of this was having watched Jem Young's Frontendmasters course "Interviewing for Front-End Engineers".
- a centralized accrediting authority with uniform standards.
- a apprenticeship model.
An apprenticeship model let's you score folks while they're early in their careers and provides a standardized way to traverse levels of software engineering. This will show an engineer can write code.
In my opinion, writing code is not the same as writing optimal code, and also isn't uniformly required. For finding people that can write optimal code you need someone with a more mathematics heavy background. That is where a centralized accrediting entity can determine that you have tested on algorithms, data structures, and how they are related for entities that need that. This differs from college because the standard is uniform.
I see this as a potential plus not a downside. If the person doesn't understand the language you're using but you can explain how your code works in such a way that you can get them to understand it that's a really good demonstration of being able to communicate and how you would describe your code to a co-worker.
I've only sat in on a few interviews (as a person doing an interview on the sidelines) but all of the questions I tend to ask are more casual and around thought processes, or at least the pseudo code implementation. Personally I don't really care if you can't remember the exact syntax of something off the top of your head but I do care that you know how it would work and what you would Google to look it up.
Personally I don't know what it's like being interviewed tho. I've been doing contract work for my whole career and every job came from either talking casually or someone finding me with intent to hire me as long as I didn't come off like a maniac. I know for absolute certain I would fail any algorithm based whiteboard test (I never went to University) but if you're struggling to find employment, just know there's a whole world out there where people don't care about traditional software engineer interview strategies. They only care that you're dependable and can solve their problems in a reasonable and maintainable way.
Thanks to the billions of dollars spent and hundreds of millions of hours expended, anyone who takes a four week bootcamp can become a passable frontend web developer. The tooling is just that simple and accessible. And so there's a lot of folks taking such bootcamps, and employers have no lack of choice for roles.
Ater reading all these scary whiteboard interview stories on social media I studied up on programming puzzle-type questions...was a bit of a let-down, honestly.
I got a contract gig with an embedded development house a few years back after a couple hour interview - more of a chat. The guys hiring me were in their early 60s.
I also got the impression that there weren't a huge torrent of engineers with assembly and JTAG debugging experience banging down their doors, which probably helps.
I wonder if we'll see the same sort of thing creep into the embedded systems world as these managers/engineers retire.
Anyone who pretends you can accurately assess a candidate in 3 hours worth of interviews is lying to themselves. The only real way to know if someone is good is to work with them and get to know them over a long period of time. I wrote a little bit about this here: https://jonpauluritis.com/articles/a-better-way-to-hire/. Practically speaking this means the best way to recruit is via "networking," but networking takes a lot more time than posting a job advertisement and having someone solve some leetcode questions.
(related article: "Why Aren't Developers Paid MORE" https://jonpauluritis.com/articles/why-aren-t-developers-pai...)
That's how you end up with many many interviews, lengthy code exercises, and huge opportunity costs for everyone involved.
Consequently the same pressures would apply to software project management procedures towards growing complexity, and less agency/autonomy.
Why does it seem like 'AGILE' often transforms into less of an idea of short feedback loops, context and communication and more into a bureaucratic control system? We implement control systems to reduce state space of unknowns / chaos and trade-off variance in favor of consistency. So if software in organizations is under high demand, increased cost, and greater risk it would also suggest likelihood of similar reactionary measures to implement control systems measures on software development as a whole.
Consequently the ever present trade-offs of exploration vs exploitation or global vs local maximum would also apply meaning the reactionary measure of increasing control and consistency has side effects counter to its very purpose: improving software capabilities. Instead of increasing stringency / consistency through process/procedure also increasing cost of interaction one would instead want to reduce cost of interaction, but also reduce costs of downsides upon hiring (e.g. contract to hire + tasks to prove but where acceptability of failure is present). This has the added benefit of not accidentally removing "exploration" from the equation allowing higher risk higher reward employees into the organization which reduces risk of overfitting and innovator dilemma problems.
Fire corporate, that's how you get good workers.
Maybe that's what we need here, something to gap the "I'm brand spanking new" and "I'm a senior" time period.
Oh, man, to have somebody to do all the stuff I don't feel like doing...
https://docs.google.com/forms/d/e/1FAIpQLSc8neScWE0-gmc00u1s...
So far, based on the responses, I'm seeing trends like: side projects barely matter, wages can be used as leverage to find better jobs, companies investing in your career are really important, etc...
If I get enough data, I will post my results somewhere public and I will offer some packaged services to companies and developers alike that I think alleviates the issues we're currently seeing in the tech hiring process.
For some reason a lot of the industry said "hey, if Google does that it must be right!" and they also started asking pointless trivia questions in very long loops.
But why stop there? Let's build out pointless trivia as a service, and assign a numerical score to represent your ability to perform pointless trivia outside the context of an interview.
I really think it's that simple. Tech interviews are broken and need to be drastically simplified. Candidates should be evaluated conversationally as humans and given the opportunity to learn on the job. It's a risky proposition in both directions, there's really no need for trivia, it doesn't prove anything (except act as a red flag for candidates).
>"It's a risky proposition in both directions"
It seems like the worst case for the developer is that they get paid for doing nothing useful for a while, then have to find another job. The worst case for the company is that they pay out a bunch of money, and dedicate a variety of resources, to someone who delays a (hopefully non-vital) project. This is not a symmetrical proposition.
That's true, but if they took advantage and get fired then they would have poor references and a spotty employment history, which will negatively affect getting another job (and would have been a factor in the hiring of the current role). So in that way there is an incentive for the candidate to perform well in order to maintain their career, and they do risk that track record to some extent when taking on a new role. It sucks for both sides if things don't work out.
"Giving you a job" carries work and risk. "Accepting a job" too. We do not need that type of friction anymore.
I think systems like Upwork will become the norm. Where you just start working on some small task. Without much of an application. Without much expectation. Then both sides can grow together over time and work together more and more.
To me, the old way of writing and reading applications seems rather insane these days. Imagine we would do the same for relationships. No more dating. Write and read letters instead. Then meet and talk once or twice and then BOOM: Marriage. Nobody would want that. I think we will abandon it for jobs too.
http://pyxisinc.com/NNPP_Article.pdf
The bibliography is also something to track down and read if you're interested in the subject.
Bad developers take a lot of time to train, manage, QA their work, fix their work, fix their work again, and then finally someone else just does it. They are in fact a net NEGATIVE impact on the team. You are actually better off without them. They actually slow you down instead of improving productivity.
It's akin to hiring a cook who screws up every meal they make. Not only did I pay them to do so, now I have to pay others cleanup their mess.
Ageism is also a factor with some age cohorts preferring to hire within their age groups who play with their cohort's favorite tech-stacks.
A badly behaved interviewer - arrogant, rushed for time and treating the interview as a nuisance, egoistic - all of these make it harder for candidates to get a job.
Data point of one: I have faced the worst lot of interviewers in startups and Unicorns, and have had the best-behaved and reasonable folks in FAANG companies.
Never tried waterboarding, but my issue with white boarding is that it’s deeply subjective. With working code you at least can judge the correctness straight away with a real piece of runnable code. You can also observe how the candidate reasons around the problem and how they formulate and test hypotheses. With a white board you can observe the candi^Wvictim making a table test, a term I first heard in the 70s and last heard in the early 80s. It is just cruel.
Partly because projects are sold at such low margins that they don't allow for tutoring. Or the customer plainly states that they want 5 engineers with 10 years of experience each. It's a hard sell to make that 2 10 year guys and 8 juniors instead.
Partly because the junior will bolt to a higher paying job as soon as they've learned enough. People don't stick with companies for the long haul like they used to. Even if the pay is good, people just get bored and switch jobs.
Getting your first job is harder, but for different reasons. You're an unknown quantity, and the only way to know if you're any good is to grill you on things you learned in data structures & algorithms class.
Getting all of your subsequent jobs is also hard, because there's no way to know if you've been a stump who just sat there and collect a paycheck at previous roles.
Perhaps the solutions are different too.
That only covers a small percentage of the population. I used to fit that profile and back then, the minute I made any change to LinkedIn, I had people message me. Now people don't want to waste their time on someone that will be out of their price range or more experienced than their boss. FAANG is the exception, they seem very interested in scheduling an interview.
Is there evidence that's it's hard for devs to get a job in general? E.g. The average hiring times for software devs (on popular platforms) in London was on the order of a couple of weeks.
I know from personal experience that junior devs from bootcamps were getting snapped up quickly - source, I worked for 3 years in the recruitment industry and also hired many devs in that time.
Doesn't seem to be a problem in general?
Is it far more difficult for a median skill software developer to find a job than the equivalent person seeking employment as an accountant, electrician, or plumber? I doubt it.
The persistently very low unemployment rate for software developers rather speaks volumes about how not difficult it is to find a job. The interview processes are obnoxious in the field? Sure, that's a reasonable claim and seems to widely be the case.
- If you leave/fired < 4 months no responsibility.
- If you stay after 4 months you agree to ISA agreement.
- Agreement is that if you leave within 4 years you agree to share 20% of income up until you have paid $60k.
- ISA is valid for 4 years. Then it's VOID.
- ISA is also valid if you get a tech job.
It seems to me, that there are "classes" of developers. This is not necessarily tied to market or ability, but those can definitely be be big contributors to which class you fall in. Prior to me entering the field professionally, blog posts, articles, etc. seemed to promise an easy six figure salary to anyone who could remotely code, smooth sailing after you get that first job and other highly appealing things. I have a good feeling a number of people on here would likely agree with this reality. For others I've spoken to, this was never the case. I never saw any of that personally. Reasons being both circumstantial and me not understanding the reality of things and being to quick to settle.
I talk to developers from all categories: new grads in the bay area bragging about offers at companies and startups you've heard of, experienced guys in the midwest who claim to still be able to take home salaries unheard of in any other field, or guys who have a decade of experience, but struggle to find a role to pivot into, and all sorts of others.
What always strikes me is they seem to live in different worlds. I had always considered local market to be the big differentiator, but the more I speak to people in the same market with wildly different experiences I start to question that. Particularly in this time where remote work should in theory expose more opportunity to people tied to local markets for whatever reason. Type of company seems to be the big differentiator here, and I don't mean in domain/industry or a tech/non-tech oversimplified manor.
Instead of noticed personally, that the only companies willing to talk to me are very similar to the ones I've worked for in the past. This isn't even about the "stack" being used either, but more about the organization. Similarly people working in prestigious companies seem to be targeted by other prestigious companies. But the interesting divide to me is not upper bound/lower bound, but lower bound/middle bound. People who claim to be commanding impressive salaries while doing run-of-the mill, not particularly intense or specialized work at no name companies, but are talking about median salaries above what any roles I've ever seen is willing to offer. These aren't even in high CoL cities all the time, but the numbers I could likely get cap out at least a few dozen thousand below the quoted median salaries without moving into management.
The problem of course, is when you're in the lower "classes" and want to move up. Especially at the experienced level, where you're expected in more desirable roles to have experience with X or Y, but the roles in your past never could have given you the exposure to that. The typical move seems to be to grind leetcode and pray you can get an offer through some avenue or another, but most people agree cold-applications are a waste of time, and the sort of recruiters you need are not the ones reaching out to you. Referrals seem to be the best shot here. Personally I never figured out networking. I've typically jumped more often and more quickly than my immediate colleagues, due to severe underpayment in my earliest years at places most people settle and become lifers.
I actually enjoy discussing things like this, so if it doesn't get buried by the hundreds of other comments, so please tell me why I'm wrong/right/etc. This was probably an very poor description as the idea is still rather abstract up in my head.
There could be 10 jobs worldwide, as long as companies can make money from those 10 people, they will say they are in demand. Rather than think demand equates to quantity of jobs, it’s better to think of it in terms of cost. The more engineers competing for the 10 jobs, the lower their cost to the company and the higher the demand. Lower salaries mean more money can be made by employing them. “In demand” means the exact opposite of what most people think. And by telling people the demand is high, it increases the supply further lowering costs for the companies and thereby increasing the demand. Engineers could organize and form guilds or unions, like lawyers and doctors have. But that would decrease the demand because it would increase costs. Tl;dr software engineers don’t grok labor economics. VC do.
- review your recent resume
- have some conversations around coding topics that dive in enough to know if you generally know what you're talking about
- focus on things you really expect them to do on the job
- if you really love giving algorithm riddle programming tasks, only use them on recent university grads who are used to such things. it has zero (ZERO) usage for experienced devs in our industry
- basically much of the US already interviews conversationally with little or no coding exercise. but for some reason big tech and the valley fail to change (which is funny since they are usually on cutting edge of other aspects of our industry)
TL&DR: don't do live coding interviews, they are a waste of everyone's time
And once you pick candidates, bring them on board and have your behavioral/cultural interview to judge if they are a good fit for your team.
Will save time for both interviewers and interviewees.
- no matter how desperate the situation, always treat an interview as a date -- you might meet some really interesting people, you might hear some interesting things, learn how different people think about problems. Or it might really suck and you can't wait to leave. This attitude works amazingly well. If you are happy to be there and talk, you'll have a good time, they'll have a good time, they'll like you, you win.
- always think about how would YOU interview yourself. What info is useful for you to interview someone for 30 minutes and make a decision. Shadow some interviews. Your literal job as an interviewer is to get an understanding of the candidate. If you know what they want to know, just focus every word on giving them that answer. Any interview I ran where everything I was gonna follow up the interviewer mentioned intentionally, I was like "wow, okay cool you really answered everything I wanted to know, let's move on" and those interviews are really the best with time to just chit chat and get to know the person. This is also useful for understanding why they ask you questions, asking clarifying questions to make sure that you understand what they're looking to get out of you. There's nothing worse than losing 5 minutes to someone talking about something completely pointless during a 30 minute interview. "Tell me about a time you failed." "Oh I have plenty of those, but are you looking for say a failure with my team, or a time I crashed production, or when a project got really late" doing such a prompt instantly makes the question easier for you AND makes you look 100x better.
- coding is a tricky one. 90% of the companies want you to code an okay solution, but they mainly want to see how you _think_. Like who cares if I can sort a billion numbers in memory in O(1) time, write a paper and move on with life, if I can't explain it to anyone I am useless to the team. Code out loud, just slowly solve whatever problem, and talk about the problems you're trying to tackle, what is important, what is not. If you mumble make sure to create "okay, I have a solution, I can walk you through it" because mumbling = they disengage. If you explain your strategy, it makes you look better AND if your strategy is flawed, the interviewer will often help or prompt "I really want to help but this is what I really want you to solve" and now their cards are on the table, you know what they want (see previous point).
- learn to whiteboard at least a bit. You need to be able to explain your thoughts to other engineers. Sometimes pulling out a whiteboard is an amazing way to do it. Yeah its cliche but it really is a practical skill.
- If the interview requires you to solve a complex mathematical problem perfectly on the spot or get out, you're either interviewing for FAANG (and have studied for a month or 3) or you probably don't wanna work there.
It's been my personal anecdotal observation (enough qualifiers yet?) that unemployed folks are similar to the last pear in the supermarket. Sure, that pear might look fine and be perfectly ripe - but two hundred people picked two hundred pears from a pile... and no one picked that one. When you are unemployed and looking for work I suspect you end up getting rejected by a number of places out of hand since, while there's no solid evidence proving it, you might have something wrong with you as an employee since no one is currently employing you. Once you've landed a position - especially if your LinkedIn shows several title bumps during your tenure - all the vultures salivate over how likely it is that you're a high value employee.
With engineering in particular, solid reliable team-players are worth their weight in gold, and, from the outside, there is a strong perception of vast differences in employee skills that I think is mostly driven by the extreme wage disparities we can observe "Sure I've got Sharon and they're a really solid developer - but I only pay them 45k, those hackers in SV make 250k plus bonuses. I can only imagine how amazing they are!" I think this is somewhat further entrenched by the extreme role experience with similar problems plays - and the really deep levels of specialization we have in our industry. Database specialists are absolute wizards when it comes to database stuff and can resolve problems in a fraction of the time someone who's never touched a DB would[1] - and yet both of those developers might be employed as full stack developers. Engineering is really complicated and our field has yet to fracture as much as it really ought to into specialization - so the majority of folks dip their toes into a lot of different pools.
This is totally based on opinion and personal experience but I think that specialization is what really makes it hard to "break in" to engineering - and that specialization makes overcoming the unemployed stigma even harder than in other fields.
1. This isn't an insult to the other developer btw - it's just a lack of experience and possibly a pre-disposition. There are plenty of people who are wizards with a database that will just fumble like they've never seen a lego before if given a ticket to resolve having to do with ops - or systems programming.
It might be hard to get a FAANG job, but it's not hard to find a $100k legacy code janitor job at any old Fortune 1000 in a flyover state.
Getting the first few years of experience is going to be the hardest--hardest relative to the rest of your career; it's not that hard by any absolute measure. Apply broadly, and take whatever comes. If a company is looking for a junior or mid-level SE and wants "1-3 years" of experience (which is common), your degree is that experience. If you have a CS degree and are in a low- or medium-cost of living area, you should expect $60-80k to start. If have a CS degree and are in a high-cost area, you should expect $100k.
If you don't have a degree or experience, it's going to be harder. But why should a shortcut be easy? Is there a secret backdoor career path for people who want to become physicians without going to medical school? No. Do the work, and earn the reward. There are plenty of online and nighttime options for earning a CS degree.
If you apply somewhere and don't get a call back, don't sweat it, and don't take it personally. It just doesn't matter. Hiring is a noisy process, and the cost of a bad hire is tremendous. Most companies will try harder to reduce the number of false positives than to reduce the number of false negatives. Again, apply broadly and treat it like a numbers game. There are limits, though. If you've applied for 10 jobs and not gotten a single interview, pay a professional to rewrite your resume for you.
If you're getting interviews and bombing the technical questions, then study. If you're bombing the cultural/behavioral questions, read some self-help books and join Toastmasters. If you think you're acing the interviews and not getting any jobs, then you're probably bombing something but are too clueless to realize it. Hire an interview coach.
If you're at the point where you have a degree or 5ish years of experience (or ideally both), you are ready to be a $100k code janitor. Learn a common stack well enough to do smart things with it. For instance, if you learn .NET, you should be able to manipulate collections in interesting ways with a single expressive LINQ statement. Pick one from each category (but don't combine Java with SQL Server - I don't think you'll see it as much in the wild):
1. Java or .NET
2. Angular or React
3. SQL Server, Oracle, MySQL, or PostgreSQL
I'm going to offend a ton of niche fanboys now: Don't pick Vue, Go, Erlang, Haskell, or Rust. I'm sure each of them is amazing in its own way, but getting a job is your goal, so you don't pick a technology used by only 1% of employers.
Now I'll offend the embedded and systems programmers: Don't pick C or C++. They're just not widely used in business applications. I know both (at only an intermediate level), but I've never seen either used in a business application. You should know both on some level, but you're not going to get a Fortune 1000 code janitor job with either of them.
Congrats, you are now qualified for the majority of SE job postings at non-tech companies.
19.5 years of programming, but mostly web programming for the last ~12. I want to move away from that, I am sick of it already. There's always something more to learn and even though I don't mind at all -- it keeps my mind sharp which is something I want to keep all the way to my death! -- the churn of knowledge in there is exhausting.
> If you have a CS degree...
I am not from USA and have no degree. I am 41 y/o and I'm a self-taught programmer ever since 12 y/o. Not sure how well that flies on interviews; I feel the US companies put a lot of value on degrees?
> If you apply somewhere and don't get a call back, don't sweat it, and don't take it personally. It just doesn't matter. Hiring is a noisy process...
Completely agreed. I've been in a rough mental and physical health patch for ~3 years now and I've changed more employers/customers than I wanted. Tech hiring is completely broken indeed. You're quite right.
> I'm going to offend a ton of niche fanboys now: Don't pick Vue, Go, Erlang, Haskell, or Rust.
I am not a fanboy at all. I've used 8 languages over my career -- Elixir (stepping on Erlang) and Rust included and I've picked them based on their true, proven and testimonialized merits.
I don't take offense with your statement at all. I presume you meant "aim for something huge and somewhat commoditized that has a ton of legacy code to maintain"? If so, I'll agree with you immediately; there was a period during which I've been barraged by offers from German and Swiss companies almost every day, for months -- all for Java and C# huge legacy beasts.
But sadly that's not where my heart is. :(
Furthermore, I am willing to bet my neck most of those are NOT a code janitor job at all. They'll require a ton of time and attention every day. If I'll do that I'll just find an Elixir or Rust job but at least be happy with the tech stack (if not the area -- the webdev -- which I hate with a passion nowadays).
> Now I'll offend the embedded and systems programmers: Don't pick C or C++. They're just not widely used in business applications.
I haven't been an active C/C++ programmer for like 12-13 years now but IMO you're not on the mark here: there are a lot of business apps but they usually belong in huge old mastodons that are too stubborn to move on (I personally know the VPs of engineering in two such companies!).
But overall you are right -- they are niche but not the good kind of niche; you need a metric ton of battle scars to even qualify there.
> Congrats, you are now qualified for the majority of SE job postings at non-tech companies.
I'd agree but I've neglected networking -- both physical and virtual -- for most of my career and now at 41 y/o I started to feel the negative effects of that. :|
The churn of knowledge can be limited by choosing technologies that don't require constant adaptation. (Time to offend the .NET fanboys): If you pick .NET, there isn't that much difference between .NET Framework 4.5 (from 2012) and the latest version of core. The job still gets done, just with a different set of packages. If you don't have a use for async/await or the TPL, you can go as far back as 3.5 (from 2007).
> I am not from USA and have no degree. I am 41 y/o and I'm a self-taught programmer ever since 12 y/o. Not sure how well that flies on interviews; I feel the US companies put a lot of value on degrees?
Some do, but with 19.5 years of experience, this wouldn't be much of an impediment for you in the United States. All of my opinions apply only to the United States. I haven't worked in other countries and can't comment on them.
> They'll require a ton of time and attention every day.
IMO, a "code janitor" doesn't just sit around all day reading HN. When I use those words, I mean the type of job where you're expected to fix bugs and implement features and not much else. Even if there is talk of higher expectations, there are never any consequences for just going with the flow. You'll rarely/never be asked to work overtime or learn on your own time. You'll only pay lip service to clean code, clean architecture, and long-term thinking. You'll still be expected to show up by 9, hang around until 4, and not screw off the whole time. The job is still a job; it just doesn't strain your brain.
> I'd agree but I've neglected networking -- both physical and virtual -- for most of my career and now at 41 y/o I started to feel the negative effects of that. :|
Headhunters are the antidote to this. When a recruiter wants to connect on LinkedIn and have a short phone conversation about an exciting new position, you always say yes. And if they're not sending connection requests to you, then you send the request to them.
Yes. We are on the same page, just using different words.
I definitely didn't mean "slacking off". I meant exactly what you said: have 3.5 to 4.5 hours of good solid programming work per day (because realistically that's what most programmers cover in terms of actual focused productive time in the standard 8h work day) where you have already ticked the boxes (or nobody cares about them as you said) so you just pull stuff from a backlog and move at a steady pace with not much supervision.
The company I am very soon starting with has people I like very much, plus I love what they do. But if that turns sour then I'd likely be looking for 2-3 "code janitor" jobs in parallel in order to protect my mental health for a while.
> When a recruiter wants to connect on LinkedIn and have a short phone conversation about an exciting new position, you always say yes.
Maybe you are right. To me outright insisting on a phone call is very disruptive and out of place. I've tried it several times and maybe I drew the short end of the stick every time but they all were young and fairly clueless HRs who just wanted to parrot their speech that was supposed to motivate me and then immediately pressure me for an answer. Don't know, didn't find that a good expenditure of my time.
Maybe I am doing something wrong, I am open to that, but I really am not sure that I want to expose myself to such toxic time wasters. Any advice?
Oh, I wouldn't try to juggle multiple code janitor jobs. It only takes one good one to pay my bills. And it would defeat the benefits that I perceive in the code janitor job. If someone wants to put that level of effort into his career, he's better off aiming higher.
> Maybe I am doing something wrong, I am open to that, but I really am not sure that I want to expose myself to such toxic time wasters. Any advice?
Ask for the client and salary range immediately. If they don't give you a straight answer, politely end the conversation.
That's... actually a very good advice!
But what if they counter it with "we'd like to hear your expectations first"?
> If someone wants to put that level of effort into his career, he's better off aiming higher.
You are right but I have zero clue how to aim higher, exactly. Hence my idea.
If it's an internal recruiter, you might get that question. In that case, have a good idea of what you're looking for, and throw out a number at the top end of the range. If you're talking about a senior software engineer job, and you know that, in your area, they generally pay $120-150k, then say $160k. If you want, condition it based on total comp and benefits. Most Fortune 1000 code janitor jobs will offer a nominal bonus, anywhere between 5-20% of salary. Nothing like the huge FAANG bonus structures. But saying "depending on TC and benefits" gives you some leeway to ask for something even higher later on. And it tells them that, if they can pay you $150k plus a 20% bonus, then you could be happy with that. It leaves the conversation open.
If that makes them walk away, then you didn't want to work there. And don't feel bad negotiating like this even if you're going for a code janitor job. Compensation correlates with negotiating skill more than software engineering skill. It's just the way things are.
So I started wondering if I can pivot to the US market -- which was never a goal.
I appreciate your advice. Insecurity and the impostor syndrome can hit even super capable people (I've seen it). Your words help me reassert my self-confidence, and that's sometimes shaky. :)
The amount of money that actually gets delivered to a worker's bank account could be a little as 2/3 of their stated salary.
And many things cost more here.
It'd be a good idea to work the numbers and figure out what your take-home pay would be and how your expenses would change. There are some expat websites devoted to this.
Be up front you about what you are doing. They are going to think 'he is going to jump at any time'.
Be willing to stay there awhile. But be warned some of these places there may be one to two 'big companies' that hire there (and if they do not hire you are SOL). There may be some small startups here and there. So plan on that. There may not be much to choose from there for you. It is why many move away from those areas. So if you are 'lucky' enough to get into one of the companies do not plan on jumping around a lot. You will burn bridges and the community of devs is small there, and they talk.
Be willing to dig into some seriously legacy code. "oh we still use sourcesafe and vb5". The Joel test is a good indicator of how strong they are. "oh we buy the best for our devs" and the computer on existing devs desks is some beige box from the late 2000s with a CRT.
Set your pay expectations much lower than what you are used to. Had one I was looking at, I was one of 3 people who applied. He passed me over because 'I was not in the same state'. I had 5 years 'full stack' exp on the exact type of system he was working on. After a bit of back and forth they wanted to pay nearly half of what I was looking for. Which was not terribly out of line for that area. Another dude thought he could snag me for 1/4th what I wanted. These guys can be cheap. They have a product someone tinkered together years ago. But they do not have enough income to really justify any sort of real work. So they do what they can and usually just farm it out to some consultant group.
You've hit the nail on the head here and this is my main worry. I've been much more selfish lately (last 3-ish years) and I know I definitely did burn some bridges but I can't make myself care very much -- I am 41 y/o and at one point participating in a one-sided "exchange" of trying to appease while mostly humiliating yourself becomes impossible to swallow (but then again, I recognize I've had both shitty luck and self-selected bad employers due to personal drawbacks that I am still actively fighting with).
> Be willing to dig into some seriously legacy code. "oh we still use sourcesafe and vb5".
One of my strongest selling points as a senior dev is that (a) I don't mind dirty and heavy work at all, and (b) I have an excellent eye for detail, very rarely miss something and (c) I try to leave the code with better readability after I finish my current task on it.
That being said, many companies are too impatient. I've hit the brick wall of "we want somebody who can hit the ground running and we won't provide any training" personally at least 5 times in the last 3 years. And I seriously don't know what to do about that; I certainly can't know all tech stacks and domain expertises on the planet!
And it's flabbergasting how much in denial many companies are about the risk management aspect. I mean they know; they absolutely know what's going on but they concluded that training new hires is a huge business risk (due to most people never staying more than 2 years on a job) so people like myself -- even if senior and very experienced -- have literally 1% chance of getting hired in many such places.
They do have a point and they are mostly acting rationally in this situation; but they could still spare some minimal training so they stand to gain a bit more from the employee that's going to move on maximum 24 months after being hired. One or two months of training isn't that expensive for them I'd think.
> These guys can be cheap. They have a product someone tinkered together years ago. But they do not have enough income to really justify any sort of real work. So they do what they can and usually just farm it out to some consultant group.
I am realistic about that aspect and I accept it. If they wanted to pay top dollar they'd just court somebody who is 45-50 or more for several months and then do their very best to promise them retirement in the company and all the good stuff that a long stay can benefit the person.
I know they want to pay less but I'd aim for having 3-4 such customers, independently, and collect a 120% - 200% of my normal payment combined through such venues. Not always sustainable in terms of mental strain and energy but I've pulled it off successfully even as shortly as 9-10 months ago without being hugely taxed in terms of health.
RE: the consultant group trope, I suppose this is where I fail in terms of marketing. Many companies just can't take a single random person seriously even if he's John Carmack in disguise. I suspect I need to make a fancy consulting website with some fake testimonials and pretty graphics, have a photo in a rented suit and then I'll suddenly be taken seriously. People can be very shallow and easy to manipulate, huh?
I am a bit flippant here but I likely should indeed work on marketing. But how does one strong and senior single programmer advertise themselves as a consultant or, generally, a guy you go to to solve a business problem, and who is not a wage lemming? Got any pointers on that?
For your last Q I would say a lot of the same points still matter. They are going to want someone 'local'. Someone who can come in on a moments notice when they are in the thick of it. Also keep in mind a business is not programming. I would suspect what you are really asking is 'how do I sell things'. That is a much different topic. But targeted advertising, cold calling, trade shows, emails to former and clients and colleagues. It may be worth looking into hiring an advertisement firm for some small ideas. Do what you want your customer to do and hire an expert. If you do not have the cash for that you are going to have to do it yourself. Your personal network is probably your best bet for starting to grow your business network. My dad a former insurance salesman spent a lot of time in bars selling and meeting people. They had hundreds of hours of training they took to be any good at it. It may even be worth getting a short part time job as a salesman to get the idea of what to do. Think of it as just as there are jr devs you are jr salesman. But keep in mind, there are several types of sales. Those that sell themselves (they were already going to buy it, it is just from who that matters). Those where you need to work the sale. This is the harder type. You have to basically sell yourself to them. This is either showing them they have an existing need that is not being fed, or faking it by 'creating' a need they did not know they had. Another way is to associate yourself to one of the consultant groups out there. They take a cut but can help with lead generation.
I see many, many more developers lamenting the "requirement" of a CS degree to get a software development job than I see lawyers lamenting the "requirement" of a law degree for a law job or doctors lamenting the "requirement" of a medical degree for a doctor job. If it opens doors, and you want that door open... get the degree!
CS Degrees from local universities can be had for far less cost than a 250k law degree and less time than a 13 year MD.