people who've worked at other places for a few years tend to be a mixed bag. For some, this is the first stability they've seen after a few failed startups. For others, this is the company that represents a "better" way to run a company than the company they worked at before. Either way, for these folks to succeed at Google they have to drink the cool-aid and duke it out with the college kids because Google doesn't place any value on previous industry experience. (It puts tremendous value on degrees, especially Stanford ones).
Emphasis added. From an alleged Microsoft internal email comparing working at Google to working at Microsoft.
Microsoft, Google, nVidia and many other companies put candidates for software engineering jobs through an interview process that consists of hours of solving programming problems on a white board. If these companies where honest with themselves and with the people who are interviewing for these jobs they would use the following description for their software engineering positions:
Software engineering opening. This job requires a computer science degree and a bright person who can think on their feet. No experience required.
The interview process used by Microsoft and Google selects bright people who can solve programming problems in less than an hour. Some of these people may also be able to design and build large complex software systems that take months to implement, but this is an accidental outcome. In evaluating the future performance of a candidate for a software engineering job, these companies adopt the same caveat that is seen at the end of mutual fund advertisements: Past performance is not indicative of future results. Microsoft, Google and companies like them are staking a claim to the idea that future performance is demonstrated by the cleverness that someone shows in solving puzzles or programming problems during the interview.
I have been fortunate to have had the opportunity to work on a number of challenging software projects. I have been part of a small team that designed and developed a dataflow parallel processor. At MasPar Computer Corp. I worked on compilers for MasPar's massively parallel processor. I was a project lead and core developer for a Verilog hardware design language compiler that generated native code and FPGA logic to support VLSI test bench simulation. Currently my work involves the design and implementation of a query language for graph structured databases. I have published a book (on a now dead programming language called Modula-2) and several research papers. I have authored a Lawrence Livermore Technical Report that describes some of my query language work.
A software engineer with experience on a number of challenging and demanding projects was a sought after employee before 2000. Job interviews usually focused on the projects you worked on, your part in the project and how you dealt with challenging problems. In these interviews your past experience was important and was an important factor in whether or not you were offered a job. These interviews were based on the idea that past performance is a predictor of future performance.
The "dot-com bust" in 2000 changed many things in the technology community. For the first time unemployment among engineers was actually higher than the general unemployment level. The drive to save money created by the "dot-com" bust accelerated the outsourcing of software engineering jobs to India and other low wage countries. Starting in 2000 the Microsoft style of interviewing job candidates seemed to spread. I am not sure what caused this. Perhaps other companies were impressed by the high quality of Microsoft software and decided that what Microsoft did, they should do as well. Or perhaps there is a trend in hiring younger, cheaper software engineers.
I've had several interviewers tell me that they don't ask about past experience because they are worried that they will fall victim to people who can talk a slick line and have not actually done what they have claimed. The real dynamic that is behind the reluctance to ask in depth questions is laziness and ineptitude when it comes to talking to another person. Rather than asking in depth questions that will illuminate the candidate's experience, the interviewer asks the candidate to solve a set of canned programming problems.
I've written about puzzle and programming problem interviews before on my web page Calculating Permutations and Job Interview Questions. When I wrote this web page the implications of this interview style had not occurred to me. The implication is that experience doesn't matter. All of the leading edge projects I have worked on, the work that I have done that no one else has done before, does not matter. In the puzzle and programming problem interview, I am no different than a bright software engineer fresh out of school who has not accomplished a fraction of what I have. With the spread of the puzzle interview I worry that I am becoming unemployable, despite all that I have accomplished. I am grateful that I have a challenging job that I really enjoy.
What does it mean when some of the leading technology companies hire software engineers based on the premise that experience does not matter? Have we arrived at the era of the software factory, where experienced software engineers are no longer needed to create software?
The software industry has been compared to a "cottage industry" where small numbers of artisans in workshops produced hand crafted products. The next step in the evolution of software development, some people have claimed, is the software factory. In the software factory, architects and designers specify a software design that is implemented by the software factory. Rather than the art and science that characterizes artisan created software, the software factory is staffed by programmers (sometimes referred to as code monkeys (MP3 by Jonathan Coulton)) without high level design skills. An analogy for a software factory might be a machine shop. The machine shop floor is staffed by machinists who work from a design created by mechanical engineers. The software factory model is particularly attractive to multinational corporations that can base software factories in low wage countries like India.
The analogy between manufactured items like custom designed machinery and software is false. Unlike software, a manufactured object, like machinery, has a material, labor and factory cost for each object produced. In contrast, the cost of creating software is in design and development. As Microsoft's profit margins in the past have demonstrated, once development costs are covered, each copy of software sold has a huge margin of profit. The factory model for software is also wrong because large software systems are some of the most complex artifacts ever created by the human race.
The history of large software projects is also the history of many spectacular failures. Recent failures include:
The FBI Virtual Case Management System which burned through $100 million dollars without delivering a working product. The project was canceled and the FBI had to start over from the beginning.
The Denver Airport Automated Baggage Handling System which was $2 billion dollars over budget.
Software is pervasive in our society. Complex software systems control civilian and military airplanes. Modern banking would be impossible without massive computer networks and software.
Given the huge cost of failed software systems one might assume that companies would try to hire experienced software engineers. Yet as I have noted, at least in the case of Google, Microsoft and other companies, experience does not matter. At least in some cases the reasons for this many have something to do with the corporate culture.
Historically Microsoft hired young software engineers, frequently right out of college or graduate school. In the past Microsoft offered many of these engineers a chance to become wealty through Microsoft stock options. These engineers had little experience outside of academia and gained their experience working at Microsoft. Microsoft's corporate model has been to "grow their own" experience, rather than hiring experience from outside the company.
In the case of Google we also see a culture that is primarily composed of young software engineers with little experience. Google was, after all, founded by two Stanford graduate students who themselves had little experience. Google remains, as I write this, a one product company. They have a sophisticated search engine and little else. Google has not been forced to develop a culture that can successfully design and develop large software systems.
The puzzle interview has spread to many other companies, some of which may actually need to hire experienced software engineers. The computer industry has a long history of following fads and some of these companies may have adopted an interview style simply because companies like Microsoft and Google use it.
The process of evolution is rapid in the computer industry. In a period of about five years (1995 to 2000) the World Wide Web went from being a network that connected a few research sites to changing the world in ways we are still trying to understand. Software failures have destroyed a few companies and have come close to bankrupting others. As a software engineer with over a quarter century of experience designing and developing large software systems I have to hope that experience will once again come to be valued.
Created on: May 5, 2007
Last modified: May 28, 2007