The history of software development reflects a continuous series of problems, crises and triumphs in the development of reliable software systems. Problems with comprehension of machine language led to assemblers and high level languages, and eventually to the discipline of structured programming. Problems with program and system size led to modularity and modular design. None of these solutions proved to be final because aspirations have risen along with competence. This thesis makes the argument that the increasing size of projects, in terms of their complexity and the numbers of persons required to bring them to fruition, gives rise to a set of problems caused by the social interaction of those persons. This social context is investigated. It is argued that solutions ignoring this social context are inadequate for solving the software crisis brought on by the increasing demand for larger software systems.