Occasional Samizdatista Malcolm Hutty recently emailed me thus:
Re your post on Samizdata a little while back about the fixed quantity of programming fallacy: if you’re interested in an intelligent discussion amongst programmers about whether outsourcing programming to India is actually a successful commercial strategy (and under what conditions it might work or not work) look here.
Sample quote:
In my opinion you rarely can separate design and implementation, especially if it’s not a totally standard system that you are going to implement, e.g. when your customers don’t know exactly what they want. You have to have a very clear and quality design in order to be able to send the specs overseas for implementation. Most of the time you have a half-baked design when you start coding. You make a prototype, you try out this and you try out that, and you correct your design in the process. After a while you get confident in your design, and then you start coding full-speed. At this point you have stable specs, and you can outsourse things but it’s too much of a hassle and overhead at this point, and maybe not worth the trouble at all. Most of the software projects have this kind of loosely structured overlapping design and implementation processes. It’s not automated yet, we are still too chaotic.
As someone unburdened by much detailed knowledge of these matters, I say that a reduction in price will always have consequences. Pile it high and sell it cheap, and you will be amazed by the number of new purchasers who come forward, seemingly out of nowhere. Remember the days when there would only be demand for six mainframe computers. As cheaper computers materialised, people thought of steadily more things to do with them. And it will be the same with outsourcing. My guess is that outsourcing will not so much make certain already familiar types of software cheaper, but will make new kinds of software possible. The big impact will come not from the people asking: how can we do our stuff more cheaply? It will come from those asking: what software can we now do that will make use of outsourcing, which we could not do before?
But what do I know? Meanwhile, I am quite prepared to believe that making profitable use of outsourcing is a skill that has to be learned, and that outsourcing definitely has its pitfalls.
Uh, dude (I think it’s Malcolm I’m addressing here):
> It’s not automated yet, we are still too chaotic.
When it does get automated, outsourcing will be pointless, as it won’t require any people! At least not if you’re using the traditional definition of “automation”, that is. It’s only when we’re still in the hack-out-a-design and then “manually” code it that inexpensive coders have any value.
“When it does get automated”, we will be using working AI systems with IQs in the thousands, and Homo Sapien will be a nice pet.
ITMT my job is safe.
Kirk (and everyone): The sample quote Brian picked wasn’t mine, in fact I don’t even really agree with it. I know “read the whole thing” is standard fare, and it’s a big thread so I wouldn’t necessarily bother unless you’re really taken, but do go and read some of it.
In particular though, read what I said, to Brian, that he quotes at the top of his post: it’s an intelligent discussion, between people who between them know a lot about what they’re talking about. There’s lots of points being raised, from different sides of the argument. Some of the people write code in India. Some work at companies with that use big standardised methodologies, are PMPI members and have a sign over their desk saying “If our software crashes, so does the plane.” Others write code that runs two-bit web commerce applications for two bit companies where if it’s Tuesday then there’s a new spec, but if it’s Thursday the code had better be up and running or on Friday we’ll be out of business. Some of them know an awful lot about running projects that work, often from seeing how projects fail. A few I wouldn’t let near a team of programmers I was responsible for if they were delivering sandwiches.
It’s an interesting thread: that’s all I promised.
I have personal experience of this sort of thing – twice. Once in Barcelona and once in Milan. As soon as the team (in its widest sense, including the client-side) gets split up the whole thing starts to get very difficult.
One example. I was in Barcelona. The guy who wrote the spec was in London. There was something in the spec I didn’t understand. We chatted on the phone. We sent one another e-mails. I still didn’t get it. This was after two days. I flew back to London, saw my colleague face to face and I was up to speed in 10 minutes.
Repeat that a few times and your project has gone from AOK to complete nightmare.
I too have some doubts about outsourcing. I am skeptic about the spec/design/coding split. And outsourcing just can’t work because there is nobody out there who is as good as I am.
But the original debate was not about that.
Let the companies/people figure out the technical and economic angles of outsourcing and do, each. what it thinks is best.
What we all fiercely oppose (I hope) is somebody else (the government) doing the figuring for us and forcing us one way or the other.
Hmm.
What a lot of people don’t seem to consider is that outsourcing is like a lot of other processes. As time passes more is learned by all involved and the process is accelerated.
It’s true that the most significant reason for a project to fail is a failure in communication between team members. So if an outsourcing effort has all of it’s team members located in India, then that might make the effort more successful. This might mean that not only coding is outsourced but design and analysis as well. The primary difference between Indian analysts and Western ones being the experience the latter has. Once that deficit of experience has largely been overcome, then the number and severity of negatives associated with outsourcing will fall dramatically.
*shrug* Time passes, people learn, crap changes.
Besides the total number of truly unique pieces of software aren’t all that many. The concept of “patterns” alone is informative of just how repetitive software development can be. Once you’ve mastered most of the architypical software programs you can apply that same knowledge to other similar efforts. This same process is happening with Indian programmers who are in the same process of learning the architypical programs.
If we (Americans) start outsourcing software and other countries start getting good at producing software, won’t that mean that fewer Americans know how to produce software?
And, what good will a degree in software that cost $100k be if they only earn $10/hour because of offshore competition. Won’t the universities now teaching software development be forced to move offshore themselves in order to take advantage of lower-salaried teachers?
And, aren’t we opening ourselves up to what we did to the Russians (letting them steal trojan horsed power plant software)?
If offshore programming was really cheap, you could create hugely complex systems. So hugely complex it would only be feasible to hire more offshore programmers to understand what they were doing.
Yup. Pretty much.
Software development is an incremental process in both creating the software and learning how to create it. If it is outsourced to India then there won’t be as many opportunities for junior level staff to advance their experience and skills to a higher level.
It’s basically the difference between being a maintenance programmer and a developer of new software. In the former case you can get stuck in a job for years without learning anything new or having any opportunities. In the second you generally learn a great deal that is valuable for career advancement.