I have a Master’s degree in computer science and a bachelor's degree in applied mathematics. I’m also known to be a technical author with several technical publications in the form of books and articles. Besides, I'm an open source enthusiast and have coordinated or contributed to several projects. Currently, I maintain my projects on GitHub.
As a content provider on the internet, not only I publish on this technical blog, but also I'm a podcaster and publish audio podcasts on Mash This.
Trying to maintain a healthy and active lifestyle, I'm a pescetarianist and exercise almost everyday. I’m an avid runner, soccer defender, and tennis player. I also have an interest in fashion.
As a professional working in any field, people would be interested to follow the news about the hiring process of bigger companies in their field that have become a symbol, and software world is no exception as everyone is interested to know what’s going on at Microsoft, Google, Amazon, or Yahoo, and who they hire and how they hire them.
I’ve also been following these news ranging from personal experiences shared on blog posts to in person chats with friends and friends of friends. The more I involved in professional software world and the more I dug into the information I gathered, the more I realized that the hiring process at big software companies is very weak and most of times it fails at hiring good and skillful talents and filtering out the lesser-talented applicants.
I’ve been observing more details about this issue in the past few months since some of the people that I know in person have been interviewed at these companies for different positions and seeing these experiences has adjusted my understanding of this process even though it’s hard to call it a process as I will discuss later.
In essence, the steps designed at big software companies as hiring process are pretty much the same and they can be split into three main phases starting with phone interviews, followed by in person interviews with generic questions, and finally in person interviews with more specialized questions. The highest number of rejections are happening in the first two phases that emphasize mostly on generic topics regardless of the position that somebody is applying for and are being done by the same people interviewing everyone.
The first steps focus more on evaluating the applicant’s interest in the company and his/her motives as well as the general passion for being employed in the field and the communication skills that are mandatory for somebody to take a position. The middle steps are designed to evaluate the abstract thinking abilities, problem solving skills, and understanding of principles, and the latest steps are more specialized for the position that an applicant has applied for which is usually done by people from the same department in order to make sure about the abilities of the applicant to fulfill the requirements they have in mind.
Later on, I’ll explain my reasons for where, when, and how this process fails at reaching its goal, if I safely assume that the goal is to hire the best talents and reject the lesser-talented and lesser-experienced applicants.
The first question that should be addressed is whether the hiring process at big software companies is really failing or not, and why I’m asserting this. One good measure for understanding the success of hiring process is to know the Bell Curve and how talents are distributed in the world (as the name is coming from the bell-shaped distribution of intelligence quotient). Despite the criticism against this book, it proved to be right about many of the topics that it discussed and the reasoning and evidence that it provided to support them.
Knowing the Bell Curve, it is easy to pick up some instances of talents who have been rejected to get a job at big software companies and compare them to some lower-level employees who are already working at such companies. The definition of a talent can be a source of disagreement but I think that it’s safe to consider the public reputation of a person and his or her works as a good way to distinguish good talents from the bad ones (even though the word bad may be too negative in this context).
Most likely you have read the success and failure stories of people being interviewed at big software companies on blogs or sites to know enough examples of what I’m talking about and I don’t want to point to particular cases here, but you would agree that if you know someone good who is working at these companies, he’s not hired using the regular hiring process and was probably selected and brought to the company with a totally or slightly different process.
Generally speaking, the hiring process at big software companies has failed at hiring the top 10% of talents on the Bell Curve and has usually succeeded to hire the lower 70% of population.
Although I used the term process to refer to the steps followed to hire somebody at a big software company, this is not a process because one simple characteristic of a process is that it has a constant behavior where we don’t see this with hiring mechanism at software companies. Sometimes they reject somebody with very similar capabilities and profile as someone else that they have hired just recently. Of course, this is in regards to the current (and in my opinion wrong) system that they’re using, so two people are being compared based on the similar performance at interviews.
There is a good article published about this issue here, but less or more, big software companies tend to have a brute-force mechanism for hiring employees and Google has been a symbol of this in the past few years since it started to get worse and fail in many aspects.
I can propose three possible reasons for this brute-force nature in the hiring process and one or all of them may contribute to this issue. First, it’s possible for the companies to have varying number of opening positions at different times enforcing them to cut at some threshold. Second, there is a chance that they intentionally do this to applicants in order to prevent people from finding out the details of the hiring process, and you may be surprised to know how often such an unfair job is done to people in different circumstances in this world! Third, there isn’t a well-designed hiring mechanism at big companies to automate the process and train the people in order to reduce the chances for such problems as most people doing the interviews are not trained enough for this job, so the outcome of their job is variant.
Doing a very simple search on internet, you quickly find many interview questions for software companies that are mostly the same and focus on specific areas, particularly algorithm design and programming with lower-level languages. The interesting question is that the type of questions is being repeated over and over and you don’t see much difference in the nature of the questions being asked, and this is the source of a problem that I describe later.
But I assert that these questions are irrelevant to the position that most people are applying for. I’m a Ph.D. student in Computer Science and actively involve in the topics being asked at such interviews in my every day life, so I do think that I have a good understanding of when and where these topics can be helpful. I have a good industrial background as well as a good understanding of these theoretical and lower-level concepts and have been able to relate these abstract concepts to practice in my experiences, however, this is not a case for everything.
First of all, human is not supposed to memorize everything and many details about algorithms and system programming are not concepts. These are topics that should be found in references upon request and I don’t think that anybody wants to memorize them in the long term. I know how to use these details when necessary but I need to check a reference to find the details about them. A good C programmer will forget many details about the syntax if he doesn’t write code for a few years but he can reload all these concepts at any time by writing simple codes for a few days. Most of the questions being asked at job interviews are about some details that an applicant may not have memorized.
Additionally, the nature of many of these questions is not relevant to many positions needed at software companies these days. Programming languages and tools have evolved hiding many aspects of programming that are needed for a position and you’re reading this from somebody whose primary research field is in this area. Nowadays, you can fulfill the requirements of many job positions at software companies without knowing binary trees and related algorithms or details of C programming. A person may be good at a position that he has applied for but may lack the skills in these irrelevant topics, and it’s not fair to reject him for that. You can contact many employees at a company like Microsoft, Google, or Amazon, and ask them how much of their work is involving such topics. Most of these people are using higher level programming languages and tools and don’t care about what is going on behind the scenes. A person may be very good at a high programming language and write a code that has a better quality and efficiency than somebody who knows all this theoretical stuff but can’t apply them in action.
If you’re wondering why lesser-talented applicants have an easier job finding their way to big software companies, the answer is laid in self-preparation. Often, more professional and experienced people are confident in their skills, so they don’t spend time reading previous interview questions and preparing for the interview to have above-mentioned topics in mind. Instead, lesser-skilled applicants work and study hard for such job interviews and know many of these details at the time of interview helping them to answer and get through.
I’ve witnessed this with my eyes and have seen how some applicants spend days and nights to study these algorithms and questions to go to a job interview and forget them after a short while, just like any other topic that you try to learn in a short while without a deep understanding!
On a related thread, an expert wouldn’t expect to be asked with such questions and will be surprised by them because he is able to evaluate the relevance of questions to the position he has applied for, but a normal applicant doesn’t have that vision, so he just tries to prepare and answer the questions as they are thrown at him!
Whether we like it or not, today’s business strategies rely more on money and profit than anything else and that’s why we’re ending up with lower-quality products and services in all aspects of our lives. Software companies follow the same strategies and that’s why they have been outsourcing their products overseas. This is the main motivation for looking for cheaper labor, and the growing number of available labor, and competition for positions along with the economic crisis and its impact on this competition have worsened the situation.
Usually a more experienced person has higher expectations and doesn’t want to sell himself cheap, so he is harder at negotiating for terms and benefits of a job. Since the people in charge for hiring applicants are not trained in the specialized field and are more focused on general topics, they may end up not hiring such talents. On the other hand, lesser-talented applicants are easier at these terms especially for the big pool of foreign applicants in the US who need working visas and may give up on certain expectations in favor of this requirement.
Having these said, I have to admit that I haven’t seen a single case of failure for this reason. If you get there in the last step, it’s very likely that you will be hired by the company and usually big companies have enough resources to pay you. However, demand for cheap labor certainly has an impact on the attitude of companies in their hiring mechanism.
Probably you have seen many great people that you think that they should work at big software companies and were wondering why they don’t. Besides personal reasons like better income, ease of job, and similar factors, the abovementioned reasons, in my opinion, are playing some important roles in failing the big companies at hiring good talents and keeping them. Sometimes, they can’t keep these talents because by hiring lesser-experienced applicants, they increase the chances for creating bureaucracy and some dirty networks that we all have seen at workspace. That’s because somebody without experiences is not confident about his future position and tries to apply these dirty works to keep his or her job making more skillful co-workers suffer (for example, read this interview).
Smaller companies, on the other hand, have less problems with the hiring process as they pay a closer attention to the smaller number of hires that they have and this helps them evaluate each and every case in a more logical and tangible way.
Therefore, if you’re applying for a position at a big software company, my recommendation is to search for the previous questions and read about such topics in advance no matter how good and confident you are. Most of the good applicants are being rejected in the early stages of interviews and if you pass them, you will have more logical steps to deal with, and the only way to get through these early stages is to prepare and be ready for the questions.