Thursday, December 20, 2007

Anatomy of a hiring decision

Our clients are looking for the top developers in the country. They look at their code and look for the best usage possible. Here's an unmodified example from a hiring team at one of our clients.

"Code Critique

In the following, I will go through the code and point out some thoughts along the way. Some of them are merely stylistic, but others can be considered bugs. The list of comments shouldn’t be considered exhaustive.

class SelectionStateController
{
protected:
typedef std::map States; // a collection pairs: a unique string of a manager's id and
// a boolean selection state (true if selected)
typedef States::const_iterator CIt;
typedef States::iterator It;
// the function object to set up the list of displayed managers
struct Value
{
States::value_type operator()(const std::string &id) { return States::value_type(id,false); }
};
protected:
Container &clients; // a collection of clients to notify about selection state changes

Holding the client list as a reference can be a problematic choice. It makes it impossible for the controller to enforce invariants on the client list and to control list management. Admittedly, neither of those requirements were specified in the problem that was presented.


// returns the selection state of the manager 'id', true if selected
CIt cit=states.find(id);
#ifdef _DEBUG
check(cit,id);
#endif

C++ has a shortcut for this: assert(check(cit, id)). Spelling it out just adds visual clutter.

return cit->second;
}
// setters
void set_state(const std::string &id, bool new_state)
{
// sets the selection state of the manager 'id', notifies clients if the selection state is changed
It it=states.find(id);
#ifdef _DEBUG
check(it,id);
#endif
bool &state=it->second;
if (state!=new_state)
{
// update state and notify clients about the selection state change
state=new_state;
for (Container::iterator cont_it=clients.begin(); cont_it!=clients.end(); ++cont_it)

Standard C++ requires the keyword typename in front of Container::iterator as Container is a dependent type. MSVC doesn’t catch/enforce this – yet.


{
SelectionStateChangedFunc selection_state_changed(*cont_it);
selection_state_changed(id,new_state);
}
}
}
template
void set_displayed_managers(InIt first, InIt last)
{
// sets the list displayed managers in a range from the 'first' to the 'last'
// note: this method should be redesigned if selection states must be preserved upon changing the list of managers
states.clear();
std::transform(first,last,std::inserter(states,states.begin()),Value());
}
protected:
void check(CIt cit, const std::string &id) const throw(std::logic_error)
{
// checks if the manager 'id', which is pointed by the iterator 'cit', exists in the list of displayed managers
// throws the exception std::logic_error if it does not exist
if (cit==states.end())
throw std::logic_error("Manager "+id+" does not exist");
}

If I understand correctly, check is used as a way to check preconditions on function arguments. Essentially, it is an assertion; as such, it should never throw an exception. Assertions are debugging tools. Throwing an exception will unwind the stack, thus destroying valuable state information when debugging the issue.

};


class Client
{
public:
// function object that is invoked to notify about changing a manager's selection state
struct SelectionStateChanged
{
Client &client;
SelectionStateChanged(Client &client) : client(client) { }

Single argument constructors should be explicit unless an implicit conversion is really needed. In this case, the implicit conversion hides a subtle bug in the code (discussed below).

void operator()(const std::string &id, bool new_state)
{
std::cout
<< "Client " << client.id
<< " was notifyed about changing selection state, manager=" << id
<< ", new state=" << new_state << std::endl;
}
};
private:
friend struct SelectionStateChanged;
const int id;

Having id be a const member makes Client non-assignable, as assignment would require changing id in the assigned-to object. All standard containers required their value_type to be assignable.

public:
// constructor
Client(int id) : id(id) { }
// type conversion operator that constructs a notification funcation object
operator SelectionStateChanged() const { return SelectionStateChanged(*this); }

Implicit conversions are frowned upon in C++, as they almost invariably lead to problems in all but simple code bases. In this case, the conversion operator is never called as SelectionStateChanged’s conversion constructor is preferred over this function. If it were to be called, the program would crash after running out of stack space because it is recursive. Since the conversion operator is a const member function, *this is a const lvalue. It thus cannot be used as the argument to SelectionStateChanged’s conversion constructor that was defined requiring a non-const lvalue. What gets called is SelectionStateChanged’s implicitly defined copy constructor after calling Client::operator SelectionStateChanged() const on *this. This recursion leads to the crash.

};

