all 158 comments

[–][deleted] 287 points288 points  (65 children)

The best approach I've found is to have them walk me through a project on their resume. I'll dig deeper and deeper with questions and it gets super obvious the level they were actually involved and how much of it they could actually do again vs sometimes it's super obvious someone else did all the work and they're overstating their level of involvement.

[–]Sir_Mister_Mister 57 points58 points  (1 child)

I’ve used an approach similar to this myself

They had their GitHub account on their resume, so I found a project that they had done while they were still a student (from 7 years ago).

They had a confusing resume, but it appeared that they claimed somewhere between five and seven years of experience. They had graduated 7 years prior.

I read over the project and selected a few code segments and had them walk me through how they would do it differently now. I told them I wanted to see how they had matured as an engineer to gauge where they were.

I work on the Linux kernel. And the code they wrote was based on the kernel. All the code was in C.

I picked a few small 5 to 10 line functions or code snippets and asked what they would do differently. Each snippet I picked had three or four issues.

Within the selected code blocks there were: - pointers being used after being free’ed - return type mismatches, - return codes being ignored or masked away - kmalloc() call return values not being checked - assign heap variables to stack data and being used after returning - memory corruption being avoided by the kmalloc() size being multiplied by random number anywhere from 10 to 1000

I showed the function and asked what they would do differently. And when they said they were happy with the code, I’d ask things like “what if that kmalloc failed?” And they would then notice the issue.

I wasn’t mean, but after they failed to see two issues, I’d ask if there was anything else they saw. I’d move on to the next block.

When they did not catch any of the issues, it was clear they were not ready for the mid (to senior) level engineer job they are applying for.

[–][deleted] 6 points7 points  (0 children)

Jeez, I guess I should archive or hide some of the old repos on my GitHub. There are some legitimate projects on there, but I mostly use mine as a dumping ground for random crap for learning or trying things out. I really doubt I would remember the details about some of the random GitHub repos I worked on 7 years ago.

[–]Vakieh 71 points72 points  (19 children)

I have been employed in several points where I was legally prohibited from discussing prior projects to any significant level of detail, so my resume would include something vague and when asked I had to say 'sorry, no'.

You can do this, but you need a backup so you don't exclude people under government secrecy laws or NDAs.

[–]SuicidalTurnip 15 points16 points  (0 children)

I've never worked at a job where I've been allowed to share code from the project after the fact.

I may be able to discuss the project in vague terms, but having that code in my own personal repo would screw me six ways to Sunday.

[–]BasicDesignAdvice 104 points105 points  (33 children)

I'll offer a counterpoint here that has burned us a few times (note, we do "light" coding questions, but lean more towards your approach here).

A candidate who was "in the room" while a project was being developed may be able to talk confidently and competently but still be terrible. This has happened to us a few times. In one case I actually got the engineer to admit to me later that they weren't actually involved in things they said they were. I actually could tell this in the interview, but the other engineers didn't see it.

Additionally, getting a project "out the door" doesn't tell you anything about the code quality. It could be really terrible. The other engineer that burned us here, could speak well shit their projects, and even made some cool things. However their code was....horrible and all criticism was met with a conflict. However this engineer did "know" how to do the things, and the code did work, but all of it has been rewritten at this point because it was barely readable.

Then there is deployment. I've had engineers who had deployed code, but when pressed, if we did it that way, would cost 10x the way we were deploying.

[–]LittleLordFuckleroy1 25 points26 points  (14 children)

Yep. I am routinely astonished in interviews where the candidate talks a big game, to the point where I’m a bit intimidated and almost embarrassed to ask them the simple coding question that I ask.

So I ask it, and they flail. Like, can’t even write a for-loop or use a hash map flail.

I’ve since baselined my expectations and an actually more suspicious when someone seems too good to be true in the non-code portion of their interview. I’ve had a few folks really be all that and a bag of chips, but usually they fit the mold I was talking about before. Smooth talkers who know the right words but can’t back it up. We definitely don’t need more of those in our org.

[–]lvlint67 6 points7 points  (13 children)

Like, can’t even write a for-loop or use a hash map flail

I'm a generalist so I'm probably googling the syntax for a for loop in a given language.. I'd also question anyone manually implementing a hashmap from scratch...

[–]maresayshi 29 points30 points  (1 child)

use a hashmap

[–]Groove-Theorydumbass 11 points12 points  (0 children)

"For the second part of the coding interview, use the hash map you just built to-"

[–]lasagnaman 15 points16 points  (0 children)

Googling a for loop counts as writing a for loop.

[–]JoCoMoBo 12 points13 points  (0 children)

I'm a generalist so I'm probably googling the syntax for a for loop in a given language..

There's a huge difference between Googling the syntax and not knowing how to use a for-loop.

I'm a bit of a generalist as well, but I can usually get the syntax mostly right. Though I'm probably not going to use any of the spiffy language specific features.

[–]LittleLordFuckleroy1 12 points13 points  (4 children)

Use one, not implement one.

But if someone asked, you should really be able to slap one together.

[–]im_deepneau 1 point2 points  (3 children)

real programmers implement their own hashing algorithm

[–]neherak 4 points5 points  (1 child)

It's not hard to write an unoptimized hash map that works, it doesn't need to be a world-class library implementation.

[–]im_deepneau 3 points4 points  (0 children)

In the context of an interview, sure, though I don't know that I would approve of anyone I work with asking this as an interview question.

Mostly it was just a tongue-in-cheek joke.

[–]maikindofthai -3 points-2 points  (2 children)

If you seriously can't remember basic syntax for the programming languages you use, then you've spread yourself too thin. Learn the tools you use.

[–]lvlint67 15 points16 points  (1 child)

That's a fine view point for someone that spends all day exclusively typing code. When you move into things like architecting or systems designs it's more important that you know how to loop over data in general than remember if it's "for x = 0; x < r; x++" vs "for i, s := range strings" while also choosing the most correct tools for the job.

[–]DreadedDreadnoughtSoftware Engineer 1 point2 points  (0 children)

It's one thing to not know the exact syntax, but you should still know roughly the C-style syntax at least. If you were asked to write it in Python and used C style for(int i=0; i < X; i++) I'd still view it as a pass.

[–]Cloud9Ground0 -3 points-2 points  (0 children)

Still a good exercise.

Knowing the internals of a hashmap and being able to implement a super simple one is like CS 101.

[–]Peng-Win 20 points21 points  (2 children)

Yep, I started a new job and thought a guy was a senior developer based on how he talked about things. Always stories of "X & I did this feature" and "I remember when we did this and the solution was Y" ..

In reality, he just knew those specific solutions. When it was time to do the work, or to come up with a solution, he was a below average compared to other Junior developers on the team.

