Is “Hiring only the Best” a really Practical Advice?
programmers.stackexchange.com
programmers.stackexchange.com
I heard that to get excellent results I should do X,
but I don't see a really painless and trivial way to
do X. X doesn't seem practical.
When I work with non-coders to help them with their scripts or whatever, I commonly see all kinds of things that should be done better: simplify this, refactor that, etc. I have learned the payoffs for doing things the right way, and I try to pass some of these things on. Usually the response is "I understand. That would be a better approach." but then they go back to their old ways. They just want to get the immediate thing working and move on.It's not at all surprising that advice from smart people with a lot of experience seems like a lot of work to those of us just trying to get today's problem solved. But take a step back and look at anyone working at the top of their field and you'll find them doing lots of things that are hard, involving doing things right rather than just getting a task crossed off the list.
"Wow, that chef keeps everything spotless and sharpens his knife a lot, and only uses the best ingredients."
"That master carpenter sure spends a lot of time caring for tools and doing a lot of other things that aren't cutting wood."
Why should hiring coders be any different, unless you believe that coders are a commodity?
And generally, I don't think everyone at the top of their field necessarily gives the advise to use the absolute best tools and materials. A lot would instead give the advise to use appropriate tools and materials. A lot of good programmers can recognize that a quick but inefficient VB script can do better.
Quite so. Some "best practices" only earn their keep once they become ingrained and automatic. Prior to that there's additional cost that only makes sense when amortized over a long enough time. If there's no real reason to expect that payoff then there's no good reason to make that extra effort.
I've thought something similar many times but never articulated it that well
Unless you can offer some combination of industry-leading salaries, major prestige, the opportunity to publish and/or work on their own stuff (if that's what people want), etc. you're not getting the best. Maybe very, very good. But not 'the best'. If you're not hiring for a Tier 1 research university or Google or Microsoft Research (in a different era), or paying massive salaries in the financials, ... think about it.
This isn't simply snark. As long as people aren't getting to hire Thompson or Knuth or Lampson or whoever, they are in fact making compromises of sorts and should be thinking hard about what those compromises mean, rather than just proclaiming that they only hire the 'best of the best'.
If your company is working in something more performance bound, such as CG animation, then you probably do need top programmers. Salary won't be the only way to get them, though. People with a true love of CS probably get bored with all the database driven CRUD apps.
That said, it's certainly a matter of focusing the anchor team on putting in place excellent practices. Huge problems can still occur if you have a great anchor team but they focus only on solving their own particular problem. You wind up with the best authentication system ever and a broken payment system or with the most incredible sales pipeline ever and technology that doesn't match what was sold.
Clearly, "hire only the best" is impossible for every company and business model. Also, clearly, this discussion is mostly about capability, knowledge, etc; fit with the organization must always be superb.
I don't know what the right classification system is, but it's certainly more complex. For example, teams can tolerate a certain amount of new-but-promising talent, as long as they have guidance from experienced programmers. In fact that balance is important. Secondly you need people who can work together effectively. Both of these ideas indicated that you can only evaluate a hire in the context of the team they are joining. So arguments that "you can never hire the top 1%" add nothing to the conversation.
If someone has a outside passion - say sailing and wants to just get a job to help them pursue it, more power to them if you can adequately utilize the talents in 30-40 hours versus a powerhouse 90 hr die-hard talent.
Personally, I find fulfillment in my 40-80 hr "day" job and then go pursue other fun activities; a lot of my (especially engineering - non-cs/ee) friends want a 30-40 hr job and some play power, others trade stocks, others play sports rabidly every evening - you must respect the personal motivations and find a way to align it with your organization / startup, if you cannot, then yeah, it's done.
Related article : Are smart people overrated? - Malcolm Gladwell http://www.gladwell.com/2002/2002_07_22_a_talent.htm
But the question asked is a giant red herring that has nothing to do with his stated problem!
His actual situation, as he explains, is not that he is trying to choose between the best and the merely excellent. He is trying to choose between the completely incompetent (the only applicants he has) and no one!
That is an entirely different problem from deciding whether or not to hire the very best.
+ every company needs B-players as well. Nothing wrong not being top notch hacker but rather a reliable loyal worker.
No one would praise a program that takes 2 steps to do something that can be done in 1 step. So why does Smart and Gets Things Done get so much credit? I'd understand Gets Things Done and Gets Along much better.
The #1 cardinal criteria for getting hired at Fog Creek:
Smart, and Gets Things Done.
That's it. That's all we're looking for. Memorize that. Recite it to yourself before you go to bed every night.
He wants us to memorize a short slogan, and that slogan, in programming speak, is buggy and wasteful (wasteful in the sense that I described above, and buggy in that a smart gets-things-done a-hole will single handedly kill your project). Gets Things Done and Gets Along on the other hand is complete in and of itself.
The "perfect code" part of your comment above implies smartness. Dumb people don't write "perfect code".
function MakePrintable(nr as Int)
{
Str as string
if nr=1 then Str="1"
if nr=2 then Str="2"
if nr=3 then Str="3"
...
if nr=27 then Str="27"
if nr=28 then Str="28"
if nr=29 then Str="29"
return Str
}
This code worked in the program it was used in (it Got Things Done), but in a dumb way (lazy? ignorant?).I admit this is a rather extreme example, but it provokes the universal feeling when you look at gravely suboptimal code: "What did the programmer think when he wrote this? Didn't he know that ...., it's so obvious!"
People who merely "get things done" are conscientious in their attitude to work but do not have the spark of intellect that would help them identify quicker ways of getting a task done. This lack of spark also means that they will frequently say that problems are impossible to solve (or prohibitively time consuming to solve), whereas in fact a smart person would identify it as a problem that they could solve.
Example from my own experience within a government accountancy department:
- The person who merely "gets things done" happily spends two weeks each year calculating the cross-charging amounts between all the departments and eventually produces the correct figures.
- The smart person does the same task in 30 seconds using pivot tables and lookups in Excel.
A much more practical strategy: hire people that can learn, and train them in best practices.
(1) Who will you learn from? Successively hiring only people equal to or less than the current skill level within the company inevitably leads to a gradual lessening of talent within the company.
(2) How will you stop the talented staff leaving? By hiring untalented people you shift more work onto the most talented. Since they also probably don't want to work in a place that is known for hiring people without talent they're going to be very likely to leave. This will exacerbate the brain drain within your company.
The problem is, the statement is rhetorical, there is no "best" -- a superstar in a big bureaucratic organization might be someone who "gets" process and following through on certain things. In a startup or other type of company, there are attributes separating "best" from the rest. The process superstar from MegaCorp might destroy a startup!
At the end of the day, management adds value when they take a bunch of people with a base level of knowledge and helps them deliver whatever the product is that is being developed. The trick is finding folks with good work ethics who have the base level of knowledge that you need. There's no magic.
Startups have a hard time hiring because the benefits are not as solid as a large company, there is almost always not enough bandwidth to weed out the ridiculous number of bad candidates, and there are rarely hiring processes in place. However, for a smallish startup, hiring a bad person can literally ruin the company.
There are a lot more variables when hiring a person for a startup. For example, is there a strong cultural fit, is the person financially stable enough, is the person technically competent in the areas that need competence and able to learn new things, is he/she willing to spend what many regard to be extreme hours working and sacrifice normal aspects of their life, can he/she work quickly and also not cause friction, etc. Nobody is perfect and a lot of people simply don't prioritize their job or life this way, which is totally fine, but it's much harder for a startup to absorb those differences in the same way that a large company can. Therefore, there needs to be an emphasis on hiring the absolute best candidate you can find.
To translate this into practical advice: take a long time to hire a person (don't rush), only do so if you are absolutely sure that you want to hire a person, and even then hire them on a contract-to-hire basis, and be quick to let them go if things are not going smoothly.
Hire the absolute best you can find. Your goal should be to find people who are better than you at what you do. You need to hit every source of talent and try your damn best to get the best. Failing that, settle for someone who is only as good as you are. This is monumentally important with your first 4-5 hires as it sets the bar and sets the culture.
For job seekers:
They are interviewing you, but YOU are also interviewing THEM. If you are not passionate about what they are doing, it's probably not a good fit. If they are unwilling to listen to you give a better solution than the one they thought of, there's probably something wrong with their culture. If they are offended that you found a bug in their code or test, that's a huge red flag already.
Now, in big companies you can get away with coasting along, working as a simple code monkey. If that's what you want (not saying it's a bad thing), then you need neither passion nor aptitude to get a decent wage working an easy job.
If, however, you crave something bigger and more rewarding, you need to seek out companies that are passionate about the same things you are. In a market as hot as this one, there are a LOT of passionate companies looking for talented people (especially startups!).
But you are not a computer scientist. You are a software engineer.
The accomplishments of engineering are not built on the inspired work of a handful of geniuses. They are built on the careful toil of tens -- hundreds -- of thousands of good enough engineers. Every day you use dozens of pieces of software and hundreds of real world objects designed by an endless army of good enough engineers. Engineering is not like mathematics. You don't create timeless works which will be a monument to your greatness for all time. You create something which will be serviceable for a few years, and then replaced. Even if you are perfect, the best, and create the best possible program or device, the world changes around you and your device is no longer needed or new computers change the constraints and let you write an even better program than was previously possible.
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 in his interview, most folks will find it easier to accept what interviewer said.
Like with everything else in life, get the best value for money. Sometimes the Porsche is exactly what you need. Other times, the Honda Civic is better for your requirements.
"B" people hire "C" people, and you are doomed.
Hire the best you can. Wait. Hiring the wrong person (and I have done this) will be the worst possible thing you can do.