views:

750

answers:

11

There are a number of sites where you can post programming tasks. The general view I have picked up from other questions is that these sites are not very good at delivering successful results. But it seems to me that it must depend greatly on the type of task, and I suspect the success rate of outsourcing to rent-a-coder, elance, etc. will be very different depending on the type of work, other things being equal. So my question is; assuming you have the knowledge to do the task yourself, what types of software development tasks work well with these outsourcing services, and what types of tasks are best done in-house?

Some examples of task categories to think about:

  • Build a system from high level specifications
  • Build a component to integrate with existing system
  • Build a component where you have/do not have an extensibility framework
  • Additional plugins/components to fit an existing plug-in architecture
  • Write a specific function
  • Code in an area outside your specialization (e.g. you do ASP.NET but outsource CSS)
  • Scripting tasks
  • Product vs. app. for in-house use only
  • Port existing code from one language or platform to another
  • Web site design (graphic)
  • Web site design (structure)
  • Logo design
  • Content authoring
  • Testing
+7  A: 

In my opinion the only way outsourcing can be accomplished successfully is any project/task that is throughly planned out. You have to leave nothing to interpretation by the outsourcing company. If this is achieved, almost anything can be outsourced.

Cody C
Understood. But the question is, other things being equal, and without infinite time to nail the requirements, what types of tasks lend themselves to outsourcing.
bill
I'll also add that certain types of projects/tasks probably lend themselves better simply b/c it is easier to define the requirements and behaviors. For example, if you were developing a custom invoicing software process for your company, that would be challenging since scope will change daily. Other tasks like creating an automated VPN connection, is easier to define completely.
Cody C
Cody's answer - 'things that can be specified completely' - is the only one that's really universally applicable. If you want SO to rank the tasks you've got as options in the order we thing you'll be successful at outsourcing, edit your question =)
DDaviesBrackett
I agree that the question is not very well posed and too vague - I will try to improve it. I agree that you have to define requirements very precisely when outsourcing, but this is easier for some types of tasks than others. Thanks Cody for providing the example in your follow-up comment.
bill
If you could completely specify what a program should do, then you could write a compiler to turn that spec into a running program. All non-trivial software requires some interpretation on the part of the programmer.
brianegge
+4  A: 

I have found that outsourcing almost always delivers something that does more or less what you asked for--be it adding a feature to a major software package, building a test suite or even something as small as build systems, etc.

However, almost all of them do exactly that--give you something that does what you asked for. There is almost never any good design or engineering practices put into it, and when you want to change it or grow it, it never meets your expectations.

If you order sausage, it tastes like sausage, but you still don't want to look inside it.

Now that said there are consultants who do good work, but my personal advice is do everything in house if you can. For things like build scripts, etc, consider hiring some enterprising CS students from the local university; you get work done in-house that you can supervise and mentor, for a good price, and they get an internship to put on their resume.

jeffamaphone
Hiring is a better solution but requires a continuous stream of work, and a lot of paperwork and legislation to deal with, which can't always be justified.
bill
True. This question, like many on SO, is asking about something that seems simple and straight-forward, but in reality the question cannot be answered specifically without known hundreds of details that are not present in the OPs question. So, please take my answer in the same light: its vague, makes sweeping generalizations and may or may not apply to your situation. Crap, now I have down vote my own answer.
jeffamaphone
A: 

confusing little things that can be answered on stackoverflow :-D

David Archer
+2  A: 

I'd say that you may outsource things that either can be done more efficiently (not necessarily better, maybe just at lesser cost) than by yourself or are not relevant to the core of your success. It's hard to describe on the spot what could fall into the latter category; if your company does something it does it for some purpose.

I agree that in either case you should plan carefully, that's certainly very important.

Malcolm
+2  A: 

Projects for in-house use can often be outsourced. The requirements of such projects are often of limited scope (i.e. the requirements are easy to enumerate). They are typically projects that will never see the light of day (i.e. released to the public). They do the task as designed and not much more. Issues of quality, maintainability, and extensibility aren't as important.

This is a good article by Joel Spolsky about what should (and should not) be outsourced (software and otherwise):

In Defense of Not-Invented-Here Syndrome

Here is a relevant quote:

The best advice I can offer:

If it's a core business function -- do it yourself, no matter what.

Pick your core business competencies and goals, and do those in house. If you're a software company, writing excellent code is how you're going to succeed. Go ahead and outsource the company cafeteria and the CD-ROM duplication. If you're a pharmaceutical company, write software for drug research, but don't write your own accounting package.

Enjoy,

Robert C. Cartaino

Robert Cartaino
+2  A: 

I think if it's a project that your shop has no expertise in but needs on a temporary basis.

Examples:

  • Logo/graphic design for a website
  • Some sort of integration app in a language/framework you don't know
  • Conversion from one language/framework to another

Basically, if you need an expert in X for a set amount of time (not ongoing), and you don't have an expert in X on the team, it might be a good idea to consider outsourcing it.

Testing you'll always need, I wouldn't outsource that unless you need a temporary boost in resources or something. Same thing for PMs and support staff.

mgroves
This is a great answer, but I have modified the question to include the assumption that you could do the work in-house if required. Might be more efficient to outsource though.
bill
+1  A: 

Outsourcing always work for any tasks if you clearly spell out your requirements. However, it is a recepie for disaster if you expect more than that. For instance, if you are expecting any new recommedations or improvisations on any task, it won't happen most of the time for multiple reasons like lack of domain knowledge, expertise etc. In short, for outsourcing to be successful, you should only outsource those tasks that you are are fully aware (and have complete knowledge of all the ins and outs) could be done in-house but because of time and money cannot be done. This will make you flesh out good requirements and manage expectations on either side.

msvcyc
+1  A: 

Additional plugins/components to fit an existing plug-in architecture.

I work on an app that interfaces with hardware devices from different vendors that perform the same function. We recently refactored to standardize and componentize the hardware interface. Since the boundary is well-defined it is a great place to outsource.

Aidan Ryan
Have added this to the list in the question, thanks.
bill
A: 

Good advice in previous postings. Also, outsourcing should not take priority over developing and maintaining in-house code reuse libraries. I've known of a few companies that needed outsourcing frequently in the beginning. But as code reuse libraries became more extensive and developed outsourcing was needed less.

PaulG
+3  A: 

From my point of view as a technical oriented person, all things non-technical are good candidates for outsourcing. Most specifically graphical stuff (design, logos etc) are something that I can't do (or at least I'm very bad at it).

Aside from my personal skills, they are also the tasks that have very few dependencies with programming - you can change them easily without braking your code.

Treb
+2  A: 

Any work that requires close intrapersonal communication with the client, sponsors and/or users AND any work that integrates with other developers activities. SO, the negative of that is if a task can cleanly decoupled from other applications and people than it can easily be outsourced. If you look at the recent Boeing Dreamline 'issues' you can see the impact of outsourcing, major delays, increased costs, poor quality and loss of clients.

In many cases the cost savings of outsourcing are lost in the additional management costs required and the lower quality delivered. Do not mistake outsourcing with hiring expert consultants - where the consultant has some unique skill set that you require for only a short term period.

meade
Great point - I have edited the question to be based on the assumption that you could do the task yourself - you are not outsourcing in order to find expert skills you don't have in-house.
bill

related questions