tags:

views:

321

answers:

8

As my company's sole internal developer one of my main tasks is the maintenance of a medium sized inventory tracking .NET web forms application.

The application itself was coded initially by a half-insane programmer with questionable credentials using many techniques (including such high-minded concepts as Ajax and N-tier architecture) that he didn't quite 'get'. It of course has no automated tests, no formal spec, no changelog - heck, before I got there they had never even heard of source control. As you can imagine, the application is incredibly difficult to work with, simple changes take days and routinely break unrelated components in unpredictable ways.

Management has thus far refused to give me time to rewrite the application preferring to fight fires. They do however acknowledge the problem and have decreed that the solution lies in outsourcing.

Now I am skeptical of the ability of this approach to result in an improvement in code quality but with no numbers to put behind any alternatives I am willing to give it a try. I would like to press the team to work in an ALT.NET/Agile fashion, short iterations, full unit testing, and a strongly decoupled architecture as I feel like this is the most likely way to get solid work out of the team.

I am wondering if anyone has any experience with a similar project and any advice they might have. Our company has zero outsourcing experience and the research I have done on this is actually quite negative for this type of project and given our restrictions so any ideas or comments in general are more than welcome.

A: 

If it's Ajax for ASP.NET and you don't need new features (as in, ends up in "scope creep land") I could probably give you a fixed price for something like this increasing the quality of the code by orders of magnitudes if I can see the code and see what it does today and what features it has.

I'd normally use Ra-Ajax and ActiveRecord for such a project...

For an "Agile project" with iterations, backlog, sprints and so on I'd have to go with per hour price. My guess is that I could do such a thing orders of magnitudes cheaper and faster then you think... ;)

Thomas Hansen
Ohh yeah, thomas _at_ ra-ajax dot org
Thomas Hansen
+2  A: 

I was once in a similar situation. I had a web application that i had to maintain and build new features on it. As i was not allowed to rebuild the application i chose to "go with the flow".

Every page/error i had to fix i would rebuild it properly. In time i got to write all the application as i wanted. I didnt get any thanks but my co-workers where happy, as they to hated that project.

Sergio
Ah, you lived in a simpler world of pages that were under 3000 lines of code. How I envy you my friend...
George Mauer
+4  A: 

That is going to be a disaster unless you a very careful about who you outsource it to. If you can find someone who knows that domain and is known to be a good developer, and can keep tabs on them during development, then it might possibly work out. If you just find someone cheap off the internet, I wouldn't hold out much hope.

T.E.D.
+1  A: 

Outsourcing has many pitfalls. The best outsourcing is done by people who you would happily employ to be physically with you, but they aren't available locally so you are forced to employ them remotely.

The trouble is most outsourcing is done because while you can find the talent locally you're saving money and the choice to outsource is done for financial reasons and, generally, outsourcing any project has the same tag attached to it as anything else, "you get what you pay for".

I've never had a good experience with any outsourcing project. Far too often the work that comes back needs far too much time spent on it so as to make it re-integratable.

With CI tools and distributed version control the theory of remote working is achievable. In practice, you would be better off finding a local contractor. That will be the cheaper option long term.

Of course, management won't get wined, dined and taken to sports events by the outsourcing company's reps in your area, which has to be an important consideration.

Unsliced
A: 

You will need to select you partners very carefully for the project to work. You will need to act the project manager part and insist on impromptu code reviews and structured unit testing, as you'll need metrics as to what is being accomplished, yet you will not have the ability to review every line of code.

As for selecting the group, you need to have someone you can trust. There is nothing worse than the nagging inner voice of doubt when you don't know the other parties work. Being a developer, you can become your own worst enemy when you start to question someone's solution. Without trust you won't know when to hold back and when to push for different solutions.

David Robbins
A: 

As some of the other people have mentioned you are going to have to be very careful in who you select for this project. In addition to this, I personally strongly recommend that you take a step back and document what it has to do, and I would look to the outsourced company to provide an entirely new application, NOT modifying the existing structure if it is really as bad as you say it is.

My reasoning for this is that often times in really messy code the more you get in the more you find wrong, and the harder it is to work with. Taking the time to document the system and build a system to that point with the specifications that you list is going to get the best bang for the buck.

I have gone with this approach many times with clients, and so far all have been successful.

Mitchel Sellers
Yes, this is one of the things I have been thinking of doing
George Mauer
A: 

There a StackOverflow podcast that talked about outsourcing, which you might find useful.

Personally, when it comes to outsourcing, you must consider one thing:
Who's going to maintain the solution once it is developed?

If the company's answer is "You.", then you're in trouble unless you're thoroughly involved in the development of the solution. This is where many of the other answers here applies.

If the company's answer is "The Outsourcing Party.", you might still be in trouble if your maintenance contract is not iron-clad. What may happened is just when a critical fix or change is required, the "Outsourcing Party" no longer exist, or won't support your request.

If you're not careful, the most likely outcome of this will be to either rewrite the solution internally anyway (after wasting time and money outsourcing), or spend more time and money finding another outsourcing party.

alextansc
A: 

From my personal experience I found out that outsourcing works well mostly on maintenance and testing type projects. People out there are skilled in .net/ PHP / Ruby or whatever but are not always the ones following best practices. If I were you I would work with an outsourcing firm on maintenance tasks and slowly make them fully responsible for it while I look to completely rewrite the application. Given the domain knowledge you have it would be faster for you to write.

If this does not sound like a good option I would say the answer Sergio should do it.

Perpetualcoder