return to table of content

Bug squash: An underrated interview question

JohnFen
73 replies
3d3h

I like this approach far, far more than coding tests!

It’s fun. It’s fun in the same way an escape room is fun. It’s fun because of the dopamine you get when the test suite blinks green.

Keep in mind that for lots of people in a job interview setting (even excellent candidates) this is not fun, this is stressful. It may be fun on the job or at home, but the stress of a job interview both eliminates any "fun" aspect and makes even simple tasks more difficult. Just mentioning that to encourage some amount of empathy and understanding for the candidate.

b20000
48 replies
15h23m

for me cracking the coding interview is stressful

i prefer the bug squash question. i have 20 years of experience. i will probably do well.

a fresh grad might fail. do i care? no. leetcode has benefited fresh grads and is being used to discriminate against those with anxiety and other disorders and those who are older.

i think it is refreshing to try a different interview method, one that benefits those with experience.

ta_1138
24 replies
14h4m

I administered bug squash questions a few dozen times. Experience definitely trumped the smartest, most prepared young programmers, because no matter how much they studied, they hadn't really faced a real test suite in a large codebase. We had to rate them on a different scale, because otherwise very few of them passed.

b20000
23 replies
13h2m

why do young programmers need to pass? nobody gives a shit whether experienced people pass leetcode so give me one good reason why you should rate young programmers differently.

strken
16 replies
12h39m

A) I, and a lot of other people, do give a shit whether experienced candidates pass leetcode, and try not to give leetcode interviews unless forced to by HR fiat

B) As an industry and as a society, it's not a good thing to refuse to hire new grads, since that leads to the kind of labour shortages we see in e.g. medicine and pulls up one of the best ladders for wealth mobility. Tech therefore needs some kind of funnel to evaluate candidates with less experience. A test that almost none of them can pass is not very useful for evaluation purposes

b20000
15 replies
12h33m

it’s not a good thing to refuse to hire older people and most older people do not pass leetcode without significant grinding

saagarjha
12 replies
10h32m

I don't think replacing an interview that fails older people that instead fails younger people is a good solution.

lapcat
9 replies
6h45m

What do you think is a good solution?

bluGill
7 replies
5h36m

Number one: there is research on how to interview find it and read it. All comments I've seen here give no indication that the commenter is even aware of it. I'm aware the research exists, but I have not read it (my company trained me in interviewing, and the class mentioned research but I haven't checked to see if it is the latest research that I'm trained in)

If the above doesn't answer your question, then different questions for different levels. You should know if you are hiring a junior, mid, or senior engineer. (you may have different levels), and ask them different questions.

b20000
5 replies
3h53m

one thing I found interesting is the observer or hawthorne effect. in short, people perform differently when observed doing a task. this means that simply by observing people while they are coding, you might make them perform differently, and come to a conclusion they are not able to code, while if you did not observe them, they might have done well.

the reasoning is that it's ok to pass on excellent candidates. as a business owner I find that a real problem. I would prefer the best, not just people who had time to grind leetcode and rapidly crank out solutions to standard problems you can find online. i think it would be better if interviews erred on the side of caution and preferred to let people through especially if they have experience. you can always fire them if they don't perform. there is no job security in the US anyway.

sqeaky
3 replies
3h15m

It is my experience that caution during the hiring process means skipping on possibly excellent people to accidentally prevent hiring a dud. There are plenty of both on the job market most of the time.

In practice firing people is hard at most companies, even if there are no laws protecting people in an individual situation. In principle it can be easy but generally a manager who is in a position to evaluate performance doesn't also usually have unilateral authority to fire someone. And a technical manager telling someone that this person can't code or is disruptive on a team often can't communicate that to the managers with firing authority. This can be out of hesitance, budget concerns, or legitimate communication skills on either parties count.

So the hiring practices that most of the companies I have worked at tend to skip on possibly excellent candidates in preference of definitely excellent or at least definitely decent candidates. This is mostly about risk aversion then gain maximization.

lapcat
2 replies
3h8m

This is mostly about risk aversion then gain maximization.

I think you meant to say organizational dysfunction.

The inability to fire someone obviously incompetent is not risk aversion, it's risk accumulation.

bluGill
1 replies
1h29m

I've seen very few people obviously incompetent. As such it takes a while to prove they are incompetent. They do write working code and get it through review. Often the only clear sign is nobody likes working with them - only after you get rid of them do you have concrete evidence that they weren't contributing (that is the team got as much done now since they no longer were stopping their own work to help the incompetent person on things that it is never clear if should have been figured out alone)

lapcat
0 replies
22m

How does your comment relate to the topic here, job interviews?

squeaky said that companies are risk averse in their hiring process because it's hard to fire people. I said that companies are not risk averse if they can't fire incompetent people.

You responded that it takes time to determine whether someone is incompetent. Ok, but that just shows job interviews are ineffective at weeding out incompetent candidates, so there's still no justification for the so-called "risk aversion" of the interviews.

I guess I'm not sure why you responded to me rather than to squeaky.

bluGill
0 replies
1h33m

I would prefer the best

How do you define best, and once you do, how much better than second best are they? What if the best person asks for several million dollars per year (an unreasonably high number as I write this), but the second will accept for $200k (a reasonable number though low if they really are second best). My guess is you cannot tell the difference between the top 20% of programmers in actual day to day work, and probably couldn't tell the difference in an interview.

lapcat
0 replies
5h25m

If the above doesn't answer your question

You misinterpreted my question, because I was asking what saagarjha thinks, not what anyone else thinks.

saagarjha
0 replies
2h28m

This is Hacker News I’m on here to complain not find solutions

lmz
1 replies
9h12m

I thought the point of affirmative action was that being unfair is ok if it is to compensate for a prior unfairness.

saagarjha
0 replies
1h2m

We don’t typically do affirmative action by picking interview questions that make things harder for some candidates as opposed to others, though. We consider some questions to be easier for, say, men to answer (“tell me about a time you were asked to demonstrate leadership”) but we seek to remove that bias rather than asking questions that solely focus on things that can only be answered by those who experienced bias (e.g. “tell me about a time you experienced racism that affected your work” is not likely to be an interview question).

strken
0 replies
10h14m

I agree. It's not a good idea to refuse to hire either young or old candidates. It's also not a good idea to refuse to hire experienced or inexperienced candidates.

These candidates have, as groups, different characteristic strengths and weaknesses. You need to give them multiple tests to see those. Leetcode is not a good test, but you do have to test a new grad on something, which might mean a vaguely leetcode-adjacent test like "go print this json tree of directories to the console then tell me what you did in your third year of uni".

randomgiy3142
0 replies
11h39m

Yeah my first response to 99% of these kind of interview questions is why? I look at ROI and how working code impacts budget and investment. It pains me to say it but the biggest companies out there have horrible code in COBOL that frankly doesn’t make sense to change it over. Similarly bug squashing usually is how did it pass QA/static analysis/dev ops.

bluGill
2 replies
5h43m

You should have a mix of developers on any project, some senior, some mid level, some fresh out of school. The senior engineers should devote a significant amount of time to improving the junior. Your mix should skew to junior developers just because some developers will decide to switch to management, selling insurance, or some such.

Note that I did not say younger - you will get a few "old" people switching to programming as well, and they start off as junior.

sqeaky
1 replies
3h23m

Do I really want a mix of programmers on my project?

That's a very sweeping blanket statement and you're putting a lot of your beliefs on to other people. The smoothest projects I've worked on were always full of nothing but senior developers. But even though that is just my personal experience I know full well many projects benefit from Junior developers. Sometimes fresh perspective and energy are what you want to solve a problem instead of experience and expertise.

bluGill
0 replies
1h18m

