Some things just piss me off. But before I get to what pissed me off this time, let me set the scene.

We usually request from candidates applying for a job in Hibernating Rhinos to submit some piece of code that they wrote. They get additional points if their code is an Open Source project.

Some people have some… issues with the concept. The replies I got were:

I don’t know if I can’t send you the code, I’ll have to ask my employer. (Which seems really silly thing to do, considering you want to get the code to show it to some other company that you want to hire you).

Here is the code, but don’t tell anyone. (Those usually get deleted immediately after I send them a scathing reply about things like IP and how important it is to respect that).

Here is my last course code. (Which is what actually triggered this post).

Here is the deal, if you aren’t coding for fun, you are not suitable for a developer position in Hibernating Rhinos. Just to give you some idea, currently we have the following pet projects that I am aware of:

Jewish Sacred Books repository – display / commentary

Jewish Sacred Books repository – search / organization (Note that the two are by two different people and are totally unrelated.)

Music game app for Android, iOS and WP7

Personal finance app

Auto update library for .NET

Various OSS projects

And probably other stuff that I am not aware of. (Just for the record, those are things that they are working on their own time, not company time. And not because I or anyone else told them).

Why is this relevant? Because I keep getting people who think submitting some random piece of code that they have from their latest university course is a good way to show their mad code skillz.

I mean, sure, that might do it, but consider carefully what sort of projects you are usually given as part of university courses. They are usually very small, focusing on just one aspect, and they are totally driven by whatever the crazy professor think is a valid coding standard. Usually, that is NOT a good candidate for sending a code to a job interview.

I am going to share just one line from a codebase that I recently got:

privatevoid doSwap(ref Album io_Album1, ref Album io_Album2)

The code is in C#, in case you are wondering. And you can probably learn a lot about the state of the codebase from just this line of code. Among my chief complaints:

Violating the .NET framework naming guidelines (method name).

Violating the .NET framework naming guidelines (argument names).

Swapping parameters, seriously?! What, are you writing your own sort routine? And yeah, the answer is yes.

When I pinged the author of the code, he replies that this was because of the course requirements. They had a strict polish notation guidelines, and io_ is for a input & output parameter.

They had other guidelines (you may not use foreach, for example) that explained some strangeness in the codebase.

But that isn’t really the point. I can understand crazy coding standards, what I can’t understand is why someone would submit something that would raise so many red flags so quickly as part of a job application process.

Employers should encourage developers to have a bit of fun. As long as the work gets done. (within acceptable/intended time frames) How else are developers going to find that cool idea that's going to save the company money? Either by gains in efficiency, reduction in errors, or merely keeping people happy and excited to come into work so the staff turnover stays low.

@Phillip: Simple math. A lot of people don't know what they want to do, all they know is that they want to work and make money. So they look at what's employable. When I went through Computer Engineering there were people in the class that didn't know how to insert a floppy. (Quite a few years ago:) They weren't there for long, but for a lot of the class that did manage to graduate, it was a means to an end.

@Duke, my developers owe me 40 hours work a week. Provided they give me that every week, I don't really care when the work is actually done, or what they're doing with the rest of their time, it's theirs not mine.

Having said that our company is pretty liberal, and encourages experimentation on our own codebase, so those "personal pet projects" often result in enhancements to the company systems.

You want people who are passionate about what they do. Don’t get me wrong. But I have seen many windows minimised over the years from boys working on they own AOP, Mocking and ORM frameworks. As well as trying out the latest and greatest new thing. Or continuously checking twitter, or their own blog for updates. This is always to the detriment of the task they happen to be working on and paid to do. Don’t kid yourselves.

That's where we disagree. I trust my developers, they don't have to minimise Twitter, or ebay, or whatever when I walk in. I measure them on their output not their activity. If they want to build an ORM or mocking Framework, I'm happy to sponsor the work if they prove the value in it. 9/10 times, during that evaluation, they prove to themselves that the value of reusing or contributing to existing projects far outweighs reinventing the wheel.

