Friday, September 4, 2009
CSG's Top Five Interview Prep Tips
We have talked about interview preparation in previous blog posts so make sure you don't miss those, but anyway, here are Core Search Group's Top Five Interview tips. This information is directed at software engineers. However, it can be used by one and all:
1 - Be able to defend your resume like it is a Ph.D. thesis. Anything and everything on your resume is fair game. Many people crash and burn during the interview because they cant go into details about their projects. Make sure you can.
2 - Know how to say: "I don't know". You have to make some attempt at an answer. It is a number 1 pet peeve of hiring managers to hear a candidate say "I don't know" and be done with their answer. Make an assumption based on a similar tool you have used if they ask you about a tool you have never used. Then asked the interviewer if that was a safe assumption.
3 - This goes hand-in-hand with #2. Know how to get the interviewers help if necessary. Be able to ask the right return questions to get the interviewer to push you in the right direction. Part of the interview is knowing how to get help; collaborating with the interviewer to get to the right answer is key.
4 - Be able to start a dialogue with the interviewer. I have heard hiring managers say that they have a stock list of questions, but that if they ever get through that entire list, they know they don't want to hire that person. They want to be engaged and interested in conversation. They want to be taken out of the common question-answer, question-answer routine. That can be boring. Remember you are trying to make yourself come across as interesting to the person interviewing you. You are trying to make yourself standout from the pack. You have to make it so the interviewer leaves the interview setting remembering you more than other candidates.
5 - This goes hand-in-hand with #4. Have a list of solid questions to ask. If you are given the chance to ask questions and you don't, then you will sound disinterested. A great way to lose interest from the person interviewing you is to come across as disinterested in the position.
So next time you get that interview lined up. Get yourself PREPARED!!!
Look out for the next post about getting tons of interview advice online.
Peace out!
Gil
Friday, April 24, 2009
Work with World C++ Leaders in an Amazing Location: Lake Tahoe!
If you don't ski or snowboard, there is a ton of other outdoor activities to do in and around
Do you like to visit
So you are now saying, “well, I am not a C++ expert”. That is OK. What is your definition of ‘expert’? Everyone’s definition is different. Do you have extreme passion for C++? Do you love dissecting the advanced features of the language? Maybe you are a hardcore Boost developer. If you are in there somewhere and feel that you are at least on your way to becoming a C++ expert, then we at least have a conversation starter. Let’s talk. If you are a rising rock star who better to learn the rest of your C++ alongside than a few C++ Standards Committee members.
Do you love working in an atmosphere where entrepreneurship and creativity are encouraged? Do you love being able to work on open source and side projects and have strong people near you to discuss such matters? These aren’t the only things discussed around the water cooler.
Are you concerned about COL? Yes, it can be expensive in
Contact us for more information.
Monday, April 13, 2009
How to run an efficient and effective interview process.

