I'm fairly new around here, but I'm very impressed with the recent interviews with Ward Cunningham, particularly
this one, discussing the importance of communication and collaboration in modern software development.
I'm in the process of writing a proposal to expand an existing software engineering course to include a collaborative development project, with students at two universities working together to build a single software solution. We envision the students collaborating online, working with discussion forms, inking on Tablet PCs, and possibly using audio/video conferencing.
Channel 9 itself provides evidence for the growing importance of distance collaboration. I'm curious to hear how developers deal with working with people in remote locations. What means do you use to communicate? And how do collaborations across the country relate to collaborations with colleagues across the hall? How important are remote resources to your daily work?
I'd also welcome any suggestions or ideas on how to bring "real world" experiences to the software engineering course. Microsoft has been great in supporting the course in the past -- hopefully the collaboration will continue in the future.
Dept. of Computer Science
I'm fairly new around here, but I'm very impressed with the recent interviews with Ward Cunningham, particularly this one, discussing the importance of communication and collaboration in modern software development.
department-specific messageboards on the company intranet is usually a good start. it allows everyone in the department to draw a line through someone elses project progression. Good project management software, you would need to research which would be best for your company. Intranet based Instant Messaging software is also very nice to have, though I would not reccommend using it for asking questions you want to be documented, use email for that and auto-archive your messages frequently. Not much worse than getting ok'ed on something without having it in writing then being questioned on it later...
Some companies like to use video-conferencing, though, I dunno - I've never been too fond of it, if I HAVE to talk to a bunch of people and cannot do it face to face, I would rather just use the phone instead of having people look at me eating a sammich. =p
ryanaip wrote:I'm curious to hear how developers deal with working with people in remote locations. What means do you use to communicate? And how do collaborations across the country relate to collaborations with colleagues across the hall?
This is alot harder than it sounds. It's very easy to get over confident and expect everything to go smooth just because you have proper documentation and follow a common development practise. I've even seen cocky managers introduce inter-office distance projects because they thought it was a cool idea. Just to have it fail miserably.
Video conferencing with shared whiteboards are a very handy tool as it catches some of the non verbal communication. So is mailinglists and IM. And the trusty old phone. Still to be really effective you should have some previous knowledge working with the person you are communicating. It helps alot if they get a chance to meet at regular intervals and get to know each other personally. It's very important that both teams can agree on the overall structure and try to minimize any parts that are only implied. Define interfaces and make it very clear what part each team has responsibility and say-so about. Or you will have power struggles and bad blood. Put it on paper after formal meetings.
I'd also welcome any suggestions or ideas on how to bring "real world" experiences to the software engineering course.
I think you are on the right track. The hardest thing to teach students is how complex the world really is. And that Murphys law is ever present. Failure is a harsh but very effective teacher in showing that the real world is seldom as perfect as any case study.
I recently graduated from college, and I can definitely relate to the difference between programming for school and programming for the "real world". One of my favorite classes during my last semester was Software Engineering. In the class, we were all divided up into individual groups of about 5 students each. The goal of the class was to step through the process of a software project, from requirements gathering and specs writing up to actually developing the project. Even though we spent about 2/3 of the entire semester doing specs, the cool part of the class was all the late night coding sessions writing C# code and to see our final project running for the professor!
Communication was very crucial during this project. We got together almost everyday during the coding phase, not only because of the time crunch, but also because coding together was just a lot more efficient. Most of the time, we did pair programming, where 2 of us would get together to work on a single part of the project in front of a single computer. Usually this was because of necessity, since there weren't many computers in the lab, but later on we realized that this was very beneficial in understanding how an algorithm works and to writing the actual code.
Now that I'm doing consulting development work, I find that communication is sometimes more important than the actual coding. With other developers in the same project, we usually talk face-2-face in the same cubicle. Email and IM are also crucial communication means. We recently installed SharePoint Portal Server, and that has turned out to be a great way to communicate with the rest of the company about our project.
When communicating with clients, the phone and email are the most important means of communication. Sometimes we would visit clients or they would visit us, but usually the phone and email are the preferred ways to talk about issues and to send/receive files. Some of us have even used Live Communication Server to do live presentations.
Whew.. that was too long, but hope it helps out your research.
I can't wait till i see the "Real World"