int main()
{
// define a collection of clients
typedef std::list Clients;

Client is not assignable so this is not guaranteed to compile on a standard compliant std library. It will fail in future concepts-enabled code.

Clients clients;
std::back_inserter(clients)=Client(1);
std::back_inserter(clients)=Client(2);

The use of std::back_inserter here is odd. I can’t come up with a reason why std::list::push_back is not the better solution. Apart from that, it’s not std compliant. The standard requires output iterators to be dereferenced upon assignment. The fact that it works is an implementation artifact of the std library used."

Tuesday, July 10, 2007

The power and value of serious software development search.





Here's a software development success story Core Search Group is immensely proud of.

Automated Trading Desk has entered into an agreement with Citi to be acquired for $680 million. While most people in SC still don't even know who this company is or what they do ATD is one of the biggest business success stories in the history of our state. ATD helped us become who we are in a big way and we think we had a hand in helping them get where they are.




In 2001 I had the incredible business foresight to purchase this company from the previous owners at precisely the same moment that the internet bubble imploded. I had worked for the firm for two years as a recruiter placing software developers, networking people, and anything else related to IT. We were a generalist IT staffing company and unfortunately so was everyone else. When the bubble burst every company we worked for suddenly was not hiring. We had no jobs to work on. A lot of recruiters were suddenly on the street with an old guitar and a tin cup and a surprised expression. So there I was at my desk, the only employee of the company, having taken on some debt, with no jobs to recruit for. I figured I better find a specialized niche where people were still hiring, pronto.

To make a long story short I became aware of this little and extremely impressive company on the coast of SC that was hiring software engineers. I began a dialogue with ATD but they were quick to point out what they were looking for was very difficult to find. At this point the degree of difficulty wasn't a big obstacle for me. I had to succeed. ATD hires very proficient software engineers. People who are exceptionally skilled and productive at what they do. People with a history of innovation that is driven by their passion for developing quality software that suits a given need. So I decided to become a specialist in finding those kinds of developers.


I met with the people driving the software development at ATD and interviewed them to find out what they were doing, why they needed this exceptional level of talent, and how I might be able to help. Around this time I hired Mr. Vander Voort who helped hone our approach to finding the people. We learned about ACE and TAO and a bunch of other new (to us) things. ATD was our first client that is the absolute leader in their software development space. We now hold to working only with companies that fit that criteria. It's a short list.

Over the following years we've placed around 10 highly capable folks with ATD, which is approximately 15% of their total development team. Most of those folks are still there because ATD is careful to give them a beautiful environment to work in, their own office, the best tools, and the best colleagues. The pay is also great and it's hard to complain about living in a place like Charleston, SC. Like us they are a small but entirely focused and driven company which has allowed them to grow to the point that 6% of all stock trades on the Nasdaq and NYSE are executed through ATD's systems.

ATD taught us to specialize in what matters to the top software development company in a given market. Not collecting and delivering resumes. Researching specialized areas of software development, approaching the leaders in that space, developing quality win-win relationships, and carefully finding the few people who really meet the bar the company has set AND are looking for the type of relationship, responsibilities, location, and compensation the company can offer.

Everytime we place someone we feel a surge of pride because we know when we follow our system the folks we place will have a huge impact on the client. We're immensely proud of our part in the success of ATD and hope to help them get to the next chapter of their story. We don't place people to get fees. We place people to grow companies, deepen our relationship, and broaden our responsiblity for their success.

Congratulations ATD, and thanks for helping Core Search Group become who we are. Forward!

Friday, June 1, 2007

Good or Great?

Jim Collins' book Good to Great has been a very valuable resource to me and I am sure a lot of other business owners and professionals.

Have you sat down and asked yourself lately whether what you are producing is good or great? What was the last thing you did at work? Was it good or was it great?

If you're good and happy with good that's fine. Most people I talk to though are striving for great. There is a world of difference between your reality if you are good and your reality if you are great. Chad Hurley of YouTube can tell you where great gets you. When I buy a product or service I look long and hard for the great one. Seems a lot of you do too.

Core Search Group believes in the greatness of our vision: to be the best tool for companies to attract Google-quality software development talent.

Here's the text of an email I sent our team this morning:


Hey guys.

I have been reviewing the information and raters we filled out from Jim Collins' website, the author of Good to Great. If you recall this guy and a bunch of researchers did a multiyear research project to study what separates great, enduring companies that change the world from good companies that don't. I think we all agree we can be one of the great ones.

I think we can synthesize all the information in the book down to a pretty simple distinction. When we post a job, call a candidate, do a sendout, test a candidate, talk to a manager, do an innerview, etc, let's ask ourselves: "is the way I am doing this good or is it great?" Make it great.
The simple difference between the good and great companies is the great companies made a conscious choice and set a direction for greatness. Starbucks, Google, Microsoft, GE, etc. all start from one idea. Let's be the great company in our industry. Deciding this early on makes all other decisions easy. Do the great thing. Core Search Group is the great company in the recruiting space.

I really appreciate the work all of you have put into helping us be there. Obviously we have a ways to go but I see the path clearly. CSG will be ubiquitous in the software industry like Skype is in communications-clearly the best tool for the job. Let's all look at everything we do today with a critical eye. Is the action we just completed good or is it great? Is the candidate we are getting ready to send out good or great? Let's make it great.

Thanks!

DAVE

Tuesday, May 1, 2007

How NOT to disappoint 2/3 of your customers, in 3 easy steps


At Core Search Group we've long taken the stance that we are a customer service organization, not a search firm. We think our client companies are customers and our candidates are customers. Even if we elect not to help them. We talk to clients and candidates all day who give us orders to fill. Clients want certain types of talent. Talent wants certain types of jobs. We accept a small percentage of the orders and go to work trying to fill them. While our focus is on filling these orders we also think it makes good business sense to treat our customers the way we like to be treated. This is saying a lot as I may be the most difficult customer known to humankind. I want to be served what I am buying with a smile, as fast as humanly possible, and without wasting any of my time. Most organizations in my experience don't deliver. Evidently job seekers think so too.

Weddle's latest newsletter has some interesting survey results. When asked about negative experiences in their recent job search, only 32.4% of candidates reported not having any. So 2/3 of all the candidates surveyed had negative experiences. What would happen to a Starbucks or other service business that had this record?

We've been talking in this blog and in our offices about the ways we can strive to make every person's interaction with Core Search Group positive. I think we can give a candidate a positive experience even if we elect not to work with them. I even want the candidates who go interview with our client but do not get selected to have a positive experience. How can we do that?

First, we think every person who sends in their resume/application to our company should get a response. Not some boilerplate like "thank you for sending your resume. We will be in touch if there is a match." The majority of those who apply are not people we can help at the moment so most often the response is going to be, "thanks for sending your resume. We do not have a matching position for you now because (fill in the reason.) We are entering your resume in our system so we can contact you about positions that we have in the future that match your desire for (what the candidate wants.)" We've found the truth tends to make people satisfied even if they don't necessarily get what they want. If I went into Starbucks and ordered a Gaelic Ale I expect they would not be able to serve it to me. If I got a smile and a reason why and directions to the brewpub down the street I probably wouldn't be mad about it. And I'd come back when I needed a coffee.

Second, every candidate should be notified about what is happening at every stage in the interview process. They should know how the process works at the given company, how long each step should take, and how long it will take to get them a yes or no.

Third, candidates should be educated as part of the process about how the selection process works, which I have found most candidates are not clear on. As far as I know there is no manual to read on how great companies select employees but candidates seem to forget the Core Search Group theory of relativity: "it is not about if you and your skills match the job, it is about how you and your skills match the job compared to the other people interviewing." Companies are looking for rockstars. You shouldn't be upset if you interview for a job and someone else gets it. You should figure out what you didn't have that they did and go to work developing that trait in yourself. If the recruiter you are working with can't help you by getting feedback they or the company just don't get it.

As always I am interested in feedback from anyone with thoughts on how Core Search Group can better serve you today.

Wednesday, March 28, 2007

Software developer's guide to working with recruiters-decision analysis.

I hear from so many candidates so much confusion about what recruiters do and why. As our mission here is partly to treat our candidates like customers, I want to help you understand.

1. Your responsibilities. Many of the problems I hear about from candidates can be traced back to things they themselves did or did not do. Let's look at some of the things you should do to control your experiences.

Study the game. Imagine software development organizations as professional football teams. A professional football team is in a constant process of reorganizing itself around the strengths of the individual players. There are 2nd and 3rd string quarterbacks waiting in the wings to replace the first string person if he stops producing for whatever reason. They are gunning for his job but only get it if they get to be better than him. Unless you as the candidate can demonstrate superior production to that person you won't get his job. If you work for a company no one has ever heard of don't send your resume to Google. If you work for Yahoo don't send your resume to Google unless you are the star developer on your team. Decision point-can you articulate why the company should want you based on what you know about them compared to your current company? If not your odds of getting hired are poor.

Learn to play the game. Forget about tweaking your resume with keywords, studying for the interviews, and all the other things people do to get a job for a minute. Companies are looking for the best people they can attract based on their position. Say you are the quarterback for the #8 team in a conference of 2o teams. Don't apply for the QB position at the #1 team. They won't hire you unless you can demonstrate you took your team from #20 to #8 in a single season due to your proficiency. And even then it will be as a backup to their current star. Everything you go through in an interview is to qualify you compared to who they have now and the other people interviewing. If you rank with the best you get the job, period. Let me ask you a question. How many developers are on your current team? That number is x. Pretend you own the company and rank the developers from 1 to x with #1 being the person who has contributed the most to the organization and #x being the one who has contributed the least. I only want to talk to you if you are #1 or #2. Because companies only pay fees to third party recruiters for the best of the best. Decision point-can you tell me why you are the best on your current team? If not start looking for openings through job postings and internal recruiters.

Control your information. I have worked with a lot of candidates who wanted to get into one specific company but ruined their chances by choosing the wrong route to go through. When we placed software engineers with Amazon.com we had a byzantine and unexplainable set of rules to function under. For example Amazon employs hundreds of 'researchers' who scour the web all day for resumes that fit keywords. They dump the resumes into a database where they sit. And sit. And sit. Amazon has a rule that if they have the resume they won't consider the person through a recruiter for 6 months. So we would find a good candidate and check the system. The person was in the DB. Had been for three months. No one had ever contacted him. So we would call the candidate, explain the situation, tell them why we thought we could get them the job, wait three months, resubmit the candidate, and place him. We did this several times. Amazon could hire a lot more good people if their system didn't make it so hard. The fact is most hiring managers do not have time to sift through a DB of ten thousand resumes. This is where the experienced headhunters come in. We qualify and use judgement to present the manager with the top 1% matching his/her requirements. Your job as a seasoned and experienced software developer is to do a smart search. Don't submit your resume online to a company if you can find a better way in. Find a qualified recruiter who has access if you can. Once you get in your target company's database you have a short window of time where your chances are good. If you fail a couple of interviews or are resubmitted by competing agencies who you have tried to play off on each other you can consider your chances with that company to be zero. You are done. Also if you are working with more than one recruiter be honest with each about it and which companies you are already talking to. If two different recruiters submit you to the same company the company rejects you because a. they don't want to fight with two recruiters about who gets the fee and b. they think you must be lying to one of them and great companies try not to hire liars.

Your resume. Don't post it on monster or other job boards or keep it on the web perennially unless you do it confidentially. Remove your name and address and the name of your current company. If your resume is on the web with your name and contact info on it you are being submitted to companies without your knowledge. I have talked to many candidates who can't get an interview at the company they want to work at because their resume has been submitted without their knowledge by a recruiter nobody knows. Learn to qualify recruiters for their skill just like recruiters qualify you. If a recruiter can't tell you the name of the company, the group, the hiring manager, and why they think you have higher than average chances of getting the job, do not let them submit you. They are not qualified to represent you. Decision point-are you convinced the recruiter is the best out there? If not do not proceed.

Research. Once you are in the door and an interview is being coordinated you need to go into full bore research mode. Find every website and blog of current developers at that company and learn everything you can about their backgrounds. This will give you clues to what type of traits they are looking for. You need to pinpoint the areas you are most likely to be grilled on technically and study all of those areas. Learn what the team is doing and be ready to demonstrate how you can help. Pretend you are defending your dissertation. Be ready to answer everything you might get asked. Decision point-have you prepped for days for the interview and had people you trust give you a mock interview? If not reschedule it and take a couple days off work and do the prep.

Understand qualifying. I often explain to candidates that an interview is not about you and your skills and whether they match the job. The interview is about you and your skills relative to all the people currently working there and all the great developers they have ever worked with. Oh and all the other candidates they talk to. You need to have the best technical skill of all the candidates, the best presentation of all the candidates, and have done the most prep of all the candidates. You need to demonstrate that you meet the bar. That you're in the club. You have used and know all the design patterns and can demonstrate it. You have invented cool things, saved projects from failure, and otherwise performed to the level of the current team. If you can't demonstrate that you don't get the job. Consider an interview your own personal "The Apprentice." If you're not number 1 out of the group of interviewees you don't get the job. Decision point- are you convinced no one can do this job better than you? If not look for one that you are sure on.

2. Choosing a recruiter. You need to learn to qualify recruiters just like they qualify you. When I talk to a developer the question in my mind is "why is this person the most likely to get offered this job?" If I can't convince myself you are we don't proceed. You need to ask "why is this recruiter the most likely one to get me this job?" Interview the recruiter like they interview you. How many people has he placed at this company? How long has he worked with the company?

Types. Headhunters. A headhunter is a third party who is paid a fee to bring and place good candidates. Back to the exercise where you ranked yourself in your current group. If you are #1 or #2 great. You should find a qualified headhunter to help you in your search. Qualified means they make placements of people with your skill set all the time (and can provide references,) and have openings in the location you want, and help you get the job. Also look for a number of years of experience and a track record of specializing in what you do. Companies that claim to specialize in "IT, health care, and purchasing managers, nationwide." are full of it. Decision point-do you see an uncommon level of focus (and success) on placing people like you? If not keep looking.

Internal recruiters are like convenience store clerks. They are paid to sell you what is on the shelf, not what you want. They can't give you detailed information on what's on the shelf. They can just point you to it. If you want customized attention and the right thing for you my suggestion is to become the best and then call me or another qualified headhunter. I recently talked with Google about a contract recruiting job. I learned that the internal metric is they want 5 interviews a week set up by the recruiter. Not 5 interviews with good candidates, not 5 interviews that result in an offer, just 5 interviews. This is just one of the ways Google does a really sloppy and ineffective job of recruiting. Decision point-don't work through internal recruiters unless you can't find any other way to get in.

3. Working with the recruiter.
Don't lie. We just dropped a candidate because we learned he had lied to us about interviewing with our client previously. We might have been able to place him regardless of the earlier interview, but we know our client doesn't hire liars so we weed them out right away. If you work with multiple recruiters make sure they all know every company you are already talking to so they don't multiple submit you. Make sure you know every place they submit your resume. Sometimes candidates think going through two headhunters to the same job or company without telling either of them doubles their chances. It doesn't-it almost always completely destroys your chances. Decision point- have you been honest with everyone involved? If not now is the time to start.

What else do you want to know about the best way to get the job you want? Drop me a line and we'll get you the information you need.



Wednesday, February 28, 2007

The symbiotic relationship.


What do the clownfish and the sea anemone have in common with the technical recruiter and the software developer? Everything. Especially the symbiotic relationship.

The clown fish is like Steve Jobs. It lives an existence where it's survival depends on speed and intelligence. It doesn't really fit in anywhere. It doesn't school with other fish for protection. It is vividly colored which makes it an easy target. It is able to take bigger risks than other fish only because it has learned different survival strategies than other fish. It can see around the reef and from one population of sea creatures to another. When threats mount it can retreat to the safety of the relationship with the anemone for protection. The clown fish protects the interests of the sea anemone because the sea anemone protects the interests of the clown fish.

The sea anemone is rooted in one spot. It isn't able to swim around and see what's going on or what threat is around the corner. Due to it's circumstances it can't pick up and run when an anemone-eating creature is closing in. It relies on the clown fish to defend it from such a peril. Sure the anemone can sense when ocean conditions are changing and move to a new spot, but it takes time to happen. The sea anemone protects the clown fish because the clown fish protects the sea anemone.

I have a candidate now who has been watching his company/department shrink due to the continued telecom turbulence. Developing world-class telecommunications provisioning/ routing/OSS software is hard enough without having to go into work every day wondering if this will be the day they close the office. He's been with the company 20 years and would like to stay until he retires. He's given everything of himself to this company. He's been rewarded and they've made a lot of money from his work (hmmm what would we call this type of relationship?) but he can see the ocean is drying up. His ecosystem is dying.

As his clown fish I need to find him a great company in Central NJ with the desire to have one of the best minds in the world making them millions with his talents. I am checking out all the likely places an anemone would like to settle in that area. When I find the best spot I won't rest until I get him settled there. When he is thriving again I'll be able to attract other great people to his team.

Who is your clown fish?

Monday, February 12, 2007

What do candidates want?

Core Search Group is a work in progress. Though we are 7 years old we look for at least one way to improve every day. We solve a vexing and expensive problem for both candidates and companies. We want to be the best in the world at solving that problem. We only are effective when we have a symbiotic relationship with both groups.

I asked a question over on Linkedin and was very interested in the responses. The question: "How do you as a candidate pick a third party recruiter/headhunter to work with? Please list your top 5 criteria in descending order of importance." If you're in my network you can view all the responses over there. Here are select answers:

"I have found that the following criteria work well for me when selecting a recruiter/headhunter (listed in descending order):
- understanding the network of clients in your specific industry that they have access to
- understanding how they work with client companies (are they a retained recruiter or contingency based)
- how well do they match your desired target areas (types of companies/positions/industries, geographical preferences, number of positions, etc.)
- are you looking to use the recruiter one time or build a relationship (i.e. are you always open to good opportunities?)
- personality (i.e. can you work with this person – you can’t underestimate the amount of time you will spend talking with a good recruiter"

From a candidate we are currently working with:
"I have too many recruiters contact me with the same attitude. I have a position that I need to fill and I need you to do this. I don't care what you want as a candidate that does not matter to me. I want you to fill this job, and who cares if it meets your needs if it gets me my commission. If as a recruiter you come at me this way, I will be more than happy to show you the door. "

From another headhunter:
"1) Find out from two or three experienced recruiters that specialize in your field whether or not they think that you are "fee eligible". This means that they think that their clients will definitely want to pay 25-33% of your base salary to the agency above and beyond what they will pay you in salary. Ask them to be brutally honest. If you are not fee eligible, no recruiter can help you.
2) Presuming that you are "fee eligible", ask hiring managers in your field if they can recommend any recruiters that they have had a good experience with from the client side.
3) Ask professional colleagues who have been candidates of recruiters the same question.
4) Once you have met with a recruiter, ask yourself whether or not the recruiter views you merely as a transaction or if they seem like they have your best interest at heart. Remember, if you are fee eligible you could be worth thousands of dollars to a recruiter.
5) While experience alone does not always translate to quality, more experienced recruiters tend to be more effective. Bear in mind that contingency recruiters would have had to been good enough to survive and succeed in a 100% commission environment for however many years that they have been in the game. "

