Abstract
During the past three decades a number of theories have been proposed to explain the idiosyncrasies of software development as a team activity. These theories variously relate to: adding more programmers to a late project makes it later (Brooks); the structure of the system mirrors the structure of the organization that designed it (Conway); software modules are a responsibility assignment (Parnas) and one must consider stability and responsibility during dependency analysis (Martin). This paper compares and combines these theories into a coherent model of software development that links software coupling and dependency management with team productivity. As a practical test of this model, the paper then investigates the effects of coupling in two large commercial systems (both measured in person decades of effort). It achieves this by using the VCML Views visualisation technique, developed by the authors, to expose the system wide coupling found in the code and how this coupling develops during the lifetime of a project. It then compares the resultant VCML views with simple attributes of the two projects, such as programmer numbers and programmer productivity to derive a set of important conclusions. In particular, it finds that unmanaged coupling within the code is a good indicator of potential productivity bottlenecks; that the number of programmers on a project is not necessarily a good indicator of programmer productivity; and that the architecture of a software system can radically alter the number of programmers that can effectively work together on a system.