A few years back I did a rush job for a specialized welding bot for offshore rigs - We had two programmers online simultaneously creating different parts of the program - there were the occasional waits Mark mentioned and once in a while one of us would get booted offline, as well as the occasional need to change something that could only be done offline, but despite that it went much faster than if only one of us had programmed it. We sat right next to each other so we could collaborate. After we were done we had quite a bit of orphaned UDTs and abandoned tags but clean up didn't take too long.
edit to add:
We have a UDT called ProgrammerData in all our programs that contains various elements intended for temporary and development use. We define a tag using that UDT for each programmer's name. This makes it easy to keep track of and document what you are and others are working on and debugging. If a change become permanent then appropriately scoped tags are assigned. You are welcome to use it and adapt it to your needs.
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--Miscellaneous bits for use by programmers for temporary changes, debugging, testing, etc.-->
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="17.00" TargetName="ProgrammerData" TargetType="DataType" ContainsContext="true" Owner="Alaric" ExportDate="Thu Aug 18 10:20:24 2011" ExportOptions="References DecoratedData Context Dependencies AllProjDocTrans">
<Controller Use="Context" Name="Alaric">
<DataTypes Use="Context">
<DataType Use="Target" Name="ProgrammerData" Family="NoFamily" Class="User">
<Description>
<![CDATA[Miscellaneous bits for use by programmers for temporary changes, debugging, testing, etc.]]>
</Description>
<Members>
<Member Name="ZZZZZZZZZZProgrammer0" DataType="SINT" Dimension="0" Radix="Decimal" Hidden="true"/>
<Member Name="OFF" DataType="BIT" Dimension="0" Radix="Decimal" Hidden="false" Target="ZZZZZZZZZZProgrammer0" BitNumber="0">
<Description>
<![CDATA[ALWAYS OFF]]>
</Description>
</Member>
<Member Name="ON" DataType="BIT" Dimension="0" Radix="Decimal" Hidden="false" Target="ZZZZZZZZZZProgrammer0" BitNumber="1">
<Description>
<![CDATA[ALWAYS ON]]>
</Description>
</Member>
<Member Name="MiscBits" DataType="BOOL" Dimension="32" Radix="Decimal" Hidden="false"/>
<Member Name="TestDint" DataType="DINT" Dimension="6" Radix="Decimal" Hidden="false"/>
<Member Name="TestReal" DataType="REAL" Dimension="6" Radix="Float" Hidden="false"/>
<Member Name="TestTimer1" DataType="TIMER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestTimer2" DataType="TIMER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestTimer3" DataType="TIMER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestTimer4" DataType="TIMER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestCounter1" DataType="COUNTER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestCounter2" DataType="COUNTER" Dimension="0" Radix="NullType" Hidden="false"/>
<Member Name="TestControl" DataType="CONTROL" Dimension="0" Radix="NullType" Hidden="false"/>
</Members>
</DataType>
</DataTypes>
</Controller>
</RSLogix5000Content>