Outsourcing Winners and Losers
An anonymous reader writes "The New York Times has an article on the winners and losers of the outsourcing trend. It's a Q and A session with a distinguished panel of experts on the topic, including Professor M. Eric Johnson, who says that, 'Low-skill jobs like coding are moving offshore and what's left in their place are more advanced project management jobs.' Now I know coders aren't rocket scientists, but less advanced than project managers? Ouch."
I have programmed. I am VERY bad at it. Sure I CAN code but I can't do it well. To find a quality programmer is not easy - I've tried. I wonder if this is why most software sucks ... because people think ANYBODY can do it.
...And when they came for me, there was no one left to speak out for me." - Martin Niemoeller (1892-1984)
I strongly feel that programming is a creative process, and anyone that describes it as a low-end job, does noet knows what programming is. It's like out-sourcing art-painters to an other country and letting the important managers of the painting-creating process say inside, to send e-mails like: "Don't forget to use a lot of blue in the right corner, art-buyers like red."
-- (:> jms cs.vu.nl (_) --"---
Outsourcing managers is a big no-no. Suddenly, the company is not American anymore.
Don't waste your vote! Vote for whoever you want, unless you live in a swing state it won't matter anyways
Some may think this is the best way to do things at their company, but it's essentially turning their coding process into a factory job.
Look at it this way: would you rather have the wristwatch that is hand crafted to perfection, works better, and will last forever, or would you rather buy the watch that came off of the assembly line, always loses time, and will break on you in a year or two?
By leaving the coding process to people outside of the company and its interests, and thereby making the whole process more mechanical than creative, they are essentially assuring themselves the lowest-quality product. It's unfortunate if they think that's the best way to go, but in my opinion they will eventually get what they paid for, so to speak.
If a project is going poorly, replacing twelve good developers with one good project manager won't advance the project one iota if the project is already being competently managed. Conversely, if you already have enough developers on a failing project, adding twelve good engineers and removing a good project manager isn't much of a save either.
To try and establish some kind of mapping between the two is absurd. It's like saying "An axle is worth a dozen engines!"; the car isn't going to go far if you're missing either set of skills. If a project is lacking project management, you need more project management. If it's missing engineers, you need more engineers.
Part of what leads to these sorts of statements, of course, is that neither skillset is easy or readily understood by either side of the debate. Coders don't understand how hard it is to do good project management (mostly because they're typically exposed to the lousy sort, and because you can always muddle your way through). Project managers often have no insight into what it takes to design and build good codeTo compound the misunderstanding, they see that there's one project manager and a dozen developers and they think that they're worth a dozen developers. It's a fairly typical management error.
Ideally, project managers would all have heavy coding experience, and every developer would have project management training. If they don't, then it's up to the experts on both sides to educate across the aisle. If your project manager doesn't get it, it's your fault for not taking an hour to explain it. And if you don't understand why the project managers do what they do, try asking about the process they use to put together a project plan, to do resource balancing, risk amelioration planning, cross-team scheduling, and the like.
I don't think that the reason coding is outsourced, whereas project management is not is because of the skill required. It is more because of the nature of the businesses involved, and the nature of the coding to be done. In many situations, you can't really get away with outsourcing project management, because that essentially means you don't really have control over the project, and so you don't really have control over your own business ( assuming the project is central to the business, peripheral projects can be entirely outsourced ).
The nature of the coding to be done is also important. One of the facts that I've come to realize in studying computer science is that, to a large extent, the majority of coding work is routine and does not require in-depth knowledge or familiarity with computer science techniques. Most real-world coding consists of pretty mind-numbing tasks of gluing different APIs together in a reasonable hodge-podge. Many of these tasks require only a familiarity with the syntax of a language, some familiarity with a few common APIs, and access to a machine. None of which is very skill-intensive.
During the dot-com boom many people were employed doing coding work at incredibly over-inflated salaries who had read one or two 'for-dummies' type books. This was possible because there was a shortage of coders who could do even the most routine tasks. The high salaries attainable with very little training meant that there was naturally a rush on such teach-yourself-coding books, and suddenly there was a glut of people who could do routine coding. Now, because of that glut, there is an excess of able code-monkeys to do routine programming tasks, which means that much of this work goes to the lowest bidders ( ie Asian sweat shop coders ). Supply & demand is all it is.
But the future is hopeful, I think, for those who are willing to tough it out and obtain Comp.Sci. degrees. Right now we're stuck in a kind of computational limbo where the market is not sophisticated enough to demand really sophisticated software, so there is little demand for people who can design highly sophisticated applications. There are some jobs which require knowledge of high-performance computing, knowledge of efficient algorithm design, AI, etc. but not very many. Right now basic code-monkey work is what satisfies the majority of the market demand. This is changing rapidly, I think. The more consumers get a taste for sophisticated technology, the more the demand for truly intensive software will rise, and the need for more people with real skills ( ie University level training ) will increase.
There is a big difference between a carpenter and an architect. One is a trade, the other is a profession. The confusion that is happening right now in the labour market for programmers is because this type of distinction is just now starting to emerge. It used to be that there were only professionals in the programming world. With the dot-com boom & bust this has changed, and there is now a new class of worker, who programs as a tradesman, not as a professional. The mind-set of the market has not yet come to fully realize this distinction, and so we have these problems. Eventually this will settle out and there will be two classes of programmers - those equivalent to architects with high levels of training, and those equivalent to carpenters with much practical knowledge, but little or no theoretical or 'design' skill. I expect this will occur more and more as the demand for sophisticated software increases, and we'll see the re-establishment of 'programmer' as a profession.
There are a thousand forms of subversion, but few can equal the convenience and immediacy of a cream pie -Noel Godin
IT people are being outsourced first because HR does not know how to hire them, and managers don't know how to manage them. Eventually everyone except the VPs, marketers, and salespeople will go. When garment industry jobs that Americans will not do get outsourced that doesn't hurt many people. When manufacturing jobs go, it's painful. When jobs requiring college degrees get outsourced it means a return to the middle ages, with a rich, talentless aristocracy, and a sea of poverty.
The only people you can't outsource are the ones who have to talk to the client directly and the ones who make the decsions as to who to outsource.
If I were starting up a new software company I would go to India or China or Eastern Europe and hire people away from the big outsourcers. Get experienced people pre-trained. Eventually with competition wages may get to 50% of American levels, which is what some people I know (good people, too) are currently accepting.
It's easy to be cavalier about jobs when you are a venture capitalist, a VP, or a journalist; only the journalist can be outsourced, and not easily. It's not so easy once you think that literally everything else can go, leaving American workers working at Wal-Mart.
You got me into this! You were the ideologue! I'm only a poor assassin! - Twenty evocations, Bruce Sterling
I think I might have one for your perusal:
First: forget about software being an "engineering" discipline. It is not. Engineering deals with building physical things, to deal with physical problems. Their design process is entirely different from ours. They spend a huge amount of time perfecting a design up-front, testing it in computer simulations to make sure it won't fall apart under load, building a prototype and destructively testing it, etc. Then they spend another significant amount of time figuring out exactly how best to build the product efficiently. THEN AND ONLY THEN do they actually start building the product.
Contrast this with computer science.While the software development process is LIKE engineering in that there is a design and prototyping period which is difficult and requires a high degree of skill, it is also UNLIKE engineering because in computer science, once you've got a prototype you're ready to test and you can distribute it as-is for nearly zero cost.
Programming is also unlike crafts. In fact, I think considering programmers craftsmen is unfair. A craftsman is an artisan, like a painter or a woodcarver. No two items he creates are the same. He doesn't go through a lengthy design period; he merely creates whatever thing of beauty he is working on. Further, a single item he creates is expensive, because each item is unique and represents a huge investment in time. So I don't think this comparison holds up either.
If you want an accurate model for computer programming, the closest model is that of the mathematician, because really, computer science is a branch of mathematics. It is the branch that deals with implementation and design of algorithms. In a sense, programmers model thought processes; things humans would have to do manually if the computer didn't exist.
When you look at it this way, you're much closer to modelling what's actually going on when a programmer grabs his keyboard. We consider the process an individual human would take to achieve some result; then we codify the process as a set of rules that can be automated and vastly accelerated; then we empower a computer, a lifeless, inanimate object, to perform those rules for us.
We're mathematicians modelling thought for the benefit of our society, creating machines which can enhance the power of our minds. WE are the accelerant speeding the growth of our culture, because WE are the steroid that is causing our intellectual capacity to grow faster than it could ever evolve on its own. Just look at the internet itself: it is so much more vast, and has so much more potential than the library at Alexandria. WE created that. WE made this happen.
And, now, we are considered a burden that must be outsourced. It's ironic, isn't it? Corporations who owe us their very ability to do business worldwide have no gratitude or loyalty for us, and are brushing us aside as though we don't exist. We're just line items to them.
But I'm rambling. Your conceptual approach is that of the mathematician. A design process which mixes equal amounts of knowledge, skill, and inspiration. None of which can be planned like an assembly line.
Farewell! It's been a fine buncha years!