My company has retained an outside firm to develop an iPhone app for us. As the only internal developer with any knowledge of Objective-C, I've been assigned to develop the relevant APIs on our site, but also to do anything I can to make sure the whole thing comes together on time.

Any suggestions for things I should do or things I should watch out for, particularly from those who've been down this road before?


I outsourced more than 300 IT projects of all sizes over the past 10 years. I've been the outsourced developer myself.

Here are the most problematic problems I encountered multiple times and the suggestions to avoid them (I learn the hard way). Those mistakes cost me hundred of thousands dollars, so I hope you will save as much thanks to the suggestions so I'm even and can rest in piece :)

  • require access to the repository. If not possible, request to be sent the full source every week for review.

You don't want to discover at the end of the project the code did not meet your quality standards such as missing comments, documentation, poor coding practices, etc. Reviewing the work frequently will allow you to give feedback early in the development phase.

  • ensure that they signed appropriate NDA and IP assignment documents.

That's one of the common mistakes. Things went bad the company you outsourced the project to claim full ownership of their work. Or worse, they decide to use what you paid for for their own business. Ensure that a proper NDA and intellectual property rights assignment is signed.

  • they often use custom framework of libraries that comes without source code. Verify it is acceptable to you.

Sometimes the developers or company you hired decide to use custom framework or library they wrote. This may be a problem if you are so dependent to them changing your developer is almost impossible. Sometimes the development shop will give you full right on the code they wrote specifically for you but not their libraries. It's as problematic. Ensuring that you will have the possibility to continue your project without them is a really important possibility you want to keep.

  • ensure that they use standards in the technology of choice.

Even if they doesn't use specific custom libraries, you may face another problem: specific way of coding that don't meet industry standards. In the worst case, you have to rewrite everything to make any maintenance possible without them.

  • if deadline is important, request penalties in case they miss it.

This is one is sometimes not specified explicitly. What happens if they miss the deadline? Let's say they face a strong internal problem preventing them to deliver on time? Will you have the budget to develop in another dev shop in urgency?

As a general rule, I would add that the specification is very important in that kind of work. So you have lot of responsibilities there. With time, I learnt that it's preferable to propose a first small project to a company to test it first, and reserve bigger projects to trusted providers you work with before.

  • 1
    Figuring out which libraries they're using is a great point. I hadn't really thought in those terms. Thanks! – Arkaaito Jan 23 '11 at 10:22
  • NDA's and IP agreements are worthess unless your company has the time and money to enforce them overseas. – Frank Hileman Feb 6 '14 at 0:46

Along with the above answers.

  • If its possible try to interview the guys you are working with. You should be aware of the development and communication capabilities / styles of the people you are going to work with. This also setups up communication channels.

  • Ask for proof of concepts.

  • Give the req & design phase more attention. Stability of requirements are very important if the project has a tight schedule. Otherwise the bug-fixing phase will be unnecessarily dragged.


Having now survived the project which prompted me to ask this, I'll sum up my learning as:

Trust But Verify

You cannot rely on what the outside firm's representative tells you about the state of the app or the system. They may misunderstand the requirements or fail to pass along reports/questions/problems from their developers, you may misunderstand their reports about the state of the tests, or, less charitably, they may think they can "deliver" a feature which they have not tested at all.

Insist on certain features being delivered to (your!) testers on certain dates, if possible. Otherwise you may wind up with a bunch of features "delivered" right at the end of the project, which will lead to a pile of bugs that you must either (a) pay them more money to fix, or (b) fix yourself.


Other than what Pierre 303 has said, since you're developing API there are a couple of additional things you should require the firm:

  • Make sure your the firm also write appropriate API docs. doxygen apparently seems to go well with Objective-C programmers (that accepts the well known JavaDoc format). API's are public libraries (even if they're used in a private setting such as within a company) and it is important that they are well documented.
  • Suggest testing with TDD and BDD. BDD involves you writing specs for the API, which closes the development loop between you and the firm. API's usually are the simplest form of software to do TDD/BDD with. I say suggest, since some firms probably don't know how to do this.

Not the answer you're looking for? Browse other questions tagged or ask your own question.