It is often said that communication is key to making a marriage successful. Without communication, goals are not aligned, there are more misunderstandings, feelings are hurt, and the lack of harmony that results from a lack of communication can ruin the marriage. In software development, similar problems can arise if there is a lack of communication among team members, although they may not be quite so dire.
Why is communication so important?
In software development teams, each person may be working on different pieces of code that will come together later in the project and (hopefully) work smoothly as a whole. All the code sections should complement each other and require as little work to be integrated as possible.* This is possible only through good communication among team members. If team members do not communicate, each member’s code will gradually become less optimal for use with the code from the rest of the team.
What could happen with a lack of communication?
To answer this, I need to tell you about a recent issue at work. I work with two other people at my job, we’ll call my boss Steve and my co-worker John. Steve had asked John to come up with some code to keep track of user actions in our software. John said, no problem, I’ll whip something up. A week or two later, John sends Steve an updated version of the software with the entire architecture modified from the foundation all the way to the user interface. John explains that it is a robust error logging and notification system which will work for user actions, errors, etc. The problem is that we already had a perfectly fine system for logging errors and notifying developers of runtime errors. But Steve gave John the benefit of the doubt and after a short period of testing, integrated the code into the development copy of the software. Soon, issues with the logging system began to arise. Steve and I did not understand the way the system worked, and after many hours of attempting to fix the code and work with John to determine the best way to use the system, Steve decided that we would go back to the original error logging system and drop the user action logging system.
The biggest problem here from a lack of communication was the wasted time. I estimate 100 man hours were wasted trying to incorporate the error logging system that was never requested in the first place. Steve asked John for a way to log user actions, not for an overhaul of the existing error logging system. Following this first miscommunication, John did not communicate well with Steve to make sure his system was understood and implemented correctly. When Steve attempted to meet with John about the system or what to work on next, the meetings never addressed all the important issues and time continued to be wasted.**
So how can I maintain good communication?
One of the best ways to stay on the same page with co-workers is to work in their vicinity, at the same hours if possible. If you are working remotely, make sure you keep your co-workers updated on your progress and what you are currently working on (especially with your boss). If you use a version control software like Git or svn, sync your stable changes with your co-workers’ at the end of each day. That way, you don’t have significant differences in the software when you integrate in a month or two.
*We are taught that good code integration is done most effectively using interfaces, which I will discuss later in the C# Tutorial series. For now, you can learn about implementation of interfaces from Microsoft on their Interface Class page.
**John works part-time and offsite, only meeting with Steve once every week or two. This is a natural hindrance for communication, though it sometimes can’t be helped.