If you measure a developers productivity by the time they're sitting diligently in front of a PC you're wasting everyone's time. If one of my devs is having a bad day I'd rather they take the day and catch up hours than screw up the codebase and waste everyone's time.

Great to know, I won't submit my app that is basically all .cmd scripts being called by a asp.net app, but then again sometimes quick and dirty is easy. :p

I wish my company would take a similar stance as there is definite value in this process; you get quality candidates that will be able to perform and keep up with the technology. But alas, we are just an I.T. department in a grocery chain company and not an I.T. company, as we are often reminded.

So, I've opt'd for a question like, what blogs do you follow daily/weekly. If they don't list this one, I send them packing! ;) JK, though if they say they don't they lose serious points because I know they aren't interested in keeping their knowledge up on the technology they are supposedly professional at using.

This statement "if you aren’t coding for fun, you are not suitable for a developer position in Hibernating Rhinos" means that Ayende requires more than 40 hours/week: 40h for work + something for fun.

When you have home, wife and kids you must choose:
1) Do I spend my free time with family or sit down in front of computer
2) Do I fix something at home alone or I'll pay someone to do it
3) Do I spend time on searching cheapest yet best for me phone/camera/notebook/etc. or take something I know works, but is expensive

Even if Ayende pays more so one can not waste time on points 2) and 3) it still is strange requierment.

I personally am trying to spend my free time with my family so the only free time I have is enough to listen to some podcasts read some twitter/blogs and eventually do some small experiments with programming. There is no way I'll find a time for some open source project.

When I hire people it's enough for me to see what projects one has done, talk with him to verify is he at least a little geek and then we always have trial period. I require from people to be interested in programming and open minded (you can quickly find it during interview) but I never require their free time.

BTW. I really appreciate Ayende for his time but I'm curious at what cost this happens.

It may just be me but I'd think as a profession we are beyond the "40 hour workweek" stuff left over from the factory days. Developers should be measured in productivity, not time spent in the office/at their desk like some salesperson. It doesn't matter if it takes you 2 hours to do something and you spend the other 6 mucking around, or if you're diligently coding the whole day, results are what matters. And besides a lot of development isn't banging away at the keyboard like a monkey, it's thinking, experimenting, and then you code; to the untrained manager this looks like not working but in reality for most developers I would say we only average 4-5 hours of actual "work" and the rest is spent researching/thinking.

@Seer, last time this came up and I raised the issue of having kids to look after, Ayende replied that he has dogs and still manages to find time... I think he is in for a very big shock if/when he has kids.

Personally, giving up coding out side of the office was the best thing I ever did. After spending 9+ hours in front of a PC at the office, getting home and doing other things is much more important and rewarding. I still do the odd thing usually patching existing projects when they annoy me or if it's something very new that I want to try out that doesn't fit in with my work, but it's very rare.

If I was interviewed for a job and all of my experience was disregarded because I don't have any pet projects I'd be pretty insulted and would walk out of the interview.

However I am lucky in that I am measured on meeting deadlines rather than perceived productivity and my boss lets me get on with things in my own time if I meet those deadlines. I am also expected to spend around 10-15% of my time on research and (work related) personal development too.

@SeeR you should check this post from Ayende http://ayende.com/blog/102403/pet-projects-and-hiring-decisions .

I personally really like the logic of Ayende in hiring people. Passion is one of the things that will guarantee that the person you're hiring is a great developer. And passionate people tend to write great code. And learn new stuff. And have pet projects. I could go on but I think everyone gets the point.

@Craig Dude, I am not coming at this from some totalitarian manager, who wants his employees whipped all day. Or from some liberal, hip cool thinking manager, who knows that trust gets the best out of his devs. I am coming at it from the view of a dev who is working on the same code base as “some” of these guys. Seeing with my own eyes, the half assed attempts and bugs. Knowing very well their mind was elsewhere.

