61

For background, we are doing desktop engineering applications, with an AutoCAD like UI, something similar to etabs.

One thing that really bugs me is, is there any need to hire the very best developers? For starters, we are experiencing great difficulties in recruitment; most resumes we see are either doing simple CRUD apps, or SharePoint customization which I don't think really involves a lot of hardcore programming. Even those whom we call for interview, most can't do Fibonacci sequence and a simple binary search, and we are gracious enough to give out hints and spell out the problems explicitly so that the candidates don't have to lookup a dictionary to check what does "Fibonacci sequence" mean.

This got me thinking: Yes, we do need some level of programming aptitude when doing computational geometry/ linear programming stuff, and we do need some level of programming aptitude when designing the software architecture/ or deciding which software pattern to use, but beyond that, a lot of our code are just plumbing code ( I think), which can be done by someone with some familiarity with programming.

Given that we really need programming talents now, and given that hiring superstar developers are very hard, I want to lower my standard and hire only the so-so ones, in direct contradiction to what Joel preaches.

What do you think?

Edit: You don't need to rewrite the whole computational geometry/linear programming libraries; all you need to do, as far as my application is concerned, is to be able to know how to cast the problems at hand into appropriate computational geometrical/linear programming terms and know when/how to use the existing libraries. So it's not as difficult as it seems.

Graviton
  • 4,013
  • 9
  • 37
  • 50
  • 53
    Standard answer: maybe you're offering too low salaries and better devs are not interested in working for you? Anyway, if you have problems with people unable to do binary search, than it's not a problem with the lack of superstars, an ordinary run-of-the-mill coder should be able to do it. – quant_dev Apr 29 '11 at 08:37
  • 3
    Are you planning to work long at this company? If not, then sure, go ahead and hire the bottom of the barrel. Just don't expect any competent developers to ever want to work there (or stick around if you've already managed to hire some). – Anon Apr 29 '11 at 12:34
  • Why would it matter what domain you are in? Does "hire mediocre developers" somehow become better advice because you write *desktop* applications? – Rein Henrichs Apr 29 '11 at 15:11
  • 15
    Your title capitalization makes me read it as P A N D A :) – cthom06 Apr 29 '11 at 15:46
  • 13
    They can't write Fibonacci sequence? That is in no way difficult... these people can't actually be programmers. – Ben B. Apr 29 '11 at 23:22
  • 3
    @Ben - It's not difficult when you know what it is, but some of us wiped our minds of the Fibonacci sequence many years ago. – kirk.burleson Apr 30 '11 at 01:11
  • 3
    @kirk.burleson, when asking a question on the Fobonacci sequence, you should first refresh their memory on what it is. A quick rundown of what it is should be more than enough to write a recursive function to calculate it. – riwalk May 02 '11 at 17:19
  • 6
    Graviton, it all comes down to salary. If (just for example) you offered triple market value for salary, then you'd have people willing to leave their jobs to come work for you. I'm not suggesting that you offer THAT much, but it does illustrate the point. If you want good resumes, then you need to pay for it. – riwalk May 02 '11 at 17:21
  • Are you by change a UK company? – Darknight May 03 '11 at 09:51
  • @Darknight, nope, I'm not a UK company, why? – Graviton May 03 '11 at 10:31
  • sorry, your description sounded very similar to a job posting here in the UK. Coincidently they too are having difficulty in hiring as that post has popped up a number of times. – Darknight May 03 '11 at 10:44
  • 2
    @Stargazer712 some of us do care about other things than just money. While it doesn't hurt to have a good starting pay, it isn't the end all be all. :) – Tony May 03 '11 at 12:09
  • Why should you be concerned about programming a Fibonacci sequence? Why aren't you concerned about the practical application of one of the THOUSANDS of Fibonacci modules already written to something useful to your company? – Incognito May 03 '11 at 13:18
  • 7
    @user1525 because its something trivial, developers shouldn't normally have a problem implementing it (recursion or no recursion) – Darknight May 03 '11 at 15:59
  • I guess a great business model would be where you could create an app that sells but isn't complicated. Usually, when apps are not complicated for the user, it's because of a pretty good programmer. – JeffO May 04 '11 at 11:49
  • Never tried to write a Fibonacci generator before, just tried it and it only took 3 minutes - thank God I can do it! LOL `public static void Fib(int x1, int x2) { Console.WriteLine(x1); x2 = x1 + x2; x1 = x2 - x1; if (x2 < 1000) { Fib(x1, x2); } }` – richard Jun 29 '11 at 06:26
  • 1
    I have to say, after giving it a go and finding it a simple logic problem, you really wouldn't want to hire a programmer who couldn't sort that out. It's a problem solving issue, and programmers should be problem solvers. – richard Jun 29 '11 at 06:29
  • 3
    By the way, don't knock CRUD apps . . . not only do they make the world go 'round, most of us make our living from them, and they are incredibly hard to get right. – richard Jun 29 '11 at 06:50
  • 1
    Can't implement Fibonacci sequence!!! IMHO, they aren't programmers; they are just typewrites who happens to know programming language syntax & libraries. – user Feb 23 '12 at 18:13

