# What is the most effective way to work with a friend on the same game?

We need something where we can check files out, edit them, check them back in and then build from the them.

Something like Google Docs where we can edit the same code at the same time would be a ideal.

We are both using Visual Studio 2010.

• I always wondered why nobody did (or at least I didn't find) Docs-like editing for code. I guess there are some inherent difficulties like code completion and the fact that code has to be compiled, but they don't seem utterly impossible to overcome with some coordination (and possibly tricks like delayed code merge strategies.) I guess they're a REAL problem in big projects. I'll have to dig for collaborative coding tools anyways (or make one myself :P) – kaoD Feb 16 '12 at 21:53
• @kaoD SubEthaEdit offers that kind of functionality on a per-file basis (not sure how well it handles large amounts of files). – michael.bartnett Feb 17 '12 at 0:14
• If someone can find me a program like this for windows and c# I will give you a cookie. – steakbbq Feb 19 '12 at 6:57
• Emacs can do this, but it's clunky: emacswiki.org/emacs/CollaborativeEditing ; or MoonEdit: moonedit.com (although I don't know if it has a C# mode); or Gobby: en.wikipedia.org/wiki/Gobby – amitp Feb 19 '12 at 16:41
• How hard would it be to write a new compiler IE sublime? It would probably just be easier to develop a plugin for sublime right? – steakbbq Feb 19 '12 at 19:51

As I stated in a comment to your question, I'm very curious for true collaborative editing. I did research some time ago but most solutions just didn't meet the standards: either they were plain text editors with syntax highlight, had insane costs or were unavailable cross-platform (like SubEthaEdit...)

Until I stumbled into Saros! It's a neat Eclipse plugin, so it might be easy to integrate with your current workflow. You can watch their demo video, it's quite impressive. It's very well thought for a true collaborative editing environment and has some very well-though key features. It supports an arbitrary number of participants, full project synchronization, real-time editing with markers and highlighting (ala Google Docs), following your partner's view, several participant-awareness methods and much more (you can even share your screen using this plugin.) And apparently it integrates with many other Eclipse plugins!

I have yet to test it myself, but it's one of the few projects still maintained and looks very promising. Give it a shot and let me know (read these guidelines before.) I promise I'll come back here and post my impressions as a comment when I try it myself.

EDIT: Also, as Gustavo pointed in a comment, Cacoo might be useful too. It's an online collaborative tool for drawing UMLs (actually, any kind of diagram.) Saros supports a whiteboard, but there's nothing like a diagram tool if you want to avoid clumsiness.

• People gave a lot of answers, all on versioning systems, but I think this is the actual answer of the question. +1 for collaborative editting. BTW, try out Cacoo(google it) It's a collaborative tool for making UMLs, helped me out in a bunch of projects, it may complement your answer. – Gustavo Maciel Feb 17 '12 at 3:48
• @Gustavo-Gtoknu very good tool indeed, do you mind if I update the answer with it? – kaoD Feb 17 '12 at 12:50
• Do it NOW! :D The answer deserves. – Gustavo Maciel Feb 18 '12 at 0:18
• This is great however Eclipse is for java? I am running c# – steakbbq Feb 19 '12 at 7:02
• @steakbbq there are some plugins which provide C# support (Emonic and Improve) but unfortunately they seem to lack debugging and refactoring support. – kaoD Feb 20 '12 at 10:12

"we just need something where we can check files out edit them and then check them back in and build from the same set of files"

Use version control; a version control system (VCS) is exactly what you described, with the added bonus that it stores a history of every change anyone has made. There are lots of popular version control systems out there:

http://subversion.apache.org/

http://mercurial.selenic.com/

http://git-scm.com/

I don't use Visual Studio personally, but I am completely certain that Visual Studio has support for all of these version control systems.

• Just handed out a free private Git/HG host in chat: bitbucket.org (free for up to 5 collaborators). Also HG is more suited as it has plugins that deal with large binary content (content projects). – Jonathan Dickinson Feb 16 '12 at 18:21
• +1 A VCS is the way to go. I use AnkhSVN as my Visual Studio Plugin for Subversion. – Richard Marskell - Drackir Feb 16 '12 at 18:37
• +1 here. my personal endorsement is TortoiseSVN. For hosting (assuming open source) my recommendation is Google Code – PlayDeezGames Feb 16 '12 at 19:29
• – Jesse Dorsey Feb 16 '12 at 20:54
• Please not subversion. Distributed version control is totally simple for people not used to working with centralized systems. People used to subversion miss out an get confused. – rjmunro Feb 18 '12 at 1:22

For my team, we use three programs depending on what we need to work on:

• TortoiseSVN for code (try to have programmers use the same IDE, standardize conventions and encourage good commenting)
• Dropbox for multimedia (for models/sprites/audio files, allows devs to work locally until artists/composers/modelers are ready to deliver)
• GoogleDocs for documentation (for design documents/mockups/pitches usually for designers, managers and producers)

To coordinate the efforts of different members (who work at different times) we use Assembla's ticketing system. This way everyone is updated on the status of the entire project or a particular avenue of their choice. Also use Skype/Google Hangout/Face-to-face communication to make sure everyone's on the same page on at least a weekly basis.

This method typically works when a team consists of 3-5 people who have established roles (programmer, artist, modeler, designer etc.). If this doesn't work, try other methods or combine working aspects to make one of your own. Good luck!

• I only talked about version control for code because that's the only aspect of development he asked about, but my studio also uses Dropbox and Google Docs for the same purposes as this answer. – jhocking Feb 17 '12 at 13:43
• Great combination. – Bill K Feb 17 '12 at 20:55

Sounds like you want either drop box, a version control system, or both.

Dropbox is the most convenient. Just make your changes and save and Dropbox will sync over the changes on your friends machine. Don't think 2 people can work on the file at the same time though without overwriting each others work.

However, I recommend you use a version control system Subversion, GIT, and Mercurial are currently the big 3. There are a lot of advantages to using a VCS: including the ability to automate backups, rollback changes, and checkout your code on any computer that has access to your server.

Having used the 3 I mentioned I found Subversion the easiest to get started with and Assembla allows for free private SVN or GIT repositories.

• I don't really like dropbox for this kind of thing. If you use any of the Tortoise* products, it has a similar kind of Windows Explorer integration, but you get to control commit/push/pull/merge so you dont' have the "2 people overwriting each other" problem. – Jimmy Feb 16 '12 at 18:54
• I don't either which is why I recommend a VCS. However, there is almost no learning curve and you instantly have a backup so I considered it worth mentioning. – ClassicThunder Feb 16 '12 at 18:59
• I'd recommend not using DropBox in-place of a version control system. If two people modify the same file during the same time frame, DropBox will duplicate the file. For source code, this is usually undesirable and more of a pain that just using a source control system. – John McDonald Feb 16 '12 at 20:57
• Subversion is not easier to use - people only used to got will find it just as confusing as people going the other way. – rjmunro Feb 18 '12 at 1:24
• I never said it was. I said for me it was the easiest to pick up having learn. It is stupid to phrase subjective statements such as "Subversion is not easier to use" in absolute terms. – ClassicThunder Feb 18 '12 at 1:32

As mentioned in other answers, a VCS is the way to go. Git is my favourite, but that could just be because it was the first one I used.

I found this online book very helpful for learning Git. http://progit.org/book/ Whatever VCS you go with, it's worth it to dedicate a few hours figuring out how to use it.

Another thing worth mentioning - VCS are great for source code (or any text files), but storing images and sound files can bloat your repository unnecessarily. Some people recommend a separate repository for this, but I find Dropbox works well for these kinds of resources.

For a school project, we used a public Dropbox folder, and used this script to keep our resources up-to-date https://github.com/dc2011/td/blob/master/tools/extrafiles.sh

It checks the md5 hash of the file in Dropbox against the hash of the file already on disk (if it exists) so that only new or changed files are downloaded.

• yeah, i used to use svn. Now I always use Git. Although many people dislike the command line, I find it to be really comfortable. On windows I use Console, which wraps around the git-bash environment. On OSx its just Terminal with the Solarized theme. – Prozaker Feb 18 '12 at 0:37
• I agree, I live in the terminal if I can! There's sometimes a slightly steeper learning curve, but it makes automation so much easier. If you use OSX on a regular basis, you should check out iTerm2. It has support for 256 colours, as well as full screen mode and makes use of splits really nicely. – Dean Feb 18 '12 at 6:30

As many have mentioned, you need version control. There is a nice free offering from FogCreek software (you have them to thank for providing stackexchange which makes this site possible). It is called Kiln (built on top of Mercurial) and it integrates with a nice bug/feature/time tracking software product they have built called FogBugz. For a team of 2 developers they provide free versions of these products (and host them for you). I use this setup for my own projects and the paid versions for all the software products I work on for my employer (we have a much larger team of developers, so must use the paid versions). Worth a look for sure.

If you do decide to use these, here are some good tutorials or useful links to get you started:

Tools that my team uses for smooth collaboration:

•GitHub, which if you have a little bit of money is an extremely cheap and easy way to host all your source. This is the version control platform that most people on here have been talking about. Think of it as a Pastebin account that exists on your local hard drive and is updated whenever any of your team members makes changes. Hosted projects are called depositories. There are loads of free Git clients, some of them integrate right into Windows to make keeping your depositories clean and up to date.

•Google docs for game design documents, ideas, concepts art.

•Occasional use of DropBox if one of us needs a specific asset or script...this is however rare and we prefer to work through GitHub.

If you ara using Visual Studio, the best option is Team Foundation, is from Microsoft and is the best Version Control that I know, the negative thing is that you need a server, sql server, and the team foundation server to run in the server (the client is already with visual studio), if you have the chance, try it.

• I am currently using Team Foundation I have a question regarding branching and merging branches. If I make two branches and someone adds some code to a class, and I add some different code to the class when I merge them will it add both the changes to the file or will we get a error and have to choose one of the changes? – steakbbq Feb 19 '12 at 19:54
• I dont use branch for that, I use branch for different versions, if you do that visual studio possibly will do the merge bad (its like, when someone is using a class and another one check out the same class and the two of them add code, visual studio will ask to you to make a manual merge), if you want to do changes to a class at the same time, why dont you use partial classes? use the branches for the different versions, tha way you have more control over your versions – Rudy_TM Feb 20 '12 at 4:04
• "Team Foundation, is from Microsoft and is the best Version Control that I know" Oh dear :) Have you ever tried something else ? – Andy M Sep 12 '12 at 17:32