Our local community college wants employers to think its graduates are really smart. As a result we noticed that almost every single applicant that applied from this community college had a 4.0 (perfect) grade average but knew almost nothing about programming. So as part of the pre-interview process we started requiring applicants to solve the Fizz Buzz test (and some others of similar difficulty) on the spot before they talked to any of our developer managers. After issuing this test about 50 times, we were surprised to see that only a small minority of applicants even get close to a correct answer.

I'm a physics graduate and when I was at uni I was gobsmacked at how bad the CS students were. I thought I'd be able to go them and ask for advice when I was stuck or confused. Usually they looked at me blankly. Once I was told that I couldn't do polymorphism in C++.

The guy who had my job before me was a CS grad from a major university, got a good degree too. I don't even know where to start on how bad his code was., loops didn't seem to exist in his world. The best coders I worked with have usually been educated in other disciplines.

Remember Ayende is talking about young developers, generally less than a few years out of uni, who are looking for new jobs.

If you have an established career already and a busy job, and you feel confident that you can keep up with technology changes, I don't think you necessarily need to be 'coding for fun' as well.

But go talk to many other professionals - architects, artists, lawyers, doctors etc. You might be surprised by the level of extra-curricular work they are required to do in order to maintain their career.

Besides, an experienced, senior developer should be able to whip out some good portfolio code in a week or two of downtime anyway. I know if I ever lost my job, the first thing I would do would be to take the opportunity and spend a couple of weeks diving into some new things. In a couple of weeks I could bang out 2 or 3 apps that would be enough to impress a hirer.

I really don't like your tone in this post. Getting "angry" about candidates CV's and implying you think less of them is a bit much.

It's absolutely okay to have a preference for the type of candidate you are looking for. Even better, how that preferred candidate should appear as early as their application.

Focusing on the kids coming out of college, don't classify the candidate as a "moron" (implied via the tone of your blog post) simply because they don't meet your preferred qualifications. Pass on them, then move on.

Better yet, take this opportunity to teach them. Rather then get upset, why not ask them to elaborate on their submissions AND tell them why you are having them do so. Inform them why you think it is important, helpful, and how it may be important when applying at other companies.

I don't know why this would piss you off, as an interviewer. You have gotten exactly what you were looking for by asking for a code sample and getting lousy submissions: you ferreted out a candidate that was no good.

This is much more efficient than scheduling an interview, and wasting several hours of several peoples time to attempt to discover the same fact.

What should piss you off is how bad most software developers really are, in practice.

Everyone who is talking about having Kids, wife, etc.. is missing the point.

Unless 100% of the time is occupied and you have zero free time to do any hobbies, then having kids isn't an excuse. If you still have time to watch TV, read a book, etc.. then you could code if you really wanted to instead of these other activities.

f you don't want to in your free time then that's fine, there is nothing wrong with that. It just means you aren't a good fit for Hibernating Rhinos. Me personally, even though my free time is limited I'd rather spend it programming then watching TV or reading, as I find it more fun.

It's not that you have no free time when you have kids. It's that you can't string more than 10 minutes of it consecutively... That being said, hopefully your SO will let you have 4 hours on the weekend to yourself for this.

I recently interviewed a candidate for a c# job. When asking him to explain certain fundamental concepts, instead of answering, he pulled out a large printout of some code he had worked on. He felt that the code would speak for itself. I took a quick glance at the first page, which began with something like:

/// Copyright 2011 - HisLastEmployer...

And then of course I had stopped right there and handed it back to him. He was absolutely appalled that I wouldn't consider it. Then I had to lecture him on the following points;

1) That's not your code, that's theirs. They PAID you to write it. You should never violate the intellectual property of your employer. How do I know you wouldn't steal code you wrote for me?

2) How do I know which parts of this (if any) were actually yours? It could all be someone else's work for all I can tell.

3) Can we go back to the original question? If you can't verbally communicate certain fundamental concepts, then I don't care how good your written code is.

