Wasting time in tech interviews
benjamistan.tech
benjamistan.tech
> Never in my entire career have I whiteboarded a solution that even remotely survived contact with software frameworks, APIs and hardware constraints. A hundred different gotchas and restrictions lay in wait. The only way through them to a resilient solution is one step at a time. So, I can’t show you anything meaningful with Leetcode challenges unless I practice them as a discrete skill.
This, 1000x. This whole piece nails it, but this really jumped out.
I succeed and excel because I actually get things done, rather than "mostly done". No interview methodology ever can hope to screen for this. Or any of the other things mentioned above.
The process is getting worse, not better, and this piece rightly points out why.
People might have both, but some people only have one, and not the one you're hiring for. If they can ace Leetcode problems, or unicycle, or speak Klingon, that's lovely but irrelevant, and absolutely pointless to test for in an interview as a proxy for solving real world problems.
Unless you want to —literally— live under a Hitler, Stalin, Pol Pot, Mao, or Putin, democracies must always be better armed than autocracies. Autocracies always expand and take over less-well-defended self-determining peoples, and life under an autocracy always gets worse.
Obviously, it would be ideal if we didn't need to constantly and diligently defend ourselves from autocrats and would-be autocrats, they still exist in the world, and we must still defend against them. Yes, mistakes are always made, both in over-defending (e.g., Vietnam, Iraq) and under-defending (e.g., Balkans, Ukraine), but that does not eliminate the necessity. Wishing the world were different does not make it so, as much as you and I would like it to be so.
>> all the great things that these people could of done if they applied their talents to something meaningful.
Also, much of that work actually does get out eventually to products that are meaningful and useful to everyone. GPS, satellite communications, carbon fiber composites, and more are just a few examples of great things created initially for defense work, and that are now used universally. I work in carbon fiber and make things for everything from the DOD to sporting goods for kids.
None of it is a waste (anymore than there is waste and inefficiency inherent in any large organization). I hope that makes you feel a bit better about it.
When we were smaller, I was tasked with writing an interview question for JS devs.
I created a handful of unit tests that were all really easy questions technically, though maybe a little obscure, because they were designed to spark dialogue. Think "escape room", solve one test, move to the next. Google was allowed and actively encouraged.
But it wasn't really about the tests (they had to pass, of course, and shockingly some didn't). A not-very-good candidate would still make it to the end and solve all the puzzles and get a rejection.
The goal was to create a lot of jumping off points to sort of "break the 4th wall" and see what the candidate actually does to solve a problem. If I could get someone to search the web as the fastest way to solve something, that was almost always a great sign.
Sometimes I can see them building an inefficient answer and ask them if they'd like to search online for an easier algorithm, and remind them to treat this how they would actually treat their job. Some people stubbornly refused.
If I could get them jazzed to tell me about their editor configuration, that was almost always a good candidate. Because people who care about writing code care about editors. Do you hate vim? Great, tell me why. Do you love emacs? Show me a lisp snippet or whatever you think is cool.
I'd see a lot of `console.log({ foo, bar })` but also some `console.log("foo: " + foo + "\nbar: " + bar)`. I'm not judging harshly on any one particular thing, but I just want to see some level of craftsmanship about something. If you're from the java world, cool, show me some intellij tricks as you're working in webstorm.
Do you reach for the repl/debugger to try out ideas by default? Good sign.
To me it's simple: would I want to work with this person? could I recommend the company hire them based on how they work? I can't actually work with you, so I want the closest thing I can do in an hour that feels like we're on the same team.
I think the question is now retired because it didn't scale, or maybe it's still there with a rubric that invalidates the point of it.
If anyone's trying to do ML in this space, try softball questions that require more search and discussion than code, then NLP the discussion and ignore the code. Use internal mock interviews to train it to match your target culture. I think that would make this approach scale.
I personally found pretty good success with the people I interviewed this way as peers, but I wasn't in a position to find out if they were really successful or not by internal metrics.
Here's one of hundreds of articles that talk about this:
https://www.forbes.com/sites/forbescoachescouncil/2018/05/01...
Unless there's data that backs your choices vs the ones that you rejected, all you're doing is reinforcing particular stereotypes in your company and in the software industry.
And you.. don't?
> Unless there's data that backs your choices vs the ones that you rejected, all you're doing is reinforcing particular stereotypes in your company and in the software industry.
I've gotten plenty of training that makes it extremely clear that discrimination based on protected classes is unacceptable in all contexts, especially interviews.
At some point, you have to trust your team to build your team. Not everything can be blindly metrics driven.
You're hiring humans to work with other humans.
That's the job of the other engineers. I only know how to screen for the skills I do have.
Most engineers spend all day in their text editor and on Google, debugging code and searching for solutions.
I have never met a good craftsman that doesn't customize their tools.
I'm not saying everyone has to customize their editor. But if you move quickly and intuitively through the chrome debugger, the only way you got that skill was by doing it every day for way too many hours.
Also, you can learn a lot about how senior someone is by watching how fast they can parse out search results and SO answers.
But to strengthen a team you want to add people who have skills the other people in the team lacks, so your interview needs to be able to find such people easily.
In general you want the interview to test that they have done the basics of the work before, that they are smart and that they are nice. Your test helps assert the first, they have done the work before, and the discussion tells you whether they are nice. But it doesn't tell you whether they are smart. And if you think a bit there are probably simpler questions you can ask to check they have done the work that are more general and will pass more people, you want to sort by intelligence and not passion for text editing so the "have they programmed before" question should be as low level as possible and not require any special skills.
The algorithm interview is what the industry settled on to solve this. It tests extremely trivial coding, so you can do the coding if you have ever coded before. The hard part is the algorithms, and that might require some to study, but since it is standardized that becomes a reasonable proxy for intelligence. And social comes from being able to talk about a technical problem and describe what you are doing in a stressful situation, that is good enough to work on a team.
This is true, but you don't need to customize anything for that. VSCode text search gets you 99% there.
> I have never met a good craftsman that doesn't customize their tools.
To the contrary, personally I even take some pride I can work on any PC you can possibly give me immediately. This has tons of upsides - from helping someone walking over to them, to knowing tools in their default configurations inside out and explaining keybindings or quirks that are guaranteed to work (and writing better docs).
Programming really isn't about my personality, I want to strip any of that and produce the least amount of very default, simple code anyone can work with. And you don't need to type fast or use scripts to produce that small amount of code.
Largely same goes for debugging, I better create a good logging and monitoring system than spend time tweaking my tools, because that'll immensely benefit the person who maintains the code after I'm gone. Nobody will install my personal tweaks to catch bugs. Granted I mostly work with very good tooling already (C#).
There are plenty of cases where discrimination against unprotected classes still happens. Cases where studies cannot find a correlation between selected candidates and things like retention rate, performance etc. These include cases where one would be skipped over despite having personality attributes the team is sorely lacking.
>You're hiring humans to work with other humans.
It's because we work together as humans, most of the things you said don't really matter. Most humans can work together despite their differences. That's one huge problem with hiring as a whole, trying to find carbon copies of each other while espousing they value diversity.
That's not to mention all this "one of us" hoo-ha just stimulates chameleon behavior. Which benefits the person opposite of you, but it doesn't do you much favor in the long run.
The problem in this situation is that YOU are the one acting as a gatekeeper as to who gets into the company.
The company should be the one setting the standards, and determine the best person for the job, and you should be able to work with whoever is best suited for the job, regardless of whether or not you like them.
This is where the unconscious bias comes from.
The point of interviewing is bias in the first place - to find people who are good - and it’s not unreasonable to assume that “I want to be good” and “this potential hire is good” would result in correlated features
Up to the limit of your IQ, which is the real bias that everyone sweeps under the rug, especially all the bigtech companies espousing “inclusivity” (all lies, actually exclusivity, as they don’t hire most people, especially stupid people).
Why? Are better software engineers less biased? Why would that be? I would assume that they are human, and therefore just as prone to biases, like everyone else.
Even rationally it doesn't make much sense. You're judging people on what they do in a year given how much an individual likes them and believes them to be good given a day's worth of input. Even if such an individual finds a lot of 'good' hits, nothing would tell them if it was this particular selection mechanism, other selection mechanisms, the workplace, luck, or none of them. The same goes the other way around for 'bad' hits.
Not to mention, if rationality worked, we'd see 'years of experience' have great correlation with 'good' candidates. Yet YoE always fails to contribute greatly given the presence of other metrics.
Interesting how things change. At a big, known software company they used to put a candidate at a computer running Visual Studio and ask him/her to write a program. That program would be impossible to code without including multiple winapi(?) calls and neither help nor internet were available. This was around late 90s/early 00s.
I agree with much of your post, but just wanted to point out that many of these things are not universal. I personally have little interest in code editors and even less in discussing them, though I do use Emacs and will probably never invest in learning another editor. It's just a tool to me though, and writing custom lisp functions to make it work just how I want has just never been of my thing.
I probably shouldn't have picked text editor as the example, it's really not about that.
Anecdata: don't think I have any? My best tools for years were pencil and paper, and I usually get things done, very fast.
It's also a major source of WFM (works for me) syndrome, where something in your custom stuff is unintentionally needed by the build.
I'd rather be building things than playing with my tools. If I really need something esoteric, I'll find another tool or write a Python script
A lot of the effort people devote to customizing their tools doesn't seem to be about productivity or effectiveness in any measurable sense.
Like @kstenerud, I tend to keep the default settings as I am happy to just learn the default to at least avoid things from breaking, when the next IT/infrastructure update happens at "the company", or maybe I have to use a clean machine to do some coding.
Instead, I spend some time to look how I can be more productive (keyboard shortcuts, etc), and then will just leave it at that. I've had both types of colleagues: customizing/non-customizing, both types have been high performing.
So it's horses for courses.
I've spent a great deal of time modifying my editor config. I advocate for "tools day" where I work, which is a day where a team get together to share ideas about tooling and collaborate on config to make the team more productive. I regularly share what I change in my config with people.
I couldn't spend more than 30 seconds talking about it though. I have a problem, I solve it, I share the solution, and I spend no time or effort remembering what I did after that. It's one of the least interesting things about dev...
I also for example press F7 to compile (along with 20 other shortcuts), so when confronted with a generic editor in a test I'm again wasting half my time struggling around on it.
How do I easily attach the debugger? How do I jump between recent files? How do I use column mode to fix a bunch of sample data? How do I jump between file and test?
Junior devs by and large can’t do any of these things, and it has a material impact on work output. So I teach them.
There are waaaay more interviews that say you can use a search engine and then take points off for doing it. There are way more interviews that are more like academia that rely on rote memorization for an assessment and would consider reference material cheating.
Industry needs a trade group just for interviewing practices. You’re so confident in what you wrote its comical.
Auditioning is nothing like being an actor, but that's primarily the only way actors get gigs. Unless you're so well-known that they seek you out. This is exactly the same thing as in programming. You have to submit yourself to a humiliating barrage of LC and systems design questions because that's how companies like Google have decided that's the best way to determine talent. And based on their multi-trillion dollar valuation, it's hard to say that they're wrong.
So unfortunately, unless you can come up with a better way, auditioning for your software engineering job is here to stay, just like auditioning for your acting job. So you might as well accept it.
When I can, I’ll outright ask if the client intends to do this kind of interview. If they say yes, I’ll explain my objection to the process and if they aren’t willing to modify their interview approach for me I will decline the interview.
I have on occasion had this sprung on my without warning halfway through an interview and I’ve declined to do it; most of the time I get hired anyway.
Whenever I can I try to convince hiring managers (and I’ve been one myself) to ditch leetcode nonsense for future interviews.
What do you like instead of LC?
and you are wrong that it’s there to stay. if people decide to no longer play ball and organize that will be the end of it.
the current system was created by a single woman who simply created it to build a consulting business around it. and you are all too naieve to see it.
Who's that? (I don't agree but I'm curious about your opinions anyway)
If I was able to come up with a better way, I would sell it to Google and never work a day again in my life.
Pointing out that current methods suck is free advice, though.
Not sure about this. Past a certain level of experience (and given some prior knowledge of the system being worked on) I’d expect someone’s white boarded designs to come out close to the mark at least some of the time. Not always, maybe not even half the time, but “never in my entire career” would surprise me.
It's not terribly surprising to me that he simply doesn't have experience with coming up with architectures on the spot. Doing interviews is hard, from both sides. No candidate wants to seem arrogant by explaining that why the question/task/problem is bad in the context[0], so the frustration remains and gets vented in blog posts.
[0] Because roles (job descriptions) in the tech industry is so vague, and goes through so many hands. (HR, recruiter, engineering managers, job portals, etc...) And by the time the interview happens it's no wonder the parties have a lot of mismatched expectations of each other. And that's just the baseline, what the post describes is just plain old fucking shitty behavior in a shit job market.
Or, maybe they spent their career mostly building applications and not architecting systems. Those are very distinct skills.
Of course, it also doesn't help that in an interview context, "system design" can mean "design infrastructure to support a system," or "object-oriented design of a system."
It's not realistic to day dream yourself to a real product.
I realised this from the waterfall model days itself, where elaborate documents used to be written before we even wrote a single line of code. And every single time the paper planning would be totally useless and nothing like what the original deliverable would turn out to be.
I don't, I'm honest in my CV and during interviews
I'm selling myself 'as-is' e.g despite using git for longer peroid of time, but mostly via GUI, then I'm not going to call myself proficient/experienced git user cuz I'd fail some above basics question
I thought it was more common that they'd get paid per person hired and still at the job 3 months later? But I'm a bit clueless
A bit misaligned incentives in the same way as agencies have, I'm thinking
She basically told me I am underselling some of the experience, and I should put some of it more, and perk it up a bit. It was very helpful.
Engineers have that. You have to take example a bit from real estate agents, on how they describe a place. Always highlight the positives.
I hate preparing for interviews and don't want to brush on my past. For example, I spent a year writing an LLVM backend for a DSP but I'm pretty sure I couldn't write more than a fizzbuzz in C++ now. Nor do I remember much about LLVM. I don't want to come across an LLVM enthusiast and have him start grilling me on details I have long forgotten.
I try to write just enough to get an interview, anymore information makes you more likely to fail your interview in my book. Plus writing less makes you mysterious ;p.
Last job search was depressing. I wanted to actually stick with it, and find me a job I actually wanted (as opposed to the same thing I've been doing for years + some more money). However nearly every job I applied to I got ATS screened out of, meanwhile the recruiters kept coming to me with more money for similar crappy jobs and I folded. Well either that or recruiters that never even read my resume spam me. I've been getting spam for RoR positions, I haven't touched ruby since 1.9 ad have never had professional experience with it.
I could slightly understand if some people write whatever in their CVs if they're trying to get past the machines
Inflating your skillset is going to get you into the wrong interviews, and you'll do poorly in them (and consequently will have these kinds of negative experiences). Either accurately represent or slightly undersell yourself; it comes off much better and will save you time and money.
Required keywords "Agile/Scrum" does not appear on this resume, rejected.
Is it really that bad now? If I were applying for employee roles today it would probably never have occurred to me that including "Agile" as a buzzword could be important to avoid getting filtered immediately. I can understand filtering someone for having no apparent experience in the main programming language you use if you have many other applicants who do. Filtering for something that basically every employer has claimed to do for about 200 years but no two of them would agree on what it means seems silly though.
One can oversell themselves based on their potential to learn and grow.
For example, if someone is a junior and they designed a micro-service with a senior but have a solid grasp of the process, then it's fair that they claim that they designed a micro-service. They can read up on the relevant concepts, answer a few questions in the interview and get a very nice opportunity in a cool startup. If they can learn to do it fast enough to be productive, then both they and the company are happy.
On the contrary, by underselling themselves or being accurate, they are more likely get a job at their current level of knowledge, which can limit their growth potential. Still, this can be a good idea if someone is already very experienced and doesn't want to spend a lot of energy to grow.
I got a job offer from a company whose main language is Go and I didn't even know the basics. A good software engineer can pick up any reasonable language in a reasonable amount of time [1].
I usually ignore recruiters who don't contact me via InMail. If they convey that they actually took a look at my profile, I'll reply.
I've had a very good experience with the three EU companies that I've been interviewing with this year. One had a take-home assignment that was reasonably scoped for 2-4h and well thought. The others asked some basics and some architechture / design / business understanding related questions. No leetcode or whiteboard coding. Open communication + quick feedback.
Was I just lucky in that regard or are there a lot of companies with a sane interview process out there, but some HN readers prefer to apply at those who don't?
[1] https://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-pr...
* Company A: Small startup in a non-profit space. Technical part was an informal chat with a current tech lead, which led to them sending me a list of high level general questions around architecture and design to be discussed on a follow up call, then it moved on to a third non-technical round. Good approach overall, I appreciated being able to prepare in advance instead of being given a pop quiz, and I think it unpacked my skills pretty well. Total time maybe 3 hours? It led to an offer.
* Company B: Medium sized ecommerce company. Technical part was a live coding challenge via screen share, with a tech lead and an engineering manager watching. Think "given this list of categories and items, how would you loop over it to find the item with the highest cost? How about all the items in a specific category? How about all green items in any category?"; a very simple problem, used purely as a jumping off place to discuss thought processes, trade offs, approaches, tools, algorithms, etc. I dislike live coding challenges, but this was about as good as could be expected, and led to two more follow up round of high level architecture and design questions. Three total rounds, each 1 hour. Again led to an offer.
* Company C: Medium sized developer tooling company. Started with an take-home assignment that was very poorly defined. I was verbally told it should take "an evening" and "don't take it too seriously", but as I later found out they were expecting more like 18+ hours, finished to the standard you'd expect in production, ie, thorough unit tests, good code coverage, carefully chosen variable and method names, completely documented, all edge cases handled, etc. I didn't make it to round two, which would apparently have been a rigorous code review exercise on the code from the first step, which at the point I'm counting as a win.
I honestly disliked the coding challenge from company B, and semi-enjoyed the one from company C (or what I thought they were asking for). But I'd have been reluctant to spend the incredible amount of time they expected on an unpaid coding challenge even if they'd managed to convey they wanted that, which they didn't.
So based on my experience, about 1/3 of companies out there have terrible interview processes.
Live coding isn't very, but I found live code review + occasional adjustments quite effective when interviewing candidates.
When I first started interviewing people I assumed everyone wrote their resumes just like me: Honest, accurate, erring on the side of humble, avoiding exaggeration of my abilities.
I learned the hard way that you can’t really trust what people put on their resumes. A lot of people are accurate and honest. Many people are actually too humble or often just bad at selling themselves, so you have to read between the lines and dig for their biggest achievements.
But unfortunately, a large number of people will exaggerate their accomplishments far beyond anything that could be considered reasonable. Claiming proficiency in programming languages they couldn’t begin to even talk about. Writing about projects they didn’t actually work on. Making up unrealistic numbers for how effective or profitable their work was.
The worst was when I receive a resume for a former coworker who hadn’t performed all that well when we worked together. The resume included some of my achievements, which the person hadn’t been involved with nor was even capable of. It was a shock to my naive system to see someone brazenly claim so much in hopes that they could slip past the interviewer and land a well-paid job where they presumably tried to blend in while dodging responsibility and accountability as much as possible.
And that is why we all have to go through onerous tech interviews, despite listing our experience on our resumes.
Tech tests on DS&A are fine, I guess, but usually you can sus a person out if you’re technical enough after 30 minutes of talking about previous projects and their level of involvement.
Typically I ask more and more questions about it until they can’t answer, if they try to BS me once they’ve reached their level of incompetence then they're immediately disqualified no matter how good they are in other areas.
I’d rather take a weaker person who doesn’t try to masquerade than a strong person who will.
Call it tragedy of the commons, but being honest is not an optimal way to play the game.
The way to solve it is to make the hiring process independent of experience with a particular stack and just hire engineers with good fundamentals, which is what FAANGs do by necessity (because their stack is proprietary), but others don’t want to do because they are afraid it would be too expensive.
I should probably say that I’m in Europe. Things may be different in SV.
"A place where most people lied to get a (tech) job", is the world. And the world is the only place that has jobs.
Do you really think everyone has a spot at FAANG-etc? They don’t - I know because I work at them and we reject so many people at the on-site stage.
About how many percent?
What could be ways to find out sooner that they're not the best person for the job? (What about doing half the interviews remotely?)
For example, I might remember working on it, but maybe what I actually did at the time was tested it extensively, or investigated a performance issue, or even collaborated on solving some problem in that specific bit. If I look at the code, I couldn't tell you what my code looked like at that time. There no evidence aside from commits that I did or didn't work on it, and so there's a good chance that either of us are right. Either way, I don't care, it's a trite issue. I got fired from that job anyway and list it on my resume as experience, which it was, but I don't say anything about what I stopped working there. Doesn't make it invalid and it's none of an interviewers business.
I don’t mean to burst your bubble, but these type of people have no problem studying leetcode for a few weeks. Sorry to say.
After all, I learned chemistry, physics, math, mechanics, thermodynamics, etc., by working problem sets.
requires way more time, way more examples, way more code written.
I believe that in order to be "somewhat decent" at leetcode (not top level competitor)
you just need to learn theory, techniques, tricks and get some practice.
Meanwhile in order to get better at system modeling you need to model a lot of systems from scratch, change them and see how your initial design supported that refactor part
You need to be aware of various approaches / architectures, yada yada
And generally spend a lot of time thinking about how it'll affect readability or easiness to get into the project for new ppl, scalability, extensibility, etc.
So, in generally I believe that leetcode is just learn theory, practice everything you learned and go ahead and do 50 / 100 tasks
If you fail, then you can check answers and learn from them
meanwhile there are no correct answers for system modeling.
Additionally for leetcode you have sets with tasks to practice, meanwhile the "real" system modeling experience comes from real projects where requirements are being thrown and changed by somebody else whenever he/she wants
____________
>I don't know how one can study leetcode and fail to learn to program better.
I don't see how even hundreds of hours on leetcode would make you better at OOP, system modeling, building abstractions.
Because you know the foundations.
Knowing how a compiler works all the way down makes me a better programmer. Knowing assembler makes me a better high level language programmer. Knowing in detail how a car works makes me a better driver. Knowing how electricity works at the low level prevented a very costly mistake by the electrician who was wiring it (he had no idea). Knowing chemistry prevented a very costly mistake by the roofer of my house.
I'm thinking that
1) getting good at algorithms takes less time, than getting good at system modeling. — One will see one's mistakes sooner, within minutes, compared to system modeling, in which case one would need to stay at a workplace for months or years, to see how a system design eventually turned out to be a mistake?
But 2) it's also harder to get good at hard algorithm questions — most people won't get that good at it, also with weeks and months of practice. And they still wouldn't have any real chance in a Google coding interview.
And in that way, algorithm questions make sense?
They give more information about the person's ability to think and learn — good for the company —
and takes less time for the candidate to get good at (weeks or months — compared to working for years?), good for the candidate?
(I'm someone else than GP)
PS. I wonder what the electrician was up to? :- ) and the other one
LC can help you program "better" -- but in a narrow, "just tell me what I need to know to pass the friggen' test" sense.
To learn how to really program better - you'll have to start building things. And reading books. Meaning, you know, "hard" books. Not books about how to get past the LC barrier. And these things known as "papers", and man pages, and specifications, and the raw source code as written by people much, much better than you (even though 99.99 percent of it has nothing to do with LC problems). And by getting down there, in the trenches, and working with people who are plainly better than you are, and who you can almost barely keep up with.
That's how you get to be better. Not by ... studying to pass the test.
What exactly separates accurate/honest from humble/bad at selling oneself according to you?
Unless you are going to argue that they aren't rational adults with agency of their own, in which case I would question letting them decide anything at all
I was responding to the phrase “have to”, and pointing out that they don’t “have to” do this. Then you brought up things like people investing a lot of their money? It still doesn’t change that it’s a choice. They could be investing the gdp of Canada and making rational decisions around the money, but it is still ultimately a choice
This is the original comment I replied to, I thought you were asking a clarifying question and tried to reiterate my main point. My apologies if there was a confusion
> we still shouldn't assume its a property of the universe
is actually a bit funny I think. One could post that comment as a reply to almost anything :-)
And then see how they interpret it and how they react
Tbh the defense of most business leaders sounds like someone defending a rabid dog or a killer robot’s action’s.
I really can’t understand how some people can simultaneously believe that execs and founders deserve the outsized compensation for making all the decisions critical to the business, while simultaneously believing in this neo-Calvinist philosophy where the elite _have_ to fuck over everyone for their own benefit and it’s ridiculous to think that they could chose ethics over money
Like, do they have free will and so you can make the argument that their choices led to greater profit and they deserve a big cut, or are they simple tiny dancers on the wind of fate who can’t do anything of their own accord which (if you were being consistent) means that they brought nothing of benefit to the business and therefore should get none of the profit?
Government, on the other hand, just increases the budget.
It'll take longer than that just for the new employee to get up to speed, let alone contribute much and prove his worth.
Also consider that the benefits package is often worth 50% of the salary or more. Then there are the taxes the employer pays on employment, the cost of the facility and equipment for the person, etc.
Then there are all the expensive and costly problems if the person is in a protected class. The employer has to prove they can't do the job, which can take a year or more.
also, you should never assume people lie on their resume. before you know it you will carry that bias into every interview. if i was your manager and i knew what you just wrote, i would find someone else to interview people.
You may be missing the point of a resume.
There are really two goals: 1. Get you through the door, so you can get an Informational with the Hiring Manager. This means passing the Recruiter and (usually) the Hiring Manager's 30-60 second screen while looking at 50 candidates. Often an email or a Linked In Message is more effective than a CV at this.
2. Sufficiently and credibly explain your background to the interviewers who will be reading it 5 minutes before the interview.
The CV needs to present well and be credible.
Unfortunately, the fact that so many people outright lie on their resumes means that people who don't are at a disadvantage.
I worked at FedEx ground for two weeks in college, but one week was in June and the next was in July, so while that was relevant experience, it went on my resume with June-July and it may have looked like I worked there for two months.
It's common to only list the final position one held, so someone who was in the mailroom for 5 years, somehow got into a deskjob for two weeks and then left is going to show 5 years at the company, deskjob (unless they're looking for a new mailroom gig). It's true, but misleading. Of course, some people go beyond that and claim things they didn't actually do, etc.
After a certain point of interviewing candidates, I stopped reading their resumes. All of the interesting stuff I would ask about never had details behind it, because it was fluffed up, but never enough to disqualify a candidate either.
But I make sure to not judge them on that. They're often over zealous and looking for a job, so I don't blame them. The content of the interview is the real meat and potatoes in my experience.
Which is to say, the difference between a genuinely good candidate and one that merely claims to be is clearly visible in exactly the kind of interview the linked article is arguing against.
I think there's lots of room for criticism of the Big Tech Coding Interview. But "it doesn't work" is just not reasonable. It does work, it objectively works very well, probably better than other techniques (the existence proof being that there aren't any other hiring organizations out there beating the FAANGs at their own HR game).
If you want to criticize, point out that it doesn't necessarily work fairly. It rejects specific qualified candidates more often than it should, and it fails to reliably measure other areas of qualification than mere technical skill.
But don't say it doesn't work, or that it's a waste of time. Show, don't tell. If you know how to hire better people, then do so and beat the world.
You touch on one of the reasons this technique isn't used in general:
> it’s quite difficult because it requires the interviewer to know their shit
Having an interviewing team in an engineering org n > 100 with the following properties is nearly impossible:
1. Everyone knows their shit
2. Everyone cares enough to give the interview well
3. Has enough throughput to meet the company's hiring needs
4. The interviews are given in such a way that legal isn't worried we'll get slapped with a discrimination lawsuit
Heh. I've written production code—and lots of it—in... god, eleven or twelve languages? Not counting transpile-to-JS languages—add another two for that. Also not counting markup languages or CSS or anything like that. Oh, and I forgot bash, if that counts (not sure I'd count it).
I'd probably get stuff like "how do you declare & populate an associative array?" wrong in at least half of them, and the others I'd basically be guessing but luckily several accept syntax so similar that if I used it on all of them I'd be correct in enough cases to get me up to about half-right. I'd have about as much trouble with this task in languages I last wrote fifteen years ago, as ones I wrote code in today.
Stuff that's common to most or all languages, I tend not to keep in my head. Any given language probably has this kind of feature, so I just expect it to be there, and not confined to any particular language. I crib off nearby code, let my tools tell me the correct invocation, or look it up. If it's anything even somewhat common, there's usually an example nearby to use as reference, so it hardly even slows me down. If it's uncommon enough in the codebase that I have to look it up or spend 10 seconds finding an example in some other file, that probably means I'm not having to do that often, so that's OK too.
Honestly, once a person has demonstrated some proficiency in a cross section of languages, you should just skip the language proficiency section and instead talk about how learning new languages has gone in the past. Look for any red flags or biases that are going to be a hindrance in the new languages particular paradigm, but otherwise the “can you X” is already a done deal.
What if I can google how to do that in all of the languages I've used (and many I haven't) faster than most can write it out from memory? How do I convey that to you and what is it worth to you?
Wrote memorization like that is one of my weaknesses but I can compensate for it. I heard an interesting theory that one aspect of intelligence is how efficiently you can forget information that you don't benefit from retaining. If our brains have finite storage capacity that seems pretty logical.
I'm smarter than what I thought :-)
& frequently forget how to iterate through arrays and objects in Typescript although been using it for years
> if I can google
Sounds fine with me, or via an IDE, or pseudocode
Recently I interviewed someone who emphasized databases on their resume, and later mentioned they were very highly skilled in that area, so we started talking about indexes. I think I asked something like "Why wouldn't we just put an index on every field?" and the best I could get from them was "it might speed up, it might slow down" but they couldn't articulate why.
Another one I will sometimes ask: You're an expert in language / framework x and have been using it for 10+ years? Cool. What recent additions have you most excited about it? What things about it do you hate/disagree with the most?
Not being able to answer these things don't mean you 'fail' the interview of course, but to me it's a strong signal that our definitions of "expert" are different, and so I'll make that assumption about everything else on your resume.
I do like having a 'Familiar' section where I list languages I like to dabble with outside of work, generally where I can create a personal project but don't know the ins and outs. I find these useful to talk over in an interview as I don't want to come across as a very one-dimensional JS developer.
You might argue, that not every pipeline works like that! Right. But now imagine the consequences if you are hired. Independent whether you fail, think how toxic a workplace must be, if liars are regularly employed. The hiding. The avoidance of responsibility. The amount of bad solutions. The success stealing. The meeting slideshows. The horrible code. So many consequences.
Stay with the truth!
A benefit of this process is that your resume-writing skills improve a lot. Read a hundred or so resumes and you'll learn what catches your eye and what gets ignored.
Alas, nobody else does this. I used to mention this process at places I worked but people thought I was nuts. It worked, though. We rarely had a hire that didn't work out.
I'm confused by this statement. Every company I have worked at for the last 15 years has had hiring managers and usually some senior engineers on the team screen resumes. How else do you even decide who to move to the phone or in-person interview stage?
But after 5 years of failing to get a job offer, I finally caved. Putting in the effort to deeply understand DS/algos and grind away leetcode led me to getting offers I liked and IMO has made me a better engineer.
I now have a “gold star” on my resume and am confident I can still answer most leetcode questions. I consider that time spent as a great time investment, since landing my next job will be much easier.
Money wasn’t my original goal when I got into CS, but it eventually became my driving force. I regret taking so long to notice this, and letting my feelings get in my way (of how it “should be”) / resisting leetcode for so long.
Same, once I realized that the reasons I originally loved programming were never going to present in a my career.
Though currently I'm more tempted to eat the loss, shed the golden handcuffs and go do something else.
I couldn't pass a technical interview. At some point in life I gave up. I realized the only way I can get a good job is via somebody in the company knowing me, ideally them reaching out to me to work for them. For the jobs, where I passed the technical interviews, I quit fairly quickly, as they were horrible jobs.
So when doing interviews myself, I just chat with them about the project we have and things they mentioned on their CV. You can easily detect if they are honest in their CV and their level of competence without actually asking too many technical questions, just by having them talk about the stuff on their CV.
In an organization of ~500+ highly paid and (hopefully) competent engineers - there is a very high premium on outward signs of technical competence. If a fresh college grad isn't quite sure that their "senior" is really "senior" - or worse a neighboring manager becomes displeased, then there is a problem. Similarly in very large code bases with heavy testing and performance requirements, iteration times can become slow... resulting in a stronger need for planning, design, debate etc.
The white board technical interview effectively tests that you can communicate competently on an arbitrary coding/design topic. An inability to do this can be a death sentence in a large, interconnected engineering organization.
Have you worked at FAANG before? Their "interconnectedness" is near non-existent.
I'd agree if you'd say that some teams are well connected. I'd also agree if you mentioned that these teams are almost always senior+ level engineers. These are not easy teams to join... In my experience they're almost impossible to join without connections.
I think @lukaslalinsky has a much better opinion on this.
That being said I think your point is valid for companies which do have pronounced non-siloing culture... But, in my experience, those companies haven't given me white boarding or LC style interview questions ;-).
Bear in mind that most FAANGs are also built on 20-30 years of fast paced technical development. There are services built on top of internal frameworks, built on top of internal frameworks that sometimes haven't been maintained in 5-10 years. Searching for the answer is many times impossible.
I have many friends at FAANG and many of them would disagree with your take on them being interconnected and definitely lean more toward it being team dependent. This also is similar to my experience.
I'm definitely going to ask probing questions about the tech. And the more familiar I am with it (and the more relevant it is to the job), the more detailed and discerning I will be.
It works too. The outcome is usually either, the interviewee is rattled and straight up admits that they don't know as much as their resume claims; or, we get to have a pretty in depth conversation about what the interviewee has actually done
The former is fine with me. I think most developers understand it's better to come clean early. When interviewing with me, that's the right call, because if I think you don't know you're stuff, you'll fail, but if you admit that you aren't so familiar with $technology, then I'll shift my questions to something else.
The latter is ideal though, since it segues well into the actual job requirements, and the interviewee gets real insight into what they are walking into.
The person who wrote this article is a-typical. I've interviewed people with github accounts, but most of the time they are full of college course work or cloned open source repos, so they aren't really worth investigating too deeply. But someone with an active open source project on github and a popular blog seems like an easy interview, but I've never had the opportunity to speak with anyone like that.
I have many thousands (tens, definitely; hundreds, maybe) of lines of code I've written on GitHub. I also have a blog (not sure I'd call it popular though). In my recent interviews (which I blogged about at length) I don't think _anyone_ had looked at my repos on GitHub. Certainly no one asked questions about those projects. A few had read my blog, however.
A couple times I did show them some of my work on GitHub, primarily a project I was working on at the time that had a UI I could screen share.
Easy to see that you're an old perl hacker that's now into rust and you're active in community stuff that matters (LWN, CPAN).
I feel like you might over-share on your blog in a way that could turn off potential employers, but those are companies you wouldn't want to work for anyway.
I get the vibe you might be opinionated and risky, but are clearly technically competent.
I'd probably put you in a team with other rust-enthusiasts for maximum success. You're likely to inspire newer developers.
You might want to take HTML/CSS/JS off your resume because JS pretty much means React/Vue/Angular these days and you don't seem too interested in that stuff.
That's the sort of stuff I'd check about you before the interview.
Good luck!
I don't think my blog posts had too much of an impact on my offers, although of course I guess some places could've just said no and not told me why.
Have you ever experienced the opposite and been the one that's failed the candidate? Maybe either via a bad job description or answering questions inaccurately or dishonestly? Any times you've had to come clean as the interviewer?
I think there might be an alternate to leet code studying. I did Advent of Code (AoC) in 2019 to learn a new language. I then did some interviewing, and remember a few things on leet code problems "oh, this just like this AoC problem" and applying the same skill set.
So maybe doing AoC and solving funny Elf and Sleigh problems could be more fun? Maybe not as efficient though. ;)
Let me put it this way - you are not entitled to a high-earning FAANG job. It's really that simple. It's a free market, and companies can select the way they recruit their people. You feel like it's a waste of time to learn Leetcode questions? Then don't do it. Case closed.
I say this as someone who failed multiple algorithm questions because I did not invest enough time to be good at them.
He's not talking about FAANG jobs. He's talking about Joe Blow companies that pays "market rates," and "great benefits!" to code really boring stuff with no highlights on the resume.
He said these companies are too lazy to research any references and are just copy/pasta leetcode tests to their interviewees; tests the hiring people probably can't even validate as correct without an answer key.
Why's that? People are obviously taking time out of their day to read the complaint, and a non-zero amount of those people may be in a position to enact some small changes.
>Let me put it this way - you are not entitled to a high-earning FAANG job.
Not once reading this entire thing did I feel like the author felt entitled to a high-earning FAANG job. They actually make it pretty explicitly clear that they are talking about non-FAANG companies employing FAANG-style (or, what those non-FAANG companies think is FAANG-style) interviews. And it's still pretty clear, to me at least, that the author doesn't feel entitled to those jobs either.
>You feel like it's a waste of time to learn Leetcode questions? Then don't do it. Case closed.
That's... That's what they did. And they wrote about it.
And many non-Facebook employers are looking for qualified developers who will bend over backward to make a much smaller pile of money. They might be making a bad decision, but it's their bad decision to make.
That being said, this is survivor bias and I understand it would be very frustrating to work on the preparation and not get a position in return. But to those who don't like the process, they have many other companies to choose from.
The devil is in the details, of course.
New buzzword for me today.
About as much as complaining about complaining.
Interviewers have an interest to screen for the best quality with the least effort. If they can reduce false negatives, they could fill positions more quickly. If there's a concensus a particular method is always better than asking for leetcode hards in 30 minutes, companies are likely to adopt it. Companies that adopt better practices perform better, and hopefully there's less time spent by people on practising leetcoding and more time spent on more productive activities.
Nothing would be done if these conversations are not had. Many fail to make a difference, but sometimes something good comes out of it. You should learn to have some humility that many privileges that you currently enjoy are won by people who care and try and you should not shut them down.
And as a practical matter, industry insiders do read these complaints. Sure, it's hard to make big companies change what they do. But companies do adapt. Many small companies adopted alternative practices that are less heavy on leetcode and hire well. With some time and effort, maybe big companies would change too, and we could all be better off.
It could be that the reason you are getting the interviews is the Linkedin profile (especially as often companies encourage interviewing people with atypical background), but maybe you fall short of the image you are projecting? The form of the interviews might not help highlight your skills, of course, but it's probably not the only factor.
I don't think everyone does this. I certainly have never done this. I've never had an issue getting interviews using an honest accounting of my work experience, and I know as an interviewer I use the candidate's resume as the basis for forming my questions to ask them. I would expect others to do the same. Filling your resume with things you didn't actually do just makes the interview harder.
1. Here's a project with a back end API server, it's a repository already cloned to disk, and includes a README.md with very detailed (local) deployment instructions, that one can copy+paste. Thinking: Validates the individual's ability to read, and synthesise
2. Run the API server - this in turn provides a swagger API, that allows users to see the available APIs in their browser, and instructions to do so. The machine has various chrome plugins, Postman, curl, etc pre-installed. Thinking: Validates curiosity, and basic understanding of the modern(ish) web.
3. The candidate is to create a new project (framework of their choosing). They have the time of their choosing to implement an impossible to complete task (which we share). They have to create <something> that can trigger various APIs to insert, update, and remove data from a database. We provide the sample data in text files such that copy+paste is possible. Thinking: Validates if and how they reach out for assistance. Helps us understand where the candidate likes to spend the time of their choosing while working on a solution. Encourages a conversation about difficulties, frustrations, what could have gone better, and feedback.
This entire process is designed to ensure that we actively interview the candidate with something "real". It allows us to understand the real level of a candidate based on their efforts (i.e write tests, don't write tests). This is not perfect - but it's the best we could get. I'd love feedback.
And there's nothing wrong with that! 90 (99?) of the software the world needs are basic CRUD web/mobile apps. Hell, for probably 60% of that, a basic no-frills CRUD app would be an improvement!
But HackerNews measures it's baseline of the tech industry against "BigTech". That's more than FAANG, that's now also the 500+ unicorns imitating FAANG.
All these unicorns don't get to where they are by building CRUD Apps - They're Changing The World. (facetious)
And changing the world (serious now) requires not hiring engineers who can build CRUD apps with a database, but engineers who could build the database, the next Swagger, etc.
If I was handed someone else's machine preinstalled with a load of tools that you assume I know how to use, I'd probably excuse myself from your interview. What if I use a different keyboard layout? What if I don't use a Mac/Windows? What if I've never used Swagger?
When I was younger, I was always stumped by "trivial" questions, as in why would someone ask me a question with an obvious answer (though my pool of "obvious" answers was pretty large, so I had to tone down those expectations as well)? I've learned to consider all questions in the simplest way possible, but my brain simply glosses over those otherwise, and especially in a test setting, I might look to see if I am missing something ("what's the caveat?").
Curiously, I also do pretty good in leetcode style questions, but I think people are usually taken aback by the number of things I consider simple (I appear to not know shit simply because I avoid talking in big words ;)).
While I applaud your effort in keeping the process simple and "real", keep in mind that nothing beats saying explicitly what you are after with each stage: most people in "interview mode" think differently from "get stuff done mode".
That's exactly what we do. We make it abundantly clear that it's not possible, nor is the expectation such that it happens. We also turn this into a collaboration and pairing role, with times to dive in and out.. pretty much like exactly what this role entails.
This is how we avoid the "take away assignment" or "l33tc0de" problem. We invest in our technical interviews. Similarly - we let candidates know in advance that this is exactly how they take place, and that they're free to use their own equipment if they prefer. The idea is to "simulate" work.
This doesn't replace the need to go deeper. Instead, this eliminates a very specific type of filter, in exchange for getting to know each other, collaborating, and hopefully mutual understanding.
As for going deeper, I don't think there's a way for someone to go deep enough without actually putting them on the job :)
It's absolutely astounding to me that people must entertain these at a sufficient rate that companies still try to pull this free labor nonsense. One company I interviewed with provided a take-home assignment and said to bill them for the hours; I found that to be a fair offer, although due to other circumstances limiting my available time, I declined to continue the interview at that point.
If the take-home assignment is expected to take a few hours, maybe it's worth considering. Any longer, and they can look elsewhere for free labor. That time is much better spent sending out more applications, networking, leetcoding for FANG interviews, working on personal projects, or simply taking a walk outside.
Calling it "free labor" implies to me that the company is going to get some kind of actual value out of it in the end, other than as a candidate assessment. Most of these types of things I've seen simply haven't been the type of project that would be useful in that sense.
OTOH, the big mistake I see a lot of companies doing is doing a 2+ hour take home assignment, then not making the tech portion of the actual interview process just a discussion of the take home project. If I'm going to commit that amount of my own personal time to your interview process, I want to know that it's going to get me out of at least as much "whiteboard hazing" in the end. In my experience, this frequently has not been the case.
Truth be told, I haven’t used public git since undergrad (for assignments). I don’t do extra curricular projects. Mostly because I don’t have the time to. I’ve never had it, except maybe the first year of my professional experience. All the free time I have if any, goes towards other projects that I do at work. And honestly, I am okay with that. Building a portfolio takes a lot of time, and it becomes irrelevant real fast. It is also, a waste of time.
He passed me. 2 rounds later the recruiter decided he didn’t lie I’d pushed back early on.
Personally I hate leetcode style challenges and seldom use them. Designing our recent hiring process for our org I included a take-home, but made sure it:
- time limited to 2-4 hours
- had the team practice and verify it’s doable
- clear objectives
- clear marking criteria
- any language they want
It came down to a somewhat typical platform eng/sre/DevOps type task of working with APIs, so chose our company’s public API, so it’s somewhat relevant and interesting, and asking the candidate to write something to read and process our API data.
The really key goal being to weed out people who:
- just can’t write any code at all
- don’t approach problems in a code-first repeatable way.
I learn a lot through running it, and improved the take-home in many ways based on feedback.
The rubric offered the option to do it in a session as a leet-code style round, no one ever asked for that out of hundreds of candidates.
then even if you dont get the job at least you feel you've learned something or proven to yourself you can handle a challenge
Dunno how accurate that is, but I've been told it at more than one shop.
Like I asked in the comment replying to your previous one: what benefit does this give the business whatsoever? This will cost money, time, and very possibly headaches (whether reputational or legal), and for no benefit to the business. Why would they consider this?
Common courtesy? Same with being nice and polite, saying hello/goodbye, etc. It wastes time because you could get to the point faster but it’s nicer and makes the interaction more pleasant. That’s it. No other reason. Just make the world a slightly better place with a tiny action.
I also won't do pre-noon interviews.
If you start pressuring me I'll revoke the application.
You can be lucky I even applied to your company, despite all the bs buzzword requirements you have posted you have no clue about what they mean.
I am very angry at current hype driven job ads. And yes I wager they're more of an ad for the company than actual job ads.
From some ads where I sent my application to I have never even heard back, which means they probably sold my info.
Even reading all those job ads is tiresome. Most don't even write if they're ok with 100% remote. Most don't even write if it's ok to not work 100% full time. Most don't write how much they're willing to pay. Most job ads are just a waste of time spicked with bs trendy buzzwords.
I'm so pissed at the whole state of everything.
My way to assess candidates differ from the style the blog describes, but of course I do some kind of technical screening. From my point of view, this blog, obviously, just describes the view of the candidate. And maybe this person is quite good at his job. But you have to consider, that you get a lot of candidates who can't get things done. I screen candidates who want to do a PhD in computer science but write code like we are 20 years or more in the past. I get candidates with a degree in computer science who do a little programming task that won't compile at all.
What I want to say is, don't underestimate the sheer number of people who apply (or get brought in by recruiting companies) who, to be honest, cant develop software that's a little more complex.
All the HN threads about recruiting mention this. I get the argument, and yes, there seems to be no better way than to test the candidate (no matter if it is a take home test, online, or onsite). As I see it, most of these tests are about algorithms and data structures, not real, practical problems the company has/had.
What I do not get is the following. Most companies (especially FAANG) demand a CS degree and then give you those coding tests about algorithms and data structures your degree actually proves you know about. If the candidate got the degree thirty years ago, then (maybe) fine. But even candidates fresh out of university? And even if you do not recall them in an instant, your degree should prove you can successfully research and understand them. Is a CS degree actually anything worth then, if I still have to prove this knowledge every time I apply for a job? And if it's not about theoretical things, why demand a degree and test for theoretical knowledge instead of practical problem solving skills?
OTOH, I am hiring for the startup I work for, and I explicitly don't require a CS degree, or any degree whatsoever in my job descriptions. It's not just because I don't have a CS degree myself (my degrees are in math), but because nobody gives a shit what degrees anybody has here as long as they can do the job. Conversely, you can have a CS degree from the #1 school in the world, and I don't give a damn if you can't do the job.
I once found myself in a small friendship that I found was fake (recognized someone from a large group project in my algorithms class) and he asked me for help on a problem so I went to meet him with the intention of helping while still following the academic policy. It then turned out to be 8-10 people all around a giant table passing a laptop around giving different problems a try. I subtly asked how they didn't get caught and they said they would complete a pset, distribute it to everyone at the table and on their own time would change things around.
Actually, if you get stuck on any problem you can just go to office hours and I've even seen TAs just typing code on a student's laptop.
My roommate TA'd a 4000-level class once and said that a lot of assignments looked similar to each other but no one went after anybody for honor code violations.
I absolutely believe it's possible to graduate without knowing much about CS or programming.
Typically Olympiad questions takes well-to-do teamwork & few hours of brainstorming - not a 30min timed test you give with a proctor watching your monitor
I don't mind writing MUMPS if I was hired, but the test is not my ability of understanding MUMPS-styled syntax or predicting the win percentage in some chess layouts without using MCTS.
You might as well just say Epic Systems LOL
This. I don't want to view interviewing as a thankless chore because I think it's important, but hard to view it any other way when your interaction with any given new hire will be minimal at best - especially since the extra work of interviewing usually just ends up as a footnote come review time. If you want people to take interviewing seriously, give them some skin in the game.
Besides the questions, you get interviewed by recruiters. The recruiter, very likely a person that has never done anything technical, been in a technical team, delivered products/features under tight timelines...
Companies do not want their engineers and product people spending time interviewing prospects, so they throw recruiters at the problem and end up frustrating and wasting the time of other engineers. Like, it's your problem, not ours.
If a recruiter reaches out and I'm interested, I ask to talk to someone technical.
How do you phrase this? What are some successes and failures you've encountered with this approach?
I was a bit surprised, as I’ve long said how much I want to talk to the HM as early as absolutely possible.
Of course then I learned said HM had only been at the org for two months and the entire Infra team was ostensibly just the hiring manager on the other side of the zoom call and I was suddenly a great deal less enthused and interested in the role.
Why?
Having been in organizations where the Devops/Infra org was brand new, it's not something I'm remotely eager to be a part of again.
Some people have the tolerance to be the 'founding' Devops/SRE talent, who help the company go through that "transformation" from the ground up, implement the IR process, create the standards, win the hearts and change the minds, and thrive when the Devops tradecraft and practice is very new to the parent organization.
I'm not one of those people.
Some people would balk and say "shouldn't this be done by a CTO?"
and my honest answer would be "I don't know anymore", because I really don't. I keep hearing Devops needs buy in from the top. And I used to think so too. Then I found myself eight years into this field and seeing the rhetoric was CONSISTENTLY failing to match the reality of whatever the hell we're "supposed" to be doing in Devops, because it can mean whatever the org needs it to mean. And I'm just cynical enough to think, nowadays, that companies know this. They know they can just slap the Devops job title or SRE job title on any assortment of tasks that do not improve developer experiences, minimize toil, improve quality or provide visibility to applications, services and infrastructure and get droves of candidates.
So many Devops/SRE job descriptions lately point out the painful truth that so many companies are cargo culting their way through operations; they don't know what they actually need, they don't know who they need to be hiring, and as a result you end up with companies hiring "Devops enginees" to do any kind of technology work that isn't writing app features or building a product thing.
I've gotten around this by having a litany of very specific questions I ask in interviews (which have been commented on "wow you ask some VERY tough questions". Yes. I know. That's intentional), and a pencil cup full of little yellow, orange and red flags that I look for when deciding if I want to continue interviewing at an organization or not.
"Our devops team is brand new, I'm the manager, and I just started a month ago"
is one such red flag. Doesn't mean it's a bad organization or they have bad people, just that it's a bad organization for me.
As someone who has been this founding engineer in the past, in my experience, this is a fun situation to find yourself. There is rarely a "win the hearts and minds" aspect when at such an early stage. As long as it works, you're golden. You literally get to call all the shots, pick all the tech, lay the foundation and the bill really only comes du when you're building a team around it and your engineering hires start asking questions. They're usually good questions, and are usually known issues (although sometimes you can learn a lot from another experienced engineer assessing your architecture), but it becomes work from that point forward. Assuming you get that far, which if you do you've largely succeeded as engineer #1 as your technical decisions didn't take the company down with them.
How do you de-risk this? My take would be to focus on getting "good enough" candidates in and then if they don't work out, be able to fire them easily. It's tough to normalize that. It's legal in states that have at-will employment but it seems that there are still taboos to doing that.
As a dev, the moment someone on my team is fired for performance is the moment I'm looking for a job elsewhere.
https://www.paycor.com/resource-center/articles/employment-a...
I think the taboos are less around the law and more around trying to avoid a reputation that the company will can you a couple months after you've perhaps uprooted your life and moved to a whole new city. I wonder if the taboo will lessen in remote work contexts, where the employee is not so expected to uproot their lives for a job.
Firing people willy-nilly SHOULD be taboo, if you find yourself firing people all the time then you're the problem not the people you're firing. Make an effort to support and develop people rather than looking for mythical unicorn candidates.
So he goes on holiday.
Then his HR lady goes on holiday.
They get back, apologize for the delay, and want to proceed.
Nothing happens. No response...
He's probably right about homework too. I can't tell if they are actually testing for you already having a solution on the shelf that you can slightly modify for them. Regardless, if someone did a homework assignment for me, I would make sure they got feedback. If it wasn't good enough I would think really hard about what I said about the conditions (don't spend too much time, it's ok if it isn't perfect) before dumping them. At best it is just a kind of fizzbuzz: if they can stand up a k8s thing in a few hours, they are likely not making this up or even copy pasting it.
End of the day software has some odd ideas about what evidence is. Just about every other profession is just a CV, some chat, a light grilling, then a response. If the person is making it up they'll get found out and dumped out soon enough. Software somehow manages to do both: several interviewers have told me they dumped out a guy after a brief stint, then tried the whole Leetcode/homework/tech chat thing.
The actual work will be "tweak this to have six side cars instead of five", or "set it to spin up a few more nodes", or maybe even "upgrade k8s from version X to version Y without downtime, test your solution on dev first". There has to be some way to test that.
Instead they give you "Bring up a vpc, resources with terraform or cloud formation, spin up k8s, program a webapp that tells me my IP in a container, set up a build system to package it, configure Route 53, then make it all run." - all in three hours.
I don't write scripts or even yaml from scratch that fast. I don't know anyone who does. Most people copy/paste old projects or stuff off of StackOverflow and then mangle it to try to do these silly things.
In a role we're currently interviewing for, we intentionally ask deep-dive style questions. We first explain our approach by telling the candidate we don't necessarily care about the answer; we seek to assess aptitude, rather than ability, and so we ask the candidate to be as vocal as possible to display their reasoning. So far, it has helped us narrow-down the pool to two promising candidates. Of course, we also mention in the interview that, "we'd make liberal use of google, and we understand that most other people would too" - but some of our better interviews have turned into pleasant, fruitful technical discussions, and not just a back-and-forth "pub quiz". Just my $0.02.
Now thats not to say I won't do coding assignments, but I weigh those pretty heavily. If the employer seems pretty amazing I'll do them, if they seem meh then I decline.
On the flip side, I've had interviews where they asked me no technical questions and no coding challenges. That is an enormous red flag to me.
I wish I could just give you all a big hug and a pep talk.
The demand for software engineers is expanding faster than new engineers are minted. There are lots of excellent, well-paying jobs going unfilled out there and with persistence one of them is yours. If you fail a tech interview, it's ok. It happens, and all too often it's a blessing in disguise. Well-designed tech interviews bring your strengths to the surface and you will do well. Otherwise it's just a crap shoot and sometimes you win anyway.
Chin up. You will make it.
Knowing this I try to cut through all the bullshit and immaturity by focusing on leadership and measures. Software is exceedingly immature and biased, but it doesn’t have to be that way.
I interviewed at a FAANG this year and it was one of the worst: leet code nonsense and false assumptions about performance that don’t survive reality. They might pay well, but the interview made it feel like a dead end hourly job flipping burgers.
It got extremely hard for me between issues with IR35, Brexit and the pandemic. 4 stage interviews in multiple places with long take home tests; some which I didn't even sleep to deliver as quickly as possible.
Some interviewers had nothing much on their public profiles, either GitHub or personal sites. An absolute lack of respect.
Https://GitHub.com/heldrida
Your GitHub doesn't matter Your resume to a degree doesn't matter If you can answer the questions and solve the problems that matters
...but what matters most is if you have a good attitude and can do the job you are being hired for and it's pretty rare someone hires you based on gasp the job they expect you to do.
Show me someone who can write merge sort from scratch and I'll show you an unemployed programmer.
We need good data based approaches to tech interviews to move the discourse forward; I really like triplebyte's talks and blog posts on how to hire, and what they mainly point out is that a good interview process provides a decent signal on how successful an employee will be.
It seems anything larger I run into push back. Perhaps maybe the size of the company may be a key indicator? Maybe as a company scales you can’t be dependent on hiring managers knowing how to hire good people so you rely on filter mechanisms that are cheap and lazy.
Only semi related, but I built a lot of things in my life from hacking, that could be computer systems, social systems or something else.
But these day I find myself up against powerful entrenched bureaucracy. I'm convinced that some of these can't be beat (at least not by a single insignificant person).
What I don't understand is why there isn't a standardized (proctored) test that companies could rely on, instead of re-testing each candidate themselves.
Couldn't FAANGs put resources together to establish an independent testing institute? Wouldn't that save everybody a lot of time and money?
Companies don't seem to find this sufficient.
Why is that? Would a board test fix this? I would back this idea if it would work, but I think it's crazy that I have a BS and PhD in CS, years and years of having my work vetted, professional experience, etc, and yet if I wanted to find a new job...time to leetcode.
University degree program do care about rankings, which entails some concern about the quality of graduates awarded a degree. But they mainly address that by filtering students at admission time. Some program still have weed out courses to nudge students into alternative programs early on. But once the student is committed to the program, there is a strong incentive to award a degree regardless of their demonstrated capabilities.
> Particularly in DevOps, my specialism. There is no test for debugging SSL certificate chains in production at 3am.
> We can’t replicate having no answers as to why production is down at 6pm on Christmas Eve or how we will stay at our desk until it’s fixed.
So, I’m getting the sense that this person enjoys devops. I wonder if they are trapped between engineering and ops - good at both, but not great at either.
if this person wants to work at a larger tech company, maybe this person should apply to be an SRE?
They have very valuable skills and the pay for SRE often exceeds the pay for engineers. I’d not expect an SRE interview to be as focused on whiteboarding, but have a much deeper understanding of a systems toolchain, eg how to use Linux tools to diagnose a network issue.
I have the hardest time convincing interview candidates that I in fact want to watch them use Google to solve a problem. It turns out that many people are ineffective at finding and reading documentation.
As an example:
---
We have an existing job management system to track and update the progress of warranty repairs (e.g. whitegoods). Sometimes parts need to be ordered to complete a repair. If we wanted the job system to book and track parts orders into third-party warehouse management systems; how would you address the following?
- Credential management
- Data types and their life cycles
- Sources of truth e.g.
- Customers who have purchased whitegoods are the source of truth for new jobs
- Our staff operate the job system and our clients (manufacturers) are the source of truth for parts
- Tradespeople operate the job system and are the source of truth for new parts orders
- Warehouse staff operate the WMS and are the source of truth for stock levels
- Required/Optional API calls and their triggers- Fault tolerance and monitoring
- Compensate for variations/shortfalls in existing WMS APIs (in some countries we use a 3PL)
WMS: Warehouse Management Software
3PL: An external company who operates a warehouse and dispatches items on your behalf. These companies may do so for multiple tenants and have established staff, processes and WMS.
auth via ADFS/SAML/Kerberos, everything else is managed and provided by office365 ;)
There should come a point in your career when you realize “Process” people have a different set of priorities, and being secure enough to not make decisions in simulated peril is wise. ;-)
> If you want better candidates filling roles, ... Check the candidate’s portfolio.
Why wouldn't a candidate's portfolio be fake too? Someone else's work, plagiarized with minor edits / refactorings to make it look unique, for example
Why would it be off limits to cheat on GitHub but ok in one's CV
Oh boy. Yeah, that's the issue I see with most of those "take home" exercises
(and then of course they take the candidates that spent 20h on it instead of 4h)
They also need to make candidates feel like they were tested using the same criteria as other candidates.
The funny part was that they linked to it and called it a coding test.
Lets be honest. What you want is easier questions. Vague questions that can be discussed and argued one way or the other.
Sure some it’s kinda performative, but I’ve been on teams where HR was just letting anyone in and it screwed a lot up.
> There is no test for debugging SSL certificate chains in production at 3am
I get it, interviewing sucks, Leetcode sucks and FAANG-level interviews are tailored for a very specific skillset.
And while Leetcode problems are a horrible proxy, there are a few caveats to be aware of:
- In terms of acquired skill level, I guess we all agree it's harder to gain context on a new codebase and debug production issues at 6am. However, we do this repeatedly, every time we switch jobs. Contexts are different, business, issues and tech stacks are different. Yet, we always succeed. Leetcode should be the same: just a crap you have to shove down for a few months before interviewing and then forget about. It's not pleasant, but, if you can debug prod issues with ease, a few relaxed months doing some closed-form problems that repeat themselves over and over should be _doable_.
- Not all companies require technical interviews based on Leetcode.
In the end, the weight of: effort put in vs. company reputation vs. salary will end up dictating what you will be able to (or want to) apply for and work hard for.
I personally am on your boat: hate leetcode, suck at it 100%, but, I've accepted that there are many, many great companies which have fair and representative interview processes and still allow you to do meaningful work. You know, the companies you've never heard about on the internet in your local area or city? Yep, those ones.
I believe that this kind of "self-pity" or claiming that the entire industry sucks, is broken, needs Leetcode is a bit too much. Sure, some very high stakes companies do it, but, again, those will attract the engineers who have the willingness, perseverance and skill to power through those problems (plus system design too!!) and get the job. It's a skill. The more conscious effort you put into it, the better you will become.
The real issue is then losing sight of the forest for the trees: the real work begins once you are hired. I don't know if this process truly finds _better_ candidates in average... But, imo, it doesn't need to: there will be extremely smart people who will simply stay away out of these types of processes and that's totally fine, as it keeps the talent pools balanced and creates super cool and interesting work environments and projects centered around "the other 99%" of companies.
When I first read this I assumed sarcasm and moved on, but later it seemed odd as the tone of the article isn't very sarcastic overall.
If this wasn't sarcastic then I disagree 1000%. Code should be much easier to read than write. The only code I've come across that I'd put as harder to read than write is a few cases of just terribly written code. They were the exceptions, not the standard.
If you are a junior developer you very well could write code that is harder to read than write. Being junior that is to be expected as you need to learn these skills. If you are past junior and your code is harder to read than write you need to rethink your profession as you are bad at what you do.