One of the more exciting experiences I can think of as a manager is the opportunity to build a new team. Besides the chance to face new challenges, it has this feeling of going back to school after the summer vacation, with new books, new equipment and the feeling that you can be the best at what you do (well, now that you have new pencils!). In reality, though, recruiting in general and creating a team from scratch (or almost scratch) specifically is a very challenging task, and mistakes in that process could have a major impact later.
Even before you begin recruiting, you need to come up with a job description – besides being the baseline for the expectation setting between you and the candidates, the job description also serves as an initial sieve for the incoming flow of CVs. Set the requirements too high, and you may be losing good candidates (either because they feel intimidated or because they don’t meet a requirement you may be willing to compromise on – if you knew they were great in all the other stuff), but set them too low and you may be swamped with irrelevant CVs and spend most of your valuable time talking to the ‘wrong’ people. In order to understand where the bar should be set, I think there’s an important question you need to ask yourself – are you looking for a team of stars, or are you aiming to create a star team?
I think the answer is not trivial. Moreover, there are probably points in time where you’d be leaning towards recruiting stars and other times where you’ll be recruiting people to build a ‘star team’ (where no one in the team is necessarily a ‘star’ on his own).
For example, in a startup environment, probably in the early stages, where the team is very small, technological excellence is in many cases key for success and certain superb aspects of the product might be the difference between success and failure, you may want to have the star people who will be able to solely solve in innovative methods any given problem and make this one great feature which will make your product more attractive than the competition.
I think that once the team grows it both becomes harder to maintain an all-star team (there is more maintenance that needs to be done and less innovative work, there are increasing amounts of bugs that need to be solved, there’s more documentation to be created, and so on), and delivering quality software based on the customers requests, on time, is at least as important as innovation. The ability to share tasks, knowledge and ownership of a large codebase becomes critical to the team’s functionality. At this point you’ll still want to hire excellent engineers, but I believe you’ll want those who will appreciate the chance of being a part of something great, knowing that the fact that they belong to a star team actually makes them better engineers in the long run, giving them the chance to become that star engineer in (hopefully) their own startup in the future.
I enjoy working with smart people, as it gives me the chance to keep learning every day. I enjoy it less when the brilliant people I came to work with turn out to be brilliant jerks . I don’t think it’s an easy decision when you need to choose between a brilliant jerk and ‘just’ a great engineer. It becomes even harder when the brilliant guy, who already knows every bit and byte in your code has a negative effect on the entire team. If you want a great team, I doubt there’s room for that kind.
My bottom line is probably obvious by now – I believe in synergy, in potential and in giving the right people the chance to grow. I’ll take that star team, thank you.