What do you think we should be doing for you? We want to know.


Wednesday, January 31, 2007

The 10 Commandments for Technical Recruiters


I don't care if you are an internal or external recruiter, agency, independent, retained, contingency, contract, permanent, whatever. You're dealing with highly sophisticated and sensitive people if you are placing high level IT talent. They are constantly judging your fitness for your job. You'll need to follow these guidelines if you want to be effective. Like the professional mountain guide the professional recruiter shows people the safest way to the top while minimizing risk as much as possible. If you really want to be the best you can start with this advice. . .

Thou shalt love people and your job. Have you ever bought a cup of coffee and gotten service with snarl? Don't you wonder why on earth someone who seems put out with people is in a position where all they do is deal with people all day? There are better paying jobs where you don't have to talk to anyone. There's no reason to deal with the constant turmoil and pressure of recruiting unless you really love it.

Thou shalt achieve 10/1 and then improve. Quick, what is the definition of world class recruiting? There's not one? Now there is. Call it Dave's law. If you submit 11 people for a job and none get hired, you suck. Period. If you submit 10 and 1 gets hired you have passed. Now try to improve. The best recruiters have a close to 1/1 ratio because they know so much about what the client truly needs. Get better.

Thou shalt not cop a 'tude. There was a time for haughty attitudes. It has passed. Your company is the best. Your company only hires a select few. But every other company is saying that too. The best candidates have limitless options. They don't need to put up with your superiority complex to get a job. Like the mountains, the upper levels of recruiting require a high level of awareness and respect if you want to survive.