For a short time only senior is better. However eventually someone will leave and it takes time to get the new person up to speed. Your seniors will retire and you need juniors trained up and ready to take over. If you are only a short term next quarter thinker you are right, but if you think long term some juniors that you bring up to senior are the better value. (note that this also requires retention of existing people, if your culture is change the team every project there is no value in this - I'm against such cultures, but it is very common in the real world to not value experience on your project)

Of course there is value in bringing in external experts for a short time as well. You don't want to be isolated and not learn from the rest of the world, and of course sometimes you have money for a large project and sometimes you don't and want to fall back the the minimum staff needed to keep institutional knowledge alive.

Last, ignoring everything else, you have a moral obligation to society to build a better world. That includes training the next generation. (and this helps you - when you are retired they will be the senior engineers building the tools to keep you alive)

cjblomqvist
1 replies
11h49m

Just because people in group A are treated badly, that's favoring group B, doesn't mean it's reasonable to do the reverse.

mattpallissard
0 replies
8h49m

The real reason is you can pay them less and they'll put up with more BS.

javier123454321
0 replies
4h51m

Sometimes you want to hire for a potential, as opposed to just experience, sometimes, the reverse. It depends what you're optimizing for.

yonrg
11 replies
13h6m

What is wrong with capitals?

ebcode
5 replies
12h29m

not wrong per se, but they take longer to type than lowercase

johnisgood
3 replies
12h21m

Wait, what?

saghm
2 replies
12h1m

Per letter, capitalization doesn't take much longer, but over the course of an entire sentence or paragraph, having to reach for shift can potentially add up. Sure, it's still small overall, but I think it's reasonable to give the benefit of the doubt to a stranger about whether the extra effort for them to type them is more than the amount of extra effort for you to read it.

johnisgood
1 replies
11h3m

It doesn't take longer for me as I have both of my hands on my keyboard and I can hold the Shift without any delay (or noticeable delay), simultaneously. You could even use "caps lock" in which case you wouldn't have to use shift at all.

bluGill
0 replies
5h31m

The shift key is an uncomfortable stretch for my fingers. I can do it, but it isn't comfortable.

phito
0 replies
11h53m

They don't if you have two hands!

saghm
1 replies
12h3m

NOTHING BUT THERE'S ALSO NOTHING WRONG WITH LOWERCASE

quectophoton
0 replies
8h55m

try pressing the the Caps Lock key

underdeserver
0 replies
11h0m

What's wrong with contractions?

mattpallissard
0 replies
8h47m

NOTHING. CAPS LOCK IS CRUISE CONTROL FOR COOL.

b20000
0 replies
13h4m

i don’t need them here, i am not writing a book

mattpallissard
10 replies
8h52m

I can't speak to anxiety or other disorders but I have a hard time swallowing that leetcode discriminates against the older crowd.

I'm not older, but I was in the industry prior to the leetcode style interview. I've never sat down and "grinded" leetcode but I've also never had a problem with those styles of interview once they became common. Neither have my former co-workers. I have a few friends that are still working, past retirement age, that would crush any problem you threw at them.

In my experience, it's not much different than the whiteboard interview. Sure the presentation of a problem can stump you for a moment, but with a few good follow up questions a solution, however naive, becomes apparent.

I had a mentor early in my career that repeatedly said "There is no such thing as an unsolved problem in computer science". I think that mostly holds true, you either recognize the pattern and implement, or you learn and implement next time.

That all said, leetcode style interviews are the interview version of a "bad code smell" and I'd strongly prefer a bug-squash style, even if it was in a completely unfamiliar programming language. Actually, an unfamiliar programming language might make it fun.

b20000
4 replies
4h6m

leetcode style interviews discriminate against older workers: older workers don't have time to grind leetcode. they have other obligations outside work. job descriptions require "x years of experience" but then the interviewer dismisses your experience and you get purely evaluated on whether you pass the interview, just like younger people who don't have the experience.

I don't know where you've been doing coding interviews. I'm pretty confident there are leetcode type problems you will have a hard time with and won't be able to complete in the allotted time. I'll share one of my experiences with a FAANG.

My interviewer first spent a lot of time "getting to know me" and asking trick questions, and stressing he also previously founded a startup, then handed me a problem and demanded I find the optimal solution in ~10 minutes and also wanted me to talk while working on the problem. I could not remember the arguments to a function and couldn't concentrate. It bombed.

A few days later I was sent prep material for an interview at a different FAANG. One of the videos was the author of cracking the coding interview solving this exact problem on a whiteboard. It took her more than an hour to arrive at the optimal solution.

So in short: 1) interviewer had unrealistic expectations

2) interviewer wasted time with introductions given his expectations

3) interviewer asked trick questions to determine whether I am a liar even though it was pretty clear from the introductory conversations that was highly unlikely

4) interviewer created an awkward interviewing environment and triggered my anxiety

5) interviewer thought I should be able to code while talking

6) interviewer probably forgot how long it took him to solve the problem originally and probably never timed that

sqeaky
1 replies
3h27m

leetcode style interviews discriminate against older workers: older workers don't have time to grind leetcode. they have other obligations outside work.

This isn't discrimination on age this is discrimination on dedication to craft. Young people can have obligations outside of work just as easily as older people.

-- signed an old man

b20000
0 replies
43m

you can't call 20 years of experience a lack of dedication to craft...

mattpallissard
1 replies
1h6m

I'm pretty confident there are leetcode type problems you will have a hard time with and won't be able to complete in the allotted time

I don't doubt that at all. But I've also had that on a whiteboard.

Also, it sounds like your interviewer was a jerk. Which seems orthogonal to the style of interview.

b20000
0 replies
44m

one of his colleagues was similar, so all I can conclude is that this particular FAANG has a higher than average number of jerks

protonbob
3 replies
6h54m

One reason they can discriminate against the older crowd is that they are hard for people with established jobs and familial responsibilities to study for. Working for a longer period of time leads to more experience bug squashing. Younger developers are much more likely to not have kids and more likely to have time to dedicate to grinding questions while having less experience with "real work" i.e day to day LOB software development that the bug hunt interviews optimize for.

sfn42
2 replies
6h45m

I think the point is that competent developers can solve the problem on the go. You don't have to study for it.

I don't know, maybe some places do have ridiculously hard problems that you just have to memorize the algorithm for, but personally I haven't seen that. It's more like advent of code style stuff that you kind of just figure out by yourself.

throwaway277432
0 replies
6h34m

Last time I did the gauntlet at Google I was able to solve all the problems.

However I wasn't as fast as others as I didn't recognize any of the questions and had to work through them. Interviewers expect you to be fast, or at least compare you to people who seem faster. Doesn't matter who studied or not, or who will actually perform better on non-leetcode tasks.

Also having kids is a real issue, it absolutely crushes the amount of time you have to anything besides working.

protonbob
0 replies
6h42m

You don't need to memorize the algorithm for, but if you haven't been exposed to those types of problems you will solve them much more slowly. Younger developers are more likely to have experience with more CS style problems than an older LOB developer who focuses more on writing clean testable code. I don't have an axe to grind in this as I am the younger developer in this situation.

sureglymop
0 replies
7h21m

That is your personal anecdote, n=1. Not that your opinion doesn't matter or carry weight, but it doesn't say much more than the comment you replied to.

nine_k
12 replies
18h4m

This approach then selects those who are relaxed. The candidates that have five more interviews at advanced stages, and likely to receive several offers, as opposed to candidates who badly need a job.

The former kind of candidate may be more desirable for the employer :-/

shermantanktop
10 replies
17h53m

Depends very much on the company. Fishing in the unemployed-and-desperate end of the pool is a real tactic. The odds are good but the goods are odd, as they say.

AlexCoventry
9 replies
17h6m

What's the goal? Increase headcount at any cost?

danielheath
2 replies
16h42m

Find the occasional spark of brilliance someplace where others aren't looking?

shermantanktop
1 replies
15h39m

That’s it. Not everyone lives a life that leads to a perfect resume.

Pikamander2
0 replies
7h30m

And for that matter, some people do live that kind of live but still fall through the cracks. Not everyone is lucky enough to graduate during a strong economy, apply to exactly the right jobs at the right time, etc. There's a lot of wasted talent out there that many businesses have little interest in seeking out.

Exoristos
2 replies
15h41m

Improve the ratio of compensation to workload in the hiring employer's favor.

chii
1 replies
6h50m

The reason someone is unemployed or is desperate might correlate (inversely) with their ability to produce high workload.

dmoy
0 replies
3h37m

Or it might just be a totally unrelated layoff that axed a whole team / org / whatever.

mrj
0 replies
2h35m

There are lots of good people who are unemployed through not fault of their own. The goal is (as always) to find good candidates. Because many companies have a weird aversion to those not already working, the pool will be stronger by including those with other job histories because it doesn't really indicate who they'll be as an employee. There are great candidates there.

It's just cargo cult hiring.

giantg2
0 replies
4h19m

In my experience, it's just to hire the people that got passed over by other companies but still have some skill. You dont have to pay as much and they might also be more likely to stick around longer if they have trouble interviewing at other places.

I'm stuck in my job and I get paid less than people with lower tenure and credentials. Due to a disability, I don't have the social/political skills to get promoted in my org nor feel comfortable job hopping. It's funny though because every team I've been on has had managers or TLs telling me things that equate to 'you should be at the next level' such as "if you were preforming at this same level on another team you would probably be promoted". I had an interview internally recently and was told that I "found more errors than was expected" for my level.

So yeah, get disabled people like me so we are less mobile, work above our level for the technical work, cost less, and can't get promoted easily.

ericjmorey
0 replies
16h40m

Finding talent

teaearlgraycold
0 replies
17h48m

Even if I have no other offers I’m pretty good at maintaining a calm demeanor in an interview. I think it’s served me well over the years.

StefanBatory
5 replies
7h10m

Isn't that what companies would look for, though? They want people who can work under stress. If you had two equal programmers, and one who was stressed and the second who was not, any company would pick the second one without thinking.

playingalong
2 replies
5h57m

Some organizations (although admittedly not all) put a lot of effort to offer a creative environment for their creative staff. So they optimize for something else.

