As mentioned below Screenhero is really great for 1v1s (they plan on adding team collaboration early this year).
For reference I wrote a post a while ago with some tools and methods we use at Catalyze. The only tools we've added to the list that aren't in this[2] post are trello and teamspeak.
2. http://m97.co/writing/working-remotely-as-a-designer.html
- less disruptive to others in an open space
- both have a good full screen view of the code
- both can use their second monitor to look things up or try something during the session
- it's easy to switch from one "master" computer to the other (eg. I fix something, commit, and we continue the session on the coworker's screen, on the environment he's comfortable with)
None of these things are exclusive to doing things remotely, but they're included by default.
While I prefer this for pair programming, I find coaching works best in person, where body language (understanding), off-screen talking and drawing stuff on a piece of paper, are more important.
This wouldn't work for folks who work in an IDE though, since it's terminal based.
One programmer shares screen with another programmer.
Both discuss what they are doing, what they should do.
One programmer codes. Another programmer monitors coding for bugs and sub-optimal implementation.
Communication tool: Skype (or possibly Google hangout?)
Full disclosure, I work remotely and it's by far the best decision I've ever made in my entire life.
So to address a few points. Collaboration to me is when a group of people, at least two, are working on a project together. As a designer this is one of the core aspects of my job. I'm constantly working on things with engineers, founders and marketing people. Therefore I feel that I have a solid idea of what it takes to collaborate efficiently.
At my previous job, that was location dictated, collaboration typically took place over chat. We did have meetings to go over larger ideas and aspects of the project, but typically critiques, pair programming, decision making all took place over chat. Even though we were in the same room we made it a point to communicate over chat because one: you need to respect my space and not interrupt me just because we're in the same room and two: we have a transcript so we can reference it later.
When I decided to leave that job as a developer and pursue a career in design I decided that I would look for remote work only. I firmly believed that everything I did on a daily basis in a single location could be done remotely.
The biggest point I want to make in this post is that tools are essentially irrelevant. What matters most is the management of people on remote teams. When you hire remote employees they need to be both self managing and self motivating. You need to make them aware that collaboration on a remote team is what each individual member puts into it. If they aren't documenting their work each day, if they aren't participating in daily scrums, if they aren't contributing to chats, if they aren't volunteering to review PRs, etc. it's just not going to work out.
For me, and many of the folks I work with, remote work is about freedom. The freedom to build your own schedule. The freedom to work on something early in the morning or late at night, in the comfort of your own home. The freedom to walk to a coffee shop and work from there. The freedom to forgo that commute. The freedom to be more productive. The freedom to spend more time with your family and loved ones. The freedom to just build great products without the hassle of office politics.