Communication: the Key to Successful Software Development
When we examine two developers writing a software application in their spare time, we see little that we would call a formal process. However, when we examine a project with hundreds of developers distributed across multiple locations working to develop a large software system, process often seems to be all we can see. Both examples do have process, but the first is much simpler and very informal. It's most likely maintained wholly within the minds and interactions of the two developers who, over time, have learned to communicate very effectively with each other. In larger projects, the processes tend to be both much more visible and much more formal, although you'll still find many small "processes" in a large organization that are hidden, "understood," or part of the tribal knowledge and not recorded anywhere. In fact the processes (not necessarily productive processes) that last the longest are those that become habit: "It's just the way we do things here." One goal for a process designer is to make the process straightforward to learn and remember, so that following it becomes habit as quickly as possible.
So what are the fundamental differences between two developers writing software in a garage and thousand-person, multimillion-dollar software development efforts?
Those who work in the real estate industry tell us that the three most important aspects of real estate are location, location, and location. The software development process equivalent is communication, communication, and communication. Communication is taking place constantly at every level within a software development process. In fact, no process (work) can occur without it! In failed projects, communication or failure of it at some level is usually a major contributor to the project's downfall.
If we consider developers as nodes in a communications network, all potentially linked to each other by communications channels, there is only one channel between our two developers in their garage. However, as we add more developers, the number of potential communications channels grows geometrically. Among 4 developers there are 6 potential communications links; with 10 people, there are 45 potential links; and there are 4,950 potential communications links among 100 individuals on a team.
If not managed, either too much time will be spent communicating and nothing will get done, or there will be too little communication and results will not integrate and work together. As a team grows larger, managing communication becomes increasingly difficult.