This chapter reviews the socio-technical relationship between organizational and software structure. It describes the early theoretical work about this relationship, the empirical studies that identified this relationship in practice and, more importantly, identifies two main approaches for exploring this relationship. The first one is based on the construction of tools to facilitate software development, while the second is a more theoretical one aimed at investigating the consequences of this relationship in the work of software developers. Furthermore, the authors hope the theoretical background presented in this chapter will not only motivate other researchers to study software development as a socio-technical endeavor, but also assist practitioners in the understanding of the aspects necessary to make software development succeed.
The relationship between the coordination of software development efforts and software architecture has been studied in two different research areas: software engineering and computer-supported cooperative work (CSCW). Software engineering researchers are concerned primarily with dependencies in the software architecture and their impact on both the quality of the software being developed and the process of developing it (Sommerville, 2000). CSCW researchers’ main concerns are with the coordination of collaborative work and how computational tools can support this task (Schmidt & Bannon, 1992). In this section we review both the software engineering and the CSCW literature to properly understand the relationship of interest. We will start reviewing approaches for handling software architecture (i.e., components and their dependencies) between software development artifacts.
Key Terms in this Chapter
Computer-Supported Collaborative Work or CSCW: This term addresses how collaborative activities and their coordination can be supported by means of computer systems.
Software Structure or Ssoftware Architecture: Is used to indicate how a software system is organized into parts and how these parts are interconnected, that is, the components or modules of a software system and their dependencies.
Dependency or Dependence: Is a relationship between two entities that exists because one must interact with the other to accomplish something “larger” than the entities themselves. For instance, task dependencies exist when the actors responsible for these tasks need to interact to finish them properly. Similarly, software dependencies arise out of the interactions (method calls, data exchange, etc) between software components.
Conway’s Law: Argument proposed by Melvin Conway in 1968 that argues that the software structure will be stamped out with the communication structure of the organization because the communication needs of those doing the work are inevitably reflected in the system.
Organizational Structure: Describes how an organization is structured into different parts (e.g., individuals, teams, sub-teams, departments, or subdivisions) to accomplish its goals.
Socio-Technical Congruence: A metric used to investigate how good the alignment or fit is between the organizational structure and the software architecture.