Thou shalt learn how to talk to smart people. A person with a Master's degree in Computer Science and 20 years of experience working for the most sophisticated software development shops in the world is a person who isn't going to put up with much. I have gotten results by telling people up front "I have a degree in English Literature and so have no clue about the actual technical details of software development. " However I do understand people and how to meet their needs. I ask people to explain things to me in layman's terms. Quality technical recruiting is a multistep process consisting of asking the right questions. Turn down the sales pitch and turn up the intelligent questions about what the candidate wants to accomplish and how you can help.

Thou shalt not throw shit at the wall. I had a meeting with a manager at a client who showed me a candidate's resume that had been submitted over 300 times to dozens of jobs in the company. He had gotten a couple interviews but not progressed. He had been submitted by dozens of different recruiters as well as himself. None of them looks very smart in the client's eyes. As in the mountains, you need to be an excellent judge of who has the best chance to be successful.

Thou shalt close the loop. In this day and age I don't think any recruiter has time to respond to every person who submits a resume. However if you submit a candidate you should be able to tell that candidate what happened and why. Hiring manager won't tell you? How are you supposed to get better? Stop working on this opening until they are willing to give you real information. It is your responsiblity to assess every situation in which the candidate you put in doesn't get hired and be able to explain why.

Thou shalt slow down. I don't care what anyone else says, quality recruiting is NOT a volume business. Precision is the name of the game. So many engineers are resistant to recruiters because we send lame emails in which we misspell their name, ignore statements made on the resume about what they are looking for (sending a person stating 'no relo' an email about a job on the opposite coast,) and other errors. Before you shoot the email or make the call, think, "Is this the right thing to do right now?" "How do I look to the person I am sending this too?" Mistakes mean death in the mountains and 'no hire' in recruiting.