A bit like 100m race vs. marathon.

StefanBatory
1 replies
5h47m

I'm still at university, so despite my previous post having a bit of accusatory tone, I was genuinely curious. At least my profs told us many times that we should be prepare that stress at work is absolutely normal and that if we can't handle it, just drop out.

sdlion
0 replies
3h42m

In my experience, being a workplace or even academia, there's as many types of work environments as types of teachers.

In the end, management (or founders if it's a startup) set the tone and who they end up hiring (thus, who will manage your work). And management is just normal people in the end.

lapcat
0 replies
6h49m

All stress is not the same. Interview stress is actually very different from working stress.

Ask a firefighter who rushes into burning buildings for a living to give a public speech in front of a large crowd of people in a non-burning building. Which is more stressful? For the firefighter, it may be the latter. Fighting fires is what they train for, what they're experienced with, whereas giving speeches is not.

A lot of people, no matter the profession—firefighter, programmer, etc.—have a great fear of public speaking. Likewise, a lot of people, no matter the profession, also have a great fear of job interviews, especially the crazy audition-style interviews of programmers. It's simply human nature, with little bearing on job performance in general. We shouldn't be giving auditions to people who aren't stage performers. Personally, I never work with someone watching me—definitely not a judgmental stranger who will fire me for any perceived peccadillo—nor do I ever have some specific narrow time limit on my work in the range of 15 minutes or so.

chii
0 replies
6h51m

That assumes that during regular work, you'd be under stress. If it were the military, then yes, i would agree - working while you're being shot at means you need to be able to work under stress.

However, a lot of people don't do well under stress, and in many corporate settings, there's usually no real source of stress (except perhaps artificial stress induced by management). Someone might work much better in a stress free environment than someone else under a stressful environment, but you'd then easily miss these candidates by structuring the interview to be stressful.

Hamuko
1 replies
13h22m

Yeah, I've had a live bug squash interview (SSH into a server where a script is not functioning) and I didn't find it particularly fun. I did manage to get through it and the interviewer seemed impressed, but it's still stressful to do it with someone silently judging you. I'd much prefer take-home assignment and do it at my own pace, but I guess that might be susceptible to "cheating" (whatever you consider it being).

sqeaky
0 replies
3h29m

Doesn't a take-home task also prevent any chance to ask questions in the middle? And I mean questions both ways. An interviewee can ask questions about the code base that might be common knowledge to people on the team and an interviewer can ask questions about why a thing happened and gain insight into the interviewees thought processes.

I get that interviewing is a skill on its own, and not everyone has skills that work in an interview that transfer to the day-to-day job but don't most day-to-day jobs have a large communication component?

nailer
0 replies
40m

It may be fun on the job or at home, but the stress of a job interview both eliminates any "fun" aspect and makes even simple tasks more difficult.

Suggestion here: leave the room and come back in 40 minutes. Let them debug, fix the problem, and present to you when they're done.

draw_down
0 replies
18h50m

The discomfort and stress is a given in any interview. What I think is nice about this is it doesn’t require you to emanate fully-formed, nicely designed code from your brain on the spot. Instead you just have to navigate the codebase, read it and understand it.

It’s a better demonstration of knowing how software works imo. But I am biased because this sort of thing is one of my strengths.

brainzap
0 replies
7h15m

thanks for pointing this out

Twirrim
29 replies
14h34m

My favourite thing to do for "coding" interviews is to give the candidate a piece of absolutely awful python code that a friend of mine came up with for use for interviews.

There are code smells, side effects, errors, confusing syntax, a whole slew of things in it. I give them the code, tell them I'll help with every bit of python syntax (and really emphasise that I don't mark people down _at all_ for any lack of familiarity with python / python syntax), and ask them to work through the code and do a code review.

There's some python specific quirks that I largely consider bonus points at best, but anyone with any appreciable familiarity with at least one language should be able to spot a number of things. As they call stuff out, I'll dig in (or not) as seems appropriate.

So far it seems to be working out great for me as an interviewer. Candidates seem to be way less stressed than they are with a "whiteboard coding" exercise. Good discussions are showing me their development skills, etc.

xgb84j
14 replies
8h58m

Great idea, that's exactly what I like to do as well.

Because many people were interested in some actual code, here is an example that we used for Java:

---

public class UserDao {

    private Provider<Session> sessionProvider;

    public UserDao() {
        this.sessionProvider = new DbSessionProvider();
    }

    public boolean saveUser(User user, ApiConfig config) {
        try {
            Session session = sessionProvider.get();
            session.save(user);
            System.out.println("User saved!");
            return true;
        } catch (DbException e) {
            EmailUtil.sendEmail(config.getTechnicalSupportEmail(), e);
            return false;
        }
    }
}

---

"Solution": We always ask the candidate "What would you change about this code?" or something similar. We expect the candidate to come up with some selection of: - Database sessions should come an injected provider. - Configuration should probably be injected as well and not passed as a method parameter. - Booleans are not canonical Java as return value. - Don't write to stdout but to a logger. - Exception handling should probably happen outside the DAO. - Don't use static methods for sending Emails without good reason. Non-static methods are easier to test.

Finding these things is as important as being able to talk about them and give background on advantages / disadvantages of doing things different ways. With good candidates one can talk easily half an hour just about this example and adjacent topics (e.g. error handling).

---

Edit: Formatting

Edit 2: added "Solution"

vaylian
4 replies
8h33m

Booleans are not canonical Java as return value

What should you return instead? Or should the method return void and raise an exception on failure?

normie3000
2 replies
7h59m

Probably boolean. If you don't see the difference, welcome to Java :D

Izkata
1 replies
4h44m

Ah, but the code already uses boolean instead of Boolean.

normie3000
0 replies
2h33m

Whoops, so it does. In which case I have no idea what the solution is referring to.

haspok
0 replies
7h59m

You could return the saved User object, if `save` changes it in any way, to allow the caller to work with it functional style, ie. make it explicit that it is an updated object (or if it is immutable, although typical persistence frameworks expect mutable objects, "bean" style).

You could also go fancy and do it properly functional, so return something like an `Either<User, Error>` instead of throwing an Exception, but that's definitely not canonical Java...

whatever1
2 replies
7h43m

"Don't write to stdout but to a logger."

Not great advice given the fact that a logger paged pretty much every SDE on this planet.

nailer
1 replies
34m

That's the intention. So people see the messages.

That said, modern Linux OSs send stdout to journald by default. journald often forwards to some centralized logging server.

whatever1
0 replies
11m

It's an extra dependency. But I guess we will never learn. Just import log4j and pray.

normie3000
2 replies
7h56m

This code looks like normal enterprise Java ugliness to me - I object to it on principle, but apart from having to pass ApiConfig when saving a user I probably wouldn't identify any of the official problems you listed without familiarity with the rest of the codebase.

Izkata
1 replies
4h45m

Same here... and funny enough the only thing that really looks wrong to me is they used "this" in only one of the two places they used "sessionProvider".

It's not a bug ("this" is implied, so it works just fine), but leaving it out hints to me that it was originally a third argument to "saveUser()", and either the original person writing this didn't have a solid API in mind or "saveUser()" was intended to also be static like "EmailUtil.sendEmail()" and it was switched around later on. Overall hints towards two conflicting styles in the same codebase and no good guidelines. Or maybe there are such guidelines (as hinted in the "solution"), and whoever updated this class only did it partway. This is the point where I'd poke around in the repo history to see why it's like this and whether anything should be changed further in either direction.

jerf
0 replies
4h33m

The "secret decoder ring" for this sort of question is that it's really "say something intelligent about this code that indicates you have real and good experience" even more so than "find the bug". So your answer would generally be off to a good start as well.

Given the Java code in question, while I understand the idea that "well, the session provider may just be hard coded" and such, I would definitely want to hear something about deficient exception handling. It's obviously an important part of the code and while I may not be able to spew out the exact correct exception handling without knowing more about the context and what exceptions may occur, it is obviously very wrong as written.

hkon
0 replies
5h50m

Ever get the answer: this code should not exist?

bilekas
0 replies
8h52m

I love the exception suppression via email.

Sr.Dev : "UserSignup failed, ask tech support what happened in our code"

Genius.

actionfromafar
0 replies
8h56m

This is canonical Java. Commit and deploy!

Borg3
4 replies
11h9m

Right... Python.. Its syntax is so ugly. So I guess you can have really awful gems there with hidden bugs :)

I myself, shoot myself in a foot once doing Python code. I declared variable called 'len' and boom! What an interesting failure mode the script had. Took me a while to figure it out.

IshKebab
3 replies
10h0m

When I write Python it's an absolute hard line requirement to run it through Pylint and Pyright. They catch sooooo many issues you'd have to be a complete idiot not to do this (many people are unfortunately).

In this case Pylint will tell you about this mistake:

https://pylint.pycqa.org/en/latest/user_guide/messages/warni...

