21.08.2013 Views

Software Engineering for Students A Programming Approach

Software Engineering for Students A Programming Approach

Software Engineering for Students A Programming Approach

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

348 Chapter 28 ■ Teams<br />

The communication problem<br />

When two or more people are working on a piece of software, they obviously have to liaise<br />

with each other. At the very least they have to communicate component specifications –<br />

component names, component functions, parameter types, and so on. Often such interfaces<br />

are complex, perhaps involving detailed file layouts. Always there are queries, because<br />

of the difficulty of specifying interfaces precisely. During the lifetime of a project someone<br />

always leaves, is ill or goes on holiday. Someone has to sort out the work in their absence.<br />

New people join the team and have to be helped to understand what the software is <strong>for</strong>,<br />

what has been done and why the structure is as it is. They may need to learn about the<br />

standards and procedures being used on the project, or even learn a new programming<br />

language. This induction of a new person takes up the time of those who remain.<br />

All this adds up to a great deal of time spent in communication that would not be<br />

necessary if only a single person were developing the software. Adding two people to a<br />

team of four does not increase the communication overhead by half – it more than<br />

doubles it. Clearly, as more and more people are added to a team, the time taken in<br />

liaising can completely swamp a project.<br />

Compare the activity of picking potatoes. Imagine a large field with a relatively small<br />

number of people. They can each get on with the job without getting in each other’s<br />

way. If we increase the number of people, the work will get done proportionately quickly,<br />

at least until there are so many people that they are tripping each other up. The graph<br />

of potatoes picked against people employed looks like Figure 28.1.<br />

If we now turn to the task of having a baby, we realize that increasing the number<br />

of people will do nothing to the timescale – it remains nine months. The graph is shown<br />

in Figure 28.2.<br />

<strong>Software</strong> development comes somewhere between these two extremes. Initially, if we<br />

increase the number of people, the job will get done faster (like the potato picking).<br />

But, eventually, the communication overheads will become overwhelming, and the<br />

project will actually slow down. The graph looks like Figure 28.3.<br />

One of the gurus of computing, Frederick P. Brooks, has described this problem as<br />

follows: if a project is late, then adding further people will only make it even later.<br />

Potatoes picked<br />

Figure 28.1 Picking potatoes<br />

Number of people

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!