Thursday 11 October 2007

Information Needs in Collocated Software Development Teams by Ko et al.

What information needs exist and how severe are they?
The questions below has been organized under 7 headings and the frequency and importance of the questions can be viewed in the figures below.

  1. Writing Code
  2. c1) What data structures or functions can be use to implement this behaviour?
    c2) How do I use this data structure of function?
    c3) How can I coordinate this with this other data structure or function?

  3. Submitting a change
  4. s1) Did I make any mistakes in my new code?
    s2) Did I follow my team's conventions?
    s3) Which changes are part of this submission?

  5. Triaging bugs
  6. b1) Is this a legitimate problem?
    b2) How difficult will this problem be to fix?
    b3) Is it worth fixing?

  7. Reproducing the Failure
  8. r1) What does the failure look like?
    r2) In what situations does this failure occur?

  9. Understanding behavior
  10. u1) What code could have caused this behaviour?
    u2) What's statistically related to this code?
    u3) What code caused this program state?

  11. Reasoning about design
  12. d1) What is the purpose of this code?
    d2) What is the program supposed to do?
    d3) Why was this code implemented this way?
    d4) What are the implications of this change?

  13. Maintaining awareness
  14. a1) How have resources I depend on changed?
    a2) What have my coworkers been doing?
    a3) What information was relevant to my task?


Figure 1: Types of information developers sought with search times, percepted importance, availability and accuracy.

Figure 2: Type of information developers sought and the frequency and outcomes of searches, and sources. Common sources are in bold.

Coordination in Software Development by Kraut and Streeter

What characteristics of software development do cause coordination problems?

1.) Scale
Software systems are usually extremely large and requires a high level of coordination. This level of coordination is very difficult to obtain in large companies and project teams. Projects of this scale usually leads to specialization groups and a division of the team according to geographic, organizational and social boundaries. These barriers and specialized groups reduces the willingless for interoperability of the team and limits the level of experience each member gains.

2.) Uncertainty
Uncertainty is also a large factor and also increase the problems generated due to the large scale. Since most software systems are unique with none or few previous implementations and applications in the specific field it leads to uncertainty. Furthermore, the functionality requirements of a software system often change during the development phase as the users realize what the software is capable of. Specifications are also usually unclear or incomplete due to limited availability of specific domain knowledge. Sometimes it is necessary for developers and achitects to make discission without having all the information readily available due to low levels of coordination. Lastly, software uncertainty is also caused since different subgroups involved in its development often have different views on what the software should be capable of.

3.) Interdependence
Software systems requires precise integration of the different components and modules. Unexpected problems may occur due to unanticipated interaction between the software modules and can have disastrous consequences.

4.) Informal communication
Several tools have been developed over the last couple of years to improve the productivity of the individual programmer, however these tools does not specifically address coordination problems. Informal coordination such as personal, peer-oriented and interactive communication may be necessary to face problems associated with uncertainty. However, as mentioned above a large cause for uncertainty is the scale of software systems. This large scale makes it difficult for informal communication to occur. Furthermore, in the situations in which it can occur, speach which is the primary medium for this type of communication, may be too imprecise to describe the tight coupling necessary between different software modules.