Borg3
2 replies
4h8m

Hmm, nice stuff.. Luicky, I avoid python, so case closed. Ruby is so much nicer for me.

IshKebab
1 replies
1h9m

Ruby is even worse in my experience, but I guess some people have strange priorities.

Borg3
0 replies
15m

Hehe.. Well, most importand is, use whatever language that makes you happy using it. I ve started using Ruby around 2006 I think. I was evaluating Python too, but syntax annoyed me and portability issues as well back then. I never regreted that I choosed Ruby. Its just solid for me :)

esperent
1 replies
14h12m

It does seem a bit unfair - ok sure, anyone familiar with C-family syntax should be able to work through it and spot errors. But anyone already familiar with Python would be able to do so a lot faster.

I think the idea is good, but to be equitable it should be given in a language the person claims to be already familiar with. Or alternatively, only give it to people in a language they are not familiar with.

phil-martin
0 replies
10h0m

If the goal was to objectively evaluate ability in a broad population, I 100% agree. However, if my dev shop primarily uses Python then selecting for people familiar with Python is pretty reasonable.

Thankfully there is a giant corpus of terrible code out there for any language. Especially that code written by the most evil terrible coders of all time: past-self :D

quectophoton
0 replies
8h58m

Yes! I love these kinds of interview questions. For some reason these feel more like a "normal" pair programming (/ code review) session, and I totally forget I'm in an interview.

Still a tiny bit stressing at the beginning while I read the code for the first time and try to understand it because I worry that I might be taking longer than the interviewer expects, but if I'm thinking out loud then that helps both of us. After I get reasonable context I can then forget about the interview and just focus on the normal pair programming / code review.

naught0
0 replies
14h7m

I'm dying to see this code

filcuk
0 replies
8h43m

I work it BI and am hoping to expand the team. Does anyone have a good universal SQL code for that?

In my interview, I was given a T-SQL code, where I did point out the mistakes, but was told my solution wasn't optimal, but that was because I've never used that flavour before (nor was it specified in the hiring docs), so I'd like to avoid doing the same to others.

devjam
0 replies
13h45m

As was also pointed out in the TFA, while you may not be "marking people down" because of unfamiliarity with syntax, an interviewee who has more experience with the language (and it's debugging tools) used in the interview will have an inherent advantage over someone who isn't as familiar.

bigbong
0 replies
14h20m

Would you mind sharing it?

Pikamander2
0 replies
7h15m

I wrote some entry-level PHP interview questions years ago and the number of people who couldn't spot simple syntax errors or identify the security hazard of echo $_GET['var'] was staggering.

BodyCulture
0 replies
9h12m

Please show some examples of such code, everyone will profit from this, no reason to hide it, thanks!

0x20cowboy
16 replies
18h25m

If you can’t sit down with someone, have a simple tech conversation with them and be able to tell if they know what they are doing… if you need to “give someone a test”… the problem is likely not the candidate.

marcinzm
4 replies
18h16m

That biases heavily to candidates with good people skills and the skill to take over a conversation. Yes, you are not in fact immune to this even if you think you are, that’s why it’s so dangerous.

0x20cowboy
3 replies
17h38m

I disagree. That would indicate conversations skills equate to knowing what you are talking about.

"Yes, you are not in fact immune to this even if you think you are, that’s why it’s so dangerous."

I think that I am. I'll think about that a bit more. I don't care for popular people so, in fact, my bias might be the other direction. However, I don't think I have ever met a person who I thought was technical and proficient, but turned out not to be.

I have been forced to hire people I knew were not proficient because they passed a test, but not the other way around.

marcinzm
2 replies
17h22m

I don't care for popular people so, in fact, my bias might be the other direction

It's not about someone being popular and you saying it just makes me more certain you don't realize the trap. People can have well honed social skills and not act like your standard popularity contest wining politician.

kmoser
1 replies
14h57m

The most carefully honed social skills in the world won't help somebody plausibly answer a question like "What is the data type of this variable?" or "Show me the line where the null pointer dereference is happening."

They can add all the smiles and chuckles and other social niceties they want, but at the end of the day, whether they come up with the right answer or not, their logic will tell you pretty clearly whether they know what they're talking about.

That's the point of a technical interview: to distinguish those who think (or pretend) they can code sufficiently well to do the job, from those who can't.

noisy_boy
0 replies
9h10m

aka Talk is cheap, show me the code.

caseyy
2 replies
18h15m

So true. A test will only measure its set of criteria. What is a test for drive — desire to understand and learn? What is a test for how a person will respond to challenging and overwhelming prod scenarios? What is a test for if they will burn out in a month because they want to prove how rockstar of a programmer they are?

My most successful hiring has always been based on a conversation with 3-4 practical questions. I even worked in a company that had testing down to a science with all the psychometric nonsense and in the end, it just hired many sociopath-adjacents.

kenschu
1 replies
17h22m

There's both culture and technical elements to consider in a potential hire. I don't think anyone would contest that vetting for the culture/drive of a candidate is important. But I do think the demonstration of skills is a necessary part of technical hiring, at least for non-senior positions.

caseyy
0 replies
7h59m

I agree with that to some degree. But I do lean more into hiring on potential though, it has worked out for me.

Skills can be learned. Tools can be provided. But the employee’s personal values are very hard to change. These are core components of performance in some perf management theories.

I think context is important. If a company can hire on potential, I would say it will be a better hire in the long-term. But if employee turnover is high and tenures short, and you need work done now and not 6 months from now, I agree with you more.

cheeze
1 replies
18h18m

On the flipside, I've spent an hour with a candidate who seemed great, but could hardly _actually program_. It was a bizarre dichotomy. Dude was clearly smart as hell but was so caught up in building perfect abstractions in parts of our software that _didn't matter all that much_ using languages that nobody else knew or wanted to use.

I get it, your fun language is fun. But if the dev shop is 60% one language and 39% another, I don't really care about the small improvements. You need a strong reason that it actually _helps the business_

caseyy
0 replies
18h12m

Ask them to explain what 4-5 different bits of code do. When they do, ask them to explain it like they would to a junior and to a senior/principal/fellow.

It works very well and takes only an extra 10 minutes on top of the conversation.

throwaway215234
0 replies
17h33m

What you're describing is a low hiring bar. Low hiring bars make sense for companies that pay low to average salaries, or don't require particularly deep technical skills. But it's an awful strategy if you're trying to filter for exceptional talent and willing to pay top dollar.

tedunangst
0 replies
18h4m

If all I needed to do was express my thoughts out loud, I wouldn't need to hire anyone. I can do that myself.

sethammons
0 replies
6h27m

We tried this approach. It did not work. Source: SendGrid while ramping up to become a public company. The interviewing experience involved was fairly extensive; I had probably given a couple hundred interviews in my career by then and I was not the most experienced by a long shot.

We tried to have a zero coding interview. All behavioral and experiences questions followed up by "how would you design a system to do blah." Got a candidate that did well. Hired. Turned out they could talk the talk but not walk the walk. It was wildly unexpected. They simply couldn't code well. Too long to deliver, too poorly written, usually didn't work right. We insisted on _some_ coding in interviews going forward

mikeocool
0 replies
6h28m

I agree — this is very much the type of interview I like to give. However it took me a while to get good at steering the conversation and digging for details.

It’s really easy to let the interviewee talk through talk through all of the great things they built from a product and business perspective — and assume they understand the technical perspective. There are candidates who are really good at talking in an impressive way, but manage to talk around any true implementation details or deep technical understanding.

It’s also really easy to come away with a bad impression of someone who has a tendency to give short answers and not elaborate on things, even when it turns out that person is really skilled when you dig in.

I imagine a big part of the reason for the test-style interviews we have today is that it’s easier to train an interviewer on how to give them.

Pikamander2
0 replies
7h18m

That sounds like a great way to end up with a dev team full of smooth talkers who you then later discover can't code their way out of a paper bag.

BurningFrog
0 replies
17h33m

Strong disagreement!

Sure, there is some correlation between talking and doing, but I've worked with people who talk like geniuses and code like crap. And also the opposite.

For some skills, there is just no substitute for actually have people actually demonstrate using them.

zug_zug
12 replies
18h34m

I've only had one "find the bug" interview, and it was awful:

- Didn't set you up with a way to reliably run/test the code, nor a step-through-debugger which, jeez is it 1980? Like setting up a repo in a language you aren't familiar with (say getting your py-env exactly right) can take a whole hour if it's not your main language.

- Didn't have standardized questions, which is hugely problematic (some bugs are 2 orders of magnitude harder than others)

- It also just seems like there's a huge random element, like am I debugging code written by somebody who thinks at the same level of abstraction as me? Did they write comments I understand?

__float
8 replies
17h41m

- Didn't set you up with a way to reliably run/test the code, nor a step-through-debugger which, jeez is it 1980? Like setting up a repo in a language you aren't familiar with (say getting your py-env exactly right) can take a whole hour if it's not your main language.

How frequently do people interview in a language other than their "main" one(s)?

- Didn't have standardized questions, which is hugely problematic (some bugs are 2 orders of magnitude harder than others)

How do you know they're not standardized? (You say in another comment where it was, and indeed that's where the blog post author works. It's described as a pretty standardized process by my reading of it.) You can pass the interview without actually solving the bug, but I get it's easier to blame the problem than admit you struggled with it.

bawolff
4 replies
15h29m

How frequently do people interview in a language other than their "main" one(s)?

I would say most of the time.

However i still think debugging is a core skill you should be able to demonstrate in languages that aren't your main one.

marginalia_nu
3 replies
12h12m

In Java, would you catch that these two snippets of code do different things?

        List<Integer> l = new ArrayList<>();
        l.add(1);
        l.add(2);
        l.add(3);
        l.remove(1); // invokes List.remove(int)
        System.out.println(l); // [1, 3]

        Collection<Integer> l = new ArrayList<>();
        l.add(1);
        l.add(2);
        l.add(3);
        l.remove(1);  // autoboxes 1 and invokes Collection.remove(Object)
        System.out.println(l); // [2, 3]
Bugs very often lurk in language specifics. Python has its infamously static default arguments as an analogous quirk.

bawolff
1 replies
3h1m

Probably not. However i think (after copius println debugging and lots of time) i'd probably be able to narrow it down to which line the unexpected behaviour was happening. From there i would google the language construct, and hopefully get something useful.

The art of debugging isn't memorizing all the foot guns, its narrowing the problem down enough that you can deal with the foot guns you have never heard of before.

marginalia_nu
0 replies
2h37m

A good chunk of the debugging skill is just having seen a lot of bugs before, and knowing what to look for based on the symptoms alone. This is an extension of your ability to mentally model the behavior of the code, which is fairly central to any programming activity.

Another part of debugging involves various methods for reducing the size of the haystack, but it's not really realistic to rawdog every bug like that, as that would mean each bug would likely take hours rather than a few minutes.

Any half-experienced Java developer should spot the stink in that code immediately.

ZaoLahma
0 replies
9h51m

I once interviewed (and got the job) for a java dev position with a mostly C/C++ background.

One of the issues to solve during the tech interview was fixing a bug in a fairly involved web app with a java backend. Long story short, it boiled down to "==" being used to compare two strings instead of ".equals" somewhere deep in their class hierarchy.

I found it and fixed it, even though I was not familiar with the reference vs value equality difference in java. General debugging skills acquired over years should allow you to track down exactly where things go more wrong than expected, and then help you reason about why it goes wrong.

underdeserver
0 replies
10h55m

setting up a repo in a language [...] can take a whole hour if it's not your main language.

Even if it is your main language.

tedunangst
0 replies
17h12m

I seem to interview in a different language every time I switch jobs.

saagarjha
0 replies
10h28m

How frequently do people interview in a language other than their "main" one(s)?

A lot of companies have a set of "standard" interview languages like Java or C++ that may not be used by the role that is being hired for.

trevor-e
2 replies
18h8m

Yea there's a huge element of randomness to these kinds of interviews. I wasn't a big fan of them at Stripe. You can get some signal like:

- do they methodically approach the problem? - do they understand the bug? - do they know how to use debugging tools? - do they know advanced debugging tools? - do they work well in an unfamiliar codebase?

But in practice I'd say most candidates check those boxes, at which point it becomes an arbitrary evaluation unless you pass/fail them based on whether they solved the bug.

zug_zug
0 replies
18h2m

As it happens the place I had a really bad experience with it was stripe. I had pretty much aced every other question, but basically was setup with a problem where I didn't have a way to reliably get it running (and I wasn't even clear what the app was supposed to do, it was just some random project off of github).

