  Software systems emerge from mere keystrokes to form intricate functional
networks connecting many collaborating modules, objects, classes, methods, and
subroutines. Building on recent advances in the study of complex networks, I
have examined software collaboration graphs contained within several
open-source software systems, and have found them to reveal scale-free,
small-world networks similar to those identified in other technological,
sociological, and biological systems. I present several measures of these
network topologies, and discuss their relationship to software engineering
practices. I also present a simple model of software system evolution based on
refactoring processes which captures some of the salient features of the
observed systems. Some implications of object-oriented design for questions
about network robustness, evolvability, degeneracy, and organization are
discussed in the wake of these findings.
