To be able to work together you need good tools. There is however another part that is very important. This is the technical part. By creating a good architecture and design you enable the programmers to work together but in there own space. By using the Design by Interface technique you make it easier for programmers to continue working when some parts of the application others are working on are not finished. This also helps the testability of your code. Another technique that helps creating testable code is Inversion of Control.