Fortunately I already had an offer onhand from facebook.

leoqa
0 replies
17h10m

I gave this interview 100+ times and my criteria boiled down to: did they propose a hypothesis and then follow it to a conclusion? Doesn’t matter if it was wrong, just mattered that they were able to falsify it or find the solution.

At the end, I would have them walk me through the bug, its cause, and the fix in very high level terms to make sure they could articulate the path we took.

vandyswa
9 replies
19h8m

I've done the equivalent of this by asking them to describe an interesting bug they've encountered in past lives; how it came up, how they hunted it, how they fixed it. By listening to them describe the work, asking questions, and following their thought processes, you can come to a fairly good hire/no from this single walk-through.

I know, it's short and humane, so not a good fit for current Sillycon Valley culture.

sk11001
5 replies
13h39m

There’s no chance that I can come up with a good bug story on demand without any preparation.

serpix
1 replies
8h8m

compare this with the technical interview bomb of demanding you write a full blown program right fuking now, complete with tests. Which one do you prefer?

2rsf
0 replies
4h33m

I prefer to describe a bug in details, but it is hard to come up with the details on the fly without prior preparation

izacus
1 replies
7h19m

Ok, but why do you think you should be hired in that place though? :)

FabHK
0 replies
3h39m

Agreed. It's a great interview question. For a story-telling position.

tdeck
0 replies
12h57m

For past experience I reviews like this it's a good idea to give the candidate advance notice.

sensanaty
0 replies
9h5m

I straight up lie and make something up for these "tell me about a time..." type questions

Unless it was literally a week ago, I work on too many things to ever remember anything, and for me it's just a fact of the work that I'll be fixing bugs or whatever the questions asks. Nothing stands out, because I don't consider any of them to be some sort of special occasion worth keeping track of

Lvl999Noob
0 replies
12h43m

Live bug squash is better, imo. I was part of the production support at my $DAYJOB. My work was literally finding and squashing bugs all day. And yet, if you were to ask me for interesting stories, I won't be able to tell you anything. Maybe I'll remember the latest bug I solved but most of the time, once the bug is resolved, its off my mind. I will have to go through my jira and github history to first see which bugs I even worked on, then filter for the interesting ones and then try to remember the story instead of just the root cause.

IshKebab
0 replies
9h57m

Ugh "tell us about a time" questions. I'm so glad the tech industry generally doesn't do that nonsense.

If you do get asked these questions just lie.

mistercow
7 replies
16h27m

It’s easy for the candidate to self-assess their own progress.⊕ When the candidate isn’t doing well on it, they probably already knew it without needing to be told as much by the recruiter. This is a much better candidate experience than the whiplash of thinking you solved a question perfectly only to realize that the interviewer was looking for something else entirely.

Not to say that I think this is a bad type of question overall, but IMO, this is an anti-feature. The candidate does not need to accurately self-assess their performance on the day. They need to have their confidence preserved so they don’t tilt and tank the signal for the entire interview round.

bawolff
3 replies
15h33m

I don't know, i think the best questions are the ones where candidates fully understand what is being asked about them. If they aren't able to self-assess did they really understand the question?

kenschu
1 replies
15h21m

Candidates walking away pissed is itself also a problem. A significant percentage of candidates avoid buying from companies they're rejected from [1]. They also love sharing their poor interview experience with future potential applicants.

[1] https://www.wayup.com/employers/blog/how-a-positive-candidat...

neilv
0 replies
14h18m

A significant percentage of candidates avoid buying from companies they're rejected from [1].

When rejected, or from an otherwise negative experience.

It's not necessarily negative emotional associations. Usually it's that I picked up on signal that the company has serious problems -- either overall, or with a key person -- which suggests I shouldn't depend on the company as a vendor.

mistercow
0 replies
15h20m

What you want is to prevent floundering death spirals. They need to understand the criteria, but if you need to hint and nudge them, they need to not feel like that means they’re bombing. Of course, you can absolutely do that in a bug squash interview, but my point is that it defeats this claimed advantage.

alexvitkov
2 replies
13h19m

"We don't want you to know you've already failed so we can waste your time for a month in the off-chance nobody better shows up."

mistercow
1 replies
5h9m

What an incredibly bad faith reply. Candidates should always be given an answer within a few days of finishing the interview. But it’s not good for a candidate to think they’ve bombed during the interview.

If someone fails my interview, it is completely possible that they’ll still get an offer. I have one data point, and my colleagues are going to collect more. I’ve changed my vote from no to yes in debriefs many times once I saw other feedback. But that’s a lot less likely to happen if my interview wrecks their confidence.

alexvitkov
0 replies
2h8m

Nope, this is as straight forward as it gets. There are only two ways not to know if you're failing or acing an interview:

1. You don't know what metrics you're being judged on.

2. You do know but you either can't assess your abilities in said metrics or you can't tell how well you've presented them.

The second one is up to the candidate, not much you can do about that, but if during an interview you have no idea what the interviewer is looking for, that's a terrible interview.

berikv
7 replies
20h44m

Although I like this interview question, it has a big downside. You make the candidate spend quite a lot of effort while you as an interviewer don’t learn much. The answer to “Can this candidate find and fix this bug?” is not necessarily equal to “Is this candidate a good expansion of the team. What do they bring that we need?”

