mceachen
2 days ago
In almost every interview I gave at the last several companies I worked for, I'd start with "This may feel a bit odd, but with this coding problem, I'd appreciate if you spoke through your problem solving. If it helps, pretend like I am your intern. Good ideas, bad ideas, pros and cons of whatever you're considering, it's all valuable information for me to learn a bit about how you approach problems."
I feel like being explicit like this put candidates at a bit more ease than having them try to suss out what the interviewer is expecting from them implicitly (and I know there are many interviewers that will auto-veto any candidate with the audacity to suggest a possibly imperfect approach).
wahern
2 days ago
I always hated when interviewers did this. My chain of thought is often backwards, very abstract, or otherwise wildly different from how it seems most others think, and it's very difficult if not impossible for me to articulate my thinking on the spot. In school for writing assignments I would have to spend alot of time reversing or reordering how I arrived at a conclusion before even writing my first sentence. And even just arriving at a conclusion involves taking many dead-ends; the process can be seemingly instantaneous in places, or require laboriously following rabbit holes (often with throwaway code) that I know are dead ends but nonetheless help me to explore context. I need to have the entire problem in my head and able to explore it to at least some extent before even starting to formulate a linear chain of thought, let alone commit something comprehensible to code.
IOW, I can't explain in real-time how I'm working things out. I have to work them out to completion first, quietly, or at least have a good idea about what the full path looks, end-to-end, in detail and only after the fact could I ever hope to explain my thinking. Asking me to explain my thinking while I'm thinking is easily the most stressful and impossible task anyone could ask of me. I'd rather you break my fingers as part of the interview process.
I understand as an interviewer that makes for quite a dilemma. And I suppose if you find this approach reasonable then you may not like working closely with someone like me (though if you're just a manager, then it's a bias to be aware of).
Similarly, practices like pair coding just don't work for me. I'm not not a team player. I like and benefit from design and ad hoc technical discussions, just don't ask me to sit down and write code with someone else, or even with someone looking over my shoulder. All parties involved, including myself, will just end up pulling their hair out. Though I do work best with people who think similar to me. We instinctively know when and how to set our boundaries and expectations.
To interview someone like me it's probably best to focus on having the interviewee identify waypoints (both abstract and concrete) to confirm they have the experience and understanding to navigate difficult problems. Just don't ask them to actually navigate on the spot. If you want to see how they ultimately connect the dots in practice, look at code they've already written. Unlike in most other fields, software developers often have a corpus of work that is easy to share and often already published.
skohan
a day ago
I have interviewed dozens of engineering candidates. A big part of what I am looking for in an interview is how the candidate thinks, and what it's like to work with them in an interview.
If someone can't communicate well on technical matters, that's generally a negative.
That said, if a candidate was frank with me that they don't do well being put on the spot with a question like that, and can articulate how they do actually solve problems, and give examples of how it's worked for them in professional settings, I would consider them for the role if their answer was convincing.
I.e. if I asked you to explain how you would approach a problem, and you said you might need to go off and write some throwaway code to explore the edges of the problem that's a good answer.
Terretta
a day ago
> can't communicate well
Or, perhaps the person thinks (solves) in abstract concepts rather than linear words. Just because many people mouth words when reading or can't think without hearing words in their head or aloud, doesn't mean others should have to handicap their own efficacy of thought while working it out. Two conceptuals can communicate in a kind of ultra condensed shorthand liner verbal thinkers struggle to follow. Less can't communicate, more can't conceptualize squared off with can't verbalize.
Both groups should synthesize simply and clearly at the end, both should work to get in sync. And both ways of thinking have their uses in a team. Catch: conceptual thinkers can interview verbal thinkers, the other way around is more challenging.
pcthrowaway
a day ago
I wonder if there is something to said about the importance of being able to clearly communicate at some higher level being even more important now than it has been in the past, given that developers are increasingly expected to work with LLMs
It's something I struggle a lot with (and I'm currently unemployed)
exmadscientist
a day ago
I mean, I think that's exactly the parent poster's point. It's not an absolute "can this person communicate efficiently on CommunicationBench 3.0-beta7". It's "would I, personally, do well sitting next to this person every day and communicating constantly with them, or would I struggle with that?" There's a very personal piece to this that is both a little arbitrary, but completely practical.
(Caveat: I've always been interviewing for members of a small team who I might very literally be sitting next to every day and communicating constantly with. BigCo interviewing is different.)
AnimalMuppet
a day ago
Sometimes I think in terms of relationships between objects. I walk around slowly, up and down a hallway, and the "objects" are just vague shapes hovering around the hallway. If I'm thinking that way, it's going to be hard to explain my "chain of reasoning" while I'm in that mode.
Once I have figured out the relationships, though, I can talk about it in words. "Why didn't you do it this way?" "That felt really clunky. This way seemed cleaner, because X Y Z."
But I've never had to go into that mode for an interview. Or maybe the interview is too "immediate" - too interactive - for me to go into that mode.
viklove
2 hours ago
> I have interviewed dozens of engineering candidates.
I have too. Stating this doesn't give you the credibility you probably think it does. Interviewing/hiring in general is a pretty broken process, and extremely susceptible to subjective interviewer bias.
> If someone can't communicate well on technical matters, that's generally a negative.
Your interview method doesn't test if someone "can communicate well on technical matters." I can see why you think it does, but it does not. "Good communication" is not the ability to produce the correct sequence of thoughts/words when given 45 minutes to solve a problem in a hostile environment (surrounded by strangers, with your livelihood on the line).
What you're actually selecting for is a very specific type of candidate who thinks and communicates like you in a way that you can easily understand. You're basically selecting for vibes. And when you structure your interviews this way, you specifically end up preferring candidates who are better at bullshitting and "selling themselves" as opposed to candidates who are actually the most technically sound.
The biggest indictment against your interviewing mentality is that it's limited by how good you are at listening and understanding. You're probably worse at it than you think you are, and spending too much time in the interviewer position and not enough in the interviewee position makes it easy to fall into this trap.
I've interviewed and placed dozens of candidates on teams I've led. I've also interviewed and gotten offers at dozens of companies in the past 10-15 years. The more offers I get, the more I realize how broken interviewing is.
The mistakes you're making won't necessarily cause you to hire bad candidates, but it will undoubtedly allow you to reject/ignore very strong candidates just because they don't talk/think like you. Maybe you have a problem with diversity of thought, but generally that's a desirable characteristic on most engineering teams.
My advice is to spend more time on objective measures, and to check your ego at the door before conducting your interviews. Spending so much time as a gatekeeper makes it easy to get a superiority complex, which comes across quite plainly in your original comment.
patrick451
14 hours ago
If you need to people to think out loud on the spot, go hire salesman. A person's ability to do this in real time has zero correlation with their ability to actually do engineering and communicate on technical matters. Real communication encompasses more than verbal stream of consciousness.
rc1
2 days ago
I don’t think I think so differently from you and managed through a few interviews with success. I almost go further than the OP by suggesting to interviewees that I have a blank page of notes I need to fill in with evidence to support hiring them, for someone else to read. The coding question is to kick start that process.
The thinking gives more than just the answer and makes it more of a conversation. As a candidate I will mention projects I had similar when think about anything. As the interviewer it is hard to gather experience: so many people stay abstract and it’s infuriating (let me help you get this job! Yes you can do something means nothing; when you did do something means everything.)
I am sure that many interviewers don’t see it like this however and treat it like a quiz sadly. Best advice for interviews I was given as a candidate: the interviewer will decide in the first five minutes if they want to hire you. The rest of interview is them trying to convince themselves and others of that decision.
noduerme
2 days ago
I really wanna ask, because... I'm 46. Been writing code for a living about 30 years, never on a salary, always contractor. I wrote and maintain enough code for non-tech companies that aren't going to take a risk on AI rewrites anytime soon that I can probably coast until retirement. But I haven't interviewed or even needed to sell myself for a long time.
I always thought I would easily pass an interview, but I may have been wrong before all this on the basis that I don't work that well on a team.
OTOH ...is the question now really valuable whether a candidate can explain their thought process rather than deliver? Why wasn't that a question 20 years ago when it actually mattered? Or does it matter more now because the bar needs to be higher, and there's no cache of more experienced devs to train them up?
ghoul2
a day ago
I do something exactly like what the parent said, and my own view.
The question isn't about figuring out junior or senior. Its about the candidate being able to think thru a problem. They don't even necessarily have to be good at articulating their thought, I just want to see how (and if at all) they are splitting open the problem, walking thru it, figuring it out and then converging on something that (at least to them) feels like a reasonable solution.
If they get stuck, I am happy to help them out, without disrupting them or deviating them. If they go down a wrong rabbit hole, I may ask a leading question that helps them realize the issue and gets them back on track.
The bar isn't being set higher. Its just that there are a LOT of people interviewing (in my experience) unfortunately, who seem to be unable to model problems in their head, model how their code would work (mentally model the execution of the code), and reason things out. They have frequently coasted on blind copy paste from stackoverflow/help/tutorials. A huge fraction.
I also have been coding for a LONG time (older than you), and in the early days, this sort of conversation didn't have to be explicitly asked for, it happened naturally, like in every interview (where I was the one being interviewed) - cause you present me with a problem, and I can't help but be nerd-sniped by it. People who were candidates for tech jobs were there only cause they actually went into it with a bit of love/passion/skill.
But then it became a large industry, and most people who went into it were not 'hackers (problem solvers)' at all. They just liked the great pay. They may even be intelligent, but a lot were not capable as independent code owners. Still useful for basic crud with the right frameworks/etc. So thriving in enterprise applications, java/c# mega-platform/mega-framework domains.
vbezhenar
2 days ago
There are too many candidates for too few job openings. So people come up with all matters of ridiculous filters because they feel they have to test everyone. In reality they can take almost anyone with relevant experience and they'll get the job done, but that wouldn't look like good hiring process.
skohan
a day ago
I have ~15 years experience with hands on engineering. I also served as a hiring manager in a couple of roles, and interviewed dozens of candidates.
I would love to live in a world where every candidate represented their experience accurately, and every applicant was capable of fulfilling the role, but sadly it's not the case.
I agree there's some filters which are mostly performative (like leetcode), but being able to talk through the kind of work you do is table stakes. And not just for engineers, for any professional role.
swiftcoder
a day ago
> on the basis that I don't work that well on a team
I think you are likely to find that "working well on a team" is the number #1 thing tech firms are screening for. Technical skills are all well and good, but communicating/collaborating are half the job in a big company.
adrian_b
a day ago
"Working well on a team" is something completely uncorrelated with the ability of explaining your thinking during the time when you are solving a problem.
All the teams in which I have ever worked have greatly appreciated my contribution precisely because I was always willing to spend a lot of my time explaining to other colleagues, in a differentiated way appropriate for the understanding abilities of each of them, how I had solved my problems or how they should solve their problems.
On the other hand, I am also completely unable to explain my thinking while it is in progress, because reformulating it to become intelligible to the interlocutor would slow me down far too much.
Explaining on-line my thinking would require even a kind of language translation, because when I am speaking to myself I use a special language with precise non-ambiguous words, whose meanings correspond in many cases with old meanings of those words, because in the modern language a very large number of words have vague meanings, which have become very diluted due to the frequent use of those words in inappropriate contexts.
So when I describe some technical solution to others, I typically do not use the words with which I think about it, but whatever words are more fashionable today, so I expect familiarity with them, even when I think that those are not the right words.
Doing such a translation while I think is too difficult, and I do not attempt to think with whatever words become fashionable from time to time, without any good reasons, because in my opinion using the right names for concepts is very important for understanding and using them properly.
noduerme
a day ago
I mean, communicating/collaborating with upper management and turning their requests into solid code? That's what I get paid to do. Communicating/collaborating with other coders? Not so much. Note that I specifically said I don't work for tech firms.
swiftcoder
a day ago
Right, I'm saying that if you were to transition out of contracting in the future, this would likely be a bigger issue. In-house dev teams are expected to be highly collaborative, and the interview process attempts to screen out "lone wolf" engineers (insofar as it is possible to do so)
user
2 days ago
grigri907
2 days ago
I think delivering is still a requirement either way, but the value is in hearing a candidate has the ability to problem solve in an unknown problem space vs regurgitate a memorized solution. Even better is witnessing some has the ability to try, fail, then self-correct, and rebound.
noduerme
2 days ago
So, my policy has always been that if I sit through a meeting where a client asks for new feature "X" and I figure out a way to avoid building the new feature, and either use existing business logic / day-to-day processes, or else find some new way that doesn't involve code, I don't bill for that time. I'd say that I probably give up about 35-40% of potential coding work just by helping them work through that. Which is fine, because it leaves me free time to do other things.
On the other hand, I don't have the option to fail even slightly. I deployed a patch yesterday for an old, rare, logic bug in one reservation system, and within an hour I was being bombarded with edge cases of people seeing their reservations as cancelled during the 15 minute switch-over period.
Sometimes I feel like the job of a programmer for a company is just very different from what I do. If anything goes wrong with anything I deploy, I'm awake for however long it takes to make sure it's right. On the other hand: No PRs, no teamwork. Just a click to deploy once I'm relatively sure. And a lot of responsibility.
vermilingua
a day ago
I recently had an interview like this, and gave all my thinking in as much detail as I was able. The feedback I got back with my rejection was that they “wanted to see more of my working”.
So maybe it puts them at ease, but I think the important part is actually listening.
SwtCyber
a day ago
[dead]