Tag: interviewing

  • How I Interview

    How I Interview

    Danbo and Danbo
    Credit: Flickr / Takashi Hososhima

    I have interviewed a lot more people than I have myself done interviews. This is mostly because I am terrified of interviewing. But I also used to be extremely nervous to be the interviewer. It’s a lot of pressure to try and evaluate someone in 30-60 minutes, and it matters a lot to me to be as good an interviewer as I can. I’m not claiming that I am a good interviewer, just that it is something that I really care about doing as well as I can, and work really hard to be better at.

    This is the process that I follow.

    Before

    I personally do not give more than a cursory glance at resumes. There are two reasons for this. Firstly, and most importantly, I want to go in without preconceptions. Secondly, I found that when I studied resumes I would frequently start to worry that I wasn’t qualified to interview that person, which would put me in a bad headspace for the interview itself. Obviously for some kinds of interviews this isn’t possible, but for technical interviews, or behavioural based interviews (such as I did for a not-for-profit organisation I’m involved with) I haven’t felt the lack of information.

    When someone is job hunting, an interview is probably one of (if not the) most important thing they are doing that day. I feel like it is only fair to reflect that in your schedule as an interviewer – jamming someone inside a 30 minute window is not cool. In as much as I have control over scheduling, I leave an hour before and at least an hour (preferably 2) after open.

    I don’t think I am naturally a warm person, but as an interviewer I try to do my best impression of one. I found The Charisma Myth helpful for articulating what this means, but essentially it’s about being in a state of goodwill towards the world in general but particularly the person you are interviewing. This is a mental state, but also a physical one – being fed, hydrated, and having slept, for example. For interviews, I think this is about entering the interview in a state where you expect the interviewee to be a smart, capable person who can do the job that you are interviewing them for.

    The Question

    These comments apply more to technical interviews.

    When choosing an interview question, I think it’s important that everyone can achieve something with it. This doesn’t mean that it’s trivially easy, it means that there are gradations of an answer. It shouldn’t be all or nothing, genius or fail. Someone who is incredible needs to be able to showcase that, but someone who doesn’t really have the knowledge or the experience to give even an okay answer needs to be able to achieve something.

    I firmly believe that questions should be domain free where possible. This is because the interviewee is already nervous, and springing an unfamiliar domain on them is liable to induce a state of panic. The classic response to this is that it’s just an example, but if it doesn’t need to be tied to a specific thing, why tie it? For example – any question that gives a video game as an example. No. Anyone who doesn’t play games is liable to be intimidated by that, or need extra time to understand it.

    Esoteric knowledge and gotchas, no. If a question requires someone to know some deep detail of the JVM or GCC, it’s a bad question.

    At the Beginning

    Be warm. Ask them how they are. Mean it.

    Be considerate. Ask if it’s still a good time. Mean it.

    Explain what is going to happen. How long it will take, what you’re going to do, if there will be time for their questions at the end, anything else they should know. For example, when I do phone interviews I always explain that typing is me taking notes (not doing email or coding!)

    During

    Conversation over Interrogation

    Some interviewers seem to take the approach that they are a standardised test in human form. I favour conversation over interrogation. There are two parts to this – the first is to encourage them to talk, not just to answer. I think part of this is taking a conversational tone in your questions, and encouraging the interviewee to elaborate. The second thing is that it’s weirdly unnatural to spend an hour with someone and never reveal anything about yourself. So try and be a bit human. If they mention a place, and you went there for some reason, say so. If they pick a language you aren’t familiar with, express interest and say (if it’s true) you’ve been meaning to try it. As an interviewer, you shouldn’t be dominating the conversation. But if they leave feeling that they know no more about you than they did when they entered, you probably didn’t seem that friendly, or make your interviewee feel very comfortable.

    Hinting is an Art

    The thing I still find hardest is when to hint, and when to wait patiently. Conversation is 2-way though, and if someone isn’t clear on something it could be their understanding… or it could be your communication of the problem. One thing to start with is to assume that your communication is at fault, and clarify that they understand what you are asking. The second thing is to be very general, and get more specific. E.g. Ask first “are you sure you’ve covered all cases?” then “what if the number is negative?”

    Don’t Twist the Knife

    When I co-organised an interview training event for women students, one of the things I warned interviewers about was that if their interviewee cried I would hunt them down. As I did this, the men in the room mostly looked at me like I was being completely unreasonable. A day after the event, one of them pinged me to tell me that it had been really useful as a warning – because he had known that it could go that badly, he was able to prevent that from actually happening. So when his interviewee stood up to walk out of the room, he was able to redeem the situation. I was really pleased that he had handled that situation, and really happy that he felt he could tell me about it.

    It hasn’t happened often, but there have been a couple of cases where someone did so badly on the interview that I switched from trying to evaluate them (I had all the information I needed) to trying to make them feel OK about it. Giving them softball questions that they could answer, or coaching them through the question step by step. I think this is especially important when you are later in a day of interviews, and those interviews have been going badly. Before you give up on someone, it’s important to be sure. Plenty of people are nervous at first and warm up as it goes on. I can think of 2 – extreme – examples in well over 50 interviews.

    After

    Thank them. Mean it.

    Make sure they know what is happening next. If they have another interview, see if they need a break or want to get water.

    Feedback

    I like to write up my feedback immediately, but definitely that same day. I think it’s important to have a fresh memory of what happened. It’s also the kind of task that will weigh on me and be on my mind if left undone.

    Typically feedback gets written up under headings, although I usually include my complete notes somewhere. Often I start with an idea of what should go in these sections, but I don’t completely trust those initial ideas, and instead go through my notes again. I often note times in my notes, so I have times to refer to instead of feelings about how long things took.

    Once I’ve written my conclusions I go through and comb them for bias. Years of reading original research and writing about and being a woman in tech myself have given me an attuned antenna to subtly gendered or racial comments in feedback. For example, the use of shy. Suggesting someone is more junior than they actually are. Penalising someone for not being confident enough… or for being too confident. How to de-bias your feedback could be a book, but one thing that you can try is going through your feedback with someone (a colleague) who won’t be involved in making that decision, from that perspective. If I’m not confident that something is unbiased, I tone it down or just delete it. It is possible that this makes my feedback for underrepresented minorities slightly more positive than is deserved, but given the evidence about the level of bias we have, I 1) doubt this is actually true and 2) expect that other people will compensate because most people do not go to these lengths.

    Terribly, in tech this idea of “culture fit” is often mis-defined as liking that person. I once saw feedback which said that someone was a good culture fit because they “liked board games and sci fi”. Sometimes disliking is relevant – for example I have disliked men I have interviewed because they made sexist or patronising comments to me. But in a short time period, this is usually down to the level of connection you felt with that person, which is fully 50% on you (more, the person with the most power in a relationship has the most influence over it – this applies to managers and directs, and interviewer to interviewee). And secondly can be really influenced by things like language barriers. So my final pass of my feedback is to make how much I liked the person less relevant, and make sure that I haven’t let what I wanted to see influence what I did see. If I didn’t feel like we connected, I don’t want that to show up in my feedback. The level of connection someone creates in an interview doesn’t really have a lot of bearing on how they will work with people over time. They might have come across as quiet or a little reserved, but you don’t know what they are like when they warm up – so don’t assume you do.

    Closing Thoughts

    Every so often I read these posts about how interviewing is broken, and actually what we should be doing is something else entirely. And I don’t really believe in, or advocate for the standard industry process of whiteboard interviews or whatever.

    But I do wonder how big a problem is the process we follow at a macro level, compared to the attitude we take as individuals.

  • Round 2 @ Google

    Google LHC Logo
    Credit: flickr / mtlin

    If you follow my Twitter, I may have already given away the ending to this! But as a continuation from my first round, here is my experience for my second (final) on-site with Google two weeks ago.

    What Did I Do To Prep?

    Things were a little hectic with the end of Extreme Blue and our trip to New York, and my plan to read The Algorithm Design Manual (Amazon) on the bus fell apart somewhat after the bus broke down, I went 5 hours without water in the heat and had a small breakdown. There was (apparently) a hilarious ending that I don’t remember in it’s entirety, which I won’t be sharing on the internet…

    That said, I did make it through section 1 which was really helpful and the book actually contains suggested interview questions – great for preparation. I also read more of Java(TM) Puzzlers (Amazon) and started Making it Big in Software (Amazon – good read, mostly for once you’ve made it through the interview though I think).

    How Was It?

    It was fun. I got to hang out with smart people and code for four hours! My first interviewer was a woman, who was super nice and that really helped. My lunch-buddy was a woman too, so even though diversity at Waterloo is not great it didn’t seem that bad at the time! I don’t know if they do that deliberately or not. I didn’t find the questions too tricky and could answer them all, probably because I’d done enough preparation that I’d got into that way of thinking. I had 3 technical interviews, and one architectural one (designing an API).

    Takeaways

    Much the same as last time. Knowledge of APIs, particuarly String, Collections and arrays, but additionally:

    • If coding in Java, know 1.5 features. One of my interviewers was more C++ and hadn’t coded in Java 1.5, and so when I used a for-each they asked the question, and I could answer – for-each loop added as of 1.5. Generics, too. I coded one question using Generics. Some people can find the syntax tricky, so if you’re going to use it (and IMO you should for good design) – know it.
    • Immutability! In the API-design question immutability made the second part of the question (how would you change it so you can do X) immeasurably easier. Know when you want to have immutable classes, and use get/set and visibility accordingly.
    • Trade-off’s between space and time. For another question, before I started coding I could say, I can do it in this complexity with this space overhead, or this (higher) complexity with no space overhead. In the end, we coded both. But I started with the easier one!

    Overall

    Unusually for me, I was happy with how I did! Despite having less time to prepare for this round, I’d remembered the stuff I’d gone over for the last interview and left feeling that I’d done the best I could.

    Incredibly, I heard the following day (!) that I’d made it through regional review, my references were collected the day after and I received an offer a week after that. The HR guy in Waterloo was amazing in terms of keeping me in the loop and I got emails from two of my interviewers (one from each round) congratulating me. I’ve read (and heard) about people having a miserable experience interviewing at Google, but that was not at all my experience. The process took a couple of months, but that was because of my schedule and not them. I really liked everyone I interviewed with and everyone I encountered was super nice. I’m really excited about going to work there – and frankly still in shock that I made it!

    I start in January. I guess I’m leaving Ottawa and moving to Kitchener/Waterloo. Bring on the next adventure!

    Working For Google
    Credit: xkcd
  • Interviewing @ Google

    Google logo render - Mark Knol
    Credit: flickr / mark knol

    For those of you who didn’t know (or work it out), this is where I interviewed last week. It went well, I think – at least I feel like I did the best I could and whatever happens that will be helpful.

    I agreed to an NDA, so I can’t write about the questions that they asked me. However, I can write about how I found it and what I did to prepare.

    First, it’s Google – so I would never have applied had my friend who works there not talked me into it and referred me. I didn’t have a phone interview, since I was “local” I was invited on-site directly. I don’t really think Ottawa is local for Waterloo (maybe because I don’t have the Canadian perception of distance!), but definitely in-person interviews are better than phone interviews and I lucked out because it was Ignite Waterloo that night, which was awesome.

    First, I had a brief chat with a recruiter, who explained that I would be using a whiteboard and the process, and then two 45 minute interviews with two software engineers, one on one. I was amazed that I found the interviews fun! Normally I find interviewing really stressful, but what’s great is that it’s not so much like interviewing as jamming with another softie. That’s pretty cool! The questions in the first interview was fairly easy, the second one was a little harder but not too bad. The hardest thing was probably coding on the whiteboard (rather than a computer!) – hard to do TDD on a whiteboard! They tell you not to get dressed up, and definitely best not to – I spent a good portion of the time sat on the floor writing on the whiteboard and covered my hands in marker. Imagine doing that in a skirt!

    Helpfully, they sent me a list of things to prepare for the interview. I have a solid undergrad so I’d covered all of it at some point, but it was good to know what things to focus on revising. Note that this is in addition to what I do in general – remain current with industry news, use Google products extensively, blog, and think a lot about how technology is changing our lives (yes, these last two things helped). I also already have a good grasp and use the Java 5 additions like Generics, Enums, for-each etc.

    Here’s what I prepped (all book links are Amazon links):

    • Read Effective Java (2nd Edition) – I credit this book with any pretense I have of being a competent Java programmer.
    • Read Programming Interviews Exposed and worked through all the exercises – really helpful overview and refreshers on basic data structures like lists and trees. The recursion section was not as strong as I’d have liked (given my functional background) and advocated writing iterative methods instead, but other than that, it was a really good and helpful book.
    • Read Coders at Work – there are an astonishing number of Googlers in this book, which gives an idea of the culture. But there’s also a ton of interesting programming history that I definitely had not been aware of, insight into how these people solve problems, and discussion of APIs, scalability etc.
    • Reviewed Knapsack and Traveling salesman and NP-completeness in Combinatorial Algorithms: Generation, Enumeration, and Search (I also read almost the entire book and took a course on Combinatorial Algorithms in the fall semester) – honestly, I’m not a big fan of this book. I think it’s written in a fairly math-sy way. If you’re a programmer rather than a mathematician, solving these kind of problems using actual code is probably more helpful, and Wikipedia is almost certainly more readable.
    • Worked through some of Java Puzzlers – helpful for getting you in the mentality of looking at bits of code and picking out issues in it. I wasn’t asked that kind of question, but I did need to look at my own code critically. IBM gave me a question like that in my phone screen for EB, and I understand that Google do use that kind of question too.
    • Reviewed concurrency issues – deadlock, livelock, mutexes, locks, semaphores etc. When would you use the synchronized keyword in Java? How do you avoid deadlock? How do you avoid livelock?
    • Reviewed tree traversal – in-order, post-order, pre-order. Depth-first search vs. breadth-first search. A*, Dijkstra etc.
    • Reviewed balanced binary treesred-black trees, AVL-trees, splay-trees.
    • Reviewed graphs. Representation, minimum spanning trees, search etc.
    • Run-time analysis.
    • Coded 6 sorting algorithms – including the key O(n log n) ones – TDD-style (Test Driven Development – see this post for my test cases).
    • Coded a hash table, using only arrays. Included: generics, dynamic arrays, lazy initialization. Again, test-first.
    • Worked through all the practice questions that I could get my hands on – search for “Google interview questions” but don’t bother with the estimates or manhole covers, look for ones like these. Sometimes I coded in Eclipse, but sometimes in Google docs. I’d work with a friend who would review my code and ask questions.
    • Talked to my friend who worked there a lot. Asked a lot of questions. He was absolutely amazing, and really helped me a lot with my prep. Even more than that, understanding why he thinks I would be a good fit and why he believes I can do it was really helpful in understanding why I would want to work there (yes it’s a cliche, and yes it’s Google but as one of my mentors pointed out, it is about whether you want to work for them nearly as much as whether they want you).

    My Googler friend says I was “insanely well prepared”, and even I would say I was adequately prepared – but having gone through it, what would I do in addition to this stuff?

    • More run-time analysis – do as much of it as can find code to analyze.
    • Calculating sums. E.g. how can you sum the numbers 1-n? Work through the proof. Playing back the runtime analysis from my second interview, I have something that looks like: (n-1)(n-2) + (n-2)(n-3) + … + (3)(2) + (2)(1). Of course, I didn’t create it at the time so it became an upper bound of O(n³).
    • Review Java library data-structures. At one point, I was literally said, “I know there’s a data structure that doesn’t take duplicates, I just can’t remember the name of it right now”. Of course it’s anything implementing Set. And of course I remembered later than afternoon.
    • Review library methods for some key things – Arrays and Strings would have been helpful.
    • Practice coding on a whiteboard or just on paper. You take for granted being able to insert a line here or refactor and it’s much harder to do that on a whiteboard. Also, it’s easy to forget the return statement – Eclipse never lets me so I tend to write declarations and return statement first and put my code in the middle – can’t do that on a whiteboard!

    What next?

    • Waiting.
    • Waiting.
    • Waiting!
    • Whatever happens, hopefully I will be able to get some feedback.
    • Code the interview questions (with test cases!)
    • Finish Java Puzzlers.
    • Reclaim my life – you might have gathered, I’ve spent quite a lot of time preparing.
    • Investigate opportunities with other companies. In particular – meet with IBMers and see if I can find something that’s a great fit for me there.
    • Debrief with mentors.