Saturday, April 07, 2007

recruiting: the inverse prom queen phenomenon

Recently, three friends considered working together on a spare-time project, but it didn't pan out because one of them felt underappreciated. The other two are hard-pressed to find a replacement as talented or prolific, yet they didn't show appreciation when courting their potential golden hen.

It made me reflect on a phenomenon that bemuses me. A high-quality engineer will be chased like wolves by a top-shelf company, and then get lukewarm treatment by a far less successful company.

One example is my Caltech friend "David", who submitted his resume to a slew of companies at Career Fair. One company did a campus interview and then delayed three months before offering to direct him to a position coding printer drivers. Meanwhile, Microsoft was so hungry for him that they surfed for an online photo and created a personalized web page about how he would add spice to their team. Alas, the photo they found was not of him, but of a similarly long-haired student who David disliked.

During my own experiences, I found that prestigious companies worked harder at recruiting me, which was counter-intuitive. A few years ago, one 15-person startup -- above average but not phenomenal -- put me through two rounds of interviews. Even as their engineering VP delivered my job offer, he enumerated the flaws in my personality that I would need to change. Contrast this with Google in the same year, who sent me a chocolate gift basket after my offer letter, and then shipped another basket to my parents to get on their good side. Or Blizzard, king of the games industry, whose interview-day present of a Starcraft pre-launch beta CD made me the envy of my gaming friends.

I've seen this happen to others: hardware engineers, fresh college graduates, etc.

Consider high school. The prom queen is desired by all, but the prom king acts nonchalant about getting a date with her, whereas the lonely kids lower on the social totem pole would jump at the chance. Here it's the inverse. The prom king of the software world, though deluged by superstars, goes all-out in the chase. The aspiring startups and nearly-bankrupt stragglers, despite dying for talent, stay cavalier.

Perhaps it's an effect of that philosophy "it takes talent to recognize talent". The software titans reached their dominance partly due to their ability to find and chase star employees.

But I wonder why it doesn't apply the other way around. By extrapolation, mediocre engineers would be unable to recognize a good opportunity. Yet I see struggling engineers plead and plead for a chance at Google, citing it as the dream of their life. Stars generally do not prostrate themselves in this manner.

It could be that engineers can benefit from wisdom of the crowd. No matter how poor an engineer's judgement is, they hear lots about how great Google is, so they go with the masses. But then why doesn't this apply to the companies? They should be able to determine mass-appeal of their candidates by looking at their job histories and education.

25 comments:

Anonymous said...

Could it just be possible that the great Niniane just may not fit in some place that she wanted so badly to be accepted?

Was the prom king nonchalant with you?

Oh the horror.....

Anonymous said...

Most smaller compaies do not have the ability to just throw themselves (and their money)at any talet that happens by.

Their hiring decisions are much more crucial.

Unlike Google who has infinite funds at this point and should you decide to leave tomorrow they would have a happy little party for you and send you on your way none the worse for wear.

They have a lot of party money left.

Google has the resources to move somebody immediately into your place should it be mission critical.

Given the amount of free time given I doubt much is mission critical. It may be fun and earth shattering but your failure will not sink the ship.

Most startups that I have worked for require long hours and dedication.

"Trophy" employees would not fit in while the rest of the engineers are neglecting things like, family and friends.

Anonymous said...

Everyone knows that Google has incredible wealth and that it lavishes its engineers with good salaries and great perks. I think that might explain why struggling engineers would want to work at Google, even if they can't recognize the talent of their prospective colleagues and or the superior cultural attributes of their prospective employer.

Stars generally do not prostrate themselves? That's because they already work for a great company and/or have offers from great companies. I can't imagine that the star would not be desperate to escape a mediocre company otherwise.

About the asymmetry in the wisdom of crowds: companies like Google hire thousands. Individuals like Google's employees have been associated with only a small number of organizations. I don't see how job histories or education relate to mass-appeal of a given individual.

Anonymous said...

** Google can afford to hire many people that don't do productive work. Google is doubling every year but they still make 95% of their revenue from one product

** Startups can't afford to hire just any random 4.0 gpa, good at solving C++ puzzles coder. They need someone dynamic, motived and dedicated

** I really don't get why google is the shining star that so many people are attracted to. In the past they did some interesting things, but I'm not really impressed with anything coming out of Google lately.

** Google even had to buy Writely. You figure if the comany is really filled with uber-coders a few of them could knock-off something like that in a few months?

Anonymous said...

Hey, where were my chocolates?