jez
2 replies
17h51m

The point of the interview is not to answer "Can this candidate find and fix this bug?" but rather "what is the candidate's approach to fixing unknown problems?"

A good performance looks like making a hypothesis for where the bug is, testing that hypothesis, and repeatedly narrowing in closer and closer. Finding and fixing the bug is irrelevant!

A bad performance might look like

- running out of hypotheses for what might be causing the bug

- making hypotheses, but never testing them

- failing to interpret the result of their test of the hypotheses (thinking it confirms one thing, when it doesn't actually confirm that, or it confirms the opposite)

johnisgood
1 replies
12h10m

So like trial & error? Modify, compile, run?

saagarjha
0 replies
10h27m

That could be one way to approach this, yes

ryandrake
1 replies
20h27m

It's kind of a fizzbuzz-ish weed-out question: If they can do it, sure, you haven't learned that much, but if they cannot, then you know with pretty high certainty that they're not going to add to the team.

aaronbrethorst
0 replies
13h20m

Astonishingly, I’ve found fizzbuzz to be a shockingly good weeder question for tech screens.

ozr
0 replies
19h22m

It rarely makes sense to hire for a specific need. I want people that are smart and high agency. Seeing how they approach problems like this is generally enough to tell.

I've done similar interviews in the past and they are remarkably high signal.

Noumenon72
0 replies
19h26m

To me this sounds like a relaxing break from the effortful part of the interview.

Noumenon72
7 replies
19h28m

I was thinking, wouldn't it be fairer to do the test in an online code sandbox where being able to build and install isn't an issue? Then I thought, isn't letting the candidate use their own machine and debugging tools about as biased as hiring a limo driver based on how fast they can drive their own car? It does tell you who's a real "car guy" or "Unix guy", it just has a slight disparate impact by screening for people with money and hobbies. I mean, I think you should be allowed to hire these people because they will be better at the job, but hopefully they could also show that in a sandbox test.

singleshot_
0 replies
19h16m

Decent product idea? I’ll stay tuned for your Show HN.

rtpg
0 replies
18h47m

We would run stuff in repl.it, you get the shared codespace and also don't waste time on the ops issues (which are maybe interesting and you really want devs to be able to handle but also entirely incidental complexity for most devs).

In abstract I think it's great to have people use tools their comfortable with, but I dislike dinging people because they write good code but are not good at unborking Python venvs (less of a problem now) (yes you can be a good programmer and still lose time on dumb environment stuff)

kenschu
0 replies
17h31m

This is exactly what we've built!

We take in these bug-squash/Github based repos, serve them in VScode Web/Jetbrains/etc, and give you instant results

Email is in profile if anyone's curious to see it live

jez
0 replies
17h55m

I think there's the chance to do both!

Some candidates will not have problems installing dependencies and want to use their own tools.

Other candidates will want to not have to think about their environment.

Providing an online code sandbox doesn't preclude allowing candidates to do it on their own laptop!

ibash
0 replies
18h37m

yikes. any time I'm asked to use a sandbox I ask if I can copy/paste to my own editor and share the screen.

Otherwise I'm easily 4-5 slower and can't think as clearly because of errant keystrokes.

dingnuts
0 replies
19h14m

your job doesn't let you configure your own environment and tools?

ElectricSpoon
0 replies
19h10m

I find editors to be deeply personal things. Throw a vim user in vscode and you might be disappointed, and vice-versa. I don't care about your tools, I care that the sum of you and your tools make you good.

I think the good middle ground is having both a canned environment and allowing candidates to use their own... Unless the job is about debugging production systems where only vi is available, in which case that interview might as well represent the actual job.

lr4444lr
5 replies
18h52m

How much time do you allot for this thing? Cloning the repo, dependency installs, server/DB setups, possible build steps, configuring the IDE to the project ... even if the whole thing is containerized, just going from nothing to running code in an IDE alone could be expected to take 20-30 minutes of the interview.

s17n
1 replies
18h28m

In my experience doing these interviews in Node and Python, it takes about 5 minutes to get running. If it takes more than that... maybe use a different codebase.

lr4444lr
0 replies
17h57m

What exactly is the interviewer looking for? Familiarity with tools, or actually debugging skill? I like the idea of debugging questions, I'm just not convinced all this setup and "use your own tooling" is necessary,and that a long enough snippet of given whiteboard code sample can morr effciently test for debugging skill. I can always teach (and learn!) new tools, and frankly, there is value to me as an interviewer to see someone manage without his tools.

kenschu
0 replies
16h48m

Agree! This is one of the core pains we set out to fix. Using a CDE to package everything nicely for the candidate goes a surprisingly long way for their experience.

I think there's a valid point that any IDE != a candidate's local setup. But I think there's a compromise there - we try to offer a variety of common IDE's + a few mins of prep to download extensions, etc before you're thrown in the thick of it.

ibash
0 replies
18h39m

You just need to rewrite the dev tools in rust!

Joking aside, modern fast tools like bun can make this type of interview way more viable.

I once conducted this type of interview where the candidate had to install node on their windows laptop and... we spent most of the time debugging their install :/

__float
0 replies
17h38m

The bugs are chosen in projects that don't require this much setup. (There is no server/database, they use standard tools for the given language, and they are generally solvable without needing an elaborate IDE/debugger setup. Of course that may help, and it's why you bring your own computer and choose the language ahead of time.)

gecko6
3 replies
13h15m

I have an interview question:

step 1: the candidate is shown the specification for a method and the results of running the test suite on an obfuscated version of the method. All tests pass. The test suite is minimal, and test coverage is abysmal.

step 2: the candidate is asked to come up with more test cases, based on the specification. The code is run against the updated test suite - most new tests will fail because the method's implementation has several known bugs.

step 3: The un-obfuscated source is provided and the candidate is asked to correct any bugs they discover.

step 4: the changed source is run against a full test suite.

I like this because the candidate's ability to think of test cases, debug, and fix existing code are all tested for.

saagarjha
0 replies
10h31m

Curious if any interviewee has tried to unobfuscate the code.

pastage
0 replies
12h28m

This has failed me because code get pretty gnarly fast, many things I thought was obvious was missed by people smarter than me. I think as long as it is a tool for discussions rather than grades it is good though.

eru
0 replies
9h58m

Do you allow property based testing?

RomanPushkin
3 replies
13h38m

The only downside I see is that I need to share my screen with a person I don't know. Don't get me wrong, but I normally have access to some crypto on my laptop, banking notifications turned on for my 2FAs, private messages I'm getting from my spouse, maybe some borderline NSFW chatgpt dialogs, screenshots of my ideas, emails, private notes, personal projects, whole bunch of tabs I am not willing to close or share, etc.

I don't have issues to show the screen to a friend of mine. Or showing the screen of a work computer to a colleague. However, demoing the whole screen is violation of privacy. Please don't do that, unless you grant VNC access to a machine with a set of popular tools, code editors, etc.

How about reverse bug squash? Interviewer shares the screen with all his/her private info, notes, tabs, development environment settings, shell command history (with maybe autosuggestions turned on), and the interviewee needs to guide the interviewer towards finding the bug?

tdeck
1 replies
12h53m

This is common in many interviews, not just "bug squash" interviews. I recommend having a plan for it if you're interviewing. Perhaps dedicate a virtual desktop to interviews if your system supports it.

RomanPushkin
0 replies
12h42m

Thanks for recommendation. I just finished my rounds of interviews, gotten a decent offer (SF company), being 20 years in industry. I have my own rules, and luckily they align very well with industry standards. So I never had any issues not following the scenario when I need to share something to land a job. I also don't do any take-home assessments, and moreover, I only use one programming language while interviewing. Never had any issues with that.

I think I don't need a plan or virtual desktop. I just say "no" if it doesn't work for me. Unless I am really desperate, I do not share.

yonrg
0 replies
13h3m

True, this would discomfort me, too. Also in webconferences, I never share the full screen, only one window. This should be enough for bug squash as well.

rtpg
2 replies
18h49m

At one place there was a bug squash interview like this. Rough idea was we wrote a very small version of a system we had in our app (some data-syncing-then-displaying service), with a handful of bugs and a very simple feature request.

It was very helpful for sanity checking if a person was able to be in front of a computer. There's a bit of a challenge because I think there's a pretty low ceiling of performance (strace on a Python program is fun, but our bugs are not that deep!), but we could use it to also talk about new features on this mini-system and whatnot.

General feeling on it was "this is a great filter", because ultimately we needed people to just pass above a minimum skill bar, not be maximally good at coding. And having the exercise really helped to communicate the day-to-day (which can be tedious!)

bluGill
0 replies
5h26m

I've interviewed a few people who have a great resume and came off well in the interview, but I was left wondering if they could write code. (HR only allows me to ask specific research based questions in an interview and so it is easy to answer well without giving any indication you can write code). We now have some filter exercises that are about if you can write code at all.

