Further, I think it needs to be said that at smaller companies (read: startups) whats really happening is that applicants are being evaluated for whether or not they're cool enough to join the club. We call it "culture fit" but we're really just trying to vet their personalities.
EDIT: To be clear I do think people's personalities need to be evaluated, especially with smaller teams. I just think we should drop the pretense that "implementing" a depth first tree search on a whiteboard tells us anything other than that they could summon that algorithm at that moment in time with that amount of coffee and whether or not they had a pleasant morning. First of all, I want engineers that are good at working with others, and second of all it takes months to truly evaluate an engineers ability to do their job. We gain nothing by pretending this isn't the case.
Whiteboard problems absolutely do work.
The vast majority of applicants cannot code at all. And I mean that literally: they're at a loss at how to write a function that adds two numbers or counts the number of elements in a list.
Worse is that these guys can be employed as developers (even 'senior' ones!) for years and years in 'serious' enterprises.
How, you ask? By using copy-paste and cleverly navigating their enterprise processes and dodging responsibility.
Maybe this is what you mean by 'being good at working with others', but it's definitely not what I want in a software developer.
Source: I've interviewed a great deal of people for lots of positions over the years.
Of course once I did land a job it took about a week to shake off the rustiness, and the company that hired me is thrilled.
The point is that companies like Google and Facebook can afford to miss out on those devs. But smaller companies should be looking for diamonds in the rough, not trying to mimic the FAANGs and getting their leftovers.
Seriously, Where are you finding these candidates? seriously.
I've worked at a number of mid-sized companies, and interviewed dozens of candidates, and I have never, ever, ever come across a candidate that couldn't write code on this level: "write a function that adds two numbers or counts the number of elements in a list".
Talented people frustrated at the process just don’t get how bad bad coders are. I would never have believed it myself until I experienced it.
I'm genuinely curious how you manage to find all these folks. I've been on the interview team at my company for a several years now(mostly in house, some first pass phone screens) and I've never encountered a single person who was literally unable to code a trivial problem. The last time I met a "programmer" who couldn't code was first semester university, and I thought most of them quickly flunked out/changed majors. I wonder if there is something about your company/recruiting process that is particularly attractive to them, or if our prescreen(which I'm admittedly no expert on) is just particularly good at filtering them out, or if there's some other explanation.
No, you mean that hyperbolically.
Not only does it simply not happen that "the vast majority of applications cannot code at all" -- this literally has never happened at all, in my experience.
What does happen is that you get a range of people on a spectrum. And yeah, a fair number of them can't code very well. They're slow, they don't see smart solutions, whatever - or are just plain sloppy. But that's quite different from "not being able to code at all."
As to those people who (supposedly) can't "write a function that adds two numbers or counts the number of elements in a list" -- most likely they're simply freezing up from the anxiety of being whiteboarded by a perfect stranger for the first time in a great while - or perhaps ever. (In fact that's exactly what happened to me, on my very first on-site interview after college).
Or that is to say: they haven't internalized -- and produced defenses for -- the (intentionally) awkward and humiliating ritual of the modern tech interview process.
And again, you should only be actually seeing these people once in a blue moon. Unless the people running your incoming "pipeline" are utterly incompetent, and are constantly feeding you a stream of unqualified candidates. In which case your companies much bigger problem a lack of engineers who are able to "ace" HackerRank problems in 59 minutes or less.[1]
[1] Which, lest be honest now -- basically can only happen after extensive time spent on practicing these problems in advance. Or that is, by blatantly gaming your hiring "filter".
And one more thing:
How, you ask? By ... dodging responsibility.
No - their jobs just have different metrics for "responsibility" than yours. That's just the way many businesses are run, whether you like it or not.
I've screened people like you describe, but the only time I've interviewed them face-to-face was when they didn't have a technical phone screen for whatever reason.
FWIW, one of the ways I screen companies when I'm looking is whiteboard problems. I refuse them and move on. In my experience, only HugeCos and places with problems use them. I'm sure that's not true, but I have a necessarily small sample-size, and skipping over firms that do it has worked well for me so far, and there are plenty of fish in the sea. (I do in fact suck at writing on whiteboards, I just don't consider it a skill worth developing to pursue jobs I probably don't want.)
I agree with you 100% if "whiteboard problem" means, sit with them while they type up a function in an IDE that does something common (e.g. validates a string, implements some error handling, do a failure backoff, etc).
I disagree if it means, ask them to implement an algorithm on a whiteboard to steer a robot through a maze in a time with optimal algorithmic complexity. This is completely useless and the people that can do this have little overlap with people that can implement easy to read/debug code worthy of production and maintenance.
I've been interviewing devs for years, and this is not my experience at all. The vast majority of applicants that I've interviewed can code, although they tend to be minimally competent at it.
>The vast majority of applicants cannot code at all.
You kinda set up a strawman here. If the purpose of the whiteboard problem was just to establish some very low baseline of coding ability then I doubt many people would argue about their effectiveness. But companies don't use whiteboard problems for that purpose. In my experience (on both sides of the table) they are given with increasing levels of difficulty to see how far the candidate can go. They do not simply ask a few basic questions like "how would you write a function that returned the sum of two numbers" or "count the number of elements in a given array."
I'm not saying there is a really good answer to this. The best I've seen is that some people just seem to be good at hiring and others are not. I am one who is not. I am also a terrible interviewee. The whole process whigs me out.
We have 'hard' questions in our pool we can ask (where optimization actually comes into play) but I've found that the easy questions weed out so many candidates it's not worth it. There's no room for debate if someone tries to write 15+ if statements rather than creating a loop and one if statement.
Absolutely untrue in my experience, I can't speak for other people. To imply that this is absolutely untrue in the global space would require that I have interviewed everyone.
Whiteboard problems absolutely do work in my interviews. Again, use of the word absolute indicates that I've never interviewed without a whiteboard. Given the high number of candidates I've interviewed, this might indicate a flaw in the interview process.
The vast majority of applicants I select for interviews cannot code at all. And I mean that literally: they're at a loss at how to write a function that adds two numbers or counts the number of elements in a list. I should consider the possibility that I'm selecting the wrong people for interviews.
Worse is that these guys can be employed as developers (even 'senior' ones!) for years and years in 'serious' enterprises. Clearly other companies are making the same mistakes I am making in their candidate selection process.
How, you ask? By using copy-paste and cleverly navigating their enterprise processes and dodging responsibility.
Maybe this is what you mean by 'being good at working with others', but it's definitely not what I want in a software developer.
Source: I've interviewed a great deal of poorly selected people for lots of positions over the years.
I'd just note that you can smuggle nasty behavior into any formal mechanism. Witness the legal system (which you'd engage here) - whining about bad-faith arguments in court is basically a national sport in the US, until the whiner is the plaintiff.
Fortunately, the management chain caught this and ... corrected the issue.
Culture is preference between two otherwise value-neutral positions.
For example: encouraging collaboration vs. encouraging independent work.
Or supporting self-organizing teams vs. all work having a WBS/charge code.
Culture is not choosing between being respectful and not; or choosing between being openminded and not; or choosing between being honest or not.
I don't blame them for not wanting to hire someone pushing 50. They just don't know if they're going to get the cool 50-year-old or the grumpy old troll who won't listen to anyone.
Of course they can never come out and say that for obvious reasons.
Yes ! The worst engineers I have had to work with were sometimes pretty skilled technically, but their ego or shitty personality was preventing them from being somebody the team could benefit from.
I would have thought that it is why we have cultural fit interviews though.
Personally I would sooner drop whiteboards than cultural fit interviews, but the later probably need way more training for the interviewer than what I got.
Sometimes those people conducting the interviews are on their first or second job, and generally those younger coders have a tendency to emphasize things like obscure syntax for whatever programming language and the latest programming paradigms. It is overly language centric rather than dealing with how to solve problems. That is a terrible metric for the issue at hand "will this person be an effective at their job".
The ideal would be pair programming for an afternoon.
I've seen this end up in teams that lack diversity several times. My last company was big on interviewing for fit. Then a year goes by and you realize most of the people you've hired are a clone of everyone else. I had a co-worker that once argued that you can't judge people based on personality in an interview and I tend to agree with that now
- Whiteboarding: algorithmic knowledge not relevant to daily tasks, we have google, obtuse coding environment
- Take home exams: companies have less incentive to respect time of candidate, favors candidates with lots of time to spend interviewing
- Small consulting gigs: not practical for programmers with existing jobs, draws out job search
- Informal conversations, reading resumes: not stringent, susceptible to talented bullshitters
To be 100% clear, none of the above is my opinion, I am simply restating what is regularly posted at this online watering whole.
A discussion of the failings of white-boarding without the context of alternatives is meaningless because interviewing techniques are search functions that all have precision/recall tradeoffs. That there are negatives to white-boarding is a given.
For example, consider that white boarding interviews are short (3 hours). This naturally limits the company's ability to evaluate candidates (less precision), BUT it saves time for the candidate and company (more recall).
So what happens here at HN every week is you get five people all bad mouthing a different interviewing technique, but we never get any closer to a consensus on a technique that would please even a simple majority of programmers (let alone everyone).
TLDR; you don't like white boarding, so what about making a compelling case for something else?
Whiteboards are for writing down algorithms and quick charts and other design-phase stuff, not writing compilable code.
Even when given as a "take home" challenge, they can't even copy-pasta an example off the internet...
We need to admit that interviewing is hard, and we aren't good at it. In fact, we don't need to admit it, we know it already.
Interviews used to take about 6-8 hours of my week, and I was usually completely destroyed by the context switch. I remember many days when a deadline was very close, and I absolutely did not want to do the interview, but had to.
In general some days I was in good mood, some in bad mood and even though I tried to make the interview as objective as possible, I am absolutely sure I failed. Keep in mind, one interview has 5 interviewers and guess what they had bad days too.
From those 500 interviews, I was certain for about ~5 cases, for the rest I could not say if it was my fault, or the candidate's fault that the interview went south, in that case I pretty much voted as the majority was voting.
I still feel very bad about people's livelihood being decided in such shitty process, there is absolutely no way that in 1 hour I can find out if someone is good. I knew that, my managers knew that, their managers knew that, and yet we kept going..
I feel that adding more time/people to the process only increases the variance, adding more structure to the process only increases the bias (like we get people who can pass interviews, but not do their job).
A one hour interview required a minimum of 30 minutes prep to read the resume, etc and generate questions. Then at least 30 minutes to write up my findings in a way that would allow me to participate in the roundup, which could be up to a month away if I was the phone screen. The roundup itself accounted for at least another 30 minutes. So you were 2 hours and 30 minutes into it assuming everything goes perfectly. It's a huge time suck.
But beyond the time that I lost, it's a very difficult and crushing experience to have candidate fail and have to be the one that says "no" (and that is happening way way more than yes, especially if you are interviewing early in the pipeline). But it's equally disheartening to see a spark of something in an interview, tease it out, imagine that the person can be raised up to become a good developer only to have the candidate get shot down by all your colleagues because they didn't have a similar experience.
I disliked losing time during the day, but I really disliked the emotional burden of interviewing and saying "no." I empathize with the person on the other side as I've been there.
In some cases when there is "no" it comes with clear instructions like: hey you need to know v8 more or understand hotspot better and try again in 6 months, but then there were those cases where the committee was incapable of giving feedback.
Instead of throwing tricky algorithm questions at a candidates, I scour their detailed employment records for the most relevant experience for the first project. In other words, I'm looking for relevant experience rather than top-of-the-head algorithmic brilliance. In the interview, I pose our project problem, and the candidate who gives me the most impressive proposal to get that done gets a chance to solve it.
I hire from an international pool, often on Upwork, so I can start developers on a project basis.
If the developer does a great job, we hire him/her for another project, and so on. At some point, this becomes a full-time relationship, with stock options and other perks.
Using this approach, we value experience over "raw intelligence," per se, and we end up with a team of self-directed developers who are fabulous at delivering great finished products.
It's amazing how well this has worked out for us. I think there's an arbitrage opportunity to avoid coding tests and hire on this basis.
I wish all jobs could just hire devs for short contracts then convert the keepers to full time. I'd be more than happy in that scenario because I know they'll want to convert me and now it's up to me.
I wish I could always hire developers to start on a project basis, but that's just not possible for many (most?) of the best local candidates. Someone who is great who has a full time job at company A is very, very rarely interested in leaving for company B on a project basis.
I think the reason people do this is a mix of 1) not knowing what traits to look for 2) not comfortable with unstructured conversation 3) frankly that it takes work to evaluate each resume and research projects enough to have a useful conversation.
For me though, how they achieve success at past work is the best indicator of future success.
You'll get the talented, flexible people that can get things done.
Also just because someone can't come up with the coolest solution for your project, doesn't mean they aren't good developers. This is even more biased than algorithmic interviews, because algorithmic interviews have structure. I actually CAN solve a puzzle in 20 mins. You definitely can not solve a project in 20 minutes or even an hour. It is impossible. And the best candidates will be those who sit back, analyze the problem for days or even weeks and come up with a good solution for your project. This approach is so infeasible for general interviewing that I don't even know where to begin. You are basically filtering out EVERYONE and take the one person who knew enough upfront to accidentially solve your problem best...
To me, "impressive proposal" means "articulation of a workable plan", the components of which are relatively small, actionable, and take into accounts requirements, and that demonstrates a good understanding of risk. In fact I'd argue that the ability to do this kind of top-level break-down well is one of the best indicators of seniority. The downside is that to do it well requires knowledge of a very specific process, architecture, and technology stack. That is, if you're good at breaking down problems use stateful Erlang and OpenBSD running on bare-metal with web clients, you might have an issue breaking down using stateless C# on Azure with Android native clients. Some combinations are more compatible than others, of course, but any senior dev in one stack is going to have to recapitulate the learning curve of another stack before they can regain this superpower! (We may like to think that only architecture matters, but it is relatively rare that an architecture rendered in one stack is actually isomorphic to the same architecture rendered in another!)
Making sure that developers have the "needle in a haystack" solution that you're looking for almost guarantees that you'll weed out the most talented folks -- the ones who are programming generalists that can reason about and solve any kind of programming problem.
I believe these run into legal grey areas because they have to be obviously relevant to the job in question, which likely leads to the tests getting progressively more domain-specific as time goes on.
Programming does seem to be a field in which general intelligence is a big predictor of success. Whereas a field like management probably personality and general intelligence are more equally weighted.
Well yes. And that is what the current crop of "programming puzzle" interviews essentially are; the next iteration of attempting to measure people on a cardinal scale instead of an ordinal scale.
The key to remember is that evaluating on a cardinal scale is much more efficient than evaluating on an ordinal scale, so companies will do everything they can to transform the "secretary problem" into one where they measure absolute metrics instead of relative metrics.
Now, whether those metrics align with business value is a separate issue. All evidence suggests that they are largely independent of business value.
Basically a scientific experiment, have someone else ask and grade the questions, but those results were not considered for hire/nohire. Then 6 months after a bunch of people were hired we pull the results of the test and compare to their performance reviews. If the questions were a good predictor or future success we could use them on future interviews.
The overhead of this was more than we were willing to pay so we went back to HR's allowed questions.
Legality...not sure.
Most opportunities look for some high degree of specificity. For contract work or a pre-defined task, that makes sense but for companies that need a rich talent pool, I don't know why there appears to be little opportunity for generalists.
That doesn't mesh so well with the modern era of employers hating spending a dime on training, even if it would save them a dollar, and employees wanting to jump ship every other year for that sweet sweet 10% compensation bump
Thought in the US you will run into problems due to Griggs v. Duke Power Co.
1. These "dev gate" programming challenges are filtering out senior devs, talented devs, creative devs etc. people who would be great at the role.
2. There are people applying for these roles who can't knock out a decent Fizzbuzz solution (in any amount of time).
3. For many roles, there's a flood of applicants
Any solutions to this need must address all three of these things simultaneously which seems astoundingly difficult.
Next is a five minute phone screen. We're a Java shop, so I ask them something dumb, like "what's the difference between public, private, and protected?" Something any Java dev would know; I'm just trying to find out if they have ever actually used the language.[1]
People that pass the phone screen get a Skype interview, where they write code in an IDE. The first half hour or so is chat and trivial problems like "sort this array" or "return true of this String starts with a letter between A-Z, inclusive." They're allowed to Google and use the standard libraries.
Finally, we have a "close to real world" problem for them to work on. It's a standalone, mostly-toy CRUD application, and we'll ask them to add a feature that represents the kind of work they'd be doing. Again, they have their IDE of choice, Stack Overflow, etc.
I don't think we've had a bad hire since we started using this process. Have we turned aside some all-stars that interview poorly? Maybe, but the team we've built is really good at what they do, so I'm pretty happy with the results.
[1] We have hired Senior devs that don't know Java. One of our team leads was a C# guy for a decade or so, but he was smart and available, so we scooped him up. Java is easy to learn. Programming well isn't.
My first job using c# was in 2010, and I have been programming in java since 2002 at that point. I was productive pretty much since the first day & not because I'm a genius - c# is that similar to java...
I suspect that if you'd have hired a php or a python expert they would have taken more time to get used to java (not that that would have meant you shouldn't hire them!)
I still don't know Java that well, though ;-)
Instead put folks on trials and keep the good performers.
A few years ago I instituted an "interviewing code of conduct" for my teams with a few tenants that we've refined over the years, but the first one was "We will treat every candidate with respect and empathy in our interview process". The team has adopted some attitudes and techniques to do so while also not compromising on the talent or skills we are looking for. We've gotten very positive feedback on our interviews, so we think it's working.
I don't have a silver bullet solution to this, but I think a few things go in the right direction:
1) Candidates should have to write code in interviews. But they shouldn't have to solve puzzle problems with "gotcha" solutions. If there's a specific trick that requires an "aha" moment, you are really testing how well a candidate solves puzzles under pressure, not how they code.
2) Test candidates on what they are best at. If someone has been working in C# for the last 5 years, don't ask them to whiteboard in Python, which they used in college. Picking up new languages/frameworks is quick for someone who knows what they are doing [0].
3) Offer candidates a choice between an in person interview or a take home coding test, the latter of which would take more time. Some candidates don't want to deal with doing a 6 hour take-home coding problem [1]. Other candidates suck at whiteboarding under pressure. So more options seems better.
[0] There are exceptions to this. You might have a unique problem and the budget/resources to hire a rockstar for a specific role. Desirable companies willing to dole out big salaries do this all the time. But much more often, I see companies offering average salaries for very very specific roles. One company near me told me that I was one of the best candidates they've seen, but they are looking specifically for someone with 1+ years of Java experience. I could have picked up the basics of Java in a month, and been fairly proficient in 2-4 months. Meanwhile, they are still looking to fill that role and it's been over 2 years.
[1] I've had a few companies that insist on this, but I haven't had a period of unemployment where I have the time for this. Good developers tend to be/stay employed, so if you are looking to hire senior devs, you probably need to consider their schedules. Unless I'm desperate to leave a job, I can only make so much time for interviews.
I’ve never come across this myself, but I always figured that sort of interviewing would correct itself over time - if you ask questions that nobody is going to know the answer to, eventually when three years have gone by and you still haven’t hired anybody, you’re going to have to adjust your tactics.
There's now a better way, now that a lot of people have open source contributions. Look at their open source contributions, especially if they're involved in public discussions as well as in code. Then you can followup and ask them about those.
Open source behavior is not necessarily quite the same as workplace behavior, especially if their participation was unpaid, and they had limited time, and the team dynamics were different, but there can be a lot of overlap.
(Simple example, using someone famous: if you did not know anything about Linus Torvalds, and didn't trust his resume and references, you could learn from looking at his open source participation that he knows how to code, has managed ambitious projects with cat-herding, is knowledgable and conscientious, historically has a very frank manner that some might find discouraging, and has recently reflected on manner and is modifying it. If that isn't enough, start discussing a technical topic with him that doesn't seem to involve proprietary IP.)
One engineer taking a quick glance at open source participation, and then asking questions about that, is arguably more useful than the engineer spending the same amount of time asking some contrived question and sitting in a stuffy room while the candidate does a theatre performance under conditions that aren't representative of real work.
Also, before considering dumping many hours of take-home makework programming on someone, it's respectful to first take a look at their open source. (Especially with a person who does open source on the side. There's an extra frustration with takehome, which is that they probably have backlogs of unpaid open source things they'd like to spend time on, and the takehome is hours of similar work in free time, but gets thrown away.)
I hate wasting time on candidates that can't answer rudimentary programming questions and I hate being in interviews where I'm asked questions which I feel are silly or irrelevant. I can't even trust my results sometimes because there's always that feeling that perhaps a candidate missed a question because I was a poor communicator.
Listening in on interviews with my team mates has really opened my eyes to the random nature of hiring. I'm certain I would not have passed the bar if interviewed by Team Member B instead of Team Member A.
This sentence shows a level of awareness sadly uncommon, that I don't believe I've encountered in... thousands of interviews.
I have been in charge of smallish engineering teams for around 5 years (as head of engineering for different startups). In the past, I used to actually do the 3-HackerRank-timed question as a 1st automated filter.
The problem is that, by testing for "fundamentals" (algorithms and data structure really) I skewed my hiring pool to the ones that were best at those.
Who is the people that are best at solving those kind of puzzle problems? (like the ones in HR, Codility, CodeFight, Codewars, etc), those most likely are Jr developers that are in Uni or recently graduated and spent their Uni free time in coding competitions.
The problem with that is that, these are a very particular type of programmers: They are super-effective in writing tiny one-of code to solve a specific "closed" problem. They usually don't care about testing, code reading quality, interactions, maintainability, etc. Given that they optimize for time and "pass the test cases".
Because of that, suddenly I had like 10 devs that were very good at algorithms but very Jr with regards to Software Engineering, architecture, maintainability, business understanding, etc.
Nowadays I have developed an automated challenge that 1. Requires coding, 2. Requires HTTP requests interaction, 3. Requires thinking and allows me to filter out people that really don't know what they are doing ( https://paystand.ml/challenge/ ).
WRT the 1 hour interview, I have always used a modified version of ( https://sijinjoseph.com/programmer-competency-matrix/ ) to be as objective as possible, and to be able to score Developers in a wide range of skills, and not only "they don't know how to solve the problem of returning a correct sub-tree from a BST within certain ranges". Sure, Algorithms and Data Structures are part of the requirements, but even knowing little of that should not disqualify you.
In fact, I’ve been thinking how I would approach interviewing candidates. It seems to me a much better way to interview would be to have candidates do a bit of a show and tell with a project they found challenging. Come in, bring your computer, show me what you’ve built. I’ll do my best to understand it, then I’ll ask questions about it: which aspect was the most technically challenging and why, what was your favourite part to work on, least favourite and why, what would be your scaling strategy and have them go into detail about that, etc. I’d much rather hear how a person answers questions about a project they’re very familiar with than have them do a bunch of arbitrary code problems. What’s wrong with this approach?
Further, there are _tons_ of very good engineers that cannot do 'a bit of show and tell' easily. They basically shut down. Doing the process you outline will optimize for talkers, and the industry is full of people that can talk but can't do.
Don't take those jobs if you want to be hireable I guess? You'd have to be joking to think a HackerRank quiz is going to help you glean any information about their expertise. Such expertise, by the way, is something I'd like to know about. Figure out a way to talk about it. Tell me the situation (you can't disclose real details) and then tell me about a hypothetical project with similar parameters in a way that doesn't break your contract. Or make up an imaginary project -- if you're actually a good programmer you can come up with something that sheds light on your technical ability and understanding.
> Further, there are _tons_ of very good engineers that cannot do 'a bit of show and tell' easily.
I'm sorry, soft skills are essential at my imaginary company. You need to be able to explain your thinking at an abstract level. I don't care if you can't do whiteboard problems, I get that - I can't either - but you do have to be able to walk through problems with other people. Especially problems that you know and understand well. If it's the interview environment that's the problem, well I'd like to informalize that process as well too so people don't feel so nervous about the whole thing. But if you can't explain a problem to somebody 1 on 1 then you'll probably be a very annoying person to work with.
> Doing the process you outline will optimize for talkers
It would optimize for "explainers", not "talkers". Talkers are usually people who can't explain something, and they're fairly easy to weed out from the people who actually know their stuff.
Unfortunately that was the company that was all 25-year-olds and had a terrible commute, and when they heard my previous salary all interest dried up. But all interviews should be like that imo.
Most egregious example: I interviewed at a household name company, whose entire web stack was built upon a technology I created, and they still gave me a whiteboard test.
I'm continually astounded at the number of people who can't sort a list (with their language's standard library), clone an array, or do basic string manipulation. I've had a staff engineer at Google ask what the sleep command is in JavaScript. A senior engineer from Twitter didn't know how to use arrays ("We don't really use arrays in Scala").
I don't disagree that many companies do interviews wrong. But there's also a huge number of "senior" engineers who simply shouldn't be senior in the first place. Perhaps it's a result of companies handing out promotions to keep folks around rather than to recognize talent.
But I can't tell you what the sleep command is any of these languages. I look it up every single time :P
I'm good with the sleep command in my many different languages. It's dealing with dates in any language...
I suspect 10% of of StackOverFlow hits are developers remembering how to parse a date in some form or another.
https://en.wikipedia.org/wiki/Interference_theory#Retroactiv...
If the question is from somebody with extensive experience in JS, that's a clear red flag (I don't have any extensive experience in JS). If it's from somebody with passing experience, it's not that bad. That said, I have no idea how to call sleep in any of the ~4 languages I'm currently using either.
We run about as practical a process as I can imagine. A short take home exercise where you use your own environment and build a very small project and are free to even have a starter ready to go ahead of time to focus on the question asked.
In house we have a project you work on on our code base. Very small. Maybe ends up requiring less than 20-30 lines of code for the day. Most people who come in are always familiar with our stack.
The amount of people that just fall on their face is astonishing. Many people will be fine with Greenfield development but then have zero skills being able to deal with an existing code base with places stubbed out with //todos and the ability to pair with people on the team.
I'm convinced people are getting turned down not because of the interview process, but because they just aren't that good at the end of the day.
Yes. I do not need a bunch of code wizards, we aren't solving if p=np daily. But that doesn't mean I should accept people who can't code I'm hopes of them growing into fine developers. I can do that worth one person, but not when bringing on 8.
Do your engineers work out of a cave with no internet and code on cave walls?
The job was to write JavaScript, not to do any architecting. There was nothing unclear about the job role. And they had claimed to have built [a very important dashboard that I won't mention to keep them anonymous] mostly themselves, which was quickly disproved.
You're not hiring me for my encyclopedic knowledge; you're hiring me because I get the job done quickly and effectively, using a proper design and clean, tested code.
If you're working in a small company or a startup, then you don't need BigCo senior engineers, you can get away with people who haven't developed these skill sets. However if you have intentions of growing, either in your system size or in your headcount, you shouldn't discount these engineers over minor details like this. Ask them higher-level design questions if you actually want to test their abilities, otherwise you're looking at the wrong metrics.
Then they should apply for a job where their skills are relevant. If you're applying for a job where you're writing code (like all of the ones I described), you'd better be able to code.
Edit: and we let you Google whatever you need in the interview. If you can't figure out how to clone an array (an implementation detail of the interview question) on your own, I don't know what role you think you're applying for.
I had one guy get very angry with me when I asked him a programming question; he insisted that that just wasn't what a senior dev did.
Moreover, keep in mind that for some orgs a Senior dev is actually someone that does more systems design, i.e. an architect. Make sure you ask them those sorts of questions before discounting their abilities. You don't want to be having an architect refactoring your frontend, that's a silly way to spend your money.
I should have been more clear about the JavaScript issue: there is no sleep command. The candidate didn't know how callbacks worked. In JavaScript. Callbacks in JavaScript are how _everything_ works.
But I couldn’t find all matching sub trees within a binary tree at the whiteboard in an hour (45 min really). I haven’t done a formal survey, but my extensive experience and discussions with a lot of devs tells me that this really isn’t about fizzbuzz or other simple things.
It’s time to stop pretending this is about weeding out people who can’t code. Companies by their own admission set a very high false negative rate.
Then they claim there is a shortage and successfully lobby the government to create a shadow immigration system putting tech companies in charge of who gets to work in the US and the conditions under which they are allowed to remain.
I think Software Development has a problem in that there is no space for a middle-ground career path. I typically compare myself to a studio musician. I'm never going to be a Rock Star, but you can plug me into any band and we'll make a good recording. That's why I like contract work... nobody cares about my age or history, I can just hit my marks and do what I love. I'm not Senior, but I don't know if I really ever want to be either.
if these highly competent people can't answer your questions, you really need to take a second look at your Questions.
Have you worked in the industry for longer than 2 years?
> ask what the sleep command is in JavaScript.
> We don't really use arrays in Scala
These all seem like genuine things. In more complex companies, people may use more exotic data structures and/or have abstractions around data access.
Silly comment overall.
I don't care what kind of abstractions you have at your current company. We don't (/didn't) have those abstractions. If you can't show me that you can do CS101 basics (appending to an array?) in the language that you claim to write day to day, how can I trust you to be able to write the code that we describe in the job description?
When you first get out of college you can write a 500 line program, and you get dropped you into a million line program. You get assigned a senior engineer to help you over the hump this takes a few years while you learn things that "everybody knows" but are not taught in school. Hopefully you get the first part of this over as an intern, but there is still more to learn.
Once you get over that hump you can do okay on your own. You can be assigned to write code and you rarely need help (you will always need help, but this point not often). You are still learning, but overall you get things done.
Senior engineer is you have been around for a enough years for a few of the following. Different companies value different things, and I've surely forgot something. I know engineers who never made the senior level because they refused to do something on this list even though if forced they were proven to do well.
You start to teach the other junior engineers how to be better engineers.
You start to see the larger picture of the whole system and how it should be changed for the better.
You start to see how the work individual developers do fits together and get involved with planning on how it is done (breakdown and ordering) so that the project finishes on time.
You become a specialist in something that is important to your company. This can be company specific, or a generic skill that applies elsewhere. (note that if the company doesn't realize how important the area is you won't be rewarded - preventing a problem the company never knew they had won't help)
Mozilla engineer leveling chart is a good example. There are probably other companies that expose the criteria they use as well.
I recent left a level 5 of 7 job for a title level 2 of 6 and still managed a 30% pay raise. On paper, it looks like a huge step back (Consulting Data Scientist to Software Engineer), but in practice, it's actually more of a technical leadership role.
1) Junior Engineer - can write basic code, but usually needs help for bigger projects or navigating a code base.
2) Engineer - Is pretty independent and can whip together what they need based on a design.
3) Senior Engineer - Can take a problem and build a design for it, can lead a team of lower-level engineers to properly implement the design.
There are higher levels like staff and principal engineer, these ones typically are the same as senior engineers but are at larger scopes.
At levels 3 and higher, you tend to write more English than code. You're there to decide what code gets written, rather than the specifics on how it gets written. That's what levels 1 and 2 do, they'll take your designs and implement them.
--
Been my experience with multiple SV startups now. In some cases went through back-channels to find out what happened (In one case - whole team loved you, CTO had your offer, CEO overrode at least minute and wanted a non-US contractor to avoid benefits pay)
--
Utterly absurd amounts of time and you still can't be sure!
--
My proposals -
#1) Companies that want take-home work or multiple day interview processes after initial screening /pay/ for them. You are already paying for your engineers to be inteviewing/etc. Pay the applicants. Keeps incentives aligned (you only advance ppl you really want to see how they work, you don't expect 40 hours + of work from me because I should feel blessed to get the opportunity to work for you...)
#2) More conversation. You can get way more ideas about someone's technical acumen by asking them how they know when to refactor, what they think about tradeoffs around technical debt, how they would think about data modelling something, etc than writing code. A brand new programmer maybe do some pairing, a person that has been writing production code for 3,5,10 years? Ask them the interesting questions and just talk!
#3) Hire quicker/Fire quicker - I think Riot for example will pay you money if you decide it isn't a good fit and you leave. Everyone is already employed at-will. I'd rather have a 3 month probationary period than try to find time for 40 hours of interviews while working my day job.
This is a cancer because many hiring managers will assign out these homework assignments to all the applicants, before doing almost any due diligence or getting to know an applicant.
If you want someone to jump through 8 hours of interviews and calls, then 8 hours of coding, you should be paying them at least for the coding.
Between hearing things like this, the way the internet is going, the way cell phones are becoming more closed up and walled in...just everything about the way the world is going...
...I honestly am beginning to think my best course of action would be to (somehow) change jobs entirely, move out to the middle of nowhere on 40 acres, drop off the internet, build my own cellphone (which I've mentioned), and just go back to hacking on my TRS-80 Color Computer. If I ever accessed the internet again, it would only be for email and maybe the occasional "telnet BBS" - and that would only be after a 50 mile drive into "town".
While I know and understand that despite 25+ years of experience I may not be at the same level as others with fewer years, that time should count for something. In my case, what I lack mostly has been any sort of opportunity for a "management" role; I have never been a team lead, for instance. It pains me. It does nothing for my self-esteem as a software engineer.
But that shouldn't count against me. Nor should being able to solve some rando problem concocted as a gatekeeper. I've worked at places for short periods, and I've stuck around at places far longer than I should have. But lately things have been hovering around jumping at 3 years, and that time seems to be coming up for me at my current place of employment.
The thing is - I don't want to leave. I like it where I'm at. I enjoy the problems. I enjoy my coworkers. I enjoy the development environment. But more often than not, it seems, outside forces seem to conspire to kick me out whether I want to go or not.
Maybe I'll get lucky once more and land a new position. Maybe I can use the fledgling skills I have in ML in some manner. Or I might have to drop my salary requirements down and take something lesser, just to stay employed?
But at some point in the future - the near future - it feels like it won't matter what I do or don't do, I won't be allowed to "make the cut" any longer.
Thank $DEITY I have no debt other than my mortgage...
In my mid-30s and this feeling is only growing stronger. I don't even have a demanding job, I never work more than 40 hours and I get to implement the latest and greatest (.NET Core, Vue).
In the last 6 months I've applied to several remote jobs. I always do well on the sample projects they give me and I have a good personality during the interviews... cracking a few jokes to lighten things up a bit. However because remote jobs are so damn competitive they always focus on one stupid question I didn't answer exactly the way they expected or something I slightly missed and I end up getting rejected. "We're looking for someone with more experience" - I have over a decade of experience, I've demonstrated as much and I can solve pretty much any business problem.
All of it just makes me feel defeated despite the massive progress I've made in my career, all the awards, back to back promotions... all feels meaningless anymore.
So, is it you are working on a project, and when the project is finnished there is no work left, or do you think thay you will get fired, or what am I missing here?
Well - that's always what I try to do, but the last several places I've worked, the decision was effectively made for me, either due to a layoff, or because the company closed down, or because it was bought out (and I was given a real stupid offer to stay), etc.
> So, is it you are working on a project, and when the project is finnished there is no work left, or do you think thay you will get fired, or what am I missing here?
> My first thought upon reading this was: "If you don't want to quit your job, then just stay."
Well - that's always what I try to do, but the last several places I've worked, the decision was effectively made for me, either due to a layoff, or because the company closed down, or because it was bought out (and I was given a real stupid offer to stay), etc.
Currently, it's because the client I work for, on behalf of my company (I'm part of a small team here, but the client is international, and the larger dev team they have in place is the same), has made a decision to outsource the work we do here in the USA for a different international team (who likely is cheaper). We will be training our replacements on how the system is designed/working. Once they are "up to speed" (we imagine), our team will be cut loose.
Our boss (owner of the company - it's a small boutique web application business) has assured us that we have an internal project waiting for us, which we've been told about and have discussed, for us to continue on with. It is supposedly fully funded, which I don't have any reason to doubt. The owner is a great guy, and has been up-front about everything going on, and I trust that this will work out. I've told him that so long as the paychecks don't bounce and I still have health coverage, I'll stick around. I really do like our team and environment. I also like the idea and concept of this new internal project.
But I've been doing this long enough that even that may not be enough. Things have a way of turning in business where at one point, things might seem ok, but then overnight a painful adjustment has to be made and you find yourself without a job. I've also told my boss as much, not to sacrifice his business on account of trying to keep us all employed, because I've seen in the past employers with similar small companies I've worked for completely implode because they kept trying to make things work and keep their people employed, when scaling back would have been the better option. It's noble and nice to know when an employer acts that way, but from a business perspective it really is the wrong decision at times. So I've let my boss know that I understand this, because he's that kind of guy - he doesn't want to lose us, we're a good team (talent-wise and such), but I don't want to see him lose the business either.
I'd rather he would stay in business, and maybe I could return in a few years or something when things are looking better.
But so far - there's nothing to indicate that anything like that is going to happen. We're all still employed by this client. The company I work for, itself, has other clients (I am part of a small team tasked to work with this singular client; there are other devs who work with other clients on other web application projects), and this new internal application could turn out to be something wonderful for the company, if we play our cards right.
But I worry because our team lead left for a new position, because he has a family and needed more stability. I worry that the remainder of the team may take that same option, due to similar reasons. I don't have to worry about such issues; I don't have kids - but I do need to be paid to pay my bills, and I need health coverage (more a necessity as I get older).
But there's the possibility - if the rest of my team leaves for "greener pastures" - that the internal project may be shelved, or that I can't work alone on bringing another foreign team up to speed on our current project, or whatever, and at that point, it may be more beneficial for my employer to let me go than to keep me (and, after all, I've told him that he should do as much, right?).
I wouldn't begrudge my employer making that decision, but it doesn't mean I don't worry about it, either. The one thing that keeps me from worrying too much, at least in the short term, is knowing that I am "debt free" (except a mortgage), I have plenty of savings (enough to cover 2-3 years of salary if needed), and that I don't have to provide for a family other than my wife and dogs. In short, I can make things work for a while, until I can find something else or do something else. But it doesn't mean I don't worry about the whole situation...
1. Everybody agrees interviews and tests have some signal, some noise.
2. Some interviews are systematically biased toward skills that aren't a good sample of what work is. But people just want to whine about it rather than propose a better solution.
3. Nobody can agree on what the important skills are for engineering anyways. Which is natural, since it varies situationally.
Likeliest scenario people say a bunch of vague phrases like "communication skill" and "culture fit" and "diligence" at each other, forget they had this conversation, and thread continues to happen every 2 weeks for the next 10 years (I guarantee this conversation has happened no less than 100 times here already).
Hypothetically not-meaningless form of collaboration that would never happen on HN -- people form a google doc and come up with concrete questions that they upvote/downvote to come up with a great engineering interview, and each new discussion adds to the list.
I've got a technical interview on Thursday, and they use Hackerrank for their coding platform. I'm seriously hoping that they have something that's specific to SRE tasks, because, if they ask me an algorithm question, I'm almost 100% certain I'm going to fail -- these weren't things that I studied in my EE degree, but, I've learned how to implement things from my positions over the last ten years.
I know what I'm doing, and I feel comfortable thinking and looking for solutions that aren't "inside the box" -- delivering an OS and DB upgrade to 8000+ stores via a USB Stick -- complete with a dashboard that I wrote, microservices soup to nuts (meaning: I worked with the developers to make better containers, and then wrote the ansible playbooks to deploy OpenShift in EC2) for a major hotel company, web governance/best practices for a top 5 Quick-Serve Restaurant chain. Asking me the difference between a Markov Chain and a B-Tree isn't something that I've ever needed to do...
On the other hand, when I was hiring in the Washington DC area, the number of Senior developers that I'd get from government contractors who couldn't count to 1000 by 5's in a language of their choosing really hurt my soul.
If you want to do well on the interview, you should brush up on recursion, binary trees and hashtables. If they are using HackerRank, it is almost guaranteed that the questions will be algorithmic rather than SRE based.
I realize that there are problems with it, but I'm a huge fan of take-home problems that are similar to real problems the candidate would face on the job.
I understand the attraction of simple decision metrics, more so if you're in the unfortunate position of having to make a technical hire with no experience of your own to guide you. But consider the referenced tweet that implied 250 resumes were too many to read. You're going to hire someone to do a highly complex job, spend months getting them up to speed, probably work with that person for at least a few years, and you can't come up with a way for your company to at least scan 250 resumes? I mean it's like pretty close to the one main thing you're there to do: find and hire the right people.
The antipattern here isn't that there are puzzles. The antipattern is using some external screening service using the same process for all candidates. There shouldn't even be a HR person screening before the team and hiring manager is.
(I completely get that this is unfair. If you went to MIT and have a high GPA, you are gonna make it past the gate more often. Community college, but an excellent coder? Unfortunately you will be rejected more often by HR. It's completely unfair, but companies can't reasonably interview every candidate who submits a resume.)
Honestly, command line Linux skills and a take home (<1 hour) “build an app in <relevant language> that does x” is far more relevant to my work than some timeboxed HackerRank contrived example.
My favorite screening tools have typically been “here is an app with failing tests, fix the failures.” I have been screened out of all manner of dinky companies from these contrived tools. A reasonable oral technical interview to ensure the candidate can communicate within the domain is far more valuable than contrived tests of solving problems unrelated to the actual job. I can learn more about a candidate asking about use cases of SOA than I can by watching them calculate prime numbers.
I started in software over 10 years ago. At that time all of the exciting jobs where for small startups and the best way to get hired was to have a great github profile or some cool projects to show off.
But small startups need a hand full of really talented devs who can solve a variety of problems, and quickly get up to speed on new domains and tech stacks. A few good developers could make a company. So hiring focused on individuals who stood out and had something unique they could bring to the team.
But FAANG companies want to hire engineers that they can treat as replaceable parts. The "rockstar" talent that was required a decade ago is a liability. This may sound like a critique but it makes perfect sense from the business standpoint, and while you can protest this all you want it won't change a landscape dominated by large software giants to one fill with disrupting startups.
It's just a different world and if you want to show that your "experienced" and not just "old" you need to show that you can adapt just as well as a decade ago. I had a moment of enlightenment when waxing nostalgic about github profiles to a really talented new engineer doing prestigious work in deep learning. I told them how much better profiles based interviews where and they reacted with horror. "How am I supposed to build a profile when I'm so busy with school, interning on the side and studying for interviews!?"
Software used to be dominated by passionate hackers, and now it's one increasingly of skilled professionals. The best work people just as hard but in a very different way.
Like it or not, software is not like it was a decade a go, and if you still want to be seen as a top tier engineer you're going to have to do it by the standard of today.
- A vast number of people masquerade as "programmers", "engineers" or "developers" who couldn't code their way out of a paper bag. If you don't believe me, you haven't conducted interviews.
- This was the key motivation behind FizzBuzz. Passing it doesn't mean you're a great programmer. Failing it means you're almost certainly not. So the ability to turn a super simple "algorithm" into code in [language of your choice] is an incredibly useful negative filter.
- Interviewers and companies fall into the trap of thinking "this problem is too simple; let's make it harder". In doing so you devalue the negative filter and gain NOTHING as a positive filter. Worse it can turn into a gamble as to whether you happen to know the particular trick for that problem. Tortoise and hare or O(log n) bit reversing fall into this category;
- Taking a problem and being able to reframe it in terms of standard data structures and algorithms like recognizing it's a particular graph problem is an incredibly useful skill. These don't always need to be turned into code.
I'll say it again: the biggest problem is people try to make whiteboard problems "hard" making them a useless signal.
I'll add:
- I'm dead against "take home" tests. I don't have time for that. This seems like a great way of getting mediocre candidates. Like, what makes you think if someone can't do it they won't "cheat"?
- Talking about robust systems design isn't done often enough;
Here's another thing I've pondered: how much of coding interviews and the notion of "cultural fit" is really thinly-veiled discrimination? I expect quite a lot and I expect this to blow up at some point.
https://www.forbes.com/sites/work-in-progress/2015/05/21/why...
It goes without saying that 60 minutes is too short a time to ask someone to solve a real life business problem, but real life business problems tend to be broken up into many small problems, which can in turn be simplified and presented to the interviewee.
The discussion I've been having with colleagues is how to do precisely this - eschewing the typical leet code/hacker rank problem, what problem can we come up with that has high fidelity to real life work, without being too complex for the 60 minute interview? I definitely think this is possible, and normally you get to that kind of question by working backwards - what is a real life feature I'd implement, and how can I ask a version of that during an interview. One example would be a graph of similar categories. Categorization is a common issue, and graphs are a common data structure.
Side rant - I've seen a lot of hate for things like data structure questions and algorithms associated with data structures. It's definitely possible to have an entire career of programming where all you do is build CRUD endpoints and design relationships between objects, but sitting down and learning about these amazing data structures that have been refined over decades of work can seriously improve a lot of code. A common problem I've seen is people building rigid object hierarchies (by composition, not inheritance) where a tree would have been way more flexible and easier to understand.
A hard problem with no practice is effectively impossible unless lucky enough to have faced the exact same on in the last month. Selecting for the lucky at that point.
Lets dispense with the fantasy we can select the "best" in an hour, and move toward short contracts instead.
I've used the last question from Stripe's last CTF for this. Roughly speaking: Given a 5 node SQL database cluster, how do I make it behave as a single server? I don't ask them to write code, I ask them them to walk me through how they would approach this problem and how they would deal with various failures (network interruptions mostly to keep it simple).
I have over 8 years experience as a developer and applied for a Senior .Net Developer role. I have plenty of experience in the technology stack and worked as lead developer on some high profile projects in my current role which have been successful. I'm no rock star but I get stuff done and I work well with others.
The company liked my CV and cover letter and send out a HackerRank link for me to work on. My first thought was "sh*t" as I struggle with these things but also how impersonal it was. The everything was weighted on the HackerRack test. At least speak with the candidate and get a feel for them. Even a phone call.
Hiring as they say is one of the hardest things you can do. It's time consuming and costly so I think they have these tests as away to cull the herd so to speak but it's obviously not ideal. Basecamp have a podcast called rework and one of their episodes called "Hazing not Hiring" deals with this. It's really interesting.
For me, I'm going to try to work on a side project and use this as another part of my application. Almost like a portfolio. Hopefully this will be enough going forward.
Other skills, such as multi-thread programming, debugging skills, get less coverage. Many whiteboard coders who know how to solve dynamic programming on a whiteboard, don't know how to use mutex and semaphore.
I think the whiteboard interview process is broken.
On the developer side, whiteboards feel like having to study for the SATs again, which is doubly frustrating at the senior level because you know better than before how little these questions correlate to qualification. Irrelevant, spam-esque LinkedIn messages from recruiters confirm how sloppy the whole process feels. And you spend the whole time thinking, there just HAS to be a better way.
On the recruiter side, they have to wade through a horrifyingly-unmanageable torrent of unqualified resumes with the help of bad tools. When a great candidate fails their test and can't move forward through the process, the recruiter is almost as frustrated with the process as the applicant (management, I'm told, remains unwavering in their commitment to "establishing a baseline"). Even worse are the candidates who are filtered out from the process by Applicant Tracking Systems because their resume lists "8+ years of experience with a wide variety of NoSQL databases" and not "MongoDB"
I think both parties recognize the inefficiencies in the process. Where we've landed is the following:
- Developers need to learn to play the game. Understand how much of a black hole "Easy Apply" buttons can be and not rely on them, optimize their resumes for the role (including anticipation of boolean searches based on the job posting), and make meaningful connections with their local tech communities so recruiters know where to find them.
- Recruiters need to advocate for flexibility and transparency in the process. Workflows involving "shoving as many people into the funnel as possible and use an ATS to sort through the noise" are untenable. Reconsider systems that treat whiteboards or tests as requirements and not just data points. Offer up relevant information earlier, with the hope that good applicants will use that info, and their honesty, to help you figure out if they're a good fit.
I was rusty from traveling from 6 months and definitely wasn't prepared. But I finally landed a job at a place that was a little more old-school in their hiring process, and as soon as they could they converted me from contractor to full time. So I guess it's working out for them (and me).
If you want a developer who can rattle of a computer science algorithm, then whiteboard interviews are the way to go. I would rather ask the developer how she would create a password authentication scheme, and in doing so potential avoid a data breach down the line when they fail to apply proper security principles. Or I would challenge them on how they normally approach a problem, so that I could see how teachable they are. People who are not teachable are bad for business. I would also ask them to share a technique with me to see how willing to share information they are because IT people who don't like to share information are equally bad for business.
Lastly 'culture fit' is about finding more drinking buddies, if that's what you're hiring manager is doing you should fire him asap.
* Count the number of vowels in a string
* Transform a dictionary that's key'd on file name, with the value as the file owner into a new dictionary with owners as the keys and their value as a list of files.
* Deduplicate an array while preserving order in linear O(N) time
* Solve a simple problem using a closure (You can even google what a closure is)
We go out of our way to make sure the interview is conversational; we talk to candidates like they're our colleagues. Too often, technical interviews seem like interrogations and I absolutely hate that.
Candidates can code on their own laptops, ask us questions, and even google stuff. The only rule is no googling for the problem directly, but if you need to look up if some datatype has method X or forgot its signature it's not counted against you.
The point of this is to just to do a basic smoke-test of the candidates programming skills. They don't need to get them all correct, but they should be able to solve at least 1 or 2. If they can't, then we politely end the interview.
The rest of the interview is talking about coding, projects they've worked on, challenging and interesting problems, wish lists, and for more senior people architecture/planning, and a mock code review: we give them some bad code and ask them to give feedback. The entire process takes about 3 hours.
I get the frustration of senior devs at going through this stuff, but the alternative is a weird form of credentialism based on seniority.
Why can't I prove that I passed this screen once, then take a piece of paper to each of my FANG interviews and skip the technical part. Then maybe retake it every 5 years if I'm interviewing.
I've been rejected by companies who were using open source code I wrote.
I have seen too many very senior engineers in the company that is more of a testing engineer nowadays, they do well in analyzing the issue at certain level, document them etc, but they're unable to fix anything that is deep and really complicated in a new code base that is huge(e.g. linux kernel, android framework), each meeting I kept hearing "I know exactly where the problem is..." but after many weeks there is still no fix, or the fix broke more things that it fixed.
A few weeks later a junior guy(not fresh-out though) came in and dove in and dug in then fixed it in a few days.
Senior developer means a lot only if you keep learning, keep coding, resharpen all your skill daily, and stay current. Otherwise, the title is a big negative to many companies, as the performance to price ration is totally unjustified.
Alternatively you could look for a different path in life. Best to get out of the coding jobs early in your career. Don’t look back.
That said, there are some good reasons to do the coding path. At the high end, they pay very very well, and there's no bar organization forcing you to get a $200K 3 year degree. Salaries start higher, and working your way up in other job ladders can be a grind and take quite a while to get up to SWE salaries.
I’ll leave the paradox of industry claims of a shortage as an exercise for the reader.
I found the most effective is whiteboard sessions that actually somewhat resemble reality as if I was the Product Owner and/or Architect with a problem. Then go through the design process, what database system would you use, would it have a a web service or be microservices or whatever, dig into the database design etc. May ask more specific technical questions along the way that are relevant to the design.
but the main thing is there is almost no actual coding done in the interview process at all.
Best example, I have ever had I was interviewing for job about 6 years ago with a start up. The guy that was interviewing me has a CS masters degree strong tech stack background, probably lacked personality. He asked me what polymorphous was and at the time I didn't know. I just told him that I didn't know. Then he went on to explain it to me. Which I really didn't care about learning about. It was clear I wasn't going to get the job and that was fine, it didn't hurt my feelings. However, I learned to code because I have a background in finance, stocks, and options, before I became a coder. I have built stock algorithms that are profitable, regardless if they don't use all the right classes or OOP. So when this gentleman told me that I wasn't good enough for the job, he followed up with, I really like what you are doing with stocks and your stock algorithm, maybe we could meet for coffee sometime and you could tell me how your algorithm works, etc.
So I'm not good enough for your job, but but you want to learn about my algorithm. (the company went out of business 1 year later.) Pound sand.
The problem that I face is I don't want to be a Senior Dev. I have enough side projects and work life balance that I'm not trying to hit the CTO career mark, unless maybe with a start up. Some one mentioned that that they where like a studio musician. They aren't going be the rock star, but they do well with the band, etc. That's probably me, I'm more interested in my side projects. But professional enough to work at a day job.
Whiteboards, interviews, take homes I'm not seeing this get much better anytime soon.
The issue is that there are a lot of programmers who have a lot of years and who consider themselves senior who have very little programming ability. If you have been with a “senior” developer who had no idea how to program but was always telling other people what to do, because he was senior, you know the danger of hiring one of these.
The other thing about this is preparation. It is no secret how these companies are screening and interviewing. A truly senior developer who really wants the job, with a few weeks of practice for an hour every night can considerably improve their chances.
Thing is, very good people always have a plethora of options. So a company that tries to make a talented developer jump through somewhat silly hoops, is often going to miss out on that person. Google for example will say, 'we're ok with a lot of false positives' but they are also missing out on outright brilliant people who can make an outsized impact.
The FAANG companies can get away with it to a degree, because their compensation is so high. But there are a bunch of companies out there copying these hiring processes when they can't pay anywhere near what those companies pay, nor offer anything else compelling enough to make up for that.
So on one hand, yes, if you want to get paid the big bucks to work at one of the FAANG companies, you play ball their way and jump through the hoops. But that strategy is not going to work very well for the vast majority of other companies.
But why would I want to spend that time? There's a lot of companies out there looking for experienced people. I have better things to do than to cram things I'll not actually need. I'm lacking time, not tasks and ideas.
I'm curious on how HN would filter developers like this. I've been a fan of take home exams, but I know that doesn't work for everyone.
There needs to be a interview training/mentoring period where you have engineers sit in on interviews to learn how and what questions to ask but without actually having veto/accept power. this allows them to get experience without screwing up the whole interview process.
Most inexperience engineer interviewers think you get the best candidates by having the highest reject rate, and that's simply not true. Only interviewing experience and training can improve this.
The important skill to learn is figuring out how to do it. Coding is no different. For example, I've yet to use React to build an app, but I have taken the time to learn the basics of how it works. If I needed to use it I could, and would, and it wouldn't slow me down much, if at all.
I think what's important is discovering how adaptable one is. If one gets whiny about using a specific toolset they're going to be a problem no matter what you put them on that requires something different than their existing skill set.
TripleByte has a very clear process which leads to a two-hour frontend interview, an hour of which will be dedicated to building something with React.
Give it a try: https://triplebyte.com/iv/NKCtNG2/it
You’ll surely learn something.
I did.
I work in DevOps. If I'm interviewing someone, I'm going to ask "Explain the difference between continuous integration, continuous delivery, and continuous deployment". A junior person who can answer that well gets a big thumbs-up from me. A senior who can't answer it will probably be rejected out of hand.
In neither case is implementing Towers of Hanoi on a whiteboard useful for the job.
The fact is that business is trying to turn us into commodities and it sounds like right now they are winning...all that we can do it either adapt or change careers sadly.
1) create a very small web API 2) CLI the frontend spa of your choice Just toy examples with some in memory data and filtering Time boxed to an hour.
No crazy puzzles. Just demonstrate you can do the basics. See how far you can get, discuss as you go...
High failure rate. Even when I'd basically prep the candidates in the phone screen.
I'd basically tell them what they had to do. Still didn't prepare.
I've been burned on the take home projects and super crazy timed algo puzzle tests with the terrible instructions. I try to take the stress out of it as much as I can.
Now I actually get to read it :)
Why the fuck is someone asking a lead-level expert with over two decades of experience a first-year CS question? Because that's the process? It's a total failure. Asking senior people to do basic things like that is insulting. Don't you have anything better to ask?
What gave you the idea that it was anything but a blog post/personal opinion piece?
https://firstround.com/review/my-lessons-from-interviewing-4...
Yep. If you're asking for hundreds of thousands of dollars a year in compensation, then you'd better be prepared to jump through some hoops.
But something else was brought in to replace them all. And it's called culture-fitism and ageism.
I typically won't do programming challenges. I don't believe it's fair for the applicant, because if it becomes the industry norm then applying for 10 jobs means 10 separate programming challenges just for the opportunity to get an onsite. But, recently, during a phone interview with a shipping logistics company with a common first name in their name, I vibed with the lead I spoke to and decided I would give their hackerrank a go.
There was an interpolate json feed into an object question. There was a semi-complex array sorting / manipulation question. There was a javascript quirks question. There was a sql question that I probably would have solved using both code and sql rather than just sql. The solution I came up with was using a temp table, that hackerrank permissions did not allow. The array question, my (working) solution timed out because one of the tests used an array with several million units in it. There was no indication of a certain time this should run under. It took about five minutes after submitting to realize a way that probably wouldn't have timed out, but at the time I was happy with my solution given the whole test was timed and I had written six lines of code to solve this problem.
The final question of the test, after all of these and a few I won't go into, was to write an html form field that updated a list via javascript and had alternating CSS colors. I was so frustrated that they would throw in something so very menial and time consuming after the rest of the (timed!) test that I didn't even attempt it. (to be clear, basic javascript knowledge had already been demonstrated on the prior fizzbuzz).
I had really thought my answers would grant me an onsite, but it didn't. So yeah, back to not doing stupid timed tests.
This was a month ago. The position is still open and I expect it to be for the near future.
If anyone read this far, I have given some thought about my various interviews after some interesting ones recently (another recent time at a .net shop I was asked to demonstrate sorting a list so i did a toarray() then sort and they were like no, do it manually).
I'm probably going to put together a blog about my interviews over the years since I've had all sorts. I feel like as deep as retrospective as I can remember over my decade of interviewing might give me some insight as how I should be better.
Guess I was too expensive, heh. The tone of the declination was actually super kind.
My feeling now is that the fact that it is arbitrary and doesn't have that much to do with real-life work may be a feature. You can dissect job performance in a number of ways but I think most people would agree that these four factors are important: general cognitive ability, conscientiousness, domain knowledge and motivation. And of those, domain knowledge is already relatively easy to discern from the resume and otherwise easy to screen for and if your company is doing anything unique, not as important in the long run. Almost any process would do a sufficiently good enough job of taking into account relevant domain knowledge. Thus what makes one process better than others has more to do with extracting other signals.
Whiteboard coding interviews, by being timed, somewhat arbitrary, yet something that is widely practiced and easy to study for, implicitly selects for cognitive ability, motivation and conscientiousness. It's hard enough that you can't be dumb, it requires enough preparation that you have to be somewhat motivated. And the process of preparing for interviews is sufficiently repulsive and it's easy enough to fool yourself that you're prepared enough when you really aren't, that studying to the point where you're prepared is a test of conscientiousness. This creates a paradoxical situation where the test itself isn't necessarily that relevant for the job, yet those who get through the test are almost always very good.
In short, given that what you need to do to pass these interviews is fairly widely publicized, the ability and willingness to do what it takes to pass positively signal that you'd make a good employee. Even if you're great at software development, if you're neither sufficiently motivated nor conscientious enough to prepare yourself to pass these interviews, it's unclear to me why you'd also go out of your way to excel at any given job - every job requires you to do things you don't want to do, learn what you don't care to learn and deal with a variety of suboptimal situations constructively. So while I'm sympathetic to the point of view that this shouldn't be how things are done, I think the willingness to say, "you know, this is how things are, so let's deal with reality as it is instead of wishing it away and ignoring some of the best job opportunities because I don't want to study" is a positive characteristic. Every job has challenges like that - something that in an ideal world is kind of stupid, is not at all fun to do and takes a lot of effort, but doing it is strictly better than not doing it. You want to hire people who are willing to do these things, not just complain about how stupid it is.
1. Initial video conf meeting to make sure he/she can communicate well. Talk about the role. Have a technical discussion covering candidate's past experiences to evaluate whether they really did what they claimed to have done. Discuss a technical subject that the candidate is passionate about. If satisfied, go to Step 2
2. If the candidate is a strong referral, go to Step 3. Otherwise, do a technical phone interview where the candidate solves a simple problem (more complex than FizzBuzz but not the standard algo/DS/string manipulation question)
3. Onsite Interview. Session 1 - write a simple service (todo list, twitter clone, etc) - 2 hours. 4. Session 2 - Ask the candidate to do a code review where the code in question has bugs and is poorly designed. 5. Session 3 - Candidate does a presentation of some technical topic to the team or at least a few people in the team. 6. Session 4 - Lunch 7. Session 5 - System Design exercise focusing on testing candidate's depth
Train interviewers to provide objective feedback. Calibrate scores for each question ahead of time. Interviewers should be calibrated as well. Ideally, same pool of interviewers for each question.
I'm not saying your process wouldn't be effective, but it is asking for a very big commitment for one interview for one position at one company. (And that same commitment would have to come from your company and all the interviewers involved!)
"You can't invert a binary tree". Well doh! Maybe you should go through the effort of at least looking at some of the basic algorithmic concepts again, you know just to show that you even remotely care to be hired by the company. They have a much harder job than you do. They get hundred thousands of applicants per month and need to filter them out. You are one person applying at maybe 2-3 companies a month or week.
To me, this sounds like someone who thinks too highly of himself and "he doesn't need to prove himself to a FANNG company". Well think again, writing Homebrew doesn't mean anything. Pretty much anyone at a FANNG company could do that, but not everyone wants to do it. If you want to work at FANNG instead Homebrew, you need to prove yourself to them, not vice versa...
Is it really too much to ask to spend a few days solving some programming puzzles on a whiteboard? If few days are not enough, then maybe you really aren't as smart as you think?
I think people these days really tend to always put the blame on others. What about starting to look at yourself more critically, think about if you are really a "senior" engineer? I work in tech for years now at FANNG companies and "senior engineers" are in a different league. I think I will get there in one or two years but it has been a long ride. These people are paradigms of programming that can always give you useful insights and advise. They excel at a wide range of soft skills and management too.
If you see what most companies (outside of FANNG) consider "senior" you will know why (1) senior engineer means absolutely nothing and (2) why FANNG is not interested whatsoever if you were a senior engineer somewhere else...
Who cares if you can invert a binary tree? Who cares if you can write a binary tree? I know what I've needed to know really well, because when it hit me in the face, I learned it. If I need a self-balancing whatever, chances are I'm gonna grab one off the shelf and call SomeBTree.new(args).
The problem with "maybe you should have just learned those simple concepts" is that there are an infinite number of clever questions interviewers try to ask, and close to none of those questions matter. The management that wants to have confidence that applicants can verse a binary tree is also the management that would not let you budget the time to create a binary tree if you actually needed one from scratch... "you shouldn't have to worry about that, just ship it and move on".
Most of my job as a dev seems to be cleaning up the messes of someone that cleverly coded everyone else into a slow, unmaintainable mess. How interviewing for that?!
Yes.
It's not a matter of capability - in over 20 professional years I've yet to run into a problem I couldn't solve when I was motivated to do so - either because my job required it, or just because it was interesting.
It's a matter of valuing my time. I do. Companies that want to put me through 12+ hours of interviews and exercises do not. And if they can't value it for interviewing purposes, chances seem very low that they'll value it when I'm an employee.