Thou shalt learn how to spell. Especially the candidate's name. I know Vikas Kamat you can handle but cut and paste was invented for names like Nahasapeemapetilon.

Thou shalt be responsible. Whose fault is it if you put a candidate in front of a hiring manager and the person doesn't get hired? Yours. You are the guide.

"Yeah but the manager didn't tell me . . ." You didn't ask the right questions.
"Yeah but the candidate didn't tell me . . . " See above.
"Yeah but I didn't know . . ." See above.

I'm not saying you need to beat yourself up about it. I'm saying every time a candidate fails to get the job you need to do a postmortem to figure out what you missed. You missed something.


Thou shalt know who your customers are. Who is your customer? The client (or your employer if you are an internal recruiter)? Yes. The good candidates? Yes. The candidates who don't match your reqs? Yes. Everybody? Yes. All of them are your customers. The Starbucks mission statement says, "Develop enthusiastically satisfied customers all of the time." What if we adhered to this philosophy? There would be more of this.

To sum up from what I hear from prospects and candidates I talk with, there are a lot more ineffective than effective recruiters out there. Effective recruiters will adhere to the 10 points above. Go to it! Get your candidates to the top! They will send their friends.
We are professional technical recruiters. Our job is not to source resumes and candidates. A mountain guide's job is not carry supplies, fix ropes, or any of the other details they have to attend to. It is to get clients on top of the mountain. Our job is to PLACE people on the top.
Think I'm wrong? Tell me why.