But even without getting a box of chocolates, it reflects my own experience. Other companies I interviewed with didn't seem to get that engineering talent is not a commodity item. The game industry in particular clearly thought there was an endless supply of engineering talent in the pre "ea spouse" era.

Or maybe these other companies figured they had only commodity engineering problems, whereas Google knew they wanted engineers to push the boundaries.

Anonymous said...

I had trouble even getting a call back from most companies that I applied to, although I think my problem was different. Google seemed to be the only place willing to overlook the mediocre school that I'd attended and the mediocre job that I had at the time, and to give me a chance to demonstrate my interview-question-answering skillz. (Have been happily/successfully working here for almost three years now, so yay.)

Anonymous said...

After several years of reading resumes and interviewing people I think it boils down to this:

1) The resume reader has to be sharp and look for something that stands out.

2) The one-on-one interview is the best thing. I like to throw out a situation, hand a maker to the person and let him/her go crazy on a whiteboard.

Sadly, I find that many great companies like Microsoft and Google will never consider someone older than 30 for entry-level positions.

Anonymous said...

"It takes talent to recognize talent"
Amen to that.

If you think about it, nothing is counter intuitive in it.
It takes less effort for the prom king to figure out the attractiveness of the potential suitor. Much less so in figuring out talent in tech.
Don't forget that big companies have resource (e.g. HR dept) to do all these fancy stuff. Can't afford that in startup.

Anyway N, you wrote good blogs these days =)....

XOXO
L

Technomancer said...

Alright... It's nothing nearly as tricked out as your Imposter Overdraw Reduction method that you showcased for SIGGRAPH, but this isn't how I make my living, either. Anyway:

CloudEngine::CloudEngine()
{
m_nTime = 0;
m_nSeed = 367343; // Whatever...
m_fHalfSize = 1.5f;
m_fFont.Init(GetGameApp()->GetHDC());
m_bRotatingLight = false;
m_bRotatingClouds = false;
m_bUseImpostor = true;

glPushMatrix();
m_3DCamera.SetPosition(CDoubleVector(0, 0, 65));
m_vLight = CVector(0, -1, 0);
glPopMatrix();

glEnable(GL_CULL_FACE);
//glEnable(GL_DEPTH_TEST);
//glDepthFunc(GL_LEQUAL);

CTexture::InitStaticTextures();

CMatrix m;
m.ModelMatrix(CVector(0, 0, 0), CVector(0, 1, 0), CVector(0, 0, 1));
m_cBlock.CQuaternion::operator=(m);
m_cBlock.SetPosition(CDoubleVector(0.0));
m_cBlock.Init(96, 96, 16);
m_cBlock.NoiseFill(m_nSeed++);
m_cBlock.Light(m_vLight);

//if(glh_init_extension("WGL_ARB_pixel_format") && glh_init_extension("WGL_ARB_pbuffer"))
// m_PBuffer.Init(256, 256);
}

CloudEngine::~CloudEngine()
{
}

