"Staff Augmentation", is our best proven approach.
In the staff augmentation model, we at O3IT host a team of programmers that are exclusively assigned to your company. In this case, this team of people is at a high level managed by your own staff. In this scenario we say "at high level" because even though your project managers may be assigning tasks, evaluating performance or requesting a certain activity from your programmers, it is still our responsibility as a company to monitor your personnel and also keeping you informed at all times about the progress of your projects and the activities of the people involved.
Our experience shows that the level of management cooperation may vary depending on the customer's specific needs and his approach towards Outsourcing.
In any case, and this is what we usually recommend, communication and overall performance of programmers is best when management is shared.
In this case, we at O3IT assign what we call a Project Leader. This Project leader is also part of your team of programmers but he or she is the person who will be the primary link between your company and your outsourced team. It is this person who is in charge of communicating with you and understanding your needs. He would also "negotiate" your project's deadlines and assign activities to your programmers based on the deeper knowledge he has about the programmers' skills and experience.
For both cases what we have here is basically that you would keep in-house the definitions in terms of analysis, design and general architecture of your project while you'd be outsourcing exclusively Programming activities.
Of course, analysis and design activities may also be outsourced; in fact there always exists some overlapping between these tasks and programming. But what we recommend is to start only with programming and then, once the communication process is refined and both teams start acting like one, more and more activities can be shared between the two companies.
In this model, billing is calculated on a per-hour basis.