Dependencies and Their Socio-Technical Duality
The design and implementation of complex software systems involve a wide range of dependencies among the various constituent parts of a system. Developers, managers, and other relevant stakeholders often can’t recognize and manage all those dependencies. Such failures typically translate into lower productivity because, among other things, they require more rework and more time spent on integration and testing [Cataldo et al. 2006], Cataldo et al. 2008] [Herbsleb and Mockus 2003]. We also tend to see an impact on software quality, where unrecognized dependencies result in a higher number of defects [Cataldo 2010] [Herbsleb et al. 2006].
A major challenge we all face in software development is identifying dependencies. This is not easy, and two interrelated dimensions are at play: a technical component and a socio-organizational component. For example, in certain cases, the technical nature of a dependency makes it hard to recognize it. A classic example would be asynchronous remote procedure calls among a pair of components that can create timing, locking, and resource consumption dependencies that might become visible only when developers are faced with a particular defect that exposes such dependencies.
In other cases, dependencies fall into a socio-organizational category, stemming from the way work is organized and carried out in the development organization. For instance, it is quite common to allocate work based on the availability ...