(1) Your customers are also offshore, or (2) you’re hoping to save money on development costs.
I’m going to assume your reason is number (2). Though this post is brief for such a complicated topic, it should give you some things to think about. Yes, you can certainly save a lot on development expenses. Then again, it can come back to bite you in rework expenses if there are communication issues.
How do you bridge the language barrier?
(1) You need a go-to guy or gal who speaks the same language as your developers but will be working at your location. This is a must. Your probability for success is going to go way up by ensuring there is no breakdown in communications.
How do you receive the quality of code you need?
(1) Use continuous integration
(2) Use test scripts to understand requirements
(3) Use short iterations
(4) Have regular builds
(5) Separate teams by functionality (not activity)
How do you communicate?
(1) If you can afford to send/bring someone (an ambassador) over to work with the other team at the beginning of the project, do it.
(2) It is critical that your “go-to” has a daily meeting with the team. Select a method that allows each side to see one another. (webcam/Skype)
(3) Have everyone use Skype (VoIP) and/or a chat client for one-on-one communications.
(4) Keep a Skype connection open between the offices.
(5) Use wikis or other collaborative solutions for common project information.
(6) Stay away from email, unless it is for formal communication. Information is going to get lost along the way and it will take longer to clarify.