<![CDATA[RSS Feed: https://ericrallen.dev/]]>https://ericrallen.devGatsbyJSWed, 02 Feb 2022 13:38:57 GMT<![CDATA[How I Interview Developers]]>https://ericrallen.dev/blog/how-i-interview-developers/https://ericrallen.dev/blog/how-i-interview-developers/Sat, 29 Jan 2022 21:15:07 GMT<p>I'd like to talk about interviewing.</p> <p>I know what you're thinking:</p> <blockquote> <p>Another blog post about hiring developers? Don't we have enough of those already?</p> </blockquote> <p>We probably do, but I've spent a lot of time on both sides of the interview table lately and I get asked about interviewing often enough that I thought I should try to consolidate some of my thoughts and share them here.</p> <p><strong>Disclaimer</strong>: This post only reflects my personal approach to interviewing and does not necessarily reflect the thoughts of any past, present, or future employers.</p> <h2>Why Might You Consider Listening to Me?</h2> <p>If you don't know me (thanks for reading this, internet stranger!), you're probably also wondering why I think I'm qualified to talk about this subject. </p> <p><strong>Note</strong>: If you don't care about any of that and just want to see what questions I ask, you can skip to <a href="#my-interview-questions">My Interview Questions</a>.</p> <p>I have interviewed well over a thousand developers for front end and full stack positions in my last few roles - one role in particular involved over 500 interviews over the course of a year for positions across various front end teams and physical locations - 60 of those were in a single week during a "hiring blitz."</p> <p>As much time as I've spent interviewing candidates, I've spent even more time reading about interviews; talking about interviews with other developers, recruiters, managers (pretty much anyone who will talk with me about them); and refining my approach. Several of my employers have also had extensive interview training related to <a href="https://www.indeed.com/career-advice/interviewing/how-to-prepare-for-a-behavioral-interview">behavioral interviewing</a> and <a href="https://www.linkedin.com/pulse/mega-blog-mini-guide-inclusive-recruitment-dana-kohava-segal/">inclusive interviewing</a>, though I am by no means an expert in either.</p> <p>At this point in my career, I feel confident saying that I am a good interviewer. Candidates seem to have a good experience - so much so that I've even received thank you messages from candidates that we didn't end up hiring.</p> <p>Here's an actual message I received from a candidate we did not hire after an interview in 2018:</p> <blockquote> <p>Hey! Thanks for the swell interview experience the other day! :)</p> </blockquote> <p>I share all of this with you not to inflate my own ego, but to hopefully establish some credibility with you and show you that I've been putting in the work when it comes to interviews.</p> <p>If you still aren't sure about me, that's cool - I get it. I have provided some links to great posts from lots of other people you might want to listen to instead in <a href="#further-reading">Further Reading</a>.</p> <p><strong>Disclaimer</strong>: I do have to confess that I wasn't always a good interviewer. In fact, I started out as a pretty bad one who fumbled through dozens of interviews before starting to understand there was a problem and wanting to fix it. If you're one of those unlucky candidates I interviewed early on, I'm sorry - hit me up if you ever want help preparing for another interview, a resume review, or just to tell me how bad I was at it. If I have interviewed you recently and you want to refute my assertions that I'm a good interviewer, feel encouraged to reach out - I genuinely want to hear from you.</p> <h2>The Interview</h2> <p>I prefer to schedule one hour if the candidate has that much time free, but this same interview can be performed in 45ish minutes with some practice on knowing how long you can let a candidate take to answer and how long you can take to respond to questions, but you may have to cut out a few things.</p> <p>This can also be condensed to 30ish minutes once you've got a really good feel for the timing of everything, but it leaves significantly less time for conversation and for the interviewee to ask questions, and ultimately provides a less optimal experience for everyone involved. Shorter interview windows generally leave the candidate with less time to ask their own questions. I always prefer to schedule a longer interview and end early if we're both out of questions than to schedule a short one and end with either of us having unanswered questions.</p> <p>While this isn't necessarily always the order or the exact wording of the questions I ask, what I'm outlining below is pretty close to the interview experience that every developer <em>should</em> have with me.</p> <p>Some roles or candidates involve digging into other topics a little more deeply or a candidate's answer may provide an interesting segue to learn more about them or may answer another question I was going to ask, etc. This means things change in small ways here and there, but the goal is to give everyone a similar experience that helps enable them to feel comfortable and present the best version of themselves. Interviews are already stressful situations (even for experienced interviewees) so there's no need to push anyone towards a panic attack.</p> <p><strong>Aside</strong>: I did actually have a candidate start to have a mild panic attack once - it was during that "hiring blitz" I mentioned earlier. It all turned out okay, but it really solidified for me just how stressful these things can be.</p> <p>While you can't always avoid it, I try not to take too many notes during the discussion. Just some high-level bits and then I flesh them out after. You really want to engage with the candidate as another human being and that requires listening and actively participating in the conversation. If something feels really important and you want to make sure you capture it, ask the candidate if they are okay pausing for a few seconds so you can write it down correctly and then get back to the conversation.</p> <h2>My Interview Questions</h2> <p><a id="my-interview-questions"></a></p> <p>I break a basic interview into roughly 6 parts:</p> <ol> <li> <p><strong>Introduction</strong> (<em>1-2 minutes</em>): set expectations</p> <ul> <li>Make sure it's still a good time and the candidate is free for the scheduled duration. You should also find out if they have a hard stop at the end and let them know if you do - sometimes interview discussions go out of the original timebox and that's okay if it's a good conversation and interviewer and interviewee are equally engaged.</li> <li>Basic introduction: just your name, role, and how long you've been with the company; anything more is wasting time - the candidate can ask if they are curious.</li> <li>This will be a conversational interview; questions, follow-up questions, and back and forth discussion are all encouraged - due to time constraints, we may need to move on from a topic, but we can circle back or follow up in email.</li> <li>There are no right or wrong answers.</li> <li>There will be time for their questions near the halfway point and again at the end.</li> <li>Don't hesitate to ask for clarification or more explanation.</li> <li><strong>Protip</strong>: Let them know upfront if you might have to mute a bunch because your dog somehow knows when you're interviewing and sometimes decides to be as annoying as possible during interviews</li> </ul> </li> <li> <p><strong>Interviewer Questions Round 1</strong> (<em>15-30 minutes</em>): This section has some easy getting started questions and then some specific behavioral interview questions.</p> <ol> <li> <p>Tell me briefly about a project you've been working on in the last 6-12 months. What tech stack have you been using?</p> <ul> <li>There's no need to get into everything a candidate has done throughout their career - you've seen their resume and/or LinkedIn, right? - just get into what they've been doing lately as that's generally the most relevant.</li> <li><strong>Protip</strong>: You may need to stop the candidate if they go too long on this one; about 5 minutes should be the upper bound, but 2-3 minutes is ideal.</li> </ul> </li> <li> <p>What kind of role are you looking for? Are there any other experiences you'd like to highlight that you think would make you successful in that role?</p> <ul> <li>This gives them a chance to describe what they are looking to do in their next role and also gives you a deeper dive into any other experience they have that might be relevant.</li> </ul> </li> <li> <p>What technologies are you looking to work with? Are there any you would specifically like to avoid working?</p> <ul> <li>Avoiding some tech is totally okay. Sometimes a specific language, framework, etc. just isn't our thing. I avoid Java and Ember because I just don't really like or fully grok them.</li> </ul> </li> <li> <p>Tell me about a project where you feel like you really succeeded. What about your contribution to that project made it so successful?</p> <ul> <li>Let them tell you about that time they totally crushed it. This is a chance to ask more questions and dig deeper into what they did, how they did it, and what they feel they are bringing to the table.</li> </ul> </li> <li> <p>Tell me about a project where you feel like you failed. What happened? What, if anything, would you do differently now?</p> <ul> <li>Everyone has struggled on a project at some point. It's okay to fail as long as you learn something from it. (Ask me how I know you always need to back up the production database.) This is a chance for the candidate to be a little vulnerable, show how they take (or shift) responsibility, and how they've learned from past mistakes.</li> <li>Some people won't feel comfortable talking about failure, so if someone gives you a non-commital answer you may need to probe deeper for an actual real-world example. Be sure to let them know that failure is a thing that happens to all of us and they don't have to incriminate themselves for taking down <code class="language-text">us-east-1</code>, but we want to hear about a situation where they learned from a mistake.</li> </ul> </li> <li> <p>Tell me about a conflict you had with a coworker, stakeholder, customer, etc. What happened? How did you resolve it? In hindsight, would you approach it differently?</p> <ul> <li>How do they approach conflicts? What do they do when they can't come to an agreement? No one wants conflict at work, but there are lots of times that we might disagree about how to approach solving some problem, how some business request degrades user experience, or how some user request is not possible given our current resources.</li> <li><strong>Protip</strong>: This could be a good time to reflect on how your current team approaches conflict and maybe briefly discuss it with the candidate in relation to their answer.</li> </ul> </li> </ol> </li> <li> <p><strong>Candidate Questions Round 1</strong> (<em>5-10 minutes</em>): This is a good time to shift gears and let the candidate ask some questions - remember this is as much a chance for them to interview the company as it is for the company to interview them.</p> <ul> <li>Engage as openly and honestly with the candidate as you can. Try not to ramble and to answer questions concisely. After you've done a lot of interviews, you'll start to refine the answers to certain questions and find that you've got certain responses ready.</li> <li><strong>Protip</strong>: To avoid rambling, sometimes I start a stopwatch and glance at it every so often while answering a question so I know how long I've been talking. Remember, this is the candidate's time to learn about the company, and the longer you spend answering one question the less time they have to ask other questions.</li> </ul> </li> <li> <p><strong>Interviewer Questions Round 2</strong> (<em>10-15 minutes</em>): This section gets into some more technical interview questions and also allows you a chance to dig deeper into any follow-up questions you want to ask based on anything that's been talked about so far.</p> <ol> <li> <p>Tell me about an interesting or particularly challenging problem you solved in the last 3-6 months. What made this problem interesting? How did you approach solving it?</p> <ul> <li>This gives the candidate another chance to show off their skillset and talk about it passionately. You can probe deeper into any specifics around this and just sort of talk about it with them a bit.</li> </ul> </li> <li> <p>Tell me about a tradeoff you had to make in the last 6-12 months. What were the options? How did you choose between them?</p> <ul> <li>A lot of what we do involves managing tradeoffs: performance vs readability, faster delivery vs future maintainability, abstraction vs repetition, etc. This is a chance to dig into how the candidate thinks about these things and how they navigate the often nebulous waters around this kind of decision-making.</li> </ul> </li> <li> <p><strong>Follow-Up Questions</strong>: if you have anything you want to expand on based on your conversation with the candidate so far, this is the time for that. Want to hear more about how they used AWS for a project? Did they mention navigating a rewrite at a large company and you want to hear more about the planning and execution? Dig in a little.</p> </li> <li> <p><strong>For Senior-ish Roles</strong>: Pretend that I'm a junior developer without much context and explain <code class="language-text">[insert topic here]</code> to me.</p> <ul> <li> <p>Some Example Topics (pick something relevant to the candidate's actual day-to-day work and previous experience, and, it should go without saying, but make sure you are comfortable with the topic):</p> <ul> <li><a href="https://launchdarkly.com/blog/what-are-feature-flags/">Feature Flags</a></li> <li><a href="https://www.redhat.com/en/topics/devops/what-is-blue-green-deployment">Blue/Green Deployments</a></li> <li><a href="https://www.optimizely.com/optimization-glossary/abn-testing/">A/B/N Testing</a></li> <li><a href="https://css-tricks.com/specifics-on-css-specificity/">CSS Specificity</a></li> <li><a href="https://developer.mozilla.org/en-US/docs/Glossary/Scope">Scope in JavaScript</a></li> <li><a href="https://www.freecodecamp.org/news/the-model-view-controller-pattern-mvc-architecture-and-frameworks-explained/">Model-View-Controller (MVC)</a>, <a href="https://www.raywenderlich.com/34-design-patterns-by-tutorials-mvvm">Model-View-ViewModel (MVVM)</a>, or some other pattern relevant to their past work or your codebase</li> <li><a href="https://en.wikipedia.org/wiki/Functional_programming">Functional Programming</a>, <a href="https://en.wikipedia.org/wiki/Object-oriented_programming">Object-Oriented Programming</a>, or any other programming paradigm that might be relevant to their past work or your codebase</li> <li><a href="https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment">Continuous Integration / Continuous Deployment (CI/CD)</a></li> <li><a href="https://www.splunk.com/en_us/data-insider/what-are-serverless-functions.html">Serverless Functions</a> (<a href="https://docs.aws.amazon.com/lambda/latest/dg/welcome.html">AWS Lambda</a>, <a href="https://docs.microsoft.com/en-us/azure/azure-functions/">Azure Functions</a>, <a href="https://cloud.google.com/functions/docs">Google Cloud Functions</a>, etc.)</li> <li><a href="https://www.cloudflare.com/learning/cdn/what-is-caching/">Caching</a></li> <li><a href="https://www.docker.com/resources/what-container">Containers</a></li> </ul> </li> </ul> </li> <li> <p><strong>For Junior-ish Roles</strong>: What language, library, framework, etc. are you looking forward to learning and working with in the near future? What tech is exciting to you right now?</p> </li> </ol> </li> <li> <p><strong>Candidate Questions Round 2</strong> (<em>remaining time minus 30 seconds to a minute</em>)</p> </li> <li> <p><strong>Wrap Up</strong> (<em>30 seconds-1 minute</em>)</p> <ol> <li>Inform the candidate of the process from here and about how long they should expect to wait before hearing back. I also always let them know that if there is a bottleneck in the process, it is almost certainly my fault and not the fault of our internal recruiters.</li> <li>Let them know that they can email you (or their recruiting contact) if they think of any more questions.</li> <li>Thank them for their time.</li> <li><strong>Protip</strong>: Take a few minutes after the interview to compile your initial thoughts and shoot them over to your recruiting partner. If you need to think on it a little more, save that email as a Draft and set a reminder for a couple of hours - hiring is crazy right now, if you wait too long, you could easily lose that candidate.</li> </ol> </li> </ol> <h2>Why This Approach</h2> <p>There are several benefits to this approach:</p> <ul> <li><strong>Human-Centered</strong>: It treats candidates as humans, and as equal participants in a conversation.</li> <li><strong>Hard to Game</strong>: There isn't really any coaching that can prepare someone for this interview. I've worked with a lot of recruiters and consulting firms over the years and sharing knowledge about interview questions always comes up when you're the interviewee. With these questions, you could do something like publish them on the Internet for everyone to see, and it would have no effect on the efficacy of the interview.</li> <li><strong>Enjoyable</strong>: I might be personally biased on this one, but as the interviewer, I enjoy this kind of conversation a lot more than pop quiz style interviews I've been asked to conduct in the past. As I mentioned already, candidates seem to enjoy this interview process, too.</li> </ul> <p>There are some possible drawbacks, too:</p> <ul> <li><strong>Time-Consuming</strong>: If you are in a high-throughput recruiting situation (at one point I was reviewing 30-40 resumes a day for dozens of open positions), you won't have the time to engage with each person at this level and might need to introduce something that creates a quicker filter before this kind of interview. You might also want to work on improving the quality of your filter at the application stage, resume review stage, and any initial recruiter call that might happen after a resume has been reviewed.</li> <li><strong>Not Directly Technical</strong>: You only learn as much about a candidate's technical ability as you are comfortable digging into during the discussion. Some people will maintain that you need to put a candidate through some kind of whiteboard question where they are put on the spot to write code in a context that is entirely unlike their normal work, and they <em>could</em> be right.</li> </ul> <h2>Further Reading</h2> <p><a id="further-reading"></a></p> <p>Here are some articles about interviewing that I've found insightful and some that have challenged my beliefs about interviewing, too.</p> <ul> <li><a href="https://qz.com/258066/this-is-why-you-dont-hire-good-developers/">This is why you never end up hiring good developers</a></li> <li><a href="https://www.joelonsoftware.com/2006/10/25/the-guerrilla-guide-to-interviewing-version-30/">The Guerrilla Guide to Interviewing</a></li> <li><a href="https://fossbytes.com/tech-job-interview-assess-performance-anxiety-instead-of-coding-skills-report/">Tech Job Interviews Assess Performance Anxiety Instead Of Coding Skills</a></li> <li><a href="https://www.jarednelsen.dev/posts/The-horrifically-dystopian-world-of-software-engineering-interviews">The Horrifically Dystopian World of Software Engineering Interviews</a></li> <li><a href="https://sockpuppet.org/blog/2015/03/06/the-hiring-post/">The Hiring Post</a></li> <li><a href="https://hiringsuccess.com/human-centered-design-is-the-key-to-better-hiring/">Human-centered design is the key to better hiring</a></li> <li><a href="https://fulcrum.lever.co/a-better-way-to-interview-software-engineers-fa9b5d2b5316">A better way to interview software engineers</a></li> <li><a href="https://leaddev.com/hiring-onboarding-retention/fixing-neutral-hiring-policies-stop-excluding-best-candidates">Fixing ‘neutral’ hiring policies to stop excluding the best candidates</a></li> <li><a href="https://thenewstack.io/how-to-make-tech-interviews-suck-less/">How to Make Tech Interviews Suck Less</a></li> <li><a href="https://www.freecodecamp.org/news/why-is-hiring-broken-it-starts-at-the-whiteboard-34b088e5a5db/">Why is hiring broken? It starts at the whiteboard.</a></li> <li><a href="https://www.hrdive.com/news/is-culture-fit-code-for-bias-recruiters-must-be-wary-experts-say/507272/">Is 'culture fit' code for bias? Recruiters must be wary, experts say</a></li> <li><a href="https://karat.com/blog/post/inclusive-hiring-best-practices-for-software-engineering-leaders/">Inclusive hiring: 5 best practices for software engineering leaders</a></li> <li><a href="https://par.nsf.gov/servlets/purl/10139106">Hiring is Broken: What Do Developers Say About Technical Interviews?</a></li> <li><a href="https://glenmccallum.com/2019/05/14/senior-developers-rejected-jobs/">Senior Developers are Getting Rejected for Jobs</a></li> <li><a href="https://blog.plan99.net/in-defence-of-the-technical-interview-966f54a58927">In defense of the technical interview</a></li> <li><a href="https://www.techrepublic.com/article/coding-interviews-are-terrible-can-we-make-them-better/">Coding interviews suck. Can we make them better?</a></li> <li><a href="https://medium.com/@Johnmont_67962/rethinking-how-we-interview-in-microsofts-developer-division-8f404cfd075a">Rethinking how we interview in Microsoft’s Developer Division</a></li> </ul><![CDATA[Introducing @RSS bot]]>https://ericrallen.dev/introducing-rss-bothttps://ericrallen.dev/introducing-rss-botSat, 25 May 2019 12:50:06 GMT<p>We have a lot of developers working in different places at different times at <a href="https://skookum.com/">Skookum</a>. People are sharing interesting, useful, and/or important articles at various times throughout the day. Unfortunately a lot of that content is missed by the majority of developers.</p> <p>Enter <a href="https://www.rssbot.app/">@RSS bot</a>, a Slack bot that will generate an RSS feed of links shared in channels it is invited into.</p> <p>Every time a user shares a link in a channel it is listening to @RSS bot will ask that user if they would like to add the link to the channel's RSS feed, so users have control over what appears in their RSS feed.</p> <p>Are you tired of missing links shared in your Slack channels?</p> <p><a href="https://www.rssbot.app/">Get @RSS bot today</a>!</p><![CDATA[Senior Developers]]>https://ericrallen.dev/blog/senior-developershttps://ericrallen.dev/blog/senior-developersSun, 03 Mar 2019 14:19:16 GMT<p>While I don't care about title inflation or title absurdity, I do care about what the people doling out and receiving some of these titles assume that they mean.</p> <p>One title modifier, in particular, Senior, is important to me, not because I have it, but because without people who embody its <em>Core Principle</em> I wouldn't be where I am today.</p> <p>I wouldn't be able to help others get here if that principle hadn't been instilled in me.</p> <h2>Meaningless Titles</h2> <p>In an industry where two people can do the same job, but one is an Engineer while the other is a Ninja, I think it's safe to say that our titles are meaningless.</p> <p>Which is good. You could spend your whole career chasing ever-loftier titles. That way lies madness. Unfortunately, a lot of companies either use title changes in lieu of pay raises, or tie pay to titles in a way that requires doling out new ones or adding modifies (How many of you are a [Title] II or a [Title] III?) to them every 12-18 months.</p> <p>When I worked for Bank of America, my title was so long that they stripped almost all of the vowels from it and it also featured a hyphen (-) and a semicolon (;). Add to that the fact that basically every full-time employee who writes code is a "Vice President" and you end up with a silly VP title that means absolutely nothing and is impossible to explain to anyone.</p> <p>I don't have any solution for this insanity in our industry, and it's not really important to me that we change it, but I wanted to make sure that we covered how meaningless we've made all of our titles before I explain why Senior is actually important and why the meaninglessness we've created could lead to an industry-wide problem.</p> <p>It's also worth mentioning that the Engineer title is ridiculous given the generally ephemeral and fragile nature of what we build and the lack of any oversight or credentialing body, but that's a topic for a different rant.</p> <h2>The Senior Core Principle</h2> <p>A Senior Developer (or Engineer, Ninja, Rockstar, etc.) is not just someone who has more experience or one who is the lead on a team or a project.</p> <p>The Senior title comes with a vitally important responsibility: <strong>to make those around you better Developers</strong>.</p> <p>That responsibility is the <em>Core Principle</em> of the Senior and it is one that should span our entire industry. It is rarely listed in job descriptions, but it should be.</p> <p>What we see an alarming amount of today is Developers being put into Senior positions as the next logical step in their career progression or as some reward for sticking around. While this won't have a huge immediate impact, it will radiate through the following generations of developers and amplify the effect over time.</p> <p>When a Senior who embodies the <em>Core Principle</em> teaches the next generation of Senior developers, they go on to embody that principle and instill it in the following generation, too. Life is good.</p> <p>When a Senior who only has the title doesn't instill that principle in the next generation - or, even worse, instills the idea that Seniors are arrogant and unhelpful - then that idea trickles down and more arrogant, unhelpful Senior Developers will be created. Here there be dragons.</p> <p>If that eventually becomes the norm, how much more toxic would Developer culture become? How hard would it be for someone to transition into the field? How hard would it be for Junior developers to grow into Senior developers?</p> <p>If you're a Senior right now: <strong>What are you doing to make those around you better Developers?</strong></p> <h2>My Senior Philosophy</h2> <p>My approach to embodying this <em>Core Principle</em> involves several things, but the primary directive is trying to make time for other Developers to ask questions, talk through solutions, vent about clients, ask for code reviews, and ask about career advice.</p> <p>I always caveat that my code reviews and my advice may not always be the best solution, but they are what I would do and then provide the reasoning behind that decision. I've found that it helps people learn when you show your work, and it also invites the other Developer to question your thought process and provide their own insights on things you might be overlooking.</p> <p>In the service of making myself and other Developers better at what we do, I organized a few initiatives during my time at <a href="http://skookum.com/">Skookum</a> and continue to do similar things at every other place I work.</p> <ul> <li><strong>Monthly Coding Challenges</strong>: Every month we will tackle a new coding challenge and help keep each other motivated in a dedicated <code class="language-text">#coding-challenges</code> channel in Slack. Each challenge is different and allows a wide range of Developers to hone their skills.</li> <li><strong>Monthly Developer Presentations</strong>: Every month we will invite one of our developers to present a Web-related topic to the rest of the Development Team. Hopefully, this helps Developers iron out presentations for Meetups and conferences while also giving the rest of us some new perspectives.</li> <li><strong>Bi-Weekly Video Series</strong>: Every 2 weeks we watch a Web-related video and discuss it as a group. This was previously an initiative, but the developer who started it left the company, so a colleague and I resurrected it. This gives us a chance to experience conference talks we would otherwise miss out on and also facilitates conversation between Developers at all levels.</li> </ul>