ince its inception, the software industry has been in crisis. As Blazer noted 20 years ago, " [Software] is unreliable, d&wed late, unresponsive to change, mefficient, and expensive and has been for the past 20 years" [4]. In a survey of software contractors and government contract officers, over half of the respondents believed that calendar overruns, cost overruns, code that required in-house modifications before being usable, and code that was difficult to modify were common prob lems in the software projects they supervised [22] Even today, problems with software systems are common and highly-publicized occurrences. While there is no single cause of the software crisis, a major contributor is the problem of coordinating activities while developing large software systems. We will argue that this coordination becomes much more dficult as project size and complexity increase. Coorclmation dfficulties are not limited to software development, though, but are an inherent aspect of work in any large organization. Viewed from this perspective, some of the mechanisms used to coordmate work in large organizations in general ought to have applicability to software development. In particular, we examine the respective roles of formal and miormal commumcatlon mechanisms in coordinating work on software projects. We will argue that most of the existing coordination support tools have used formal communication procedures, and that there is a need for nurturing informal communication procedures as well. Coordination has been defined as the direction of "inditiduals' efforrs toward achieving common and explicitly recognized goals" [3] and "the integration or linking together of different parts of an organization to accomplish a collective set of tasks" [23]. In software development, it means that dierent people working on a common project agree to a common definition of what they are building, share information, and mesh their activities. They must have a common view ofwhat the software they are constructing should do, how it should be organized, and how it should fit with other software systems already in place or undergoing parallel development. To build the software efficiently, they must share detailed design specifications and information about the progre'ess of software modules. In sum, they must coordinate their work so that it gets done and fits together, so that it isn't done redundantly, and so that components of the work are handed off expeditiously. Characteristics of software Development
Kraut and Streeter stressed the uncertainty, interdependence and informal communication of software development REF .