There are many:
- First is the most obvious. It saves the company time and money.
- It optimizes the chances that candidates will spread positive feedback about your company and your openings, whether they get hired or not.
- If you are working efficiently in your interview process, your recruiters are much more likely to respond and do the same and hence bring you more great candidates.
- Efficiency in one activity breeds efficiency in other activities.
Let's take a look at how to get the most out of your interview process.
- 1st, it is VERY important to give timely feedback to your recruiters or to direct candidates. You as a hiring manager must assume that each and every candidate is working on at least 2 or 3 opportunities other than yours. This makes timely feedback imporant in keeping the interest level high in both your candidates and the recruiters that are working with you. If they have to wait too long for feedback or to hear about the next step in the process, they are more likely to lose interest and focus on other opportunities more than yours. So quickly give feedback from the previous step in the process and quickly move to the next step. Technical people are very sensitive to process. If your recruiting process is opaque, slow, and unfocused, they very quickly assume the rest of your company works the same way.
- 2nd, know the timeframe importance level for each candidate. You may find the need to speed things up with certain candidates if they are getting close to the offer stage with other companies. This is especially important if this is a "rock star" candidate.
- 3rd, Make efficient use of everyone's time. Double up on phone interviews. If you know you need 2 phone interviews before you can bring a candidate onsite get 2 software engineers on the phone with a candidate at a time. Kill two birds with one stone. This can not only save man hours and money, but it speeds up the entire process which, again, is very important for candidates that are getting close to receiving offers from other companies.
- 4th, If you are scheduling a candidate for an onsite interview and you are flying them several thousand miles to bring them in to your office, make sure you optimize the use or your company's time and money. Make sure you have the entire thing scheduled hour by hour. Don't have the candidate sitting around waiting a long time before meeting with the next person. By leaving them alone in a conference room they will lose interest, confidence and hence your process loses effectiveness. If they will need to do a second day of onsite interviews, try to have that scheduled into the candidate's travel arrangements and schedule if possible. If you have to bring them back for a 2nd round make sure you aren't going to lose their interest and candidacy in doing so.
- 5th, Have a pragmatic approach to your interview. Tech trivia has its place in the software engineering interview, but should not be the end-all be-all. Make sure you are drilling down core computer science fundementals. If there is a famous problem that the founding members of your company had to solve once upon a time, ask the candidates how they might approach the problem. Also, in writing software you try not to "reinvent the wheel." Use the same approach in interviewing. Get them to go through some of their projects step-by-step. Get them to talk about architecture, show you the design and maybe some code of some of the implementation. Keep them on their toes.
One last thing. By keeping your interview process efficient and effective you will help your retention rate. Many people dread conducting interviews. By keeping your interviewers on their toes you will keep them excited and interested in their own job. Everyone wins! The next time you are in a position of hiring keep in mind how it directly and indirectly effects the rest of your organization.
Monday, March 2, 2009
Why Twitter?
Gil says-
Dave says:
Monday, March 31, 2008
An interview is a blind date. Don't screw it up.

At left is Core Search Group's recommended interview attire.
Have you ever had a friend try to hook you up with a potential significant other? It can be really embarrassing for everyone involved. As third party recruiters we try our best to judge not just the technical match of the candidate and company, but also how the personalities will mesh. Sometimes we get it wrong. In one recent instance we had a management candidate tell the developers how she would “manipulate” them into getting the work done. Surpise, they didn't like that idea. She didn’t get hired. Sometimes we get it right. Among other fascinating interviews I have witnessed we had one guy show up for the interview in a giant squid costume. He got the job-programming for one of the top financial companies in NYC. It was the right audience. Since our recruiter knew the audience he knew they would react well. On a blind date you chat with someone for a few minutes and mutually decide, yes or no, “I think I might be able to spend a lot of time with this person without barfing.” On an interview you’re deciding, “I can deal with the cubes and fluorescent lighting and total lack of source control if I can work with these people.” So the key is not to act like a gold-chain wearing goon or a prima donna or any of the other limitless types of pains in the ass people can be. Go in with the idea that you’re a consultant there to figure out how you can help them succeed. Go on a blind date with the idea that you want to learn about the person you’re meeting, not prattle on about how freaking cool you are.
The best blind dates are set up by someone who knows you really well and cares for you. So consider that individual before you accept. They may know your history and how you seem to prefer freakishly intelligent and productive people. Or they may have a friend whose life is a shambles who they are hoping you can lift up from the pit of despair and anguish. Which date do you want to go on?
Most candidates I talk to have no idea how to qualify recruiters. They let any tool with a monster account and some blind ambition fling their resume haphazardly at a company and cross their fingers. This leads to some brilliant flameouts. If I had a nickel for every sob story I’ve heard I wouldn’t be asking you for your resume.
Here’s CSG’s simple checklist to qualifying recruiters:
1. How long have they worked with the company they want to send you in to? How many people have they placed there? If the answer is “Ummmm…” let them waste some other sucker’s time.
2. What are they going to do to HELP you get the job? Do they know more about the group and the requirements than is on the woefully vague “job description” they got from HR?
3. Have they met the people you’ll be interviewing with? Can they tell you why they think you'll mesh with these people?
Don’t go on blind dates set up by people you don’t know. Don’t go on interviews unless the recruiter can convince you it is an excellent investment of your time. Don’t forget to wear clean underwear when you leave the house.
Thursday, December 20, 2007
Anatomy of a hiring decision
"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
// 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
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.

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.

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.

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.

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