The good: Quite unequivocally, the students.  Each member of the team was eager to learn whatever new language we threw at them (PHP, SQL, Flex/MXML/ActionScript), research solutions to overcome problems they encountered, and ask for assistance when needed.  With so many variables in this type of distributed course, including the different experiences and skill sets that comes with being from four separate institutions, having a strong team makes quite a difference.  I think choosing students that had taken part in co-op terms played a significant role in this.

The bad: Virtual motivation.  On occasion, tasks that would normally take an hour or two would be left until just before the next weekly meeting, blocking others from building on those tasks in the interim.  This became especially applicable as work from other courses piled up towards the end of the semester and the time available to complete everything became a scarce commodity.  This course, however, provides us with an excellent opportunity to experiment with different communication methods and channels in an attempt to alleviate this problem.  Holding more frequent formal meetings would just add to the time pressures, but more stringent use of the ticketing system to document and assign blocking tasks may be a usable solution.