Izkata
0 replies
5h4m

(strace on a Python program is fun, but our bugs are not that deep!)

They don't need to be deep to be useful. I once used it on nodejs on a hunch, looking for anything that felt "off", and discovered it was accessing settings files I had no idea even existed. Turned out the other dev was having problems because of one in his home directory the rest of us didn't have.

kopirgan
2 replies
19h9m

I could be wrong but given how fast things change in this business, this seems to test very micro level skills not the learning and adaptability skills.

What if a guy could, given the business or technical issue the code solves, write something faster than he could fix others code?

May be the job is about heads down coding so this bug fix test is appropriate..

from-nibly
0 replies
19h4m

Then you could do that and showcase that you can write code incredibly fast.

__float
0 replies
17h16m

How is debugging a "micro level skill"? Jumping into an unknown project/system/whatever is something you will likely have to do at some point. (Sometimes it might be code you wrote yourself years ago, but revisiting without any context makes it feel unknown.)

Is this hypothetical guy always writing 100% correct code?

jpmoral
2 replies
18h59m

Had an interview question like this where the interviewers were very impressed. Said it was the fastest and cleanest they'd seen anyone do it, and in an unfamiliar framework no less. Unfortunately it wasn't enough for me to get the job. I had a couple of answers in the next section they didn't quite like.

__float
1 replies
17h19m

I had a couple of answers in the next section they didn't quite like.

Could you say more about this? Were they technical or behavioral interviews?

jpmoral
0 replies
13h35m

Technical. IIRC:

- I did the system design at the wrong level of abstraction (too low)

- Got asked about lowish-level database details. I took the question at face value and said I didn't know. What I should have done was explain what I did know (which was at a level slightly higher than the question), make an educated guess, and say how I would find the information. I still don't understand why Id didn't do that as I've always done it in interviews before or since.

This is my own assessment, they didn't give detailed feedback. Just that I wasn't strong enough in some areas (paraphrasing).

halfcat
2 replies
17h36m

”what we’re observing is X, but we see Y instead.”

What?

Anyway, I’ve found these kind of interview questions rarely helpful because the scenario is either overly simplistic, or it’s some obscure bug they identified (which they only caught because it caused an outage, i.e. they also didn’t “solve” this when they wrote it).

A similarly poor interview question happens in IT operations when the interviewer asks super specific details about some CVE from 5 years ago that he’s particularly proud of pulling an all nighter to patch a bunch of servers.

jez
0 replies
15h45m

Sorry about that! edited to

What we're observing is X, but we want to see Y instead.
__float
0 replies
17h14m

what we’re observing is X, but we see Y instead.

I think this might be a typo - we're observing X but want Y, or some similar variation. In any case, there's a bug.

ajbt200128
2 replies
19h56m

You’ll need at least one question per language that you want to allow people to interview in. ... “Was this performance poor because they’re bad at debugging, or just unfamiliar with this language’s tools?”

Not necessarily a con. Different languages/tech stacks have very different tools. I.e. debugging a GC issue is different than debugging a network issue is different than debugging an embedded issue. If you chose a language for a very good reason, then it's not a con to filter out those who aren't familiar with that language enough to debug an issue in it

deathanatos
1 replies
19h26m

If you chose a language for a very good reason, then it's not a con to filter out those who aren't familiar with that language enough to debug an issue in it

The language is based on/chosen by the candidate. We want to map the candidate to whatever language in our repository of "this question in different langs" is closest, to control for the candidate's familiarity as much as possible.

If you're screening to only candidates who can code in the language your company primarily works with, you're missing good candidates. The best are going to be able to pick up a new language rapidly, particularly if your language is a mainstream one that's probably imperative or OO-ish, or both; adding a non-esoteric language to one's repertoire is just not that hard a thing to do. But in the interview, I don't want them struggling with syntactic bull, as it's not a useful signal; I want to know how they think, whether they've seen code before, and can they reason from problem statement to debugged bug.

ajbt200128
0 replies
18h48m

If you're screening to only candidates who can code in the language your company primarily works with, you're missing good candidates.

I agree with that. I work somewhere that uses a lot of OCaml, we don't screen out those who don't know OCaml, but it usually helps them, since static analysis is easier with an ML family language than say, javascript.

We want to map the candidate to whatever language in our repository of "this question in different langs" is closest

If there's not a close language in any of your repositories for the candidate, then I think that's a good signal that candidate may not be a great fit. As mentioned before, we don't necessarily ask candidates to write OCaml, most functional languages will have a similar bug + fix.

problem statement to debugged bug what if the problem you might normally run into is perf issues related to the language? I.e. HFTs usually use C++ and perf = $$$. I would agree that yes, those who have worked on say Rust could be good candidates, but if someone has years of experience in writing highly performant C++, and that's what the job requires, probably easier to look for those candidates.

I definitely agree with you in general, just pointing out that there are times where being familiar with the language used is desirable.

harimau777
1 replies
20h48m

I wonder if this is an improvement over a conventional white boarding question.

It seems to me that debugging in particular is often dependent on the developer realizing some edge case or scenario where things circumstances line up to produce a bug. In that case, wouldn't a "bug squash" end up being similar to a "gotcha style" white boarding question.

The author, quite correctly, says that the interview should be scored not on whether the candidate can immediately vomit up a solution but on whether they can demonstrate their an organized thought process. However, isn't that true of white board questions as well?

Overall, it seems to me that the real problem with conventional white board questions is when the interviewer focuses on whether the candidate gets the right answer rather than on whether they demonstrate the ability to problem solve. While it sounds like the author is a good interviewer who focuses on assessing the candidate's thought process, it's not clear to me that giving debugging questions is actually what causes that.

simonw
0 replies
16h17m

"It seems to me that debugging in particular is often dependent on the developer realizing some edge case or scenario where things circumstances line up to produce a bug."

I don't think that's the case if there's a test failing. If a well-written test fails, that means there's a completely scoped out requirement for how the feature should work. The candidate should know how to use a debugger, so they should be able to start diving in and figuring out how the code works and what might be going wrong. I don't think that's likely to produce gotchas.

flurie
1 replies
18h48m

I'm not too proud to admit I took the general concept from https://sadservers.com/ and turned it into something I could use for interactive debugging interviews.

I had golden images with some scenarios I wrote myself, and the images automatically shared a tmux session over http so I could follow along without requiring the candidates to screen share.

I did have to ask for IPs so I could ensure the machines were just available to me and the candidate, but it was otherwise pretty seamless!

Though now that https://sadservers.com/ has a paid service it might be worth looking into.

fduran
0 replies
2h46m

Hello, SadServers author here. Zero shame in adapting an idea you found somewhere; I'm super happy you built something useful.

I've thought of adding programming debug scenarios (I even got sadbugs.com lol), may implement in the future.

I'd love to see what you've done, please feel free to connect :-)

doawoo
1 replies
17h41m

Triplebyte (one of the best hiring experiences I ever had) gave me this during their initial interview.

They dropped an archive of a medium-ish codebase to my machine, that had failed unit tests. My task was to simply fix the code so the tests passed.

Not only did I feel engaged with the interview because I could speak aloud as I debugged, I also found it fun!

Etheryte
0 replies
13h59m

Too bad that Triplebyte then turned around and decided to sell everyone's data after it turned out their business was not scalable after all.

zgs
0 replies
15h6m

Kind of like the "install this software" as part of the interview process.

"My hourly rating for figuring out your bug is $X".

yas_hmaheshwari
0 replies
20h10m

This is one of the interview questions at Stripe, and I agree that it was the most "fun" part of the interview (It is still pretty stressful giving an interview, but magnitude times much less so than converting a BST to doubly linked list, and converting it back )

tdeck
0 replies
18h51m

I somewhat disagree that this is reflective of a person's everyday work. Usually we're only ever working on at most handful of codebases at a time, and getting oriented in a completely new application (including getting it to build and run on your machine) doesn't happen every day.

I've done interviews like this and one major pitfall is the start-up time. It's possible to spend an unreasonable amount of time debugging cold-start issues with getting the repo set up, dependencies installed, and the app to build while the interview slips away. These things are representative of the first week on a new team or project, maybe. Figuring out why bundler can't seem to download the dependency in the gemfile isn't my idea of a good use of interview time.

steventhedev
0 replies
7h43m

Having done nearly 100 technical interviews (with multiple questions each), the bug squash question gave us the biggest signal on candidates.

Our question was far simpler: it was a simple class (java + python variants, no fancy syntax) and ask them to describe what it does, then find the bug, and finally ask them what they would change.

It reflects a true test of what the day to day is, and whether or not the candidate would succeed in the role.

sethammons
0 replies
6h57m

"Work Sample Test"

Our best received interview question was in this style. Pick something your team fixed or did, distilled down do a 15min thing a teammate could do. Give the candidate 3x the time.