void CloudEngine::RenderFrame(int nMilliseconds)
{
// Determine the FPS
static char szFrameCount[20] = {0};
static int nTime = 0;
static int nFrames = 0;
nTime += nMilliseconds;
if(nTime >= 1000)
{
m_fFPS = (float)(nFrames * 1000) / (float)nTime;
sprintf(szFrameCount, "%2.2f FPS", m_fFPS);
nTime = nFrames = 0;
}
nFrames++;

// Move camera
HandleInput(nMilliseconds * 0.001f);
if(m_bRotatingClouds)
m_cBlock.Rotate(CVector(1, 0, 0), 0.2f * nMilliseconds * 0.001f);
if(m_bRotatingLight)
m_vLight = CQuaternion(CVector(0, 0, 1), 0.2f * nMilliseconds * 0.001f).RotateVector(m_vLight);

// Barf out the frame
glPushMatrix();
glLoadMatrixf(m_3DCamera.GetViewMatrix());
static int nTest = 0;
if(m_bUseImpostor)
{
// Don't throw or calc the error, update the impostor every 16th frame
// Determine if the shading needs to be updated, handle it every 16th frame
// Offset it from the frame the impostor uses or you get major chop
if(!((nTest+8) & 0xF))
if(m_bRotatingLight || m_bRotatingClouds)
m_cBlock.Light(m_vLight);
if(!(nTest & 0xF))
{
//glClearColor(0.253f, 0.47f, 0.683f, 0);
m_PBuffer.HandleModeSwitch();
m_PBuffer.MakeCurrent();
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_cBlock.Draw(&m_3DCamera, m_fHalfSize, true);
GetGameApp()->MakeCurrent();
}
nTest++;

// Display the cloud block on a babyblue background
glClearColor(0.253f, 0.47f, 0.683f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_cBlock.CImpostor::Draw(&m_3DCamera);
}
else
{
// If you're not using impostors (shame on you), update the shading and redraw every frame
nTest = 0;
if(m_bRotatingLight || m_bRotatingClouds)
m_cBlock.Light(m_vLight);
glClearColor(0.253f, 0.47f, 0.683f, 1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_cBlock.Draw(&m_3DCamera, m_fHalfSize, false);
}
glPopMatrix();

// Metrics in the upper left corner
char szBuffer[256];
m_fFont.Begin();
glColor3d(1.0, 1.0, 1.0);
m_fFont.SetPosition(0, 0);
m_fFont.Print(szFrameCount);
m_fFont.SetPosition(0, 15);
sprintf(szBuffer, "Cell Size: %.2f", m_fHalfSize*2);
m_fFont.Print(szBuffer);
m_fFont.End();
glDisable(GL_LIGHTING); // CFont::End() enables lighting
glFlush();
}

void CloudEngine::HandleInput(float fSeconds)
{
static bool bMDown = false;
if(GetKeyState('M') & 0x8000)
{
if(!bMDown)
m_bRotatingLight = !m_bRotatingLight;
bMDown = true;
}
else
bMDown = false;

static bool bRDown = false;
if(GetKeyState('R') & 0x8000)
{
if(!bRDown)
m_bRotatingClouds = !m_bRotatingClouds;
bRDown = true;
}
else
bRDown = false;

static bool bIDown = false;
if(GetKeyState('I') & 0x8000)
{
if(!bIDown)
m_bUseImpostor = !m_bUseImpostor;
bIDown = true;
}
else
bIDown = false;

if(GetKeyState('U') & 0x8000)
{
m_cBlock.NoiseFill(m_nSeed++);
m_cBlock.Light(m_vLight);
}
if(GetKeyState(VK_ADD) & 0x8000)
m_fHalfSize += 0.05f;
if(GetKeyState(VK_SUBTRACT) & 0x8000)
m_fHalfSize = Max(0.5f, m_fHalfSize-0.05f);

// Yaw
if(GetKeyState(VK_NUMPAD6) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetUpAxis(), fSeconds * -0.5f);
if(GetKeyState(VK_NUMPAD4) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetUpAxis(), fSeconds * 0.5f);

// Pitch
if(GetKeyState(VK_NUMPAD8) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetRightAxis(), fSeconds * -0.5f);
if(GetKeyState(VK_NUMPAD2) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetRightAxis(), fSeconds * 0.5f);

// Roll
if(GetKeyState(VK_NUMPAD7) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetViewAxis(), fSeconds * -0.5f);
if(GetKeyState(VK_NUMPAD9) & 0x8000)
m_3DCamera.Rotate(m_3DCamera.GetViewAxis(), fSeconds * 0.5f);

#define THRUST 1.0f // Acceleration (units/s*s)
#define RESISTANCE 0.1f // Drag

// Acceleration keys
CVector vAccel(0.0f);
if(GetKeyState(VK_SPACE) & 0x8000)
m_3DCamera.SetVelocity(CVector(0.0f)); // Deadstop
else
{
// Add camera acceleration
float fThrust = THRUST;
if(GetKeyState(VK_CONTROL) & 0x8000)
fThrust *= 10.0f;

// Thrust forward/reverse translates into velocity along the viewing (front-back) axis
if(GetKeyState('W') & 0x8000)
vAccel += m_3DCamera.GetViewAxis() * fThrust;
if(GetKeyState('S') & 0x8000)
vAccel += m_3DCamera.GetViewAxis() * -fThrust;

// Thrust left/right
if(GetKeyState('D') & 0x8000)
vAccel += m_3DCamera.GetRightAxis() * fThrust;
if(GetKeyState('A') & 0x8000)
vAccel += m_3DCamera.GetRightAxis() * -fThrust;

m_3DCamera.Accelerate(vAccel, fSeconds, RESISTANCE);
}
}

Ok, can I have a job @ Google now? Does the fact that I'm posting this at 1am on Easter morning not prove that I'm a certifiable geek and thus, Google-worthy?

http://www.youtube.com/watch?v=ugANJjgPgiU

Anonymous said...

My personal experience has been mixed. Regardless of public or startup companies, my interview experiences seemed to hinge on the moods of the interviewers and interviewees, and the staffing requirements at the time. And I always find it interesting that talents are constantly evaluated based on 1-hour interview slots.

Personally I am happy with what I do, shipping billion dollar run-rate products that run the internet, and making 5x on GOOG:-), so I probably won't find out what the 20-something Google kids would think about me.

In general, I do like the few Google employees who interviewed with us, and the one we hired is a 20-something superstar who complains that the chaos within Google is getting to him. To each his/her own. :-)

