Communication is a key value in Extreme Programming. Software projects require a great deal of communication. If you’re writing an application just for your own use, then the communication channels are all extremely fast, making for very tight feedback loops. However, when you’re writing software for stakeholders that will eventually publish the software, which will eventually be used by other people, who must report their experience to a separate group of support staff, feedback cycles can suffer.
Even just within a team, communication can break down easily. First, consider the number of communication channels that exist within a team of a given size. If you’re a team of one, congratulations! You don’t need to perform any communication with other team members (though certainly you’ll still need to communicate outside of the team). With a team of two, there is only one communication link. At three, this jumps to three, and with four people, the number of links between team member nodes grows six. The formula this follows is
which grows exponentially. With a team of 10, there are 45 separate communication channels between all of the team members. This is one reason why most agile software teams are structured to be relatively small, typically 5-10 people. Keeping a large team moving in the same direction without expensive communication failures is difficult, and this difficulty grows quickly with increases in team size.
Even on a team of one, communication with your future self can be a challenge. Writing code that is simple and readable helps you when you are maintaining code you wrote some time ago, ensuring you understand what it’s doing and how best to adjust it to meet new needs.