Back to Darwin's Survival of the Fittest
Lately you hear many software engineers complaining about competition in the software industry from foreign workers or foreign companies starting to compete. Finally, it seems, that the US is not an island anymore and that we are facing major competition. For me, I cannot comprehend the outcry maybe because I had to fight, learn, change and risk a secure lifestyle to become what I am now. That means I embrace change and competition because it will keep you on your toes so that your market value does not drop relative to the market. On the other hand, I can feel the agony of these developers because in Switzerland, the safe, hired-for-life work environment was turned up side down due in part by the competition from the US during the last decade. I think there are two important aspects everyone involved in these times of changes should think about.
1. Every Software Engineer has to work on his/her Market Value Everyday
Evolution is omnipotent and we have to adapt or fear extinction. In a world of global connectivity through the Internet and distributed development in companies as well as open-source projects, foreign companies are becoming more and more competitive and then can take advantage of their local environment like lower wages or lower costs of living. This means in turn that every software professional here in the US has to compensate for the disadvantages of the local environment through knowledge, skills and good communication. As hard as it may sound, everyone that is looking for a good paid, secure and nine-to-five job is on the wrong place here because the Internet boom is over, period. I, for myself, do not expect to be a software engineer in 10 years even though I have no clue yet what I will be doing then. But I am confident that I will find something that I like and where I am eager to work on. Right now I like the competition and the challenges because I can work on a job where every day is different and I never feel that I have to go to work. It is a privilege to work as a software engineer that has to be earned and then worked hard for to keep.
2. Outsourcing is NOT the Holy Grail of Cost Cutting
The dispute between a CEO of a car company and Bill Gates of Microsoft was flawed from the very beginning because they forgot that software development is a Research & Development process and not a production process. In software development, only one copy is produced called the source code and only the process of pressing the CDs and printing the manuals is mass production. This means that companies outsource their R&D department to another company. To make things worse, the most important parts of a software project are communication, communication and, did I say, communication but it is precisely communication that is difficult in an outsourced project, especially when foreign companies are involved because communication is not only difficult, but the cultural gap can be a source of many misunderstandings and can lead developers to wrong assumptions that are undetected for a long time until they appear at probably the worst time. Just remember the failure of the Mars probe where the calling component was working with the metric system and the called components in the US system (feet, pounds, etc.). Outsourcing works fine when there is a very well defined project, the tasks are simple and the tests can be made locally. Therefore projects like the fixing the Y2K bug or code migration did finish well. On the contrary, projects with vague goals and requirements, short timeline or complex or specific business rules will probably fail with foreign companies because each iteration of development will take longer due to the communication lag, produce more errors that will slow down the next iteration and therefore are harder to control from the client.
I saw outsourcing come and go a few years ago like the cost cutting idea of CASE tools or other code generation tools, but we are still coding day in, day out. I guess this wave of outsourcing will go again after a while but unfortunately managers are not paid for good, long-term decisions and so far customers are not willing to pay a little bit more for good service. When the managers or customers cannot be changed, the software engineers have to work hard on themselves and try to show the decision makers good arguments against outsourcing.
Enjoy your day - Andy