The World is Flat^H^H^H^H Outsourced?

On old Unix systems, backspace would show up as ^H.  I couldn’t immediately find a way to strikethrough my title so I used ^H.

I find a lot of people who want to outsource their development oversees or to another company.  There are clearly a lot of benefits to not having to worry about doing it or getting a better price.  The benefits of outsourcing are readily apparent, so I’m going to focus on some of the times where outsourcing is not a good idea.

Programming is a knowledge acquisition activity, rather than a construction activity.  People normally say “build” or “develop” software which incorrectly associates it with building a house.  Constructive activities are easier to determine what needs to be done, how to fix what is broken, and how much progress has been made.  Writing software is very frequently not this way.

Programming is more closely related to finding a cure for cancer. The primary outcome of research is to learn something, the research paper written at the end does not instantly put that knowledge into anyones head.  No matter how well the research is done, or how well the paper is written, future researchers will not be able to continue where the original researcher has left off.  This is because the next researcher has to spend a lot of time understanding what the paper means.

In programming knowledge is retained in the head of the programmer, the code is an artifact (or by-product) of that learning.  While the artifact can be readily be transferred to another person, the knowledge cannot.  Swapping programmers on a project is like swapping cancer researchers, it can be done, but most of the work is lost.

To put this in perspective for a business person.  Suppose your company had outsourced a very complicated spreadsheet to do some forecasting.  It has 200 tabs full of formulas and cross referencing, but the first tab contains all the results so no one ever really looks at anything else.  Your company saved a bundle and produced something arguably better because it didn’t have the right talent at the time.

Your boss comes to you one day and says, here is this spreadsheet, about 10% of the time cell D46 shows and error instead of the correct answer.  You know how to do spreadsheets, I need you to fix it before our presentation in 2 days.  You should be able to do this easily because all of the work is already done, you just need to fix the bug.

You have created several spreadsheets this complicated before and so you aren’t immediately worried about fixing this one.  Had you been working at the company earlier, you could have written this one. You spend a few hours backtracing the cells to find out how the values are being generated and find that it is really complicated.  You aren’t really sure why a lot of those tabs exist and some of the formulas seem wrong.  You wonder how this spreadsheet is producing any correct answers because it all seems wrong.  However, you do know that the final answers seem to reflect the actual business.  You decide you have three options:

  1. Spend a lot of time learning everything about this spreadsheet to fully understand it.
  2. Make some guesses about how things work and find a quick fix.
  3. Re-write the whole spreadsheet from scratch.

Time is running out and so you choose option 2, an attempt at a quick fix.  After all, this is just one tiny bug and you have a time constraint.  You spend a few more hours on it and change some things so that the error never shows up.

A few days after the presentation your boss comes in with another bug in the spreadsheet.  You go with option 2 again.  You silently wonder to yourself whether your quick fix created the bug.  This process repeats a few more times and your boss starts to express concerns that you are not fixing bugs, you are just replacing one bug for another.  You start to understand why some of those “extra” tabs are there and you realize that you broke the spreadsheet and that those tabs aren’t being used anymore because of your changes.  Uh oh.

You realize option 1 (learn everything about the spreadsheet) is no longer viable because you broke things and don’t know how to put it back.  Before you have a chance to think about re-writing it, you get moved to another project and someone else is now in charge of that mutilated spreadsheet.  Which option do you think he will pick?  I’ve seen people pick all 3 options, so whatever your pick is you have a 67% chance of being wrong 😉

This is a pretty good metaphor for what happens to code that is brought in from the outside.  It’s also a pretty good metaphor for what happens when you move coders to different projects.  After the code has had about 3 authors, the project usually needs to be scrapped and re-written.  When I worked at Novell, my department boss decided it would be a good job to do a reorganization.  Basically all of the coders and all of the projects were shuffled.  The results were catastrophic, but I don’t think my department boss ever realized what he had done or why productivity plummeted.

Outsourcing definitely has its place, I’ve tried to provide some general rules to help you decide if you should outsource your next project.

Do Not Outsource When:

  • You are a software company.  Never outsource your core competency.
  • You are writing complicated code.  Even changing authors once can be expensive.
  • You know you will need a lot of future changes.
  • You don’t think you will be able keep outsourcing to the same person.