He proceeded to walk out of the interview. That's one hire I'm glad I did NOT make.

Compare that with the next candidate. He included in his resume a link to an open-source project on github, where I could clearly see his contributions in the check-in history. He didn't need to work on it that often, but when he did there was purpose to his code, and his style was clean. When he came in for the interview, he was able to answer my technical questions, and explain his work on the project. He got the job.

The argument above about requiring over 40 hrs per week is nonsense. You can put in an hour here, an hour there. Help out on others projects where you can, etc. You don't need to champion your own project and be a slave to it. Sometimes, you don't even need a project, just answer some posts on StackOverflow with some good code samples. All of that will help an employer get a feel for your abilities without violating someone else's IP or limiting you to "classroom code".

So let me see if I understand this. Because I picked a job where I get lots of interesting work, and have enough skill at programming that I have risen to a position at work where I am handling several critical projects, and so simple do not have the mental energy to do outside programming (I relax instead by reading graduate level math and CS books, in order to improve my theoretical background), you would not be interesting in me?

SeeR,
In that case, you are not compelled to go and work for us.
Note that in all the cases that I mentioned, there has been no compulsion from anyone to go and do that.
We simply select for people who are passionate for what they do.

busy_programmer,
Put simply, yes.
You have no visible record of actually being able to do something.
If you are interested in working for Hibernating Rhinos, you need something that shows what you can do.
It can be a patch that you submitted to an OSS project that got accepted (which is actually quite common), it can be your own stuff that interests you.
Hell, for all I care, go and write something interesting just of the interview, but I want to see your code.

These people saying it's Ayende's loss that he wont hire them?!? If anything it's their loss... I would love to be given the opportunity to work on RavenDB, RavenHQ, and other projects on a daily basis.

Just being in JabbR chat room helping people with their questions in regards to RavenDB is fun, getting to dive in and see what it's capable of, but it would be awesome to work on RavenDB full time, and what ever other interesting projects are going on in his office we don't know about.

And the guys from Hibernating Rhinos that come into JabbR chat-room now-n-then, are brilliant guys, so much to be learnt from them.

Really I think it's your loss for having no passion. People who have no passion in this industry just create technical debt for the rest of us to clean up.

I wouldn't enforce a standard like Ayende's when I was interviewing people. But you know what? I'm pretty damn sure that the work Ayende and his team are doing at Hibernating Rhinos is a hell of a lot more demanding than the web dev work I'm hiring people to do.

I don't think it's unreasonable in the least for him to have demanding standards - even if I probably wouldn't measure up to them myself, at this stage of my life (I would have when I was 20-something, though).

For finding out how to find people, i suggest (for fun) to read the "tales from interviews" series on thedailywtf.com
Joel's (Spolsky) articles on his hiring endeavours are also a very good read.
I can recommend both to anyone interested in the question "how to hire great programmers".
Also, there is a worth to read chapter in 37signals "getting real", but i'm not sure what the title was
Regards

IMHO, the .NET Framework Design Guidelines are a bit overrated, particularly when it comes to naming conventions. I've been using a Ruby style naming convention in .NET for years. To me, it is much more readable. I always dread working on code that follows the archaic naming practices.

Wouldn't it be nice if we all actually earned money on our pet night/weekend projects? Well if we did then they'd slowly become our full-time day projects. Unfortunately, we engineers have cut-throat ourselves into being the cheapest labor outside of cows. Even musicians are smart enough to charge at least .20 cents each song :-)

I have a wife and kids and it's almost impossible to do any get work done on a pet project. It's not that I don't have passion for my craft but ... the kids are exhausting! (and anyone who compares that to looking after a dog is frankly an idiot).

"Me" time is between 9:30 and the time I go to bed, by then I've already done a days work and done a couple of hours of child care. Bear in mind, I've probably not had an uninterrupted nights sleep either. I'm just not going to write good code at that point.