21 Answers21

111

I suggest you stop reading Joel too much. What he has written in his blog contradicts with his responses on this site so I wouldn't really take his word for much.

What makes a superstar and why it is necessary to have one opens a long and a nowhere-going discussion. It is elitism and it is not practical.

What you need is a person who:

  1. Would love to be doing what you are doing
  2. Would be a passionate enthusiastic programmer
  3. Would have the potential to learn what it takes to do your job right

The rest is of no importance.

You wouldn't believe how many young graduates are out there who want nothing else but to dive into this kind of a CS-strong project and never ever look at coding CRUD applications. A while back I was one of them, I practically dreamed of joining a project around compiler development but wasn't able to find one. Why not give a chance to one of them?

I do not believe AutoCAD was written by supermen. Most of the successful projects were done by people who simply wanted to get the thing done and they really wanted that.


most resumes we see are either doing simple CRUD apps, or SharePoint customization

What is to expect if most jobs require just that? People might have studied CS at the uni and even have been really good at it, but you can't expect them to remember it if they have never used that in practical programming in 10 years. Obviously nobody is going to be reading over old CS books every year just to keep it fresh if this knowledge is not used anywhere.

  • 11
    Amazing answer! –  Apr 29 '11 at 07:18
  • 33
    Yeah fine, but I've worked with passionate enthusiastic people who have not got a clue. They are a dead weight, and you do not want them in your organisation. So some BASIC aptitude tests to weed out the really dumb schmucks is a very good thing to do. – quickly_now Apr 29 '11 at 07:47
  • 3
    The last paragraph describes me to a tee. – ozz Apr 29 '11 at 08:23
  • i completely agree with the idea of Aptitude tests. Here in India it is a ABSOLUTE must before IT companies hire their proffesionals. – Chani Apr 29 '11 at 09:02
  • 20
    Seen a lot of "aptitude tests" that were utterly useless, even had glaring errors (and pointing them out made you fail the test, when finding and pointing out errors is part of our job as developers...). – jwenting Apr 29 '11 at 12:23
  • @jwenting: Wow, that's so wrong. I've actually seen the opposite - trick questions. Questions that are quite obtuse and esoteric AND contain an error. I always thought that was a pretty good idea. It mimics the chaos of obscure bug hunts. You want people who make no assumptions and think laterally. Why anyone would want to weed out someone who finds an error......just....wow. – Bobby Tables Apr 30 '11 at 00:13
  • I believe it happened to me once. I suggested an alternative solution which was in my opinion more effective but nobody wanted to listen to it even if I tried to present it. –  Apr 30 '11 at 07:01
  • 2
    @Developer Art, perhaps that was lucky for you? If you couldn't convince them of the wrongness of an interview question, imagine what troubles you would have on the job. – Mark Ransom May 02 '11 at 15:23
  • @Mark Ransom I think that as an 'interviewee' things are not on your side to begin with. You are the underdog, no matter what the interviewer or the company which is interviewing claims. Esp. the new graduates are nervous. I think @Developer Art at least gave an alternate solution, most folks will find it easier to accept what interviewer said. – sabertooth May 02 '11 at 15:32
  • @Developer Art: I was lucky enough not to get offered a position where my solution was shorter, simpler and more standardized (it was a javascript test with html output) than the one offered up afterward. They had allowed an hour to solve it and said they'd be back in 30 minutes to check on me. I spent 25 minutes surfing the web waiting for them to come back. – Joel Etherton May 02 '11 at 16:17
  • 2
    Any programmer worth his weight should be able to hack out a solution on paper, though I think the Fibonacci sequence is a bad example because even I today do not remember what makes up the Fibonacci sequence. I'm not stupid, I just don't remember sequences that a Mathematician dreamed up sometime ago, nor do I remember all the algorithmic solutions I have developed. I'd be more interested if a programmer can show me some bitwise logical operations or how well they can work with others. – Engineer2021 May 02 '11 at 17:52
  • The truth is, that programmers come from various backgrounds. Some from web, some from true native application development. Because of this, experiences are varied and you cannot expect your candidates to know these specific examples, especially if they've been in the field for a while. However, these, what appear to be weak, experiences may make up for their dedication and attitude, something you should consider since we all get better over time with experience and motivation. – alvincrespo May 02 '11 at 18:19
  • 1
    I'm passionate about playing the piano. But I don't do it well enough that people would necessarily pay to hear me play. Passion is not a substitute for ability, nor is it the same thing. I'd rather hire someone who looks at programming as a craft than who looks at it as a passion. – Kyralessa May 03 '11 at 04:03
  • 2
    @0A0D: Fibonacci sequences are frequently useful, rather than being a mathematical curiosity. However, anybody you want to hire should be able to write a Fibonacci generator given a definition of it. I wouldn't hold it against anybody who had to ask what it was, as long as that person then did a good job of writing up the routine. – David Thornley May 03 '11 at 13:54
  • @David: I agree as long as the definition of Fibonacci is presented, then a programmer worth his weight should be able to produce a function to generate it - even on paper. He or she should then be able to explain why they designed the function the way they did. I have not ran into a practical use of Fibonacci in the 'real world' in my almost 10 years of software engineering experience and I have worked in more than one commercial or government capacity however. – Engineer2021 May 03 '11 at 15:21
  • +1. I think for a certain definition of "superstar" you and Joel are in agreement. Even the three criteria you give seem to be on the rare side. – jprete May 03 '11 at 17:31
  • @quickly_now I've also worked with really good programmers who were in no way passionate or enthusiastic about the project and chose instead to parade their general knowledge of programming instead of actually solving any real problem. They were a deadweight too. Depending on the project, after a certain point, the technical knowledge / programming aptitudes of someone working on it become kind of moot. However the fact of being passionate and enthusiastic about it doesn't have such issues: the more you have it, the better it is for everyone. – Shivan Dragon Mar 12 '14 at 10:36
