I failed a job interview last week. I froze up in the middle of the interview, and couldn’t pull the information I needed out of my head.
I would really like to work for this consulting and development company near where I live. I learned about the company because I’ve become friends with one of their consultants assigned to the company where I now work. I applied when the position I really wanted at this company was posted. Unfortunately that company has a policy where they will not steal their customers’ employees. This is understandable, as a reputation of taking customers’ employees can hurt a consulting firm’s sales prospects. A step in the application process was posting my resume to Dice. Ever since then I’ve been getting a nibble on that resume every week.
A couple of weeks ago I got another nibble, this time from a large West Coast company. A recruiter sent me an e-mail stating that a hiring manager from one of their subsidiaries found my resume and would be interested in setting up a phone interview. I assumed he found the resume on Dice, but maybe he found it elsewhere. Wherever he found it, he saw something in my resume worth the effort of an interview. After a few e-mails back and forth, we had a technical interview setup for 2:30 PM for them on a Friday, 4:30 PM for me. The hiring manager delegated the call to “Joe” who would call me to ask about coding, data structures, algorithms, and design.
I’m recounting this from memory a few days after the interview. I didn’t record the interview, take notes, or immediately write this. I tried to be totally honest with myself, but my human memory isn’t perfect. I didn’t recount every question asked, and I probably recorded some details wrong.
By the allotted time I was very nervous. For me this was a life-changing event. This would determine if I would get the job, if my family and I would move 2,000 miles, and how the course of the rest of my life would go. For Joe it was just another day at the office. I’m sure he took the interview seriously. He was helping to decide with whom he gets to work, an important decision, but not as life changing to him as the decision is life changing to me.
Joe called right on time. After a few minutes of setup conversation where Joe explained how the interview would proceed, the questions began. Joe started with softballs. He asked me to describe a recent technical challenge I successfully met. I told him about my digital image processing class project that I wrote about in another post. This project was more intellectually challenging than anything I’ve done in the months since.
Joe asked what languages I know, and specifically about how well I know C, C++, and Objective C. I know these languages well enough to know that I can be proficient, but I also know that these are large complex languages. So I said I honestly thought that on a scale of 1 to 10 I was a 7 with C and Objective C, and a 4 with C++. Was that a mistake? Should I have claimed overconfidence, ignored that there is always something more to learn, and inflated my response?
Joe asked what language I was using most right now. My answer was Objective C, since lately I’ve just been coding iOS apps. Joe then asked what aspect of Objective C I would most like to learn more about, and I answered blocks. This is an interesting language feature added to Objective C, and a building block to Apple’s Grand Central Dispatch.
Joe asked me to write a function that takes a number and an array of numbers. The function returns an array of arrays listing all the pairs of numbers that sum to the given number. We discussed an approach to implement that function, using a simple brute force approach. Then Joe asked me to take ten minutes to write the function, and e-mail it to him. I fired up Xcode, typed up a function, checked for syntax errors, copied it into e-mail and sent it to Joe. A couple of moments later I realized a mistake, that I didn’t return the length of the output array, but I never got a chance to discuss that oversight. That was the start of a downward spiral. Instead of pressing on, my mind was stuck thinking about this error. Then my next error screws up my thought process even worse.
Once Joe sees my code, we start to discuss the algorithm’s efficiency. Joe asks how complex my algorithm is, obviously hinting he wants me to mention Big O notation. I do, but I calculate the complexity wrong. I learned about Big O notation in my algorithms class in school. After that class I used it twice in my systems programming class, and once in my digital image processing class when comparing Fourier transform algorithms. I understand the concept, can apply the concept when evaluating differing approaches to solving problems, and have correctly calculated Big O estimates for my code, but I have little practice calculating it. I could see that my code wouldn’t scale well, but I screwed up the calculation.
Then Joe asked how to improve the algorithm so it would scale. My mind is stuck on my previous screw-ups, and I’m unable to come up with anything better. Joe asks some leading questions, and we discuss sorting the array, or moving the data into a different structure. I’m thinking, “F*** I’m screwing this up! F*** I’m screwing this up! F*** I’m screwing this up!” Nothing is coming out of my mouth. Part of me knows it’s all over right here. Part of me is hoping there’s still a chance. None of me is coming up with a better algorithm. Joe eventually leads me to putting the data into a hash table, and then just check for the existence of the matching value for each value in the array. Once in the hash table, finding pairs that sum to the given number takes linear time.
Joe’s last question asked what would I do if the boss came to me with a complaint on the speed of the website. Thinking this was a troubleshooting question, evaluating me on problem solving skills, I started discussing what I’d investigate in solving the problem. I said I’d talk with the boss to fully ascertain the problem, and confirm the problem exits. Then we discussed evaluating the servers, and optimizing the database queries. For every area I explored, Joe agreed that may help, yet once these areas are addressed the website was still slow. Eventually I understood that this was a design question. I said that to speed up the website, I’d redesign the delivery of information to each webpage to partially load and display information quickly, then filling in further information later. By loading the most important content first the website would seem more responsive. Joe seemed satisfied with that answer.
At the end of the interview, I knew I’d blown it. I felt I made it clear I was not a complete pretender, that I knew something about software development. But I also knew I didn’t come across as a star. I clung to the hope that this division, a small part of a large company, that had four different software developer openings listed on their website, needed people enough to still take a chance on me. But I knew it was a tiny hope.
So I tried to salvage something out of the interview. When it was my turn to ask questions, I tried to elicit advice on improving my interviewing by asking how I did. Joe deflected my question by telling me the rest of the process, and by saying it wasn’t his decision. I didn’t press the question, and started chatting about how it is to work there and what the city was like. Then we ended the call.
A few hours later Joe tweeted a snide comment about how I asked how I did. My tiny little hope was dashed, and I knew it was over. I tried to console myself with the thought that Joe’s tweet was a just another example of nerd culture like Ryan wrote about here. (The last time I checked, this link was broken, so here it is in the Wayback Machine) I tried to think that I wouldn’t want to work in that culture. But I was lying to myself. Joe seemed nice enough on the phone, and I’m sure I’m the one person that sees Joe’s tweet as painfully snide. I still would like to work there, but I blew it, so I never will.