The only thing doing tech tests has taught me is that I'm too stupid to do the job I've been doing professionally for the better part of 2 decades.
Can't just be me, can it? Currently 0 for 3 on interviews because I can't seem to get past the technical interview/test. Usually because of some crazy complicated algorithm question that's never been relevant to anything I've ever had to do on the job in all my years coding.
Also, while I'm ranting: screw the usual non-answer when given feedback.
Yeah, they kinda suck and they are brutal to go into cold. Having to grind a bunch of leetcode problems is a burden, particularly if you currently have a job and god forbid a family.
I would still take them over the puzzle questions that used to be popular, or the personality test nonsense that dominates most fields. At least Leetcode problems are reasonably reflective of programming skill. I'll also take them over vague open ended questions - ain't nothing more fun than trying to ramble my way into whatever answer the interviewer is secretly looking for.
Personally, when the day comes when I'm In Charge, I plan on experimenting with more day to day type evaluations. I think there's potential for things like performing a mock code review or having someone plan out a sprint based on a very detailed design document. "Here's an icky piece of code, tell me what it does and what you would do to improve it" seems to have fallen out of style, though it's not clear to me why.
That said, like it or not it's how the game is played and not changing anytime soon. Get on the Grind75 train, or don't and keep failing tech screens.
I have never found the ability to regurgitate Leetcode solutions as reflective of programming skill or even good performance. I’ve seen what talent I get from FAANG hires and what talent I get from random people with state degrees. Most of the time I will take the later. I have yet to staff some crazy R&D project that actually required anything like the things Cracking the Code Interview tells you to do.
I’ve found a lot more success giving people reasonable design exercises based on company projects and code exercises related to actual work done. I have made a career of only taking jobs with similar interview processes and as I’ve grown into leadership I’ve continued to give interviews that accurately test day-to-day skills. Am I missing out on really good talent by usually ignoring FAANG resumes? So far I don’t think so and I don’t need those idiotic attitudes polluting strong, elastic teams either.
I see them as a flawed indicator of the ceiling of someone's theoretical computer science abilities. Having worked with some brilliant people that career shifted via bootcamps, I will contend there's value in having that foundation. I also prefer Leetcode problems over having to memorize search algorithms. But yeah, it's not very reflective of day to day tasks even in R&D heavy projects. The most algorithm heavy thing I've ever done was implement Ramer–Douglas–Peucker to convert points from mouse polling into a simplified line.
(There's clearly a "it's what everyone else is doing" aspect to Leetcode, on top of being very practical to run, hence I why don't see them going anywhere. They're also as objective as anything in an interview will ever be, so as I always say: it can be so much worse.)
I intend to make the hacker "dive into an icky codebase armed with a stack trace and fix a bug" aspect of software development a part of my interview process; plus lean more heavily on system design questions which is where non-entry level engineers really ought to shine. The parts that worry me are the ability to create new tests as they inevitably leak, plus whether I can truly objectively evaluate someone's performance.
I'm curious what you include and how well it works.
When I was running DevOps/SRE consulting I did up to a 2hr deep dive into how to set up a codebase in VCS, establish CI/CD, design deployment, and manage the lifecycle. That gave a lot of freedom to ask specific questions related to the clients I need staff to support and also to get a feel for what people did and did not know. You start with some trivia questions and can organically move around based on the candidate to probe their strengths. That requires having a good interview team; what I’ve found is that if you train your team to interview the way you’d handle a normal design session things work out really well. I’ve got a lot of concrete problems to drop in based on real issues we’ve faced (if you’ve had to support EoL’d Ruby in k8s you can commiserate with a surprising number of folks). The length was dependent on the salary being asked for which determined title. Someone at an architect or manager level needed to know way more than someone just hitting senior status.
Now that I do general engineering stuff I’m trying to figure out something along those lines. I’m currently a fan of code reading some gnarly legacy shit we have to support and either some short data pipelining, API optimization, or component creation depending on what I’m trying to hire for. If you spend an hour with someone trying to code together you can get a decent sense of how they will work day-to-day in terms of how they handle confusion, talking through problems, and basic language knowledge. I try to remove gotchas and keep things in the candidate’s wheelhouse (One time I failed an interview because someone asked me to use a library I’d never seen and I spent an hour flailing because it needed a trailing slash but didn’t have good error messages so I could not figure out why anything wasn’t working. Huge fucking waste of everyone’s time; didn’t evaluate anything other than if I knew that library that wasn’t important.).
I don’t do take homes. I do realize that limits the candidate pool to people that are comfortable collaborating in a potentially stressful situation. I sometimes worry about that. It’s very important for a strong remote team to work well together even when things are awkward or stressful, so there’s a bit of value doing it that way imo.
Frankly I don’t care about interview questions leaking. Coming out of DevOps, it’s very obvious when someone actually understands what’s going on in the interview and when they’re copying and pasting. I’m very happy to have people take code from Stack Overflow during interviews; that’s real fucking life and shows me their research skills. Candidates I will hire can explain or improve the code. I’ve had to reject plenty of sysadmins that do not understand any of what they’re copying and cannot adapt to minor changes that I’ll add just to see how someone handles it. I worked at a company whose questions were on Glassdoor. We had plenty of people that came in prepared for those. We hired several that could roll with the punches (what if you change the inputs, how do you test this case, what’s going to break) and dropped plenty that clearly had no fucking clue.
First, having gone through the full interview process at several and rejected all due to laughably low base salaries, I know how those candidates are selected. The skills being evaluated have fuck all to do with what I’ve actually needed engineers to do. That gives me zero confidence in their ability to do anything meaningful. Solving tic-tac-toe doesn’t mean you can actually walk your way through security problems in an API.
Second, the toxic cultures at these companies is not something I want infecting my teams. Google, for example, is famously about making yourself look really fucking good for a performance review board, not making the company better. Amazon makes people think the talent pool is big enough for perpetual unregretted attrition and pits peer against peer. Meta completely strips any semblance of ethics and therefore customer understanding. Twitter doesn’t fucking care about security.
Most engineers meet expectations. Period. People think FAANG is hot shit. It’s not. It’s arguably worse than most run-of-the-mill places because people on the internet like to make FAANG out to be hot shit. The chances of someone actually doing something big at FAANG are so fucking tiny it’s just like thinking you’re going to make the next killer indie game.
It's pretty shitty that you are attributing the cultures of companies to the personalities of individuals. You're going to miss out on a lot of good people doing that.
I think it’s fine to attribute those values to employees who fought to work at companies with those problems. I’m not calling out hidden problems; I’m calling out the issues you can easily find when you do a cursory search for information on the company you’re going to work for. If you think it’s okay to go work for a company like Meta I know you’re okay with some disgusting shit and I don’t want you near my team or my customers.
Although I agree with you that people shouldn't equate company values and employees' values, I'd say that it could be true, especially if they did work there for long enough.
As for my personal opinion, this could likely be solved by a short questionnaire on why they left the company and what do they think of this and that.
I have never tried to get into FAANG (MAAMA 😅) but if I did, I'd definitely focus more on how to get there, not on why that's a bad idea, so it's not quite correct to judge based on the fact that someone worked somewhere.
As a side note, I had never did a thorough research of companies I applied to, somehow it mostly worked out, but I did sometimes end up in the company I wasn't quite comfortable in ¯\_(ツ)_/¯
But OP was experience hiring both sorts of candidates and found non-FAANG employees to work out better.
And no, one shouldn't judge completely on a former company's culture, but some people do indeed drag that shit with them. My old boss would be great for some roles in my new company, but she has absolutely poisonous management skills stemming from her environment.
"Here's an icky piece of code, tell me what it does and what you would do to improve it" seems to have fallen out of style, though it's not clear to me why.
Because reviewing code is easier than writing it, unfortunately.
I disagree with that as a rule of thumb. I'll take writing 1000 lines of code from scratch every time over deciphering 1000 lines of bad code.
However, I do you think are right if limited to the ~100ish lines that fit into an hour sized block of interview time. I suspect the other half of the answer is (good) job postings have largely gotten away from hard language requirements. It's perfectly reasonable to hire someone that will need to familiarize themselves with Go or Python or Typescript or whatever. It's not fair to expect someone to analyze code in a language they haven't used on the spot.
Even deciphering 1000 good lines of code is hard . I work in abap and 95% of my time is going through old ,or very old code written in diffrent programing styles . The rest is usualy writing a one or two lines of code.