41

A book that I really like is First break all the rules. It has a lot of information about the differences between average managers and good managers. One of the key insights that good managers said over and over again was summed up by one of them in the sentence, I've never waited too long to find the right hire, and I've never fired the wrong hire fast enough. Yes, it is frustrating to take a long time to hire, but it is worth while.

A second point that you should keep in mind is that when measured on project throughput, there is a productivity peak for teams of 5-8 people. You don't get back to the same productivity until you have a team of over 20 people. Be very, very cautious about growing a team past the size where small team dynamics work. And if you're going to stay below that threshold, then you really want those 5-8 people to be good.

Both points speak strongly towards holding out for the right hire.

btilly
  • 18,250
  • 1
  • 49
  • 75
  • 2
    +1 for that quote. It mirrors perfectly what I've come to realize over the last few years. – Kris Apr 29 '11 at 12:43
  • what's interesting with the 5-8 peak, is that as soon as you get 10 people, you can just split :) Of course, the work needs be splitted too, and preferably not randomly... – Matthieu M. May 02 '11 at 19:33
  • @mattieu-m: A lot of people have that theory. If the two groups actually wind up needing to interact heavily, then it doesn't work. If they can be given truly separate concerns, then it works well. – btilly May 02 '11 at 20:58
26

Everyone claims to "hire only the top 1 percentile". If that were true, 100% of employed people would all be in the "top 1 percentile" of all people, so 99% of all people would be unemployed (in any given field). As this is clearly not the case, and we've all experienced people who're clearly not in that group (why else do you ask this question at all...) we know this isn't true.

In fact organisations made up solely of such people would be highly unstable. Too much ego, too many conflicting ideas. It'd either fall apart as everyone does his own thing, bog down in never ending theoretical discussions about the relative merits of everything, or evolve into a constant shouting match as sentiments flare whenever a decision has to be made.