Thursday, January 25, 2007

Preparation is Key


Extensive preparation is one of the most important things to focus on while pursuing the ideal job. Some candidates realize this while others think that by just going through the motions of the interview process they have a chance. Lack of preparation significantly decreases your odds of getting the job. Let’s look at it this way, simply said, you can’t be over prepared for an interview.

Mapping out the entire interview process for the candidate is of utmost importance. There should be nothing unexpected from the beginning. A good recruiter will use all of the information accrued after debriefing previous candidates to the current candidates advantage without just giving you the answers to questions you may be asked-that won't help. By preparing the candidate every step of the way, odds of success go way up. The candidate and the recruiter together should cover all aspects of the process. Candidates should be told about every person they will interview with in as much detail as possible. If that person has a specific style of interviewing a candidate should be aware of what they are up against.

Following are 5 main preparation areas to focus on in no particular order:

Commitment to the Recruiter/Agency
To fully utilize what a recruiter is doing for you, you as the candidate must make a commitment to them. If they are giving you advice and information about the company and their process then there must be a good reason for it. Making a commitment to work with that recruiter and being receptive to their direction, advice and guidance will increase your chances of getting that job.

Complete Research on the Company
To thoroughly understand what you are up against while interviewing for a specific company you as the candidate must research all aspects of the company itself. Do research about the company’s services and products. Find out what they do. Find out why the company was founded. Look into the history of the company. What major changes have come about throughout that history and why those changes were important to the current success of the company? Find out what the culture is like at the company. Why is the culture that way? Why do people want to work there? Also, find out about the people themselves. Find out as much as you can about each and every person you interview with, both before and during the actual interview. By learning about the interviewer during the interview you build rapport with them. This will obviously help you in the long run. There are several ways to find people on the internet today. You know how to use Google to find someone's name. We also recommend searching groups to learn about what technical topics a given interviewer is active in discussing. There are also some really valuable networking sites out there like LinkedIn. Use them to find out what your interviewers are all about.

Skills Review
First it is your job to find out what skills are expected for the job, which ones are most important and which ones will be focused on the most during the interview process. If C++ is the top requirement because the software shop that you are interviewing at has maintained a culture and a mission of nurturing an environment where they claim they have the “best C++ shop in the world” then you better believe they will be asking you some extremely difficult questions about more advanced features of C++ such as STL, templates, and exception handling. If you find out that the company is a shop that makes extensive use of Design Patterns, buy the Gang of Four Book. Be prepared. Be ready for the most difficult questions you can find on the web regarding these topics. A good recruiter will have their own examples to offer.

Rockstar programmers sometimes botch an interview because they come across as arrogant. Knowing the information to come up with a good answer is one thing. Knowing how to deliver that answer is another. The delivery is all in the attitude. Having an attitude such that "this guy is asking me for some nitpicky trivia and I need to just regurgitate what I memorized" is the wrong attitude to have. Assume the question was posed to you in order to start a conversation about that topic. Practice starting a dialogue with the interviewer about how the company uses the technology, what the opinion of the technology is, what you have done with it in your other jobs, etc.