It May Be Okay To Outsource When:

  • You know you will rewrite this code.  For example a rapid prototype.
  • The project is small.
  • You are able to ensure that no future changes will need to be made.  This means you can validate there are no bugs and you know you will require no new features.
  • The project is not central to your core competency.
  • Project is mainly displaying information to the user interface, very few algorithms are needed.
  • The project is simple.  For example, CRUD applications only Create, Read, Update, and Delete data from a database.  This is built-in functionality for many programming frameworks.  Be careful though, I don’t know how many projects start out as this and then eventually become monster-sized projects.

There are exceptions to all of these rules, but these are definitely good things to consider before picking an option.

This entry was posted in Uncategorized. Bookmark the permalink.

8 Responses to The World is Flat^H^H^H^H Outsourced?

  1. Great post on the when to and when not to, thanks for the outline. I’m not in the position to need it now, but I’ll have to save this for later.
    Becca

  2. Jeremy says:

    Great writeup. I’d maybe add that sometimes a project MUST be outsourced due to constraints. Though this may sometimes be due to a management failure, outsourcing is not inherently the greater evil in every case.

    I’ve seen success by having a programmer in-house who’s in charge of the outsourced code quality. This person may have weekly or bi-weekly meetings with the outsource firm where they walk through their code and he can maintain quality and a high-level overview of the structure.

    Also, requiring documentation deliverables (not just at the completion of the project) can help quite a bit.

    • ricochet2200 says:

      Great comments! You make a great point that sometimes there are constraints and you just have to get it done. Definitely not ideal, but you’re right, you pick the less of two evils.

      I think the in-house guy in charge of outsourced code quality can be good as well. If possible, I would still only do this in the times I think outsourcing is okay. I view this as an additional thing to do when outsourcing is a good idea to make sure your project is a success.

  3. Henrik Warne says:

    Well said! The research and spreadsheet analogies are very good.

    As for point 3 of when it may be OK to outsource (“no future changes will need to be made”): in my experience, either the program is used, and then there are always new requirements to be added, or it is not used, in which case there is no need to change anything. In other words, if the program is used (successful), it will never be done – there are always changes to make to it.

    • ricochet2200 says:

      Great response, I was actually debating if I should add point 3 because of exactly what you are saying.

      I have found that in small non-tech companies sometimes people are willing to put up with crappy software because it beats not having anything. They sometimes have a one time fixed budget and then it’s done and people just live with whatever is there. Definitely not idea, but I included point 3 to try to acknowledge that some budgets don’t allow future development no matter how badly it is needed.

  4. Jeremy says:

    Great Blog!

    I was wondering what your thoughts were on a business that makes software and can’t afford a programmer. I’m working as a programmer creating custom code. However, I’m starting to get behind. I cannot afford another programmer and I know my wife won’t volunteer. I was thinking, at the time, turning my role more into a project manager.

    • ricochet2200 says:

      Gosh, great comment! I keep seeing variations to this question from a number of startups and have yet to really come up with a good answer. Here’s my best shot:

      1) If you are working as a programmer, but can’t afford to hire another programmer to do what you are doing you are working for below market value (by definition). You should be charging a higher price for your service or need to get better at recruiting programmers. Maybe you are getting equity or something as a part of your compensation and maybe that creates a cash flow problem that prohibits you from affording another programmer.

      2) A second option is to try to train someone (other than your wife it looks like) who can’t program. They would work for cheaper than your rates but would require you to train them. This will actually hurt you in the short run, but should pay off more and more over time. I wrote about this idea here: http://adevelopersvoice.com/2014/02/25/journeyman-or-a-master/. This could help you transition into more of a PM role.

      Yup, I’m not sure the best route for you. It’s a question I see a lot in cash strapped companies (startups usually) and it’s a tough one to solve. However, I view the fact that you can program a great asset. Some people try to create a software business where they can’t code… http://adevelopersvoice.com/2014/02/03/should-i-start-a-tech-company/

      Hope this helps at least a little bit.

Leave a Reply to ricochet2200 Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>