By Dimitris Staikos (also known as Brute Force)
Last Updated: October 2006
This document describes various techniques and tips that you should pay attention to when recruiting for developers. I got valuable material from
the following internet sources:
Guerilla Guide to
Interviews by Joel Spolsky
Hazards
of Hiring by Eric Sink
Great Hacker != Great Hire
by Eric Sink
You need Developers, not Programmers
by Eric Sink
Career
Calculus by Eric Sink
Interviewing
and Hiring by Tom Van Vleck
How to interview a programmer by Bill Veners
http://www.jrothman.com/weblog/htpblogger.html
http://resume.monster.com/
http://resume.monster.com/articles/fivepointers/
http://resumedoctor.com/ResourceCenter.htm
The first article by Joel is an absolute
must. Even more absolutely a must is the version of the
article found in Joel's book. I agree totally and wholeheartedly with everything that’s said by
Joel in this article.
Please read it before moving on, because most things that I write here are additions to Joel’s opinions and tips.
I try not to repeat Joel’s advice in this doc so as to save myself the trouble of repeating 14 printed pages!
What makes me qualified to give advice on interviewing for developers?
Definitely I do not claim to be an expert on the subject. In the
period between September 2003 and September 2005 I worked as the R&D Manager at LogicDIS,
and thus I interviewed around 50 candidates, out of a total of around 200 CVs that reached my hands, and I had 6 people hired.
And they all proved to be good hires. Now in Unibrain I rehired two of these guys. That hopefully indicates that
they do not despise me and are quite at ease to work with me.
50 interviews with promising candidates and 8 hires is, I think, way more than the average person,
so I might have something slightly useful to say after all.
The first thing that you ever see or hear from a candidate is his or her CV. Now it is highly possible that the candidate
has also read the above sources of information and has avoided many of the common pitfalls. This is not bad.
Indeed it is a good sign. I like candidates that face the whole recruiting process like true engineers:
'I have a task to achieve. What information do I need to know to succeed in it?’
Then they go and look things up in world’s largest encyclopaedia: The Internet.
A major task that I am faced with is to understand which candidates to drop immediately, just by having a look at their CV. This saves me a huge amount of wasted time on interviews. Rejecting a CV may mean that either the candidate is inappropriate for the position we are currently hiring for, or that the candidate is useless. If the candidate's CV looks good, I might just as call him for an interview, just to see what a kind of person he or she is, and let him know about our
company: what we do day in and day out, and how we work. More than once we have hired persons whom we interviewed several months ago. When the appropriate opening appeared, the right CVs were in stock.
So my first advice is this:
Interview with as many promising candidates as you can.
It is never a waste of time.
The algorithm that we use for checking out candidates goes as
follows:
- Check out the CV. If promising and appropriate proceed to step 2
- Invite the candidate for the 1st interview. This is strictly 30 minutes, and its goal is to see if the candidate is actually promising. Candidates must bring along some sample of recent work, and it would be nice of them if they are prepared to leave a copy to me.
If the candidate looks promising, then we arrange the 2nd interview.
- The 2nd interview can take anywhere from 1 to 7 hours, depending on the expertise level of the candidate. The more experienced the candidate is, the longer I am gonna check him out. Yeah, I am totally absolutely serious about the 7 hours thing. It's not a joke.
- If I approve the candidate, then the team that is about to hire him/her, gets an interview for themselves as well. However, they get a guarantee from me that the guy is smart, competent and has the appropriate personality
and frame of mind to work as a developer in our company. The team manager also gets a salary recommendation from me, and
she negotiates the salary herself, if
of course the team likes the candidate.
This interview as you might imagine does not go much into technical
detail. Rather it is focused on whether the candidate will fit in
with the team.
We are located in Athens, Greece, and most of our candidates come
from Athens as well, so it's not that big a pain to have them come over
three times.
However, when we have a promising candidate that is out of town, then
we arrange things so that I have 1-2 hours available to make the 1st and
2nd interview in one shot. We also make certain that the team manager
has no other meetings arranged during the period of time about 1 hour
after the start of the interview, so that she can meet with the
candidate if we get to reach to step 4.
All candidates are informed about the way that the whole interviewing
process is going to proceed, when we call them to arrange the 1st
interview. If they don't like it, the can opt out at that moment.
CV – Things to pay attention to
Let us now see a list of things I pay attention too when I am looking at a CV. Each item is prefixed by a plus or minus sign to indicate whether it refers to something positive or negative about the CV.
(+) Cover Letter
Writing a cover letter demonstrates a sense of professionalism. Most of the sites above recommend it. However a ‘canned’ letter is not worth
much:
I am really hardworking and love to learn new things all the time. I would like to work in a dynamic company like GUTS S.A. where I could achieve my full professional potential.
Do you think I am looking for a non-hardworking guy, who hates to learn new things and does not care at all to achieve his
potential?
If you want my attention write something that comes from inside of
you.
A truly PERSONAL statement.
(+) Career Goals at the beginning of the CV or the Cover Letter
Remember: not precanned stuff.
If your life’s ambition is to become a software pro, then I need to know this as soon as possible. These are the people I am looking for.
See the 1st interview section for more details on this issue.
(-) Spelling mistakes or mistypings that are not errors
Well let’s face it… If in such an important issue as trying to persuade someone to hire you and you don’t bother to
spell check and
proof-read your CV, then why should I think you will pay attention to something as trivial and unimportant as for example the... metric units used in the spaceship navigation system we are implementing???
Some common mistypings:
You want to type MANAGER but you type MANGER.
You want to type WHINE but you type WINE.
All valid English words but their meanings are quite far apart.
I really enjoyed a comment someone made on some site, about those hundreds of
mangers looking for jobs out there...
(+) Touch Typing
If you know how to type without actually looking at the keyboard (that’s called Touch System in English I think), then LET ME KNOW.
You are SERIOUS about your work and you don’t want to spend a lifetime looking around the keyboard for the keys.
If you don’t know Touch System, then GO AHEAD and LEARN IT NOW. It will save you endless wasted hours.
At work I make it almost mandatory to ALL newly hired programmers.
I received some feedback on this issue at Joel's Business of
Software. Many reacted with something that essentially boils down to:
"Com'on, will touch system make me write code faster? There
can be no correlation between code quality and typing speed, or
programming experience/skill and typing speed".
Well, I agree.
In order to write code faster you need things like Visual Assist or
CodeRush.
Now that I am used, or rather addicted, to them, it is impossible for me
to work without them.
However, in order to write documentation and emails faster you need
Touch Type. If you don't intend to ever write documentation and emails
longer than 3 lines, that's fine. Go ahead and telnet port 25.
At LogicDIS we often
needed to write docs and definitely lots of emails. Mostly to our
consultants, when they are faced with serious technical trouble that has
to do with the application we are working on, sometimes to clients,
sometimes to colleagues, etc.
(+) Career Timeline Summary
I am looking into dozens of CVs each month. I need to be able to locate QUICKLY what you have been doing in the past
years. Please give me a quick summary in table format without too much detail:
(a) 1989-1995 National Technical University of Athens
(b) 1996-1998 Military Service
(c) 1998-2001 HonkyDonk S.A. Senior Architect
(d) 2001-currently NASA Chief Astronaut for unmanned mission to Mars
Then go ahead and analyze each section as much as you like. Many resume-advice sites suggest that the CV should not be very long, or it will get overlooked. I am clearly against that. If you have working experience then let me know. I am serious about hiring and I will never drop a CV that is 10 pages long.
(+) Computer Science books you have read recently
Man, if you are serious, I NEED TO KNOW, and I need to know just HOW serious. If you read CompSci books, then put it in your CV.
That’s an interview question as well:
Have you read any books lately?
A guy once told me:
I don’t need to read no books; I can look things up on the
Internet!
Man, how did I miss that???
Quick, let me call Fowler, McConnell, Brooks, Beck, Don Box, etc, and give them a hint not to waste their
precious years writing those useless books... Don't misunderstand me here. The Internet is an immensely valuable source of information, but there is a lot of priceless stuff that is not on the public domain.
(+) CV in PDF format
Now most sites mentioned above suggest against this. 'It is a non-standard format' they
whine.
Well, I am looking for a developer, not a secretary. A CV in PDF shows me that you are serious enough to be able to use
one program or the other can spit out PDF.
I sent my own CV 5 years ago in PDF format directly to the Technical Director of a ‘big’ software house here in Greece. The guy himself (not his secretary) answered back that he doesn’t know how to read the document, so if I may send it to him as a doc please.
Wow! What makes you think I would like to go and work for a Technical Director who is not smart enough to understand that by asking me such a question he appears outright dumb?
You get something that you don’t know how to read. Go and ask one of your developers
or your tech-support stuff to tell you.
Then... maybe I like PDF because I used to send my own CV in PDF
format :-) It's not such a big deal really.
(-) CV comes in by FAX
Last time I checked we were in the Internet era. Even my grandma goes around nowadays purchasing domain names as Christmas gifts for her grandchildren, and you send me your CV by fax???
Yeah yeah... I know... what if it's just a poor graduate who can’t afford a PC at home, with a high-speed
Internet connection? Sure. Then what about Internet cafes and free email accounts? They are a dime a dozen! That is if you know what the
Internet is in the first place...
(+/-) CV File Naming
I don't use any sophisticated software to manage the incoming CVs. I just dump them in a folder and then check'em out. When I have to deal with hundreds of CVs, a file called
myCV.doc is not helpful at all.
A name like DimitrisStaikos.doc is better, but it won’t sort right in a folder full of resumes. Naming it
StaikosDimitris.doc is almost the best you can do to make my life easier. It shows a minimal ability to think ahead. You can also possibly prefix the name with the code of the position you are applying for, like in
SK42_StaikosDimitris.doc.
What I don't find very clever is something like CV_ver7.doc. It makes me wonder:
"Just how many versions of his CV does the guy actually have?"
A name like StaikosDimitris_thinkBIG.doc is also OK for me, because you might have prepared a special edition of your CV for the target company.
If you are an old-dog, switching jobs often or working on contracts, then you might add to the filename the year and month of last update, so that it is immediately evident how old the CV is, for example
Staikos_Dimitris_Aug_2005.pdf.
(+/-) Communication Email
I think that an email address like fluffy382@hotmail.com is totally unprofessional.
I know that you are a funny guy, who is great to hang around with, but we do not know each other well enough yet for me to call you
'fluffy'.
If you are really really serious to make a good impression, then go buy a domain name for yourself with your name in it, together with a hosted
mailbox or setup some mail forwarding rules.
Otherwise just get a professional-looking mailbox at a free provider,
like for example Joe.Satriani@gmail.com
(+) Military obligations clearly indicated
That applies to Greek male candidates.
Introduction to the Interview
Joel has said all that needs be said:
- Always assure the candidate that we are interested in how she goes about solving problems, not the actual
answer.
- Let the candidate know that we are not going to ask ‘trivia type’ technical questions, but fundamental stuff, although far from basic.
- Let the candidate know that we do not consider candidates as good or bad, but rather as being at the appropriate level for entry in our company.
- Let the candidate know that we care deeply for aspects of her character that affect team working and collaboration.
1st Interview Topics & Questions
Now, I don’t do all the questions every time, definitely not in the same order, and definitely not in the order listed below.
I just have them printed on a piece of paper with me, and as the discussion moves along I pick the proper question. No two interviews are the same with me :-)
Previous Work & Code Samples
All candidates are required to bring ANY sample of their previous work
when they come for their first interview.
They often ask us on the phone "What should I bring?"
We tell them to bring in anything they consider to be representative of themselves as professionals. What they choose to bring along tells me some things about their judgement ability or lack there of.
The work sample might be totally irrelevant to what we are looking for: It might be a university assignment for an algorithm that maps parallel algorithms to clustered distributed computers (that was a hire), or a program that you wrote that presents you with a 3D model of a NxN
Rubik’s cube and then helps you solve it (another hire), or a super-duper clone of
Minesweeper that can time you in
msec and provides you with various cookies (that was another hire
too...).
I use these samples to get a first, really good impression of how well the candidate is performing when they do what they are asked for.
Are they tidy? Do they take care of presentation? Are their documents well written?
When considering their code, I could write hundreds of pages with tips,
but BAD coders are immediately evident to any serious professional
developer.
RULE: If you are hiring a developer then make sure that one of your own senior developers gets a quick look at the candidate's code.
Smart & Gets things done
Joel says it all.
Communication Skills
Now that one I had thought of before I read Joel’s Guide :-)
Give me a summary of your thesis in a language that my grandmother can understand.
If they can do some real talking, I ask them to describe their thesis to a greater extent and detail.
For the Love of Gode
For the Love of God + For the Love of Code = For the Love of Gode
Is the candidate passionate about her work? Do they
want to become a software development pro?
How do I define a software pro? As someone who does not mind spending 70-90% of
their time writing code for the next 10-15 years. Yeah that’s right. That’s a FIFTEEN.
I hear candidates with ZERO professional experience telling me "I would like to work in development for 2-3 years, then move on to project
management".
Sure… and by the time you are 35 you wanna be the president of the United States.
One of the questions that I always make to candidates on the first
interview is:
How do you envision your
career?
If the candidate tells me that he really loves project management then I switch the interview mode to consultant-mode. If the candidate tells me that he or she would like to write code for some years, then
I move
on, asking them directly:
How many years?
Bad candidates give me back a number that can be signalled using the fingers of your right hand. Good candidates may say,
"I don't know really. As much as it takes".
Then I go:
For example, would you mind writing code for the next 10
years?
The answer to this question is absolutely critical.
Both what they tell you verbally and non-verbally. Non-verbal reactions are
most crucial here. One of the guys I ended up hiring almost jumped off his chair when I made this question, laughed aloud, and told me
"Yeah!!! But that's what I wanna do!!!"
Realism & Practicality
- What would you do if you were asked to work on a project and were not given the rights tools & infrastructure?
- Are you a realist or an idealist?
Personal Desires & Strong Mindedness VS Customer-centered
Does the candidate value the needs of users over her own preferences both in what technology to use & in what she considers interesting or not?
We sell products to users. The reality is that lots of highly profitable software development tasks are just not very interesting.
Does the candidate understand the difference between a job and a hobby?
- How important it is for you to work on fun, high-tech projects?
- Do you like interacting with your ‘customers’? Do you care to do so? Do you actively seek their feedback?
- How do you feel about Microsoft Windows vs. Linux vs. Mac?
Look I don’t like fanatics, and I don’t like fans. I like engineers. If a guy answers the last question in any manner like
"Mac RULZ, LINUX and WINDOZE megaSUCK", then I am dealing with a fanatic. How am I gonna to convince such a guy about anything???
Developer VS Programmer
- How do you feel about software testing?
- How do you feel about documentation?
Fundamental Technical Knowledge
Now most of the candidates I interview are meant for C++ developers
on the Microsoft Windows platform. We have several products that belong
to the shrinkwrapped category, and whose size in LOC ranges from 500K to
1.3M.
With that in mind, I absolutely must hire people that know
what object orientation means. We cannot afford to teach object
orientation to new hires. We cannot afford to teach C++ fundamentals. We
cannot afford to teach basic algorithms.
So since I don't have much time for technical issues on the 1st
interview, I go along with the following questions.
- What are constructors and destructors?
- Describe to me in your own words what
an algorithm is.
- Describe to me in your own words what polymorphism is.
- What are virtual functions?
- Do you know what is a binary search?
- Do you know what is a stack?
- Do you know what recursion is?
- Do you know what a database transaction
is?
- Do you know what O(nlogn) means?
- Write a C function that takes as input an
array of ints and returns the sum.
- Do you know what refactoring is?
- Do you know what design patterns are?
- Do you know what a smart pointer is?
- Do you know what exceptions are?
- How many lines of code have you written in your career so far?
Failing to answer correctly in ANY of the colored
questions means that you don't make it to the 2nd interview. I am sorry,
but we cannot afford to hire you.
Personality
- Name one professional talent of yours, something at which you think you are better than me! (JOEL)
- What qualities would you want in your ideal manager? (JOEL)
- Outside of your professional life, name as many of your weaknesses as you can!
- Outside of your professional life, name as many of your virtues as you can!
- Tell me one really serious mistake you have done in your life, that caused damage to
you\others.
KAIZEN
- What do you do or plan to do in order to continue improving your professional abilities?
- Do you purchase books related in one way or the other to your
profession?
Mission Impossible
Now Joel in his Guerilla Guide proposes that we do a mission
impossible question, and then see how the candidate reacts. So far I
haven't asked any candidate such a question. I might do it some time,
but I am not sure whether it is an effective way to test a candidate's
problem solving ability.
Items for 2nd Interview (100% Technical Stuff)
My goals are threefold:
- See how far this candidate has travelled.
You can’t just accidentally know what the Global Interface Table is unless you have actually used it. And if you have used it, that cannot be a simple thing you were trying to do.
Ôhat tells me lots of things without having to ask too much.
- Now some questions are really fundamental (to me at least) and some are really TOUGH. Remember: Not all questions are
meant for all candidates. Depending on the candidate’s level, you make the appropriate questions. This is just a quick
reference so that I don't forget the questions :-)
What do I mean by fundamental?
Virtual Memory?
Uhhh... isn’t that dynamic memory allocated from the heap?
Address Space?
Yeah I know that! It’s in the pagefile!
What do I mean by tough?
Certainly not mindless trivia. Not things you can just look up in a reference and know what it’s all about:
Thread Local Storage? Well I can look it up sir, but I think it is some sort of
in memory transactional file system.
Some candidates actually try to second-guess the answers! And some
others even answer back with a question!!!
That’s a truly bad sign, for me at least. Are they really asking ME to tell them???
Being afraid and\or unable to answer in cold blood "I don’t
know", is a quality that I strongly DISLIKE in people.
Ignorance is natural.
There are MEGATERABYTES of knowledge out there.
Do they really think that I am so dumb as to seriously expect a
graduate to know what the MultiThreaded Apartment is???
Or do they really think that they can work on a 1M LOC C++ project when they have never heard of
Virtual Memory?
Their reactions to the questions that they don’t know are crucially
important, not the actual answers. Are they curious to find out what the answer is, or do they just sit back
dumbfounded staring to
the void?
- Now, many a candidate thinks he is a hot-shot programmer when they come to me:
Top-Gun is my name, Coding is my game.
Some of my technical questions are meant to bring such candidates
down-to-earth, and of course make the salary issue a little bit more flexible for
our company ;-)
What I essentially try to convey is:
Look dude, you might think that you are a hot-shot, but guys like you
are dime a dozen in this shop. You might be in the marines, but we are the Navy Seals.
TLS? We have done that.
COM methods taking a variable number of arguments? Sure.
IDispatchEx? Yeap.
COM+ Distributed Transactions? Piece of cake.
COM+ Distributed transactions with BYOT from C++? Now that was a
tough one...
Device Drivers? Be our guest.
Printer Drivers? Come on...
3D graphics? No sweat.
Multithreaded database processing? Yawn...
Dynamic MFC forms (user can add or remove DB fields at runtime)?
Yeap.
Dynamic Class Generation at runtime (.NET CODEDOM)? Oh yeah :-)
IDispatch-like Web Services? You name it!
Of course we are in the Navy Seals of software development, or at least I
think so :-) Btw, I forgot to mention that modesty is another one of
my virtues... Anyway, if you are
not the Navy Seals, then don’t try the TOUGH questions. You will just make a fool of yourself.
How do you think you would look to a candidate if you said something like:
We are doing really really hardcore, mega-heavy-weight development using MS Access97 in this shop. Our lead programmer is the ultimate VB guru and he has a question for you: Do you by any chance happen to know what the Free Threaded Marshaller is?
Yeah sure… I am such a really really hardcore mega-heavy-weight developer that I have never heard of database servers, so I do my really really
hardcore mega-heavy-weight development in Access97 and VB5. Indeed VB5, because VB6 really sucks.
C/C++
- What is an abstract class? What is a pure virtual function, and how does the syntax goes about?
- Can an abstract class have data members?
- Can a pure virtual function have a body?
- What is an ‘interface’?
- What are const member functions?
- Can we overload member functions only based on constness?
- What are mutable data members?
- What is an explicit constructor?
- What is the dynamic_cast?
- What is const_cast?
- What is a Down-Cast, Cross-Cast?
- Can we apply dynamic_cast to all kinds of classes?
- Can we apply dynamic_cast to a reference?
- What are templates?
- What is Template specialization?
- Can templates have static member functions and data?
- What are template member functions?
- What are anonymous structures\unions?
- C++ Exception Handling
- Stack unwinding
- Exception Safety
COM\ATL
- What are COM interfaces?
- What are GUIDs, UUIDs, IIDs?
- What is IUnkown? Does it have any special purpose?
- What is IDispatch? OLE Automation?
- What are OLE Automation Compatible types?
- What is COM Server Registration? Where is this information stored?
- What is a ProgID?
- What are dual interfaces?
COM Apartment models:
- What is a COM class factory object?
- What is an STA?
- What is an MTA?
- What is the “Main STA”?
- How many MTAs can a process have?
- An MTA COM object creates an in-process apartment-threaded COM object. In what apartment will the new object live?
- Explain in-process\out-of-process COM servers?
- What are COM proxies? When and by whom are they created?
- What is marshalling?
- What is the Global Interface Table (GIT)?
- What is the free-threaded marshaller?
- What is COM aggregation?
- What about COM interfaces and inheritance?
Operating Systems & Windows
- What is a memory access violation?
Explain virtual memory & memory page protection?
- What is the difference between the stack and the heap?
- Do you know that Structured Exception Handling is?
- Can I allocate dynamically memory on the stack?
- How many heaps can a windows process have?
- What is a thread?
- Which functions are used to create threads?
- What is the 'UI thread'?
- What is TLS (Thread Local Storage)?
- What is a Critical Section?
- What is an event?
- What are the intelocked functions?
- What do we have to link with when doing multithreading?
- What is the DLL base address? What is DLL rebasing?
- What are DLL exported functions?
- Calling conventions: _cdecl VS stdcall?
Database Theory
- What is a transaction? What is commit and rollback?
- Do you know what Foreign Keys are?
- Do you know what Referential Integrity means?
- Do you know what Table Normalization means?
- Do you know what Stored Procedures are?
- Do you know what Triggers are?
- Do you know what Cursors are?
- Do you know what the Transaction Log is?
- What does ACID stands for?
- Do you know what Isolation Levels are?
- What is your opinion on the usage of NULLable fields?
|