Practice Interviewing
When you were learning how to tie your shoes and later on your multiplication tables, how many times did your Grandma tell you “Practice makes perfect”? There certainly is some wisdom in this simple phrase. I said it and I will say it again. You can’t be over prepared for an interview. A good recruiter will set up some calls with you to conduct mock interviews that will contain questions similar to the ones that the prospective interviewers will ask. He/she may not be able to critique you on the content of the answer. However, they will definitely be able to help you on the delivery. You can also spend time doing the same thing with your family or friends.

Soft Skills
In interviewing it is important to have a consistent story about everything. Why are you leaving your current company? Are you AND your family sold on relocation to that city? Why? Salary discussions are a potential minefield. Learn from your recruiter how to talk about compensation issues and cost of living differences if that is relevant. Why do you want to work for this company? This is very important. If you can’t convey in detail why you are attracted to that company, they won't see a reason to hire you. Prepare for this. It will come up.

It is very important to build a relationship with every person you speak with on the phone and in-person. Find out not only what they do, but why they enjoy working for that company. What do they like best about the company? Most companies are making a group decision so you need to get as many of the group voting in your favor as possible.

Finally, “don’t ask, don’t tell”. This is a very simple phrase with a lot of meaning. Don’t volunteer personal information. Nobody wants to know if you are going through a divorce or what your other personal struggles are. Focus on your qualifications for the job and avoid saying too much about your personal life. Being able to do this in the interview shows you'll be able to do it on the job.

Here's a story about one individual who did everything right.

When we met Ryan, everyone here at Core Search Group was extremely surprised to hear that he had connected with several recruiters in the US and was unsuccessful in finding a single one that would work with him. "Call us when you land", they said. You see, Ryan, a citizen of the UK, and his family were in the beginning stages of making a move to the US. He already had a final working day scheduled with his company in the UK. No visa sponsorship was required as he is married to a US Citizen. It was exactly the same as if he had been a US Citizen currently living in the US.

Here is an anomaly, an extremely talented, intelligent, qualified... all the adjectives you would use to characterize "an ideal candidate" but no recruiters would work with him. We were honored to have the opportunity to work with such a candidate as Ryan. Ryan contacted us on April 28th. He had already purchased plane tickets to land in the US on June 21st and was available to start with within a week of that date. By early to mid June, not much more than a month later, I received an email from the hiring manager: “we want Ryan to work for Bloomberg”. It is a simple statement but a very commanding one. That is when we first realized that all of ours and his hard work had paid off. We had an offer for Ryan and then a start date.

Ryan was by far the most prepared candidate that we have every worked with. He would even take on study sessions on his own that we didn't assign to him. "Deep in design patterns now, I think that was the weakest part of the last interview. We need to discuss what to expect from the next interview though, that will help me focus on what to revise." He was prodding us for more prep help. This is the kind of attitude that will bring a candidate closer to the end goal.

With Ryan, his hard work and perseverance really paid off. In the end we received an offer from the client, his current company, that was 10% higher than anyone expected, including Ryan.
In the end we helped a really talented individual find a great job that he loves. “I work 12 hours per day not because I have to, but because I love what I do.”

Oh, yeah, BTW – upon initial submission, the hiring manager rejected Ryan’s resume. He is glad he listened to me when I explained he was in fact the type of person the company was looking for. Plus we have gained some heavy trust from the client because of this. However, it would have never happened if Ryan went into this with the wrong attitude.

Thank you Ryan!

Watch this space for another posting on our custom PREP methodology in the future.

Tuesday, January 16, 2007

Want to be a rock star candidate?

In the past 5 0r 6 years I've worked with hundreds of candidates who have gone in to interview through us for a job they really wanted. Our company goal is to place at least 1 in 10 of those who go in to interview. We often achieve a much better ratio that that. Frankly there must be easier ways to make a living (get a PhD in CS and work for Microsoft? Sounds hard.) In our experience the ratio of hires to applicants for those trying to get into the top companies without the help of a quality recruiter is many many multiples of this number. Oh how I want to get this fact across to so many candidates and clients I talk to: good recruiters save you time and save you money by more efficiently putting the best people (companies) in front of you. Don't get me started.

The interview. Everyone's favorite way to spend a morning-being poked and prodded by a group of people looking for a reason (or not) to hire you. If you're trying to get into Google, Amazon, Microsoft, or other top companies the web is alive with scary stories of nutty unsolvable problems these companies give. One thing all the best companies are exceptionally good at is scientifically comparing every single person who comes in the door to their best people. Their simple rule is they don't hire you unless you measure up to those people.

What do these companies want? Why do they select some candidates and not (so many) others? Is there actually a method at work that makes sense? From the conversations I've had with software engineers out there I know a lot of you are very confused, and dare I say bothered, by the way these things unfold.

No one has let me in on the great corporate secrets but I think I can demystify what companies are looking for from my experience placing solely extraordinary software developers over the past five years. They are looking for ROCKSTARS. Are you one? If not you can learn to be. Here's how:

