Institute for Software Research
School of Computer Science, Carnegie Mellon University
Dependenceis in Geographically Distributed Software Development
Geographically distributed software development (GDSD) is becoming pervasive. Hence, the constraints in communication and its negative impact of developers' ability to coordinate effectively is a growing problem that consistently results in sub-par performance of GDSD teams. Past research argues that geographically distributed teams do better when their work is almost independent from each other. In software engineering, modularization is the traditional technique intended to reduce the interdependencies among modules that constitutes a system. The modular design argument suggests that by reducing the technical dependencies, the work dependencies between teams developing interdependent modules are also reduced. Consequently, a modular product structure leads to an equivalent modular task structure. This dissertation argues that modularization is not a sufficient representation of work dependencies in the context of software development and it proposes a method for measuring socio-technical congruence, defined as the relationship between the structure of work dependencies and the coordination patterns of the organization doing the technical work. Two empirical studies assessed the impact of socio-technical congruence on development productivity and product quality. In addition, a third empirical study explores how developers in a geographically distributed software development organization evolve their coordination patterns to overcome the limitations of the modular design approach.
Collectively, this dissertation has important contributions to software engineering, CSCW and organizational literatures. First, the empirical evaluation of the congruence framework showed the importance of understanding the dynamic nature of software development. Identifying the "right" set of product dependencies that determine the relevant work dependencies and coordinating accordingly has significant impact on reducing the resolution time of modification requests. The analyses showed traditional software dependencies, such as syntactic relationships, tend to capture a relatively stable view of product dependencies that is not representative of the dynamism in product dependencies that emerges as software systems are implemented. On the other hand, logical dependencies provide a more accurate representation of the most relevant product dependencies in software development projects. Secondly, this dissertation moves forward our understanding of the relationship between product and work dependencies and software quality. Logical dependencies among software modules and work dependencies were found to be two very significant factors affecting the failure proneness of software modules. Finally, the longitudinal analysis of coordination activities in a GDSD project showed that developers centrally positioned in the social system of information exchanges and coordination activities performed a critical bridging function across formal teams and geographical locations. Moreover, those same individuals contributed an average of 57% of development effort in terms of implementing the software system in each release covered by the data.