Things I’ve learned from hiring interns for IBM

A few months ago I blogged about the fact that IBM was looking for two interns to fill a longterm (paid) internship. The good news is that after an extensive selection process and a hearty dose of governmental bureaucracy (which is not unusual when relocating countries), two students have finally been able to join our DB2 team at the lab.

In case you are curious about who the students are, they’re Marius Butuc from Romania, and Henrique Zambon from Brazil. They’re good guys, feel free to follow them on Twitter (even though Henrique’s stream may be more interesting to you if you speak Portuguese).

The selection process

I received about 100 resumes from students around the globe who wanted to apply for the internship. Of those, I invited the 50 most promising applicants to have an initial phone interview, as I wanted to give a fair chance to everyone (yet at the same time, I didn’t want get the hopes up of those who clearly didn’t have a shot, and thus the remaining applicants were informed that they hadn’t made the initial cut).

Before their first interviews took place, I assigned the 50 preselected candidates a coding project. They could either develop a CSV to HTML converter, a search client using Twitter’s API, or an S3 uploader.

While none of these exercises were rocket science, they were intended to provide us with an general idea of the students’ ability to code. Most candidates went for the CSV to HTML converter. Some chose the Twitter client, and a tiny handful opted for the S3 uploader (one ambitious candidate delivered all three).

After carefully reviewing their code, I held the technical interviews with all of the candidates who had sent in their assignments. During the first interview I asked each person a series of very technical questions, and in some instances we also discussed their assignments. In most cases each interview lasted for an hour.

After the initial round of interviews had wrapped up, I selected the 10 most promising candidates for a second phone call and informed the others that they wouldn’t be continuing on with the interview process.

For the second round of interviews I was joined by my manager, and together we conducted phone calls with each candidate that were based less on the each person’s technical skills. This second interview was meant to test their soft skills, to get a feel for their interests, and to assess their overall attitude.

There were important interviews because they helped us get to know the candidates a bit better. Our aim was to learn about what excited these eager applicants, to see their level of passion for programming, and to observe other skills that were not strictly related to coding. We also discussed the project they’d be working on if they were selected, our team approach (we are more of an Agile startup than the stereotypical image you may have of IBM), and discussed details of the next steps with each of these ten candidates.

At this point Leon (my manager) and I discussed at length which two applicants we wanted to select. All ten students were top notch candidates, so the choice wasn’t an easy one for us. We ended up considering every single bit of information at our disposal about the students, from their their resumes and past experiences to their performance with the technical assignment, what (human and programming) languages they knew, and how they’d faired with both of the interviews.

After a lot of consideration, we ended up selecting Marius and Henrique. (In case you’re wondering, the student who did all three assignment was also from Romania and he was ultimately our third choice, had either Marius or Henrique been unable to accept the internship position.)

What I learned from reviewing so many candidates

  • When you receive 100 resumes from very good students from around the world, you quickly come to realize that it’s surprisingly hard to determine someone’s real ability. Just about everyone looked pretty darn good on paper! That’s why I had to extrapolate what made each person unique via specific elements that weren’t based on coursework or grades (more on this later).
  • The coding assignment was a huge asset in determining people’s real abilities. Some of the nicest assignments came from those with academically weaker performances. You could clearly see who the hackers and potential future computer science professors were. Without the assignment, the selection process would have been much harder, so I’m glad that it was something we required the applicants to do.
  • With just a few exceptions, even good students seemed to struggle with relatively straightforward algorithmic questions, more than any other type of question. Sample questions included: What’s a Red-Black Tree and what would you use it for? Can you explain the P versus NP problem to me? (Note that these were rather open-ended questions, which I would generally follow up with more specific questions to assess the applicants’ theoretical backgrounds — as well as their way of thinking about these kinds of problems.)
  • Most students didn’t know much about programming in the real world. In particular, they didn’t seem to be very up-to-date, most having never heard of things like SVN, GIT, MVC, ORM, Agile programming, or NoSQL.
  • In general, the qualifications listed on the resumes we saw were greatly exaggerated by mediocre candidates, and somewhat downplayed by the great ones. (It looked like some form of Dunning–Kruger effect was at work.)
  • Some candidates, taking advantage of the long distance telephone interview, tried to Google their answers and I could literally hear them typing as I presented them with questions that they weren’t familiar with. Replies such as, “Hmmm…well…”, followed by a 20 second pause and then the all but cut and paste Wikipedia definition. This was very easy to spot and didn’t end up boding well for those candidates who opted for this less than honest route.
  • Recruiting is hard. It takes a lot of time and energy; rational decisions are challenging to make because in most cases you really are comparing apple to oranges.