Resume Follow the link to learn how smart companies view resumes. Your resume should be much more than a bland list of your education, experience, and personal information. Most resumes stand out about as much as a piece of hay in a haystack. The best companies are looking for needles. Some of the clues they look for are:
*People who began programming at an early age. Early curiosity in programming is a very common trait in the best developers.
*People with uncommonly stable job histories. If you are not staying a minimum of a couple of years in each job and growing within the organization, don't send your resume until you are.
*People with a logical and advancing career path. Points are not given for going from programming to QA and back again. The best companies know where they are going and would like for you to have a plan too.
*People with PASSION. We have unlimited numbers of resumes from people who got their degree in CS because it was a hot industry to be in. The best companies are not looking for these people. Bill Gates didn't need a degree at all because he had passion. Passion adds points to your score across all the categories below and adds significantly to your odds of getting the job. Extra work such as being involved in open source work, being on standards committees, filing patents, inventing new products, or writing about your work are some of the ways of letting your passion out. Find it and nurture it.
*Exemplary educational credentials. Yes people are impressed if you went to a great school. But most often that alone won't get you the job. If you don't have a degree from MIT or a 4.0 GPA, don't despair. The next category can override those standard measures.

You want to be sure to list every technology that matters that you have worked with, but smart enough to avoid claiming expert status in something you are not. One of the most dangerous people in the world is the person who thinks he knows things that he does not. The costs involved in a software project that doesn't meet expectations can be enormous. The best companies ruthlessly check that a given applicant actually knows what they claim to on the resume. One of the most common types of feedback we get when a candidate is turned down for a job is "this person couldn't demonstrate the knowledge they claim to have on the resume."

Opportunity. Have you ever looked at Steve Job's resume? If you didn't know what he's accomplished you wouldn't bring him in for an interview would you? The best companies want to know what you can do for them, period. You must be able to show how you will return them in value many multiples of your salary, the more the better. They don't care where you went to school, what your GPA was, what you look like, or how weird you are, IF you offer some amazing opportunity to them. You'll need to use your questioning skills to find out what their most pressing problems are and show you have solved or know how to solve them.

Corporate knowledge. Blind dates blow up when you walk in talking about yourself and how great you are and why your date should want to marry you. She'll be thinking, "Next." Even if it's all true nobody wants to hear it. Contrast this scenario-you've been set up with a young lady by one of your mutual best friends (me) who knows you both intimately. You know she's an artist. You find her website and really love her art. You understand it. When you start talking about that you don't have to be the most handsome, richest dude in town any more (though it woudn't hurt.) If you are going to interview with a company you want to work for you better know every fact on their website, read any available book by an insider about them, research their history, and study their current financial report. Do us all the favor of not going to interview unless you are quite sure the company is the sort of place you want to work.

Kultur. Are you a very conservative, right wing political idealogue who also happens to be a great software developer? So what. Don't apply to Google. If you don't spend some time researching the culture of the company you are interviewing with you are certainly harming your odds of getting hired.

Skill. What are the hard interview questions C++ (or whatever your language is) developers get asked? What resources can you study before your interview to make sure you are going to do well? Developers always tell me, "I don't have to know trivia about my language. We can look up anything we need to know." Yeah, but not in the interview. Every company will judge you on your baseline knowledge. If you don't want to play by the rules how can you win the game?

Trust. Who is your favorite coworker right now? Now rank all your coworkers on the level of trust you have with them. Is he or she also the person you trust the most? Probably. Can you get a sense of whether or not you can trust someone from a short conversation? So can your interviewer.

Attitude. Five jobs in five years? Why? Answers like bad boss, bad company, bad coworkers are just excuses. Don't have excuses. Tell the truth. The product didn't sell. The company ran out of cash. Facts, not opinion. If you have failed in the past and can discuss it unemotionally and rationally and without defensiveness your odds will increase markedly. How fast did you recover? The best companies want the people who can fail 10 times in a row without losing momentum or doubting themselves. The quicker you get to the eventual success the better.

Results. You have software projects on your resume. So does everyone else. Why were your projects successful? How exactly was your input instrumental in that success? Say there are x people on your team. If you ranked everyone on the project from 1 to x in order of their contribution to the projects' success, 1 being the greatest contribution, would you be number 1 or 2? If not don't send your resume to the best companies. Go achieve this measure on a project, then send it.


Success. The person with the highest salary at Microsoft is the guy who gets the products out the door. In terms of getting you the job, nothing beats having worked on the leading software application at the leading company in the space. If you were also the lead developer on that project you'd have to work really hard at screwing up the interview enough to not get the job. Unfortunatley I know it is possible. The best companies want to know what qualifies you to hang with the people who already work there. Those folks want to know you can operate at their level. Better have some examples ready of how you already have. You should find out through your recruiter or other sources what the top intitiatives are at the company, what project they want you for and why, and have a plan for articulating how you can help the project succeed.



If you've ever watched The Apprentice you should have a pretty good idea of how this process works. That big blowhard with the stupid hairdo simply gets together a group of people who appear to have the best chances of being his hire. The one who gets the job proves through a series of tasks to be the one who most often succeeds relative to the group. As in any competitive endeavour the difference between the person who gets the job and the other applicants can be a very slim margin. Your job is to use the ROCKSTARS criteria to make sure you will be The One next time you go through the process.