Anonymous said...

Kinda full of yourself aren't you, Niniane? Not surprising coming from someone working at Google.

Anonymous said...

When Google recruited Niniane, they didn't have anywhere near as much cash as they currently do. That being said, anyone can spend $60 to send a basket of chocolates but the point she was trying to make was that not every company chooses to do that.

Even if you're a small startup, you can take the time to make a personal connection with the candidate.

Gary Wu said...

The contrarian investment strategy says that you should invest against "the wisdom of the crowds". By the time everyone has heard that something is the "next big thing", it usually signals the time to exit.

This also seems to apply to the job market. Back in 1998/1999, the most coveted software engineering positions were at Microsoft. In hindsight, 1998/1999 would actually have been a good time to exit. Many people who joined Microsoft at that time were disillusioned by what they saw in the ensuing years.

Fast-forward to 2007. Right now, the most coveted software engineering positions are at Google. The average Joe has a fantastic vision of how great it must be to work at Google, and they trip over themselves trying to get positions there. Could this be a signal that now is a good time to leave Google?

Anonymous said...

N, do you really believe that a majority of the people hired by google in the last 2-3 years actually added much value? Google has some neat products, but they haven't been innovators in anything.. Kinda sad, don't you think? I think even MS is more innovative.

Anonymous said...

AFAIK most of the challenges that Google faces are to do with scaling existing services such as search, ads, and mail to cope with ever-increasing demand. These are very exciting; I'd love to work on them :)

I get the impression that, contrary to what you might think, comparatively few resources are dedicated to completely new products (20% time excepted).

So chances are that only a very lucky few of the new hires are spending their time working on new products.

Google search, ads, and mail generally work pretty well, no? So the system is functioning fine.

Anonymous said...

I would never work for Google with a bunch of arrogant engineers! Like the previous poster, he's right about the influx of engineers joining a particular company. When an influx of engineers joining a particular company that usually means a exodus of great existing engineers. Innovation really is happening at small company and not at big companies. Name me one BIG company that is innovative. They are only innovative because they have bought out the small start-up.

Anonymous said...

Google definitely isn't innovative (at least in the outward facing applications). They do have challenges with scaling and those are cool problems to solve but there has been plenty of work done on these things elsewhere.

GOOG is about ad revenue, that's it.

Anonymous said...

Chocolates.

Come on man.

It's a job interview not a date.

Logic should always win out over flattery.

The biggest flatters usually are the worst life partners.

Anonymous said...

information asymmetry ... good people are already at Google, so yhttpou must be lousy if you are applying to a startup and aren't part of the founding team.

but it feels like I'm stretching logic :P

才伯 said...
This comment has been removed by the author.
才伯 said...

Some people became to be the slave of the Brand and Ad. They lost their basic judgment.

In another word, Business is religion. Even without sermon, but you are hypnotized insensibly, and you think you are riding on Harry Porter's besom.

that's why google attract so many peoples.

Anonymous said...

A startup VP, while making me an offer, essentially said "We would have preferred somebody more qualified, but we've been looking for a long time, so we'll settle for you". I should have heeded that giant red flag. :(

I don't think the Google vs Prom King analogy holds, though. It's probably got more to do with maturity and self worth. In high school, the "cool" kids are terrified of seeming over-eager. By the time they grow up into Google recruiters, they have hopefully outgrown such childish attitudes.

Anyway, my experience with startups differs from yours. But your experience probably has more to do with the fact that large companies have a whole department devoted to hiring, while start-ups have one person as admin/hr person/receptionist/miscellaneous.

Anonymous said...

I am very impressed by Niniane's achievements in life. She is certainly successful by any definition of the term that relates to education and money - but she seems to be rather immature when it comes to life and love. But that's just an opinion.

Given all of Google's supposedly bright intellectual firepower - how about if some of those geniuses figured out how to make some of the already deployed software actually work reliably - like blogger for instance.

Anonymous said...

this is what happend with gloogers. Became arrogant. but, in the end of the day they do crap soft. as any mediocre soft. engineer.

Anonymous said...

This is so true. It is exactly what is happening to me right now. I confirm your theory.