What made a resume stick out to me

  • Open Source contributions (a GitHub link would immediately arouse my interest in that candidate).
  • A concise but detailed description of practical projects that had been implemented by the student for companies outside of their coursework (whether on the side or through internships).
  • Social media involvement in the programming community. Did they have a StackOverflow profile? A Twitter account related to programming? Perhaps a a blog dedicated to the subject? While these points alone certainly don’t mean someone is a good programmer, they are a decent indicator that a person is at least passionate about the subject. Attendance of industry conferences (which some had) was also a strong indicator of interest in the field.
  • Knowledge of unusual programming languages. Virtually everyone had Java on their resume, however that alone wasn’t good enough to catch my eye as an interviewer. (Heck, even Python is starting to be pretty common.) When candidates claimed knowledge of Haskell, Scala, Clojure, OCaml, Scheme, Factor, Io, J, etc… that definitely grabbed my attention. Again, this is no guarantee that someone is a good programmer, but chances are that they have an above average interest in our profession or have attended a university where these languages were taught (both positive signs).

While I’m not sure what you’ll get out of this article, I thought it was worth sharing as I found the whole process described above to be a fascinating one. Perhaps if you’re a student in a similar position you’ll find tips on what to do when applying for an internship with a company such as IBM. If you’ve ever found yourself in a similar interviewer’s position, you’ll likely find numerous relatable points in this post.

One final note: if you are curious, here’s Henrique and Marius at our first team party (after a few drinks):

Henrique Zambon and Marius Butuc

Get more stuff like this

Subscribe to my mailing list to receive similar updates about programming.

Thank you for subscribing. Please check your email to confirm your subscription.

Something went wrong.


  1. Wenqing September 20, 2010
    • Antonio Cangiano September 20, 2010
      • Jason Faulkner September 20, 2010
        • Walter Sear September 20, 2010
          • Jonathan September 21, 2010
    • Robert September 20, 2010
      • Krischan September 21, 2010
      • Boby September 23, 2010
      • Nelson December 14, 2012
  2. Jose September 20, 2010
    • Antonio Cangiano September 20, 2010
      • Jose September 22, 2010
        • Luk September 24, 2010
  3. Preets September 20, 2010
    • Antonio Cangiano September 20, 2010
      • K September 21, 2010
        • fsilber September 21, 2010
          • Jac September 21, 2010
  4. Patrick September 20, 2010
    • Eric September 20, 2010
    • Antonio Cangiano September 20, 2010
    • zk September 20, 2010
      • Anonymoose September 20, 2010
      • Billy September 20, 2010
      • Evangelia September 21, 2010
        • Vin September 24, 2010
    • Phil September 20, 2010
    • Michael Schmitz September 21, 2010
  5. TD September 20, 2010
  6. Chris September 20, 2010
    • Chris September 20, 2010
    • Antonio Cangiano September 20, 2010
      • Drew September 21, 2010
    • Michael September 20, 2010
    • Leon Katsnelson September 21, 2010
    • thinkingbox September 26, 2010
  7. Raul September 20, 2010
  8. Chris Lehman September 20, 2010
  9. Dave September 20, 2010
  10. Jonny September 20, 2010
    • Antonio Cangiano September 20, 2010
      • Drew September 21, 2010
  11. Phil September 20, 2010
    • Antonio Cangiano September 20, 2010
      • rwxrwx September 20, 2010
        • Antonio Cangiano September 20, 2010
  12. James Roe September 20, 2010
    • Antonio Cangiano September 20, 2010
      • James Roe September 20, 2010
  13. Vinícius September 20, 2010
  14. Mark September 20, 2010
    • Phil Banks September 21, 2010
  15. Pingback: Helltime for September 20 « I Built His Cage September 20, 2010
  16. Adam Reineke September 21, 2010
    • Antonio Cangiano September 21, 2010
  17. Tom Murray September 21, 2010
    • Richard Williams September 13, 2011
  18. Piter September 21, 2010
  19. Serra September 21, 2010
    • Tore September 22, 2010
  20. John C. Randolph September 21, 2010
  21. Helmut Schuster September 21, 2010
  22. anonmyous September 21, 2010
  23. rajaiskandarshah September 21, 2010
  24. Christopher Marks September 21, 2010
    • Antonio Cangiano September 21, 2010
  25. Numerator September 21, 2010
    • Richard Williams September 13, 2011
  26. fsilber September 21, 2010
  27. Eric September 21, 2010
    • Antonio Cangiano September 21, 2010
    • Michiel Overtoom September 21, 2010
      • fsilber September 22, 2010
  28. Jonathan September 21, 2010
  29. Miguel Cruz September 21, 2010
  30. Robert September 21, 2010
  31. Mario September 21, 2010
  32. Yike September 21, 2010
    • fsilber September 22, 2010
  33. Underqualified for IBM September 24, 2010
  34. Curious September 24, 2010
    • Antonio Cangiano September 27, 2010
  35. D. Harris September 27, 2010
  36. Bill September 27, 2010
    • Reynold September 27, 2010

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.