jwenting
  • 9,783
  • 3
  • 28
  • 45
  • very good point. Having All the Superheroes in one room is going to be such a mess – Chani Apr 29 '11 at 09:03
  • 13
    The trouble is, just because you hire only the top 1% of candidates who apply to you *doesn't* mean that you are hiring the top 1% of developers. *8') A far as *superhero*s go, they are frequencty considered a problem for the rest of the team. One person working at 200% but reducing 5 people to 50% isn't a net gain. – Mark Booth Apr 29 '11 at 12:03
  • 2
    +1: Statistically, most people are within a few percentage points of the mean. Anyone who doesn't appreciate that is living in a dream world. And you're absolutely right: people who are too far from the mean are disruptive, whether they're above *or* below average in ability. – Satanicpuppy Apr 29 '11 at 13:33
  • Although I'm reminded of http://xkcd.com/309/, I think living with conflicts of ego would probably be worth it for working with only the best talent. – Michael McGowan Apr 29 '11 at 14:36
  • 5
    @Satanicpuppy: Statistically, given a normal distribution about two-thirds of the people are within one standard deviation from the mean, and something like 98% are within two standard deviations. This says nothing about what the standard deviation is, or in fact if any arbitrary distribution is normal. Programming ability among programmers is definitely skewed, and could even be the right tail of a normal distribution. – David Thornley Apr 29 '11 at 14:52
  • @david: Any citation for that? I know my peers all like to believe they're better than average programmers, but I've never seen any evidence of it in my professional life. – Satanicpuppy Apr 29 '11 at 15:50
  • 11
    A main reason why programming talent among **programmers** might be skewed and/or the right tail of a normal distribution would be if programming talent in **human beings** were normally distributed. The sub-sample of human beings who become programmers is a biased sample of that distribution; that is, the people who are average or worse at programming rarely become programmers. This could make an "average" programmer have above average talent relative to the population in general, and it could also make programmer distribution talent look like the right tail of a normal distribution. – Michael McGowan Apr 29 '11 at 16:37
  • @Satanicpuppy: Most of what I said will be found in any elementary statistics book. The "right tail of a normal distribution" I first remember seeing in one of Bill James' Baseball Abstracts, but it should be pretty clear given some knowledge of statistics. – David Thornley Apr 29 '11 at 16:55
  • @david: I know what a skew is. What I want to see is your basis for saying that the curve that describes the ability of the population of programmers skews right. Any assertion that there are more programmers whose ability falls on the "above average" side of the curve than there are programmers whose abilities fall on the "below average" side of the curve must be supported by some actual real world evidence. My anecdotal experience tells me that, if anything, the curve skews left. – Satanicpuppy Apr 29 '11 at 20:35
  • @michael: I'd agree that across the general population, programmers would stand out. If you graphed the population of a company by analytic reasoning skills, I'd expect to see a normal bell curve, with a funny bump on the right signifying the programming staff. But I can't see our whole population skewing. Too many mediocre programmers out there. – Satanicpuppy Apr 29 '11 at 20:39
  • @Satanicpuppy: It's got to be skewed some because programming ability varies widely. There are a reasonable number of people who have ability over twice the average for programmers, and nobody can be that far below average. Therefore, there's a longer tail to the right than the left, which means that the majority are below average (average referring to mean here, not median or anything like that). That's the same principle that shows that adult human weight is skewed: the average is maybe 160 pounds, I know people 240 pounds more but nobody who weighs -80 pounds. – David Thornley Apr 29 '11 at 21:22
  • 2
    @david: "Nobody can be that far below average"? I wish I worked where you work. – Satanicpuppy Apr 29 '11 at 21:30
  • 1
    I think the thing to take away from "only hire the top percentile", is that the other 99% should do something else for a living. – Orbling Apr 30 '11 at 00:46
  • 1
    @satanic, @david:it's because the average is not at the center but to the left, so yes not much people can be so far below average and there is a longer tail to the right. There is a graph at p.30 of the book Pragmatic Thinking & Learning which come from the Dreyfus model illustrating the distribution between the 5 skill level of the model (novice, advanced beginners, .., expert). The study was not about programmer but they tested a range of profession and was mostly the same everywhere so I think we can extrapolate to programmers. Otherwise the book is only average but I still recommend it. – n1ckp May 02 '11 at 20:34
  • Maybe if for every one good developer that applies for a programming position, there are 99 wannabes who write VBA macros or such and want to break out of their admin desk jobs typing numbers into Excel. – Andrew M May 03 '11 at 14:35
  • 1
    I wonder how many of those companies are willing to give salaries that match their "we only hire the top 1%" claim. – Buttons840 May 17 '11 at 17:49
  • Sounds to me like there's some jealous mediocre programmers who make themselves feel good about their mediocrity by denigrating the top programmers. Why on earth would anyone come to the conclusion that top programmers are arrogant, egotistic blowhards? That wouldn't fit many people's definition of a top 1%er. Top 1%ers solve problems, come up with easy solutions and get the job done far quicker than others. What part of any of that necessitates them being arrogant, egotistical or blowhards? BTW, it has been my experience that 100% of programmers consider themselves as top 10%ers. – Dunk Oct 19 '11 at 23:12
  • @Dunk most of them are however also selfcentered soloists with strong personalities and deepset convictions and ideas. As such putting them together is likely not going to lead to a cohesive team, far better to have each of them lead a team of less skilled programmers who will accept their leadership and ideas rather than constantly challenge them and refuse to accept their opinions. – jwenting Oct 24 '11 at 05:39
25

The first thing you need to ask is why you're getting resumes that aren't up to the standards you want. I've worked with a lot of good people, so they're out there, and the application sounds very interesting to me. If you can't get people who can do Fibonacci sequences and binary search (which is more difficult than it seems; according to Knuth it was several years between its first publication and its first correct publication), you're doing something to drive the good ones away.

Are you asking for more skill than you're willing to pay for? Are you advertising in the wrong places? Is your company unattractive by location or reputation? This is your first and most basic problem, and the one you urgently need to solve. You and your colleagues doubtless know some good people who aren't working for you. Show them what you've got, and ask them whether they'd be tempted, and if not why not. You may be too close to the problem to understand it unaided.

Don't hire people because they're the best that applied. Hire people because they will be able to do something you want done. If you hire mediocre because that's all that applies, then you're slowly going to lose good people, and you're going to wind up with people whose algebra is shaky trying to do things with computational geometry. (Hiring mediocre because you have a job for a couple of mediocre programmers is another thing, but you have to be able to hire quality people where you need them.)

