Wednesday, November 4, 2009


So, I started this two days ago. I've not had any trouble finding things to post, in fact, my biggest issue has been holding back. Every day, programming forums are filled with people who want their homework done for them, or who have taken paid work and want the very people who are being put out of a job to do the work for them. Now, I could post four or more times a day ad infinitum, and I'm sure I could find all sorts of examples that raise some new variations on the core questions, but I feel that doing that would soon become mean spirited and perhaps focus more on laughing at how clueless these folks can be, than focusing on my main point. So I'd like instead for this small assortment of examples to stand as a testament to the sort of things that people are asking in programming forums every day, and how they prove that unless you have a good process, outsourcing is going to cost you money and cause your product to be of a low quality. Issues I've not touched include things like maintainability of code, when people talk about delivering 77000 records in a single webpage, that is obviously a usability issue. When people have 50 textboxes on a form, that's a usability issue, but when they are called textbox1, textbox2, etc ( which is what they are called by default, and are called in the majority of examples that get posted for help ), then there's a real issue in terms of potential bugs, and in terms of maintaining this code base. If your outsourced project works at all in the first instance, it will definitely cost you most than it should to get someone else, or even the same people, to extend or improve it, the code is just not written with those things in mind. And don't get me started on people who sprinkle SQL statements randomly through their presentation layer, and the issues this is bound to cause.

Perhaps the biggest question to ask is, does my project involve any level of sensitive data ? If it does, if a login is going to be needed, then outsourcing is definitely scary, because you have no chain of accountability when your data escapes, due to the sort of poor practices I expose below, and which seem to happen every day in the real world.

At the core, I don't blame the people posting the questions. If we, that is the West, go to a country where work is hard to find, and offer a better than average wage with no questions asked, is it any wonder that people take the opportunity ? I do wonder why people, having got these jobs, don't take advantage of online forums as a place to learn ( how often have I tried to instruct someone only to be told 'give me the codez - urgent !!!!' ), but perhaps they perceive the long term hopelessness of their situation and are just milking it as long as they can. As prices in one place are pushed up, another country with a cheap standard of living and a lot of people who can type, waits in the wings. That's the reality of being in a market where all you've got going for you is price.

The other thing I've often been accused of when I try to tell people that they are not ready to write commercial code, is racism. Let me be clear on this. I do have Indian friends who are good programmers, and I've hired Indian people before, but that sounds like a shallow justification. Even if I had not ever met a good Indian programmer, that doesn't mean I've ever suggested they do not exist. As it stands, some of the best programmers I know come from that part of the world. And, why shouldn't they ? The issue is not racial, it's to do with a situation that has been created in a particular country. It could have been anywhere.

I have a good friend who works for Sun. When his job went to India, he got the job of supervising that team. Their outsourcing works. It works because he flies there four times a year, and he got to be there physically to interview them. It works because there's no company in between the person hired and a stream of short term jobs, they are hired by and paid by the one company, and they write code for that company. Under those circumstances, they are able to hire skilled workers and make it a success. In fact, high demand means their main issue is keeping good workers, who are hard to find. On the other hand, I know people who have been forced to try to outsource through sites like eLance and Rentacoder, and their experiences, even when carefully interviewing people, hiring the people who gave the highest quote, etc, were uniformly miserable, for all the reasons I have stated. And that's with a trained programmer watching their work every step of the way. When someone who has no idea about IT decides they need a website and finds a way to pay people overseas to write it, so there's never any face to face meeting to discuss requirements AND there's never any communication where the people on the paying end include someone with any ability to assess the abilities and the quality of work of the people being paid, I can only imagine what a mess that would turn out to be.


  1. Sad to see that your blog has ended.

  2. Here's some actual code snippets I had to clean up in an outsourced project (I saved them because they make me laugh):

    AbstractorTabControl temp = (AbstractorTabControl)this.Parent.Parent.Parent.Parent;

    Gotta love that for each loop (this is actual code I deal with every day):

    foreach (string key in "FirstTab,SecondTab,ThirdTab".Split(",".ToCharArray()))
    // Get the panel control and remove
    //already loaded control.
    Panel pnl = this.Controls["pnl" + key] as Panel;

    Speaking of textboxes this same team (I use that term loosely because the check in history of any one file may show up to 20 different people having their go at it) implemented their own "table" with Label controls. Each row had 10 labels and they would add as many rows to the panel as rows from a query. That worked fine until the company started getting 1000's of orders and users began wondering why they were getting exceptions all the time about all the number of allowable windows handles being reached (which is a maximum of like 16K but you have to set a registry key to even get it that high). I replaced that custom "table" with a datagrid ... I swear they must have gotten paid by the line of code because they would reinvent the wheel every chance they got.