For us, it was a db value not being set as expected during a cron. The candidate got our forged bug reports, cloned a repo, ran the script, verified the unexpected db state, and off to the races

ryoshu
0 replies
16h29m

One of my favorite interviews was like this, but it was a long time ago and they printed out the code and told me there was a problem. Here's a pencil. What's wrong? Most were a function call or two. In one case I remember someone was doing a loop that incremented the index of a SQL query in code and using each result, instead of querying the set and looping through it in the code.

The fun part was it was a discussion. Two people, paper and pencil, talking about the code. And the examples were from bugs they'd already squashed in a code base they inherited. It was a project that I ended up working on that had... quite a few interesting bugs like that.

rurp
0 replies
4h4m

I was given a similar interview problem and thought it was one of the better interviews I've had. In my case the interviewer pulled up a web app and said this particular page is loading too slow, how would you approach the problem? We went from opening dev tools to look at the requests driving the page all the way through database optimizations and every layer in between.

This kind of interview didn't feel like a gotcha and was much much closer to real world work than the toy and/or algorithm problems that I have encountered. More companies should adopt these types of interview approaches.

pyromaker
0 replies
11h21m

Would love for others to share non-technical questions that can filter bad candidates!

nailer
0 replies
41m

I’ve seen candidates drop into strace to debug a Ruby program

strace is great. 99% of the time, your program is looking for a missing file.

A pity it's so hard to use in modern macOS due to OS integrity protection.

michaelteter
0 replies
18h54m

This is indeed a good interview challenge, and as a candidate I’ve enjoyed taking it the couple of times I have encountered it.

I also like the related challenge of, “add a feature that does X” to a codebase.

maxwelljoslyn
0 replies
15h5m

My kingdom for this approach to take the place of (some/all) leetcodes.

jdlyga
0 replies
14h58m

This sounds like a lot of fun to me. A lot of people dislike debugging, but I always enjoyed it. It's a bit of a murder mystery. You not only need to understand what's happening several layers beyond the initial problem, but why the code may have been written the way it is even when you find the issue.

jb1991
0 replies
11h26m

I am quite skeptical of item 6 in this list, but otherwise it looks pretty good:

Cheating effectively is indistinguishable from debugging skill.

If you know the code or problem ahead of time and how to fix it, you can certainly be convincing in your walk-through of how to do it.

janaagaard
0 replies
6h2m

I agree. The best interview experience that I had was to be sat in front of a small app that had lots issues, both big and small, and also a lot an not-really-issues-but-still like inconsistent code styles and names, and code comments and code that weren't aligned. This was a great starting point for both me and the interviewer. The interviewer had a list of things to ask into about the code, so that we didn't get stuck.

globular-toast
0 replies
10h59m

I like this idea but I'm curious how others would implement it. Does the developer have to write the failing test themselves? Are they instructed to do it first, or is that behaviour worthy of bonus points? (Most write a passing test afterwards, which is worse).

I’ve seen candidates wield their text editor like it was an extension of their fingertips.

So am I allowed to install my own text editor and other tools (Emacs with my own config that requires some build time)? Or is it on my own laptop (I don't have one)? It seems unfair if some candidates get to use their favourite tools and others don't.

giantg2
0 replies
4h29m

I've never done a bug squash interview. I have done PR review interviews that are similar - given a PR that technically runs but has tons of problems, then see how many of the problems the candidate identities. I really liked that interview.

franciscop
0 replies
19h12m

I had a very similar intro experience to dev. I started with some friends as a hobby, and my first paid jobs were when I was hired to do a bunch of small tasks in different projects. Add some animations in this Ember project, fix some bugs in this Wordpress project, add a very specific feature in this Angular project, etc. I probably did a terrible job at that time and I'll always be grateful, but it also taught me A LOT about jumping into a foreign codebase and start working on it almost right away, especially since I was paid hourly and I was super-aware I was paid to fix the problems and not to learn the code. IMHO what this article explains is one of the most valuable bits I retain from that time.

dave333
0 replies
18h0m

A similar exercise but much easier to do in an interview is to give a short piece of code that does something a bit non-trivial and ask them to write (paper or whiteboard) test cases for it. Can then either run the test cases and see if they can find (all) the bug(s), or simply review vs a known list. Classic example in Myers The Art Of Software Testing is a method that takes 3 numbers as the length of the sides of a triangle and prints out whether it is scalene, isosceles, or equilateral. Many people miss a lot of corner cases.

datavirtue
0 replies
17h29m

It's easy to write this question. I can cut a branch with gnarly UI bugs in it, no sweat.

bluGill
0 replies
5h22m

There is academic research on how to interview. Most comments here give no indication the commenter is even aware it exists much less what it says.

I'm aware this exists, but I'll admit to not having read it directly. (HR gives me a list of questions I'm allowed to ask in an interview and they tell me those questions are based on research but I only have their word they are)

bawolff
0 replies
15h34m

In computer security, this sort of interview often takes the form of find the vulnerability in this app.

I like it. It feels like much more directly measuring skills than most interview questions.

aray07
0 replies
19h4m

I did a bug squash interview when I was interviewing for new grad positions and it was one of my favorite interviews (both as an interviewee and an interviewer)

- People were allowed to use their favorite IDEs - so you could see how proficient some people were

- Great engineers are really really good at debugging - it was great to see how people debugged and it helped me pick up a few things as well

- People couldn't leetcode their way out of this

aeternum
0 replies
1h29m

Cheating is indistinguishable from debugging skill. Even with knowledge of the exact bug ahead of time, if you just open the file with the bug, barf out the code to fix it, and run the tests, you’re going to fail the interview.

Umm hopefully you don't fail for this. I've definitely known and hired devs that can do this with surprising frequency. Just because the interviewer may have taken hours to find the bug doesn't mean someone else must.

aaronbrethorst
0 replies
13h27m

This is essentially what I do with candidates. I ask them to pair with me on adding features to a codebase, and also to offer a code review to a PR. 100% success rate on candidates thus far.

ReleaseCandidat
0 replies
12h54m

It’s fun because fixing self-contained, reproducible bugs like this is what so many of us enjoy the most about software engineering in the first place.

Do really "many of us" enjoy that? In the "day-to-day business", not interviews.

Pikamander2
0 replies
7h40m

I've written some interview questions before and can confirm that having people find and fix simple issues in code is a surprisingly great way to weed out people who have no clue what they're doing.

Cheating effectively is indistinguishable from debugging skill. Even with knowledge of the exact bug ahead of time, if you just open the file with the bug, barf out the code to fix it, and run the tests, you’re going to fail the interview.

Did you mean "distinguishable" here, by chance? The first sentence seems to contradict the second.

Mistletoe
0 replies
19h21m

Thought it was going to be about squashing a bug or releasing it outside your house, which would tell me a lot more about a potential employee than this.

ChrisMarshallNY
0 replies
6h42m

I agree. Great question. Academic LeetCode exercises are really not what I consider useful in evaluating candidates.

However, I'm biased. I'm really, really good at finding and fixing bugs, and pretty much stink at LeetCode, so take my support with a grain of salt.

One problem is that, if the exercise gets known, expect an underground economy of solution cheats. Same with LeetCode, but that's sort of expected. Bug fix solutions hit harder.

Brystephor
0 replies
15h4m

I had a bug squash interview today. I found it nice, but also frustrating.

It was nice because I didn't need to practice and I knew exactly how to debug the thing.

It was frustrating because my personal laptop is from 7 years ago (from college), is slow, and the dependencies and editor don't work out of the box for an a new repo. Additionally, I'd prefer to use IntelliJ like I do at work but again, that's too heavy for my computer to handle so I resort to vscode and have to figure out how to use it. So then the interview becomes debugging my environment instead of debugging the problem. Maybe that's a useful signal, but it's not really bug squashing anymore then.

So overall, it was still requiring learning but there was not a very good way to test in advance (how do you test all possible repo structures?)

AsthmaBoy
0 replies
13h50m

I like this approach. We did something similar, but for a position as support engineer, where coding ability was one of the requirements, though not the only one.

They were given a piece of code on a toy, easy to read, english-like pseudo-language, and were asked to examine it and explain what the output to a specific input would be.

They were told that we would answer any question, except what the answer was or what the code was doing, and encouraged them to explain their reasoning as they went ahead.

We wanted to asses the candidates ability to problem solve, communicate, how would they react under preassure, and how they approached the issue.

We were not necessarily looking for perfect answers, we rather rated the candidates willingness to ask for help when stuck, how well they communicated while doing the task, whether they tried different approaches, their ability to grasp what an unknown piece of code was doing and so on... all important properties for a role supporting mission critical solutions with near to zero down-time requirements.

Our reasoning was that technical knowledge is easy to acquire over time, but problem solving skills, how candidates tackle difficult and unknown challanges were more important for the role.

In my current role I try to design interview questions like that, looking both for the candidates current skills as well as their future potential.

Not easy, but IMHO more rewarding for us and them in the long run.