David Thornley
  • 20,238
  • 2
  • 55
  • 82
  • 7
    Because HR departments are vastly incompetent at screening software candidates. Requirements: 10 years in coffee script, 40 years of programming PHP, education: B.S./B.A. – Incognito May 03 '11 at 13:24
  • 1
    @user1525: It could very well be HR incompetence, but the important point is to find out why and how to correct it (or find that it isn't correctable, so it's clear that it's time to jump ship). I wouldn't jump to conclusions. Your answer does suggest another approach: have good people submit resumes and see what HR does with them. – David Thornley May 03 '11 at 13:50
18

"most can't do Fibonacci sequence and a simple binary search"

Your criteria are certainly wrong. In my group we are all physicists or engineers. I bet nobody could do binary search because we did not attend CS courses and in true life we use a library for that. I would even say: someone who writes binsearch himself does not know how to focus on important things.

It is of much greater importance, if the candidate is smart and fits into the group. If you want to check his programming talent, give him/her a job to do at home. Note how long it took him/her and discuss the results to find out if it is the candidates genuine work.

michael
  • 61
  • 2
  • 3
    It may not be expected that the applicant get the binary search exactly right, but if you can give the applicant some hints, he or she should be able to get close. IMO, it's more interesting to see how people try to solve challenges presented to them than for them to have an encyclopedia in their head. – internetdotcom May 03 '11 at 18:24
  • 11
    I'm a physicist by training and I can do binary search blindfolded and with one hand tied behind my back. Sorry, but not knowing how write a simple binary search implementation is... poor. No other word to describe it, just poor. – quant_dev May 04 '11 at 06:10
  • yes, you are right. Binary search, at least the basic idea, could be done indeed. I can do it too. – michael May 04 '11 at 13:11
  • ... at least the basic idea (although I could not do Fibonacci without first looking up what it was). But a test like this puts people in advantage who just attended cs classes or simply prepared the questions accidentally. It is more useful to give candidates a real world programming example. It shows how they solve more complex problems without immediate pressure and it might also show the candidates, what kind of work you expect them to do (pick a good example). Much more useful than textbook questions IMHO. – michael May 04 '11 at 13:19
  • 2
    Not knowing the definition of the Fibonacci sequence off the top of their head isn't worrying. BUT, being unable to write a program to compute it after it has been explained is worrying (even if all you expect them to do is compute subtotals in a simple CRUD app!). – Stephen C. Steel Oct 20 '11 at 02:33
13

I think that "hiring the best" is becoming too much of a cult.

Most programming work is routine and not creative. Even when working on really creative new projects. Most of it is humdrum, and often based on patterns. this is particularly true for UI.

Most modern systems also require so many people to write them, that inherently, they all can't be the best. Most people are average, even if they are not, they still have to do lots of "average" person's tasks.

That being said, demanding basic competency and minimum sensible requirements is not unreasonable and not something that you should compromise on.

Think about routine surgery: Depending on your risk tolerance, you would probably prefer to have an average doctor perform it rather than wait 10 years for the Dean of the medical school to have time to do it. That does not mean you should let the orderly perform the surgery.

Dimitrios Mistriotis
  • 2,220
  • 1
  • 16
  • 26
Uri
  • 4,836
  • 1
  • 18
  • 23
  • Not to quibble... but the "average" doctor, who has performed hundreds or thousands of that type of surgery might be preferable to the Dean of the medical school who may have more knowledge but not nearly the experience – JoelFan Sep 14 '11 at 11:47
8

"Hiring the best" tends to mean "hiring the best that are currently available roughly where we are" anyway, and means different things to different companies. Some want rockstar coders, others want meticulous software engineers and the next one down the road wants experienced software craftsmen. There is no "universal best", so keep that in mind, and maybe your job spec suggests you're looking for one type of programmer and the interview says you're looking for another type programmer. Suddenly, you don't get matches.

That said, I don't like working with so-so programmers. So-so hasn't got anything to do with experience (they might have been programming for 20 years and still aren't very good at it), but everything to do with aptitude and enthusiasm. If the so-so affects either of those two, you have an issue. There's also no point in hiring someone whose contributions need to be reworked by other members of the team because they code isn't good enough. More bums on seats isn't always in the answer, more bums on seats can unfortunately also mean more work for the better members of the team as they're trying to do their jobs and clean up the mess the so-so programmer has delivered.

Some people don't come across as rockstars, but are solid mid-level programmers. They're good to have on the team and that's not what I mean with "so-so programmer". The latter is someone who barely avoids getting fired every year at performance review time.

Timo Geusch
  • 2,773
  • 21
  • 15
6

In my experience Paretto Principle applies to programming too: 80% of the work is accomplished by 20% of the developers and vice versa. OK the numbers may be exaggerated. In reality you will have something like 20% of the employees doing 50% of the work (by work I mean good work, not merely lines of code). It's actually more like a bell curve. So in a team of 10, you will have 1 hero, 2 great guys, 4 average and 2-3 pathetic ones.

A lot of companies use the Bell curve to weigh appraisals. So pretty much no matter how bright your candidates are they will fall into their levels. You cannot have a team where everyone is at the same level. Doesn't happen.

Burhan Ali
  • 299
  • 1
  • 3
  • 16
DPD
  • 3,527
  • 2
  • 16
  • 22
  • 2
    +1, I agree. But I think the question is: Do you need the "pathetic ones" (e.g. for team morale or whatever) or would the team do as good without them? And can you recognize them in a job interview? – nikie Apr 29 '11 at 07:39
  • 10
    Define pathetic. If they are good plodders who do the boring grunt work but can't come up the the leap-of-wonder, you still them. But if they are just hopeless and can't do anything, then they are a waste of space. – quickly_now Apr 29 '11 at 07:49
  • The only reason for keeping the pathetic ones is that you cant get someone better to replace them. They do what we call "donkey's work": minor or massive changes that do not need much thought. – DPD Apr 29 '11 at 08:22
  • 1
    Is it possible to find them in the interview. Yes depending on the interviewer's skills. I let them handrun a few texbook programs and problems. If they pass this level i give them some more complex problems to judge if they can think. Pathetic ones may be good at syntax but it is only becuase they learn it by rote without really understanding it. They will flop at problem solving. Some will pretty much tell you that they cannot think on their own and can only work in Ctrl+C, Ctrl+V language – DPD Apr 29 '11 at 08:29
  • 4
    Donkey work drones at least do work. Its when they want to re-write 10 years of developed stuff in Haskell with a couple of links to OCaml, in 3 weeks, and everything else they touch turns to cr*p. Then you REALLY DONT WANT THEM! – quickly_now Apr 29 '11 at 09:27
  • @quickly: That's the sort of initiative that's led by an anti-hero, utterly destroying a project and wasting a team's effort for years. If only it was possible to be sure that a hero was not actually an anti-hero (or a flip-flop). – Donal Fellows May 03 '11 at 00:06
6

As a Manager type, I agree hiring "the top 1%" isn't practical, and isn't necessary. My advice would be to hire the right team to build and maintain your product (might be two very different teams, as build vs maintain are very different in their needs)

I would strongly suggest that you identify the people you currently have on your team who are "key people" (e.g. get things done, have good attitudes, can work with uncertainty/high level requirements well, etc.) and then hire people they have worked with in the past (and respect, obviously). This eliminates lots of the uncertainty around the interview process, and helps gel the team.

Also, more "longer term" - invest heavily in an intern program. If your programming team is 20 people, get 5 interns a year and give them real work. Bring back the one or two you like each year and bring in 5 more random variables. This is probably the best way to keep your team filled with good programmers. You can then hire outside opportunistically, and raise the bar for those candidates.

As has already been mentioned, pay attention to your interview process. Make candidates write code (or better, walk through their solution to a "1 hour take home" problem) make them eat lunch with the team. Get to know their technical and interpersonal skills. And never be afraid to say "no" even when you are desperate for 20 more people for a big project that starts next week.

Al Biglan
  • 1,098
  • 5
  • 10
4

There's already a bunch of answers here but I think there's still a point that needs discussing: the impact that hiring the so-so guys has on your software quality and how it makes your life as a manager much harder.

The answer to "is there any need to hire the very best developers?" is always a big fat YES. Of course in reality, this is not always possible. The dangerous mistake that I think you are doing by even considering this question is to think "our software is so simple even a so-so guy can do it". This is WRONG.

Your software will get done, don't doubt that, but expect very different results from an excellent team than from a so-so team. You'll have more bugs, more performance problems, more maintainability and scalability problems, and so on. You'll have to babysit your so-so guys through more complex problems. You'll have to babysit the so-so guys though proper architecture decisions.

If you accept this, and are ready to manage this, that's ok. Just be prepared for the process and for the results.

hbatista
  • 101
  • 2
  • +1. Yes. The idea that you can hire guys who can't even write a binary search *with help* and have them be anything other than pure dead weight - net negative producers, probably - is utterly ridiculous. – Tom Anderson May 17 '11 at 15:59
3

I think it is not really a problem to hire great developer. The real challenge is to make them want to work for you.

Is there any need to hire the best ones?
I believe so. Great developer is not only the one that get everything done on time. Not only such an individual is way more productive than others. Great developer is also leading by example and simply put inspiring to other team members. Other could greatly advanced while working with them.

OK, so you are going to lower your standards. That's cool, probably you will change your mind after you hire some really lousy individual. The one that will answer all your CS questions flawlessly but who cannot really write one single line of production code. Good luck with that :)

Paweł Dyda
  • 1,518
  • 12
  • 14
3

Lets take a step back.

What are we trying to do? Write software.

Why do we think we need to hire the best? Because that freakin' Arnold kid couldn't hack his way out of a wet paper bag and now the SQL is all screwed up and I can't log in.

Okay, so what is the best? I don't know, he's probably someone who wants a lot of money and has a resume six feet long with a great portfolio and worked at google or something. He should have a degree, and maybe some letters at the end of his name. Yeah, that sounds like the best to me, and by the best, I mean someone who isn't that freakin' Arnold kid. Oh, and he should know how to do some really hard crap I heard about in school like "write a bubble sort" or whatever they call it. I'll ask one of the other guys to name a few tricky things they had to do in school, yeah.

Sounds like you just don't want that freakin' Arnold kid? Would you? I'm tired of having buggy code, stuff takes forever to get done, and these new guys I interview tell me I need to re-write everything!

Right, so what do you ask the freakin' Arnold kid to do? Create a PHP website, write some jQuery, have the PHP do some basic CRUD with MSSQL, and change the background colours around.

Does that sound like a task well suited exclusively to the very best? I'm sure the best could do it, but probably anyone who's got the right skillset that matches this could do this.

So, you don't need the best? Right, I just need someone with the skillset that meets my goals.

Oh. Yeah.

Incognito
  • 3,458
  • 2
  • 25
  • 38
  • @user1525, it's not a CRUD app. It's engineering software. – Graviton May 04 '11 at 04:09
  • Not always. A lot of jobs out there don't require any knowledge of data structures, algorithms, or computational complexity. Sure, they're not the jobs at google search, but there's a huge demand for that. Just look at most postings on job boards, "I need a jquery plugin" or "give me an iphone app that looks like these psd's". People either want the best or the cheapest. – Incognito May 04 '11 at 13:11
3

Your question title mentions a "Normal Desktop Application", but your text talks about needing to apply knowledge of computational geometry and linear programming. Those are applications areas that have spawned huge, multi-decade research programs with massive societal consequences of any advance (recall, linear programming abstracts resource allocation). As a result, there are a lot of sophisticated approaches to solving problems in these areas that work very well.

A bad hire

  • may not have even heard of these classes of problems,
  • might not be familiar with the common solutions,
  • probably wouldn't know about the better stuff that's out there (hint: most undergrads never hear about the fancy stuff, if they hear about the problems at all), and
  • almost certainly would take ages to implement such things (considering that I've seen some of them give an entire graduate seminar in data structures fits, professor included).

In other words, think about whether you're really working on something pedestrian. If you are, great, hiring should be much easier. If you're not, hold out for someone who can do what you need.

Phil Miller
  • 180
  • 6
  • you don't need to rewrite the whole computational geometry/linear programming libraries; all you need to do, as far as my application is concerned, is to be able to know how to cast the problems at hand into appropriate computational geometrical/linear programming terms and know when/how to use the existing libraries. – Graviton May 04 '11 at 10:25
2

Surely I'm not a superstar programmer by Joel's standards. Nonetheless I have written quite some successful projects in my 20 years career as a developer. I could have solved your questions. But less from my experience at work, where in fact a lot of the more complicated work is done by asking your database or a library function to do it.

But if you decide to hire less experienced people, you should consider using technologies that are easy to handle. For example if you planned to use C++ for the whole project, then limit the C++ part to libraries written by your best people and let the others implement the user interface in Visual Basic.

thorsten müller
  • 12,058
  • 4
  • 49
  • 54
2

Write down the values you search in an employee who will join your ranks.

When the only appreciated value is programming competence you will find yourself quickly surrounded by people who value just that. Since most truly competent programmers have a more elaborate value system, they will refrain from joining your team.

However, it is more likely you are searching for innovative, creative, trustworthy, erudite, curious, self-learning, sociable, competent and dedicated people. Show that your company understands and respects these values and is willing to help its employees develop them further.

Understand and embrace the values of your current employees and communicate them in your job applications. Good companies, with a sustainable value-system, attract good employees.

Dibbeke
  • 2,514
  • 1
  • 16
  • 13
  • -1: if you said (and the OP talked about) money of course it would makes sense. I don't understand how this answer would helps him though. You're basically saying that he do not put enough marketing in his application if I understood right? Well, maybe that would help a small bit but I don't usually see a lot of highly competent people not putting at least a reasonable amount of value on .. duh .. competence ? .. like I said, replace "programming competence" with money and your answer makes a lot of sense but sorry I'm not getting it. – n1ckp May 03 '11 at 01:33
  • If you don't understand my comment, maybe you should not mod it down. Anyways, what I mean is quite simple. Over time, I met quite some excellent programmers. They know their languages, algorithms, math, physics... However, what made them great in the first place was an interest in more than just the craft. They often value curiosity in themselves and in others. They see independent erudition as an important trait (or value) or they are inspired by those around them who are creative. Often, these values are more important than their income. – Dibbeke May 03 '11 at 01:51
  • @Dibbeke: well I modded it down also partly because I don't see how this is related to the question. Nice rant though and I don't disagree with your last comment (although your answer is something else) but I still fail to see how it would help the OP or answer the actual question. – n1ckp May 03 '11 at 03:25
  • @n1ck When you said marketing, I started wondering if basing a hiring process on basic values is really the same. I don't know, but I do recognize that building a social network of trust and respect is heavily influenced by it. This in turn influences the reputation of your company and helps you attract those top-notch software developers. – Dibbeke May 03 '11 at 07:55
  • @Dibbeke: not sure if I got your last comment but I think I agree at least a little with you. But again, I'm not sure it is helpful to the OP (although I see more how it is related to the question now). What makes me say that is he never talked anything about his company, so yes _maybe_ it could be a cause that his company has bad reputation, but I think you're jumping to conclusions .. – n1ckp May 03 '11 at 12:45
  • Also if what you're saying is that good people only go to company like google that have all kind of "toy" for their employee, I would disagree. We live in the real world and company too, money doesn't come from the trees and good people know this and like their company with a "no-bullshit" attitude, at least that's my view. – n1ckp May 03 '11 at 12:45
  • @Dibbeke: No, what do you mean? What values exactly? – n1ckp May 06 '11 at 17:41
  • I mean that money and technical competence should not be the only motivator nor value system in the company. Although it might work at first, your company will grow, and you need to assign some of those employees to 'mixed' positions. See it as 'employee reuse': your employees are more than just 'code-machines'. Instead, they'll become experts of the domain you develop for, keepers of your company's social structure and have a loyal stance towards you. If you really think otherwise, perhaps you need to outsource to a cheap labor country. – Dibbeke May 09 '11 at 08:01
  • @Dibbeke: Well first, I never said money was any good value system and I said multiple things to that effect so I would like if you could please stop talking about that. Technical competence, although correlated with the salary, is not the biggest correlation in my opinion (that would be responsability) so stop talking like if money == technical competence, those term are not equivalent. Second, I don't get how you got that it is the OP's problem from the question. Like I aldready said, yes it could be the reason why he has troubles getting qualified canditate (although it could also be .. – n1ckp May 09 '11 at 18:09
  • also be any number of other reason) it is in no way what his question is about and you do not answer anything much in that effect. Lastly, I still have trouble of seeing your point in all of this. My point was that things like "free training" and stuff like that are nice to have but you can't ask a company for that (they have to be big and have cash to spare) and is not the things I'm looking for when looking for a job. – n1ckp May 09 '11 at 18:16
  • Having the company let you browse SO for training is quite nice already and do not require any investment from them. More than that and, although nice, it becomes what I was talking about with the word "toy" and is not necessary. That's my opinion from your answer but, like I said, it seems like a far reach from the question asked anyway. – n1ckp May 09 '11 at 18:17
  • Ok, perhaps there was a misunderstanding somewhere. Perhaps I've not made myself clear, or perhaps I misinterpreted one of your comments. In any case, my apologies. – Dibbeke May 10 '11 at 06:37
1

In any organisation you have people with more experience and people with less. Not only that, but an expert in one field can be a novice in another. Sure an enthusiastic amateur can do more harm than good to a code base, but that's how they get to learn - from fixing their mistakes and discussing their experience with their more experienced colleagues.

My suggestion would be that rather than trying to hire superstars, you try to hire people who are reasonably bright, will fit in with your company culture, are keen to learn and have an appreciation of their own limitations.

Mark Booth
  • 14,214
  • 3
  • 40
  • 79
1

Certainly you should aspire to hire only the best. That doesn't automatically mean you'll be successful at it - there's only so many of "the best" to go around, and there will be winners and losers in the battle to attract them. Much of it will come from your aptitude and willingness to work hard at the problem, and the resources available to you.

Giving up before you begin is the surest way to lose.

Mark Ransom
  • 763
  • 5
  • 12
1

Binary search is an interesting problem because it is well known that most programmers will actually struggle to write it correctly (Bently writes about it in Programming Pearls). Perhaps it's not so bad to test for it so long as you aren't ruling out candidates based on their failure to solve it. If they solve it quickly and correctly then at least it hints at what type of programmer they are so you have more information in that particular case.

Anon
  • 1
  • 1
1

you do need to hire the best. but the term has been quoted out of context many times. you need to find the best candidate with the skills required for that position, and not the best programmer in an overall sense. Software development is broad and not every position requires the same technical knowledge.

Ask yourself this question ( you kinda already did..): If you have another engineer in the same position for 5 years, would you expect her to remember fibonanci series and binary searches?

if the answer is no, then change your interview pattern. May be you need to know a dozen search algorithms if you want to work on a search application like google or bing. Everyone else just uses map.get("");

target your interviews to what the position needs , not a textbook-generic good programmer.

gee
  • 1
  • 1
1

If you really don't care about quality then I'd suggest using one of the outsourcing websites and starting with small projects. Then you can pay them if they can do the work, and have an easy way to bail if they can't.

However, I question whether there is really much routine coding in a desktop engineering application. They can be very complex, and most programmers aren't that good at managing complexity. You could easily create a lot of instant legacy code that will tie up your team for years to come. In general, the first hires for a new project are the most crucial and will set the tone for the whole project.

Brian Slesinsky
  • 216
  • 1
  • 3
0

I totally agree with most of the comments above that refer to fitting a person to a problem. This usually results in a long term relationship rather than hiring a superstar to work on a regular problem - which will just frustrate him to leave quickly.
Having said that, You should always try to hire for your company rather than a particular position. Because this same guy is going to switch between teams sooner or later with personal contacts etc. and he might turn out to be a deadweight somewhere else. Ensure your company has very strict internal transfer guidelines and that you have a clear picture of what you will do in your team for the next couple of years before hiring a person who you think might not meet the company bar (but will solve the current problem). I have seen too many cases where mediocrity in developers has made the team work extra hard to fit around them.