For virtual pair programming, I use this setup(coordinating everything over Skype):

1. Install an SSH server on one of your machines.
2. Install tmux
3. The other person ssh's into your computer.
4. Have the host start a tmux session
5. Have your partner run 'tmux at' in his SSH connection

Now you and your friend will see the exact same terminal screen. But you probably want the ability to work together outside of your computer, right?

1. Make a Bitbucket.org account, create a project(I prefer Git), and follow their instructions on making an empty repository.
2. Copy your project's files over with "git add . && git commit -m 'Initial commit.'"
3. Push to Bitbucket with "git push origin master"

Now you and your friend can work on changes independently, and push them to Bitbucket when you're ready.

This won't let the both of you edit together in Visual Studio in any nice way, but you'll be able to edit the source code itself if you're pairing on some new feature or debugging a problem. As long as you push your changes afterward, your friend can open it up in VS.

I would suggest Bazaar version control. It's small, practical, very good for small / one2few men projects. Git and SVN are used more often for larger projects/teams. Bazaar has in development VS plugin, but for you it doesn't make much of a difference using it outside VS. It's really easy to use it once you get to know it and initially set it up. It has few more plugins that get handy.

Lots of good suggestions already but if you want to go for a low-tech and simple solution, this works for me when I collaborate:

1. Use comments at then head of each script to keep track of when it was edited, who by and when ie:

Vers      Date      Author   Note

1.0.1     12/10/11  Paul     Added a new boss to level 12
1.0.2     22/11/11  Frank    Fixed the bug introduced by Paul

2. A private forum or better still a Wiki is a good way to communicate ideas and keep everyone up to date with progress.

The ideas given already are better than this solution but this is very easy to implement with minimal time investment, for a small project with just a couple of people working together it might be sufficient for your needs.

Having worked for a large global organisation I can honestly say the amount of time lost due to red-tape surrounding their version control software (MKS) is a real pain!

• ugh I hate comments like that at the head of each script. And anyway that doesn't address the question here; techniques for tracking changes doesn't tell you anything about how the team members will share their work with each other. – jhocking Feb 17 '12 at 15:36
• Well, Communication is not a problem, My fellow developers sit in ventrilo all day with me and we talk quite a lot lol. – steakbbq Feb 19 '12 at 19:52