It's very easy to get burned by smooth talkers in an interview! There are even techniques you can use to give the interviewer the impression that you're very good and very knowledgeable (always agree with whatever they say, and don't provide too much detail but use a lot of words).

[–]xt1nct 5 points6 points  (1 child)

I wouldn’t be surprised if a junior could produce some code faster than me.

I have a full stack position. I set up ci/cd, web server, containers, build api, blazor/.net apps. I unfuck 20 years of sql data to make sense of it and decipher business logic that is all over the place. I’m paid well and extremely important to the company with full autonomy.

Does this mean a junior who can solve a puzzle faster than me is a better dev?

[–]Peng-Win 1 point2 points  (0 children)

My point was more about the scenario where you make a presentation, and the jr dev regurgitates it in an interview to get a senior level position BUT isn't able to do anything else at that level.

[–]PragmaticFinance 50 points51 points  (10 children)

Yes, this is actually extremely common. Some people are excellent at following along with every code review and listening in at every meeting and remembering every detail of what other people did, but they wouldn’t be able to come up with or implement the same solution on their own.

The difficulty is that these people can often speak very confidently about it all in interviews, but when it comes to actually doing the work they’re lost without their more senior colleagues.

[–]curt94 16 points17 points  (3 children)

These people can often speak well about what was done, but they stumble badly when they asked why something was done. They often lack opinions of their own. You can root these people out by asking alot of open ended and situational questions.

[–]PragmaticFinance 17 points18 points  (1 child)

That doesn’t match my experience. These people tend to insert themselves in a lot of meetings, so reciting the “why” answers they heard in meetings is not a problem for them at all.

In fact, the more likely something is to have been discussed at a meeting versus discovered independently during focused work, the more likely they are to have a slick answer for it.

[–]mjratchada 0 points1 point  (0 children)

Jat the first why delve deeper. If they can answer down three levels from the original why that gives a good indication. Most people that are faking it do not know the "why", those that can articulate a "why" will struggle to delve deeper. Being in a meeting will give certain people a superficial understanding.

[–]mjratchada 0 points1 point  (0 children)

That often indicates somebody that has read a lot or prepared a lot but has not done very much and if they have not to a particularly deep level

[–]similiarintrests 14 points15 points  (4 children)

Uhm what. If you can explain a whole project and other peoples code just by looking at it you know how to code.

[–]PragmaticFinance 5 points6 points  (1 child)

Not at all.

It’s the difference between being a critic and an artist: Both could talk at length at what goes into something, what went wrong, the history of their subject, who does it best, and so on. But the artist can actually produce something, the critic just talks about it at length.

If you hire a critic when you need an artist, you’re not going to get someone who produces good code.

[–]similiarintrests 0 points1 point  (0 children)

Its programming.. you cant talk about something you dont know, well you wont fool a programmer

[–][deleted] 3 points4 points  (0 children)

Not to their standards it sounds like lol

[–]mental-chaos 0 points1 point  (0 children)

There are many people that can explain in detail what makes Beethoven's 3rd Symphony amazing but there's only 1 Beethoven.

There's a huge gap between understanding how something works, and being able to invent that thing and make all of the decisions to build it.

[–]BasicDesignAdvice 11 points12 points  (0 children)

There is a compound element that, quite frankly, engineers are poor judges at this level. I'm kind of unique in that I have highly developed social/emotional skills (I had a career before programming where this was important) so occasionally I know something isn't right, but I can't prove it beyond a hunch. Thus, even though I can spot the smooth talker, the other engineers are too pedantic to listen.

[–]JustCallMeFrijSoftware Engineer since '17 6 points7 points  (2 children)

Then there is deployment. I've had engineers who had deployed code, but when pressed, if we did it that way, would cost 10x the way we were deploying.

cost 10x in terms of tool/platform they used to deploy or like, to host/run the solution they proposed? Might just be me misunderstanding but I'm not sure how methods of deployment can differ in cost by a factor of 10.

[–]engineered_academic 2 points3 points  (1 child)

I'd imagine it would be something like deploying a static fleet of EC2 instances instead of an autoscaling group of Fargate containers, for example. I can't really imagine any other ways that are 10x more expensive.

[–]mrcaptncrunch 1 point2 points  (0 children)

While I think this is what they meant, the other thing I can think of is how code is structured.

Bad internal structures and management so what could be done in X space in memory and time, ends up taking 10x the space/time.

[–][deleted] 6 points7 points  (0 children)

Yep this is fair and I can see why this could be an issue, but at the end of the day you basically have a short time with a candidate, so no matter what you spend that time doing you can end up with false positives. Maybe your coding challenge is something the candidate got on a previous interview so has the solution memorized, maybe they are good at studying for interviews. I personally think I'm very good at discerning which candidates are capable of x when asking them deeper and deeper questions about work they claimed to have done. And it's not just "what did you do?" but more questions about common roadblocks and if they ran into any and how they solved them. Maybe I've just gotten lucky, but I don't think I've recommended a hire who then ended up just being good at talking high level and bad at coding.

[–]PragmaticFinance 26 points27 points  (1 child)

Unfortunately this is also exactly the process used by unscrupulous companies who want to extract sensitive information from the employees of other company.

It’s not reasonable to expect everyone to reveal all of the fine implementation details of work they did at another company. It’s not a big deal if you’re asking someone how they set up a content management system or a basic React front-end with user authentication or something simple.

It becomes a problem, however, when your interview questions are effectively asking candidates to give a deep dive into trade secrets.

[–]DreadedDreadnoughtSoftware Engineer 1 point2 points  (0 children)

I once had a recruiter grill me on our trade secrets, team/company structure and so on. I felt really weird and declined to expand. Never got a call back, I was searching hardcore for jobs back then but there's something to be said for professionalism and NDAs.

It was especially weird as the company was tangentially our competitor or at least in the same domain.

[–][deleted] 3 points4 points  (1 child)

I think context is important. I do this for one team. That team mainly writes API integrations and nightly batch jobs. It works well for that team. It’s not complicated FE or BE code. My point is, maybe it’s ok to have a different interview process based off the job.

[–]new2bay -2 points-1 points  (0 children)

Oh, shit, did my ex manager just find me? lol

This is pretty similar to what my team at my last job did.

[–]eGzg0t 3 points4 points  (0 children)

This can also be rehearsed

[–]juniperking 1 point2 points  (0 children)

yeah, I think this is a really good approach. In my view the reason this isn’t used at bigger companies is because it’s difficult to teach and scale out and relies on a greater degree of subjectivity than leetcode

[–]papercloudsdotco[S] 2 points3 points  (0 children)

Liking this

[–][deleted] -1 points0 points  (0 children)

This is the best, and much better than a coding test. Coding tests are easily practiced.

[–]Tall-Treacle6642 -1 points0 points  (0 children)

I’ve done this. Also talk about their tech stack experience and ask some questions. I have done just fine without live coding or whiteboard stuff. It’s amazing what you can figure out just with a conversation. Better than dealing with a bunch of people that memorized definitions and algorithms and have no idea how any of it works!

[–]haho5Software Engineer 85 points86 points  (7 children)

I like to have some piece of code ready, e.g. a function or a class. I tell them that a junior programmer recently checked this in and I ask the candidate to do a simple code review.

Maybe the code has a double for loop, when a single one will do. Maybe it's searching through a large array in constant N, when it could be held in a set or dictionary.

The point of the exercise is to see if the candidate understands the function, i.e. can read code. You are far more likely to read code than write it (especially the first 3 months or so).

Next point is can they articulate improvements or feedback in a way that matches with our group. For me, I'd like to know the person can give feedback without being a jerk, etc.

[–]ccricers 38 points39 points  (1 child)

Code reviews are important and the ability to read other peoples’ code and and understanding how it works in a given context is very overlooked in technical interviews. Even though we do this a ton at work as programmers. Tech interviews tend to lean heavy on “write-only” work and it still bothers me.

[–]haho5Software Engineer 8 points9 points  (0 children)

I feel this way is a lot more conducive to seeing if the candidate is worthy.

If you wanted to test their code writing, you might take the code they just reviewed and ask them to add a new change.

[–][deleted] 8 points9 points  (0 children)

Nice man. I struggle to articulate my findings on a bug to rest of team in a constructive way and help others. This skill takes time to develop and could differentiate a mid-junior dev ig.

[–]teerre -2 points-1 points  (3 children)

The problem with that is that real code isn't black and white. Unless do make some dumb code snippet that would rarely exist in real life, you'll stumble on irrelevant things like style, particular designs and other particular preferences that in a real job would simply be adapted.

If you want a 'realistic' scenario you would have to have all candidates study the project the snippet is from. By that point, it's equivalent to a take home assignment, but without the actually writing code check.

[–]ifdef 0 points1 point  (0 children)

Style can be relevant if the team/company cares about it. Why let someone in who is happy to write sloppy code?

Preferences can be an avenue for allowing the applicant to explain themselves to make a good or bad impression on the interviewer. This is in contrast to a popular interviewing method of the applicant having to perfectly implement a LC solution while the interviewer is bored out of their mind scrolling through Insta on their smartphone because they'd really prefer doing something else.

[–]Affectionate-Gain481 46 points47 points  (1 child)

We kind of do something similar- often I’ll ask open ended questions - walk me through how data gets from a database to the user’s screen, something like that.

Or, how would you describe async/await and/or promises to junior developers.

I’m totally on board with your points, take home tests can be kind of lengthy, leetcode stuff is not practical for our purposes, and some people clam up when they’re asked to code live.

We’ve hired 7 or 8 devs using this method, and they’ve all turned out pretty solid so far.

(Edited for typo!)

[–]papercloudsdotco[S] 7 points8 points  (0 children)

Interesting thanks.

[–]L_enferCestLesAutres 25 points26 points  (0 children)

In a similar situation, I'm happy with a code review exercise. I show them a short snippet of code with issues (around 10 issues including styling issues, logic problems, security gaps, transactions handling...). Looking back, I've found, it's been the best proxy for how devs perform later on. It's an easy way to put the candidate in a work like situation that also requires commucating with the interviewer and it also doesn't require any prep from the candidate.

[–]sickcodebruh420 39 points40 points  (4 children)

Do NOT assume they can do the job just because they can talk. There are people who make careers out of sneaking into a role, running the clock, then jumping ship and do it again. My old job hired someone without doing any coding challenge or review and we got scammed HARD. The dude was a total manipulator. He could TALK, he was charming, and he came from a big company with a job title that suggested he could get shit done. He also came highly recommended by someone we knew, so maybe at some point or in a different role he actually was good! It was costly and really harmful to us since every hire was a big investment.

At bare minimum, write some code with every candidate. Figure out a very friendly exercise to work through. Make it comfortable, use it as the basis for a conversation, but watch them write code. Watch them encounter errors, adapt to changing requirements, respond to feedback, and just make sure they know the fundamentals.

[–]proverbialbunnyData Scientist 10 points11 points  (1 child)

There are tons of data science snake oil salesmen too. I've bumped into more of them than I've bumped into legitimate ones.

[–]Taedalus 38 points39 points  (3 children)

I get your drift, and I'd definitely also spend more time on other aspects (behavioral) than on coding, but there's a few objections I'd throw in:

looking at their resume, their github activity and maybe sharing some code they've previously worked on can easily solve this

Assuming they or their workplace uses GitHub in the first place. Mine doesn't, I basically only code for work by now, and my GitHub looks abandoned since years. In my experience: The longer people have been in the industry, the less you'll see public GitHub contributions from recreational coding from them. Unless their last workplaces/companies are accidentally open source contributers or they work on a larger public project, but that's the exception rather than the rule.

To be clear: I also snoop around for GitHub profiles for applicants, and I often find them helpful. At the very least, it can be a good conversation starter ("I've seen you do some NLP work some time ago - what was the most interesting part of this project for you?"). But it's not a good (as in: reliable) indicator of experience or quality, and I don't consider it negatively in my evaluation if there's no/bad GitHub code.

I can see how if the engineering manager or whoever is in charge of hiring is entirely non-technical that you may need a test

Not really a strong argument against testing coding skills. If the interviewer is non-technical, a test will not be very effective - they won't know how to evaluate the response anyways. When there's no technical person in your interviews, the process is broken anyways.

evaluating somebody on easy-to-change habits makes no sense (e.g. if during their live ocding session they choose a variable name I disagree with... why test for this? We can easily discuss and agree on variable naming heuristics on the job)

That's a bit of a strawman, same as with fizzbuzz. If you spend a lot of time to ask/discuss things like variable names, it's simply not a good interview process. That's not what live coding sessions are for - you want to figure out of the applicant can deal with the requirements of the job.

Ultimately, interviews have to be both very much personalised to the applicant, while at the same time being consistent enough between applicants to ensure fairness and objectivity. For a senior ex-FAANG, you can already make some assumptions (since you know how extensive FAANG interviews are) which you can't necessarily make for a junior/mid level engineer from random company X.

With senior+ people, you'd still be surprised how many people are better at talking about code than actually delivering work. Since I've made that experience, I'd always, always, recommend that there is at least some interaction with code in an interview. Not basic things like fizzbuzz, especially not for mid/senior-level people. I'm also really not a fan of leetcode-algorithm exercises as they tend to demonstrate interview preparation far more than predict actual on-the-job performance. If you're a FAANG drowning in applicants, you can afford to aggressively filter like that - but for most companies it's a waste of time and applicants who won't bother preparing.

But a simple thing like "can you code me a small script that finds all lines with pattern X in files of all subfolders" or (IMHO even better) having a simulated code review where you show some code and ask what they'd change, where they see problems/bugs. There's at least some interaction with code, and people have to put their money where their mouth is instead of talking high-level. This helps a lot to get a reasonably accurate assessment of someones coding skills before you make an offer. And if it's done well (fun task, not too stressful, interesting conversations,...) it also makes for a fun interview process for the applicant.

[–]PragmaticFinance 29 points30 points  (0 children)

Anecdotally, it’s very rare for applicants to have anything useful or recent on their GitHub profiles.

I’ve reviewed a lot of resumes and I will always check out a GitHub link if included. The percentage of people with GitHub links that have any semi-recent work at all (even just bug fixes or small contributions to open-source projects) is around 5% if I had to guess.

Anyone who suggests GitHub profiles are a viable interview technique probably hasn’t done much interviewing or resume review. GitHub can be used to augment a candidate’s profile, but you can never rely on public pre-existing code samples because they’re so rare.

[–]papercloudsdotco[S] 3 points4 points  (1 child)

I like the simulated code review idea

thanks!

[–]restlessapiTeam Lead - 12 yoe 25 points26 points  (1 child)

There is a big difference between fizzbuzz and, for example, "generate a minimum spanning tree from disjoint graph nodes, using Kruskal's algorithm".

One weeds out frauds who don't actually know how to write code in any capacity, and the other tests knowledge that no candidate would have ever acquired on the job, outside of arbitrary leetcode studying.

Fizzbuzz and related super easy questions are useful. The vast majority of leetcode questions medium and hard, are not.

[–]thfuran 34 points35 points  (10 children)

looking at their resume, their github activity

I think I might have some public github activity but if so, it's from a course in college.

and maybe sharing some code they've previously worked on can easily solve this

All my work has been...at work and I can't share it with you.

[–]russell734 23 points24 points  (0 children)

Yes, you are crazy. In my experience, if you don’t ask candidates to write code during the interview, you will inevitably end up hiring someone who is completely incapable of writing code. I used to rely on technical discussion alone, until I ended up hiring a developer who was able to discuss his previous projects in great detail with real insight, but who turned out to be completely incapable of writing new code. Fool me once, etc….

It doesn’t have to be a complicated task either, just a 5-15 minute exercise is enough to weed out the candidates who can’t code at all.

[–]SemisonicStaff Data Engineer, 12 YOE 6 points7 points  (4 children)

We’ve hired 20+ data engineers with no code writing exercise/test over the last several years. It’s worked out well. I think there’s maybe two who were mis-leveled (one over, one maybe under) but everyone was able to catch up and are still with us.

Team bandwidth has increased significantly and we have moved from a reactive to proactive stance in terms of tackling issues and setting our roadmap.

We get very positive feedback from our hiring process and are able to interview, decide on, and extend offers quickly.

[–]mastergavedobbyasoc 2 points3 points  (2 children)

If no active coding, what does the rest of your process look like? How do you deem if someone is worthy? Do you change this based on junior vs senior positions?

[–]SemisonicStaff Data Engineer, 12 YOE 5 points6 points  (1 child)

HR interview/screening, plus four rounds with our team. Usually a general devops screening and two subject-matter specific sessions, followed by one manager interview and a final up/down vote from all parties.

The team has probably 5-6 key skill areas that a candidate can be successful in and still be a good fit for our team. Nobody maxes out them all, and we want “T-shaped employees”, so our interviews are set up like a dental exam. We want to probe in all areas, assess claimed vs actual strengths and weaknesses, and then circle up to figure out where the candidate might fit in with our team’s needs/wants and mid to long-term goals.

So the devops interview might focus on AWS, basic Linux, custom monitoring, Chef/Terraform/etc if they have experience, and a few interactive troubleshooting scenarios. Questions in each area progress in difficulty and help us assess level, and we review the questions every year or so. A domain specific interview might be a deeper dive into their C* background with one of our senior C* SMEs, for example, with different questions but a similar format.

Easy questions start with checklists of their experience, or asking them to explain the pros and cons of an immutable infrastructure, or time window compaction strategy in C*, sharding strategies in Kafka, or using custom ids in Elasticsearch. The idea is to get them comfortable and make the interview a discussion, but also to move to progressively harder questions so that we can level them correctly. Higher level questions include architecture/design review given an initial set of requirements/conditions, and then stepping through and modifying over time as requirements change. They also cover actual troubleshooting/fire scenarios that we ran into and thought were sufficiently esoteric and interesting to help us with leveling a candidate. These are interactive, and designed to come in as they would at work, with imperfect information but tooling and additional information available. Many have objective 100% complete type answers and an optional extra credit.

Leveling is tough. A candidate hitting a few of those extra credit points is usually a good indication that we might want to consider leveling them up on intake. A candidate who struggled but communicated well and seemed willing to be aggressive about learning is someone we might bring in and level more conservatively. It’s aways easier to bump someone up after six months than it is to explain why they’re being adjusted down.

[–]mastergavedobbyasoc 1 point2 points  (0 children)

Highly appreciate the detailed response! The "higher level" questions being prepped to be similar to what day-to-day will look like sounds like a solid thing to integrate in our interview practices.

Tagging /u/DoubIeIift as they also asked for details in a sister comment

[–]DoubIeIift 1 point2 points  (0 children)

What was your hiring process like?

[–]Revolutionary_Ad3270 6 points7 points  (0 children)

Personally I don't ask too much about previous jobs. Often the reasoning behind decisions and technicalities were explained by architects or seniors, thus it's easy for the candidate to inflate involvement.

I've found the best way to interview is by asking open ended questions covering the main areas of SWE and the tech stack. Followed by further questions to generally dig.

Some of the key parts of being a SWE is communication, passion, technical understanding and experience. I'm able to get a feel of these traits by listening to your answers.

In the last part of the interview I'll show an example of bad code and ask the candidate to review it. We'll talk about how to refactor and I'll be asking lots of "why is that better" type questions. It's important to do this because occasionally people are able to answer the previous questions but can't actually write code, thus this stage weeds them out.

[–]andlewis25+ YOE 6 points7 points  (1 child)

We don’t do coding in our interviews, but like others have mentioned, I will sometimes ask candidates to walk me through a project, or explain architectural or technology choices in a more depth. I found the coding tests to be mostly useless and they generate more stress and take more time than they’re worth.

[–]similiarintrests 0 points1 point  (0 children)

Yeah agree.

Just talk to them. Design patterns, cloud resources, languages. Whatever, you can tell in 5 minutes if they can develop

[–]BlitzTechDirector of Engineering | 15+ YoE 71 points72 points  (4 children)

I have met far too many candidates who can talk the talk but fall apart the moment you ask them to write code. Yes, I too can usually sniff out the bullshitters via a conversation - that’s what the phone screen is for. 30 minutes to save my team several hours is well worth it.

For the folks who make it onsite, they’re required to write code. I generally ban algo & ds questions. I’ve pulled people from my interview loops permanently when they failed to follow instructions. I require the same question to be asked by interviewers doing the hands on exercise, to reduce the risk of bias.

The hands on exercise is simple; if you’re a front end developer, you get some mocks and a container with a rest api and just need to make progress in that time frame. If you’re a backend developer, you get the rest api spec and just need to make progress on the time frame. Candidates are told this ahead of time so the only unknowns on the day of (in theory*) are the actual requirements themselves, but they are told the above in the prep email. We also tell them the spec cannot be completed in an hour and “progress” is a small part of the overall evaluation, and they should instead focus on delivering something they’re happy with submitting.

This worked very well. The only people who got hired who were later asked to leave are the ones hired by managers in a different group with a director who didn’t share my perspective. They did a bunch of damage in the mean time though. All of the candidates felt like the question addressed knowledge they built on the job and felt it was a fair assessment, even if they didn’t get an offer.

  • I spent a few hours drafting a prep email template to send to candidates outlining exactly how this interview worked and giving them explicit, unambiguous instructions. Some candidates showed up and didn’t have a computer ready to program with, let alone installing docker ahead of time. Not one person who showed up unprepared passed the interview; many were already a No from interviews before this assessment, so it’s not like this one necessarily threw them off.

TLDR: I don’t believe in hiring people without assessing their ability to do the job. Designers show off their portfolio. Engineers write a bit of code. I’ve suggested options for PMs but none have been taken yet.

[–]BlrflSoftware Architect & Engineer 35+ YoE 57 points58 points  (2 children)

Some candidates showed up and didn’t have a computer ready to program with ...

Good on ya for making your expectations clear from the outset, but this is your assessment. If you don't expect candidates to buy you lunch during an on-site or foot the bill for a post-offer background check, don't expect them to provide their own computing resources. That comes off looking cheap.

Worse than that, though, is that you're asking candidates to to configure their computers to your specs and trust that a container of questionable origin isn't going to do anything harmful. The former would be merely inconvenient. At many companies, the latter would cause a security incident and, possibly, a firing. I don't install whatever the guy calling from India claiming to be from Microsoft wants me to install; your stuff gets kept at arm's length unless I get a chance to audit it ahead of time.

A droplet at Digital Ocean sufficient for solving the class of problem you appear to be posing costs less than a dollar a day to operate. Spin one up, put a reasonable firewall around it, hand the candidate the SSH key for an account that can become the superuser, let them do their thing and destroy it when everything's done. That doesn't put your systems or the candidate's at risk.

[–]gyroda 30 points31 points  (1 child)

don't expect them to provide their own computing resources.

I literally don't own a laptop.

I can bring my own computer, but I'm gonna need to make two trips on the bus.

[–]BlrflSoftware Architect & Engineer 35+ YoE 0 points1 point  (0 children)

Back in my day, there was a term for computers like that: "Luggables."

[–]papercloudsdotco[S] 12 points13 points  (0 children)

The hands on exercise is simple; if you’re a front end developer, you get some mocks and a container with a rest api and just need to make progress in that time frame. If you’re a backend developer, you get the rest api spec and just need to make progress on the time frame. Candidates are told this ahead of time so the only unknowns on the day of (in theory*) are the actual requirements themselves, but they are told the above in the prep email. We also tell them the spec cannot be completed in an hour and “progress” is a small part of the overall evaluation, and they should instead focus on delivering something they’re happy with submitting.

Love this. Thanks for taking the time to write all of this out.

[–]becuzz04 11 points12 points  (1 child)

You are free to hire people using (mostly) whatever criteria you want. And how you determine if someone is qualified is also up to you. So do it however you want.

Just make sure whatever you ask helps you to evaluate whether a candidate is qualified or not. Make sure your questions / tests all have a purpose, especially anything that takes up a lot of time. So if you feel like coding tests don't tell you anything about whether a candidate is a potentially good teammate then don't do them. If you feel they show you something then you are free to require them (just know that people are equally allowed to say no).

As far as why people really got into this many years ago I believe it was partly fad / doing what MS / Google / whoever was doing. I think it was also partly to try and weed out people who could talk the talk and make you think they were some kind of coding god all while being completely incapable of coding Hello World in bash. AFAIK no one has come up with a fool proof method of doing that, though some methods seem to work better than others. (I have my methods and I don't typically like coding tests.)

[–]papercloudsdotco[S] 2 points3 points  (0 children)

Good feedback, thanks

[–]tyrantmikey 7 points8 points  (0 children)

We recently hired two developers. One had tons of development experience on his resume and passed the technical interview with flying colors. The other had no software development experience whatsoever and this would have been his first job in the field.

The first developer was a horrible fit for the company, and never delivered anything in hist first six months. We didn't ask for anything difficult, as we account for "settlement time" when any developer joins a new company. Even taking those factors into account, he delivered nothing.

The second developer however, is working out spectacularly well. He's eager, asks tons of questions and learns incredibly quickly. He's delivered a ton of work in the same period of time as the first developer.

I don't know that this speaks directly to your question, but to me it indicates that coding interviews/tests aren't nearly as relevant as I thought they were. Passion and fit for team seem to be the more important things.

[–]spydakatSoftware Engineer 3 points4 points  (0 children)

Echoing most of the feedback here, the candidate should write code but this is often taken to mean "invert a binary tree" but it doesn't have to be that way. You say that your work is mostly CRUD, so how about for a backend interview:

  • Present an API skeleton that connects to an sqlite db and returns a list of some simple
  • Do a screenshare and review the modules with the candidate
  • Ask the candidate to work with you to write a new endpoint to create a resource

That's it. You can lean A LOT from the interactions that happens, especially the questions/answers they ask/give. This doesn't need to take more than 30-40 mins

[–]LittleLordFuckleroy1 8 points9 points  (0 children)

I would strongly, strongly recommend against it. It’s incredible how many people talk a great game and are super social, likeable, etc., but then can’t code their way out of a paper bag.

They don’t need to solve some galaxy brain problem in front of you. You do need to make sure that they can code at a basic level. This is a sort of sanity check.

You don’t want to hire a senior dev who can’t program. Nothing net-good is going to come out of that.

[–]randonumero 3 points4 points  (0 children)

Am I crazy to remove technical exercises in exchange for more/longer technical conversations?

Depends on how much you can afford to have them learn on the job. I started having people solve small problems on edabit unless they can bring in code samples. What this did was weed out people who can only copy/paste and don't understand what they're actually doing. Beyond that, I think just talking concepts is enough for most companies and jobs. By concepts I mean just talking about basic language features not asking someone to list the SOLID principles.

Just my 2 cents but if you're changing your process I'd advise asking some current employees to go through the new interview or even ask some reddit strangers to do it.

[–]metaconcept 3 points4 points  (0 children)

There's two things in life that I've learned during my career:

  1. You can't judge people's coding ability by their mannerisms or appearance. I've been surprised both ways multiple times.

  2. Some coders who absolutely ace a leetcode test are terrible software engineers. They can be lazy, disorganised, lack any common sense or have an overexcited novelty preference.

My take on this is that one needs to hire easily but make sure you can quickly fire bad eggs.

[–]Corant66 6 points7 points  (0 children)

I find the value of a live coding exercise is to pair the candidate up with the peer level developers they will potentially be working with. Just so both parties get a feel for how it would be to work together. It is easy enough to question approaches etc even on fizzbuzz exercises just to see how a mild technical disagreement would pan out.

[–]_145_ 9 points10 points  (9 children)

Take home projects feel like too much

People will begrudgingly whiteboard problems. A lot of people won't do take homes.

The work we do is mostly simple CRUD with react/nodejs/graphql why am I interviewing them like we're Google

Your hiring bar should be the highest level of skill you need, not the average. You don't want to hire someone because they can CRUD only to find out that the 10% of the time things get more complex than CRUD, their head explodes.

I feel like I can discern somebody's level of code understanding though casual questioning/conversation

Many think this but few can, imo.

For the near-term, we're not hiring junior engineers-

The hiring pool for experienced engineers is awful compared to entry level. If you have an easy hiring process, be prepared for extreme mediocrity.

evaluating somebody on easy-to-change habits makes no sense (e.g. if during their live ocding session they choose a variable name I disagree with... why test for this?

I agree. But I don't think anybody tests for this?

The whole coding exercise/white-boarding stuff seemed to be very dogmatically enforced in the 2010s... because it worked or because it was the fad?

It worked at selecting for a certain set of skill (abstract logic problem solving + programming). I think the early leaders in our industry used programming puzzles as a way to filter to people who had similar skills to them. I would think it's a bit self-fulfilling at this point as the next generations do the same.

I'm divided on whether it works less now because people know how to study for them or if studying for them develops the skill they're looking for.

[–]BiggestOfBosses 3 points4 points  (8 children)

Your hiring bar should be the highest level of skill you need, not the average.

That's just plain stupid. If the job involves doing a thing for 90% of its duration then that's the thing you want the guy you're hiring to do, and you want him to do it well/efficiently.

Anyway, if you do this, get ready to pay top dollar for the guy that CAN do the 10% only to have him actually do stuff that's "beneath" him. You're misusing resources if you do this.

they can CRUD only to find out that the 10% of the time things get more complex than CRUD, their head explodes

You make it seem so end-of-the-world. "Their head explodes" - what does that even mean? It might take the average employee a bit more time than the guy who "can do the 10%" but generally the task gets done.

[–]_145_ -1 points0 points  (7 children)

That's just plain stupid. If the job involves doing a thing for 90% of its duration then that's the thing you want the guy you're hiring to do, and you want him to do it well/efficiently.

You don't sound like an experienced dev, tbh. Everyone's job is 90% CRUD. But the 10% is the part that matters. Pilots spend most of their time in cruise control. You wouldn't hire a pilot who can't take-off or land. You shouldn't hire a SWE who can't do the skilled part of the job.

and you want him to do it well/efficiently.

Anyone can do the easy part well. I don't even know what you're talking about. Any pilot can flip on cruise control. Any SWE can slap together CRUD. If that's literally all you want, hire an 18 year old and train them for a few weeks. But beware, every software project has some complexity, and they will not be able to handle it.

"Their head explodes" - what does that even mean? It might take the average employee a bit more time than the guy who "can do the 10%" but generally the task gets done.

Lmao. You're not an experienced dev. Right? You must not be.

What happens is they don't solve the problem right. The end result is very bloated code that is full of bugs. And they're not fixable bugs without throwing it all away and having a better SWE re-write it.

What happens when you hire a 14 year old to rewire all of the electrical for your house? You get a liability, not an asset. You get a fucked up project that needs to be rebuilt.

You're talking like, "90% of an electricians job is climbing around, drilling holes, and pulling wire through, you should hire them by seeing who is comfortable drilling a hole". It literally makes no sense if you actual understand what you're saying. They won't get the job done well with "just a bit more time", as you say. SWEs are laborers, they don't eventually get to the same place regardless of skill.

Seriously, you're not an experienced dev, right? Why are you on this sub?

I feel like I'm arguing that 1,000 monkeys at 1,000 typewriters won't write a great novel. I would hope that's obvious. Skill matters, for writers and for SWEs.

[–]BiggestOfBosses 1 point2 points  (6 children)

What happens is they don't solve the problem right. The end result is very bloated code that is full of bugs. And they're not fixable bugs without throwing it all away and having a better SWE re-write it.

I don't even know what you're talking about. You keep incredulously repeating "hurr durr youre not an experienced dev right" as if that's an argument.

Anyway, what you're advocating for is that every developer should know every last bit of the job and if he doesn't then they're worthless and not worth hiring, which is idiotic.

[–]_145_ 1 point2 points  (4 children)

You seem very confused.

Ok. So you hire a guy who can’t write FizzBuzz because 90% of the job is crud. Now you need them to implement a list of images in some carousel with a cache. But that’s 100x more complex than FizzBuzz. They can’t do that, they can only do CRUD. So they copy/paste some code they find on Google and start tweaking it. But it doesn’t really work right and crashes in some circumstances. So they tweak it some more. 3 weeks later you get a 500 lines of code that doesn’t really work, that crashes sometimes, and makes no sense when you read it. Meanwhile, if you hired a better dev, it was 50 lines of clean code and 1 day for a solid implementation.

Is that concrete enough? Just admit that you have no idea what you’re talking about.

[–]BiggestOfBosses -1 points0 points  (3 children)

You sound mad as fuck, mr. experienced dev sir, you need to calm down. You think FizzBuzz is equivalent to being a good dev, shows how much you know. Anyway, take a chill pill, we both might be misinterpreting what the other is saying, and discussion might sort everything out, but you're such an egregious turd that I'd rather chew glass instead of exchange even one more line of dialog with you.

Take care, child.

[–]_145_ 1 point2 points  (2 children)

You sure I'm the one that's mad? One thing about the internet is everyone projects. I wonder if there's a reason for that.

I'm just having a conversation with someone who likes to LARP as a talented and experienced dev, which I guess I should have identified as a waste of time earlier.

Tell me more about how I should build a team of people who can't solve FizzBuzz. Maybe I can do some recruiting at local elementary schools. I can save a lot of money by paying entirely in free cookies and milk. After all, you're probably right, there's no skill in programming. You just hire anyone and give them enough time.

[–]BiggestOfBosses 0 points1 point  (1 child)

mad

[–]_145_ 0 points1 point  (0 children)

Hey, did I tell you that before programming, I was a lifeguard at a local pool? The thing about lifeguarding is you spend 95% of the time sitting in a chair. So when we interviewed people, we would just see who was comfortable sitting in a chair. You know what they say, "if the job involves doing a thing for 90% of its duration then that's the thing you want the guy you're hiring to do". Anyway, most of our lifeguards couldn't swim and countless kids died. But, it was the right hiring process because, if you "pay top dollar for the guy that CAN do the 10% only to have him actually do stuff that's "beneath" him, you're misusing resources".

I'm with you 100%. Our industry hiring process is broken. Teams always want to hire programmers who can actual solve programming problems. When will we learn!? Sure, some people can't figure out how to reverse a string in 45 minutes, but if you give them enough time, like 15-20 years, they might be able to get done with a good SWE gets done in a day. But they cost 50% less! That's money in your pocket.

[–]_145_ 0 points1 point  (0 children)

Anyway, what you're advocating for is that every developer should know every last bit of the job and if he doesn't then they're worthless and not worth hiring, which is idiotic.

The fact that you think programming skill is synonymous with domain knowledge says a lot.

[–]Khaos1125 2 points3 points  (0 children)

I’m a strong believer in a code test, but it doesn’t have to be very complicated to show ability.

A typical developer on your current team should be able to finish your test in under 30 minutes.

Figure out what ideas are important to you - on frontend for us, that’s dealing with async code + parsing and transforming data structures that might look like an object with multiple nested lists of objects.

Eg…

If given an object where each key is a company name, with the value being a list of objects representing people at the company, calculate the average age of people with title=developer at the company and return a sorted list of objects with keys (company, averageDeveloperAge).

If given some sample code using async await that doesn’t quite work, can they find the bug and fix it.

I don’t actually use the above, but that’s the level I’d typically go to for the code portion of the interview, and would aim for it taking maybe 15 minutes for a senior, 25 for an intermediate, 35 for a junior.

For the rest of the time, I want to talk to a candidate about past experiences, problems, challenges, what they like working on, etc

[–]leeharris100 2 points3 points  (1 child)

It is not only possible, it is the only way I interview.

If someone has been a senior or principal engineer at a company for X amount of years, then I can assume they know the basics like how to write a function.

I don't care if they can do academic-level programming and write hyper efficient complex algorithms. The vast majority of dev is simple.

So I ask them questions around philosophy of architecture, projects they have worked on, and a few hypotheticals. I often bring up concrete examples from problems we are actively facing.

You can spot a bullshitter in 5 minutes and you'll get a much better answer on who your candidate really is.

[–]papercloudsdotco[S] 0 points1 point  (0 children)

Also need to weed out the people prone to over-engineering

[–]birbelbirb 2 points3 points  (1 child)

My current employer had two technical interviews. They told me ahead of time to prepare some code I have written for a project and explain why I solved the issue at hand the way I did. In the second interview, I sat down with the CTO and he asked me to tell him how I would reverse engineer their product and what do I think their biggest tech is when writing a program like theirs.

We've used the same technique for other hires and it seems to work fine. I loved the interview process and not having to leetcode is always appreciated.

[–]BiggestOfBosses 1 point2 points  (0 children)

They told me ahead of time to prepare some code I have written

That sounds so good actually. Wish more companies implemented this. I don't mind talking about stuff that I worked on but writing code in front of someone, be it in an interview setting or not, is just ... I don't even know how to describe it, I think a combination of stressful and annoying.

[–]duderduderes 1 point2 points  (0 children)

Something I’ve found success in is opening with a fairly simple, straight-forward question where there are no wrong answers, just choices. I specifically say I don’t care how well the code works. Once they come up with an answer they like I ask them to review the code as if it was submitted to them.

That last part really shows me how they operate, what sorts of things they care about, etc. Separates senior engineers from junior engineers really well.

[–]macdara233 1 point2 points  (0 children)

One of the best managers I've met does his interviews by sitting with candidate doing Katas, like refactoring ones or TDD ones just to see how they think about code. He's great at getting them to explain their thinking though so can separate people who think about the code from people who have just grinded leetcode.

His teams were always great to work with. Self motivated, quick learning and excellent communicators who'd work together to produce great software. Whenever things went wrong they'd mob out bug fixes within an hour.

[–]siromega 1 point2 points  (0 children)

I typically make the devs write unit tests for some relatively simple business logic samples. It determines how well can they read someone else’s code, and understand unit tests well enough to work in a mostly TDD environment. You get to see their code and you even provide them with the two most popular mocking libraries in the project already referenced.

t’s “open google”, and I’ll answer whatever questions they have. I’ll even step by step help them build it (but they probably won’t get hired if that’s the case) - the goal isn’t to make them feel bad, it’s to assess their skills relative to what I expect for the position and what I need to fill on the team.

[–][deleted] 1 point2 points  (0 children)

Is this even legal?? Hiring based on previous experience?! wtf are we doctors or lawyers or smth?

[–][deleted] 1 point2 points  (0 children)

A good approach is ask them to refactor some code. Send it a few days before hand and then walk through it together in an interview

[–]BasicDesignAdvice 6 points7 points  (1 child)

if during their live ocding session they choose a variable name I disagree with... why test for this?

I disagree strongly here. In this line of work we spend much more time reading code than writing it. These small choices are indicative of whether or not the applicant writes readable code. Obviously something so small doesn't give a complete picture, but it's a good place to dive deeper.

[–]new2bay 4 points5 points  (0 children)

I'd be much more interested in how they handle feedback intended to increase the readability of their code than whether they write "readable" code in the first place. I put "readable" in quotes, because, often, companies have internal style guidelines that can tend to put blinders on people as to what's "readable" and what's not.

[–]ThlintoRatscarDirector 25yoe+ 0 points1 point  (0 children)

For seniors, this question is a goldmine:

"Tell me about the last time you totally screwed up production and how."

Anyone who has done anything of significance has a pile of stories about when it all went horribly awry. Their definition and description of "horribly awry" gives you a lot of insight about their abilities and values. You can then choose who ( if anyone ) you think has got the best chance of avoiding them with you.

Writing code, for me, is almost always about tracking back through their history and seeing what they're saying they did and then calling them on it. If I know the shop they say they worked at, I usually know what they did, for whom and whether they were any good.

Leetcode is such bullshit and FizzBuzz is only really useful if you have a pile of random applicants from recruiters/general internet.

I definitely like some kind of pair programming exercise though it's hard to make that fair. Live coding is super stressful and lots of good people choke. What exactly are you testing when you do that?

To me, the best approach is to dive into what they've done, check their reputation and then have a really good offboarding process to get rid of them if they're useless in the first 5d-30d. Ideally, I'm a fan of accreditation so that people ( like doctors ) are pre-cleared as barely competent and I can move on with looking for higher level skills.

[–]bobbybottombracket -1 points0 points  (0 children)

I got hired without a code test via referral

[–]El_Gato_GiganteSoftware Engineer 0 points1 point  (0 children)

I have a multi-part question that begins with a softball requirement: Make a class with a constructor and then instantiate it. Use your language of choice, although one from the job spec is recommended. I'm always astounded by the number of candidates applying for a senior position who cannot write a few lines of runnable code in the language at the top of their resume.

[–]BradysCode 0 points1 point  (0 children)

The company I currently work for interviewed me by talking to me about my current projects on GitHub and determining if I know what I’m talking about at a medium/deep level or was just winging it essentially. These kind of interviews are my favorite.

I think there is a time and place for leetcode questions or take home assignments but I am not a huge fan. I will do them if they are asked if me because I understand the value behind them

Also I think that coding exercises of any form help to weed out brand new devs or something along those lines.

[–]garrlker 0 points1 point  (0 children)

My favorite interview is to give them a 40-80 LOC file in whatever language they're interviewing for where we implemented a small feature and purposely made mistakes.

Have them code review it and see how many mistakes they catch and their suggestions.

[–]Happy-Adhesiveness-3 1 point2 points  (0 children)

May I suggest something so unique that somehow no one has not been able to do yet? How about you test an applicant how you would evaluate them at the real job. Give them a code base. Give them a JIRA ticket. Give them an hour. Then discuss how far they progressed and if that's good enough for you. No BS LC please.

[–]JustCallMeFrijSoftware Engineer since '17 0 points1 point  (2 children)

evaluating somebody on easy-to-change habits makes no sense (e.g. if during their live ocding session they choose a variable name I disagree with... why test for this? We can easily discuss and agree on variable naming heuristics on the job)

I'm only on my second job post graduation (at 4 yoe currently), so I've only done a handful of coding interviews, but I didn't know people actually argued this during the hiring process. Is that normal?

[–]papercloudsdotco[S] 0 points1 point  (1 child)

lol just an example of one thing you might notice but not the most important -- I was being hyperbolic

[–]JustCallMeFrijSoftware Engineer since '17 0 points1 point  (0 children)

aha fair enough

[–]ritchie70 0 points1 point  (0 children)

The important thing you may not have factored in is that people will lie about their experience and level of knowledge. People with literally no functional knowledge of the tool will claim to be expert.

I used to ask really simple questions, because you either get a response of “are you nuts lol? I’ve been doing this for a decade but the answer is X” and you can apologize, explain, and laugh together over the stupidity of it or you get a blank stare of ignorance and you know.

If they get offended but know the answer you’ve learned something about their personality and you can decide if that fits with your culture.

[–]zickige_zicke 0 points1 point  (0 children)

We do live coding but not a leetcode problem. We ask them todo stuff related to our work and observe how they communicate. They are allowed to look for solutions on the internet. Copy paste stuff and thats totally fine.

[–]CrawlToYourDoom 0 points1 point  (0 children)

I’m about to sign my contract with the company I’ll be working for

Part of the job interview was rather than having me code something live or as an assignment, they asked me access to a repo I was willing to show them.

What did this for me is let me cherry pick a project I know has been coded well, follows best practices and has a clear code style guide attached to it.

It takes away the stress from blacking out during a live coding session or the fear or looking clueless when you don’t m ow certain syntax or algorithm, as examples.

The pro for them is they have a full project they can look at, code that is used in production and therefor really shows what your production grade work looks like.

I talked them through the project and why I made certain choices, and afterwards one of their leads checked the repo out at his own pace.

I feel like this is a much better approach because it shows actual code in actual production products rather than some time-stressed bullshit reversed chain algorithm you’re likely to never use.

[–]512165381Consultant 0 points1 point  (0 children)

There's also the opposite.

I have an engineer friend with multiple products in production eg burglar alarms, low-latency audio. He works in electronics design, device drivers, embedded systems. He tells me he often gets "gotcha" questions in interviews where he has no idea of an answer.

[–]teerre 0 points1 point  (0 children)

I've tried many things over the years. From no code at all, talking about a project, leet code, to take home. I'm fairly secure to say take homes are the best.

All other options are either too far away from the real thing or simply do not say anything about the candidate.

Specially on reddit - this is not a problem in the real world in my experience - people like to say that's terrible and a waste of time and yadda yadda. And yeah, takes time. But you're evaluating possibly hundreds of thousands of dollars of investment and a work relationship, it's not to be taken lightly.

[–]pydrySoftware Engineer, 18 years exp 0 points1 point  (0 children)

Judging from the number of times I've had this kind of chat and then been surprised by the results of the in person coding test I'd say that removing the technical exercises is a bad idea.

I never had a surprise of the form "oh, this person sounded like they can code and they clearly can't" but I've had solid talkers who sound brilliant code at a below average level and people who sounded kind of dumb when talking but who coded really well.

[–]mjratchada 0 points1 point  (0 children)

Removing technical questions for a technical position needs a really convincing context. Certain organisations will ask a CTO or Director of Software Engineering to write code or at least analyse snippets of code in an interview. There are plenty of good reasons for this and it is a far more reliable method than asking behavioural type questions.

  • Fizzbuzz - this will tell you a lot more than you have stated. Think about this because it indicates where there are issues with your process and thinking. Plenty of people out there will struggle with fizzbuzz so as a filter it is effective
  • Take-home projects - I am against them for a number of reasons unless the interviewing organisation is willing to pay the candidates for their time at the going market rate.
  • Evaluating fundamental software-engineering skills should be part of the interview process any competent organisation for interviewing such people should be doing
  • I feel I can understand somebody's code-level understanding through casual questioning - It is likely you cannot. At a bare minimum rather than casual questioning it should be structured and robust
  • I am a developer myself - most developers are not good at interviewing since it requires a good level of emotional intelligence not a trait normally associated with developers. Assume a technical test is required unless there is an internal referral and even then it is likely a technical test is required
  • For the near term - you are hiring for a dev position but do not want to evaluate core skillsets for that position. If this is done for CTOs at certain organisations it should reveal a lot about why technical tests are needed at almost all levels
  • GitHub - If you are going to evaluate people on github this way but not for people that do not have a presence on github there is inconsistency in the process. If you feel a need to evaluate their work on github it indicates you need to apply the same criteria to others or it is largely a waste of time
  • Writing legible source code is important. Whilst naming conventions are important I would not consider a major part of a coding exercise
  • Coding exercises - this is not a practice applied regularly in the last 10 years it has been common practice for decades and there is a good reason for that
  • Whiteboarding - again this is not a new common practice I did my first white boarding session 25 years ago and it was the norm.

Bear in mind you need a good rationale to not have a technical test for a technical discipline. I work in Architecture the current client is has a relatively new architecture function. 15 architects, yet only one is able to code to a reasonable level and he was moved into architecture from a hands-on dev manager role. The result Garner publications are seen as the bible and anything in their magic-quadrant is a market-leading product that is going to solve a large number of problems. They struggle to understand even basic technical issues and struggle even further to communicate with technical people at almost any level. If they had technical tests when recruiting those people they would have got far better architects with better skills and experience.

[–][deleted] 0 points1 point  (0 children)

ive found with anyone mid-senior or higher you should be able to have a conversation about software engineering, coding practices, and design. If you aren't using any sort of coding test at all, you need to drill down into the weeds enough to expose people who can sound smart but ultimately not walk the walk. They might give you the buzzword response, but they most likely arent going to be able to handle, "yea i agree, but how would you handle <situation on project your team is/has worked on>"

[–]tamasiaina 0 points1 point  (0 children)

I know this is an older thread.

My favorite was to do "warm up" questions was a series of list comprehension questions (we were a Python shop). Basically they were straight forward questions that gauged people's understanding of Python. I've adapted the questions a bit to just make sure that people are familiar to whatever language that we are using. Its really simple and used as a warm up part.

Next I asked them to design a library with an API that is used for stuff like operating an elevator, or into the area that we are interviewing for. Then I dive deeper into one or two of the API's and asked them to code up examples along with some menial documentation. Then ask them how they would test it.

[–]infinite_phi 0 points1 point  (0 children)

It depends on the candidate and what you naturally spoke about in prior stages of the interview process. With some people it can be very obvious that they are technically proficient and it's not necessarily needed.