{"id":111,"date":"2019-04-01T00:40:37","date_gmt":"2019-04-01T00:40:37","guid":{"rendered":"http:\/\/jwonsever.com\/wp\/?p=111"},"modified":"2019-07-01T04:30:16","modified_gmt":"2019-07-01T04:30:16","slug":"what-makes-a-good-interview","status":"publish","type":"post","link":"https:\/\/jwonsever.com\/wp\/?p=111","title":{"rendered":"What makes a good interview?"},"content":{"rendered":"<p>My thoughts on how to conduct practical interviews for Software Engineering candidates.<\/p>\n<hr \/>\n<p><span style=\"font-weight: 400;\">Any professional software developer has been through it, standing in front of a whiteboard reciting some algorithm you are supposed to have memorized, that you have never once used for anything in your career. \u00a0Obviously, that isn\u2019t a good test of ability. Classical software interviews are <\/span><a href=\"https:\/\/triplebyte.com\/blog\/how-to-pass-a-programming-interview\"><span style=\"font-weight: 400;\">clearly a different skill<\/span><\/a><span style=\"font-weight: 400;\"> than software engineering. \u00a0<\/span><a href=\"https:\/\/twitter.com\/mxcl\/status\/608682016205344768\"><span style=\"font-weight: 400;\">Talented engineers get rejected for silly reasons<\/span><\/a><span style=\"font-weight: 400;\">. \u00a0\u00a0How do we make this better?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The first problem, to me, is <\/span><a href=\"https:\/\/sockpuppet.org\/blog\/2015\/03\/06\/the-hiring-post\/#interviews\"><span style=\"font-weight: 400;\">untrained interviewers<\/span><\/a><span style=\"font-weight: 400;\"> misinterpreting the idea that <\/span><a href=\"https:\/\/triplebyte.com\/blog\/how-to-interview-engineers\"><span style=\"font-weight: 400;\">false negatives (rejecting good candidates) are \u00a0better than false positives (hiring bad candidates)<\/span><\/a><span style=\"font-weight: 400;\">. \u00a0This has been a topic of discussion for a <\/span><a href=\"https:\/\/www.joelonsoftware.com\/2000\/03\/23\/the-guerrilla-guide-to-interviewing\/\"><span style=\"font-weight: 400;\">very long time<\/span><\/a><span style=\"font-weight: 400;\">, probably since the early days of computer science. \u00a0\u00a0I agree that an incompetent engineer is more of a liability than an asset, for many reasons. \u00a0\u00a0What I don\u2019t think is right is what we call a \u201cfalse positive\u201d. To explain, we need to define what a good candidate is, and then infer what an interview should entail.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">There is a lot more to a bad hire than just poor technical skill. \u00a0Poor personality, poor communication, and an inability to adapt are all far more damaging traits than not being a top notch programmer. \u00a0Poor personality and communication negatively affect other engineers morale and make their jobs more difficult and stressful. Inability to adapt leads to dated ideas and eventually your technology falling behind the competition. \u00a0\u00a0Quickly summarizing, <\/span><b>a good candidate must be technically skilled, adaptable, communicative, and personable. \u00a0<\/b><span style=\"font-weight: 400;\">I\u2019ve found that <\/span><a href=\"https:\/\/github.com\/poteto\/hiring-without-whiteboards\"><span style=\"font-weight: 400;\">many companies<\/span><\/a><span style=\"font-weight: 400;\"> ignore some or all of these factors, often relying completely on random technical puzzles to determine who to hire. \u00a0You would be better off hiring with resumes on a dartboard.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">I\u2019ve recently gone through the process myself and come to some conclusions based off my experience. It\u2019s not absolute, but I\u2019ve been on both sides of the interview table and I think I\u2019ve found \u201cMust Do\u2019s\u201d, \u201cCould Do\u2019s\u201d, and \u201cMust Not Do\u2019s\u201d in an interview that will make interviewers better judges of candidates.<\/span><\/p>\n<h3><\/h3>\n<h2><span style=\"font-weight: 400;\">Must Do\u2019s<\/span><\/h2>\n<p><b>Technical Skills <\/b><span style=\"font-weight: 400;\">&#8211; The candidate must write code, on a computer, using any resources they would normally have. \u00a0I don\u2019t think you can interview an engineer without asking them to code, but the code should be simple, straightforward, and relatively easy to manage in the time allotted for the interview. \u00a0In this part of the interview, correctness and completion are not important, it\u2019s much more important that they know how to use the tools at their disposal, the basics of programming language, and how to consume information from the internet.<\/span><\/p>\n<p><b>Adaptability <\/b><span style=\"font-weight: 400;\">&#8211; The candidate could show they can pick up a project and understand what it is doing. \u00a0This may be redundant if the technical skill question(s) are exceptionally well written, but the point is clear. \u00a0The candidate should be able to show they can learn and understand something unfamiliar and parse the information, quickly.<\/span><\/p>\n<p><b>Communication<\/b><span style=\"font-weight: 400;\"> &#8211; The candidate must explain, in detail, the design of a project they have built. \u00a0They must be able to explain the design decisions they have made. They must explain what alternative designs were considered and explain the trade off well. \u00a0This interview is about communication, not the choices they made. If they can explain themselves rationally that is more important than if you agree with their design decisions.<\/span><\/p>\n<p><b>Personality <\/b><span style=\"font-weight: 400;\">&#8211; The candidate must show they are easy to get along with. \u00a0He must be personable, driven, and empathetic. The candidate must interview with the team he will be working with, and meet his future manager, PM, and peers. \u00a0You should <\/span><b>never <\/b><span style=\"font-weight: 400;\">have to introduce a new hire to his new manager. \u00a0The fact that companies do this regularly baffles me.<\/span><\/p>\n<h3><\/h3>\n<h2><span style=\"font-weight: 400;\">Could Do\u2019s<\/span><\/h2>\n<p><b>Specific Technology<\/b><span style=\"font-weight: 400;\"> &#8211; Tl:dr, If you are interviewing for a DBA, ask a database question. \u00a0\u00a0Ideally, this shouldn\u2019t be necessary, as most engineers are smart enough to pick things up on the fly. \u00a0I would suggest only doing this if the role requires daily use of whatever specific technology this role is. \u00a0I\u2019ve seen UI interviews for engineers who will never once touch JS in their job. I\u2019ve also seen SQL interviews for a React JS frontend only role. \u00a0That is not useful.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This should be made very clear before bringing candidates in, otherwise you are wasting both your time and the candidates time.<\/span><\/p>\n<p><b>Public Presence \/ Evangelism<\/b><span style=\"font-weight: 400;\"> &#8211; Ask about a public <\/span><a href=\"https:\/\/github.com\/\"><span style=\"font-weight: 400;\">GitHub profile<\/span><\/a><span style=\"font-weight: 400;\">, or open source contributions. \u00a0Maybe blog posts they have written. \u00a0Not every engineer is in a position they can do these things, but if it exists it\u2019s a great resource to the interviewer. It lets a candidate show his communication skills, his passions, and his philosophy.<\/span><\/p>\n<p><b>Server Architecture<\/b><span style=\"font-weight: 400;\"> &#8211; This should be covered in most cases by the technical communications section above. \u00a0I know the modern web design question is extremely popular nowadays, but the answer is extremely formulaic and not a good judge of an engineer. \u00a0REST Api + Normalized DB tables + Load balancer \/ App server \/ DB \/ Queue, etc&#8230;. It\u2019s something that can be easily practiced and doesn\u2019t actually tell you much about the engineers knowledge.<\/span><\/p>\n<h3><\/h3>\n<h2><span style=\"font-weight: 400;\">Must Not Do\u2019s<\/span><\/h2>\n<p><b>Irrelevant Technical Skills<\/b><span style=\"font-weight: 400;\"> &#8211; One of my interviews in my last job search was a bunch of math and physics brain teasers. \u00a0This is completely not relevant to the software engineering job at almost any company I can think of. \u00a0It\u2019s extremely important not to waste time vetting a candidate on something that does not matter for their job. \u00a0As an interviewer, make sure you are actually gathering useful information every minute of the interview. You do not have enough time to waste on irrelevant skills.<\/span><span style=\"font-size: inherit;\">\u00a0\u00a0<\/span><\/p>\n<p><b>Large Homework projects <\/b><span style=\"font-weight: 400;\">&#8211; Do you want an engineer to be biased because he spent more time on the homework project than the next guy? \u00a0If you want to give a project, it should be both timed, and less than 2 hours. You do not want to bias against people who do not have time to spend 30 hours on a mock website for you. \u00a0It will probably scare the talent away anyways.<\/span><\/p>\n<p><b>Tricks<\/b><span style=\"font-weight: 400;\"> &#8211; If your problem can be found in <\/span><a href=\"http:\/\/www.crackingthecodinginterview.com\/\"><span style=\"font-weight: 400;\">CRACKING the CODING INTERVIEW<\/span><\/a><span style=\"font-weight: 400;\"> it\u2019s probably not a good question. \u00a0If it requires an algorithm the candidate learned 10 years ago, it\u2019s probably not a good question. \u00a0Nothing you ask should have a \u201ctrick\u201d or an \u201ca-ha\u201d moment to figure out the solution. By doing this all you do is bias towards people who have spent time studying for the interview, and biasing away from people who actually spend their time developing software. <\/span><\/p>\n<p><b>Veto<\/b><span style=\"font-weight: 400;\"> &#8211; Never let one engineer veto the hiring decision in an onsite interview. \u00a0This is to protect the interviewer from their own emotions. I\u2019ve seen an interview say no before they even meet the candidate. \u00a0If you see an interviewer doing this regularly it may be time to take them out of the interview panel.<\/span><\/p>\n<p><b>Single Answer Questions <\/b><span style=\"font-weight: 400;\">&#8211; Do not ask an abstract question, perhaps about a product decision, then fail the candidate because they did not answer how you would have. \u00a0Separate ways of thinking are healthy and should be encouraged, not shunned.<\/span><\/p>\n<h3><\/h3>\n<h2><span style=\"font-weight: 400;\">Conclusion<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">I\u2019ve seen that many companies, particularly larger companies, do not do a single thing in the \u201cMust Do\u201d list. \u00a0It\u2019s very easy to get lazy and forget what the point of an interview is, and it\u2019s also very easy to use unskilled and untrained interviewers as the company grows. \u00a0I understand. But you must fight that. It\u2019s important to train the interviewer well, using well defined standards for your company. It\u2019s important to keep the interview process predictable, consistent, and applicable. \u00a0Do you do everything in the \u201cMust Do\u201d list?<\/span><\/p>\n<p><span style=\"font-weight: 400;\">As for the candidates out there, just remember that the process is a little broken, very inconsistent, and there is no way to get every job you apply for. \u00a0Practice, play the game, and don\u2019t get too sour when you come across a bad interview. There are still more CS jobs out there than candidates to fill them, so there should be a place for you.<\/span><\/p>\n<p><b>References<\/b><\/p>\n<p><a href=\"_wp_link_placeholder\" data-wplink-edit=\"true\">http:\/\/stevehanov.ca\/blog\/resume_comic.png<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/poteto\/hiring-without-whiteboards\"><span style=\"font-weight: 400;\">https:\/\/github.com\/poteto\/hiring-without-whiteboards<\/span><\/a><\/p>\n<p><a href=\"https:\/\/sockpuppet.org\/blog\/2015\/03\/06\/the-hiring-post\/\"><span style=\"font-weight: 400;\">https:\/\/sockpuppet.org\/blog\/2015\/03\/06\/the-hiring-post\/<\/span><\/a><\/p>\n<p><a href=\"https:\/\/techcrunch.com\/2015\/03\/21\/the-terrible-technical-interview\/\"><span style=\"font-weight: 400;\">https:\/\/techcrunch.com\/2015\/03\/21\/the-terrible-technical-interview\/<\/span><\/a><\/p>\n<p><a href=\"https:\/\/salesforce.quip.com\/2UKIAhvKyZf0\"><span style=\"font-weight: 400;\">https:\/\/salesforce.quip.com\/2UKIAhvKyZf0<\/span><\/a><\/p>\n<p><a href=\"https:\/\/triplebyte.com\/blog\/how-to-pass-a-programming-interview\"><span style=\"font-weight: 400;\">https:\/\/triplebyte.com\/blog\/how-to-pass-a-programming-interview<\/span><\/a><\/p>\n<p><a href=\"https:\/\/triplebyte.com\/blog\/how-to-interview-engineers\"><span style=\"font-weight: 400;\">https:\/\/triplebyte.com\/blog\/how-to-interview-engineers<\/span><\/a><\/p>\n<p><a href=\"http:\/\/www.crackingthecodinginterview.com\/\"><span style=\"font-weight: 400;\">http:\/\/www.crackingthecodinginterview.com\/<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>My thoughts on how to conduct practical interviews for Software Engineering candidates. Any professional software developer has been through it, standing in front of a whiteboard reciting some algorithm you are supposed to have memorized, that you have never once used for anything in your career. \u00a0Obviously, that isn\u2019t a good test of ability. Classical<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-111","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=111"}],"version-history":[{"count":9,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/111\/revisions"}],"predecessor-version":[{"id":185,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/111\/revisions\/185"}],"wp:attachment":[{"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jwonsever.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}