SE10 IS Chapter 23 - Project Planning
SE10 IS Chapter 23 - Project Planning
Project planning
Objectives
The objective of this chapter is to introduce project planning, scheduling,
and cost estimation. When you have read the chapter, you will:
■ understand the fundamentals of software costing and the factors that
affect the price of a software system to be developed for external
clients;
■ know what sections should be included in a project plan that is
created within a plan-driven development process;
■ understand what is involved in project scheduling and the use of bar
charts to present a project schedule;
■ have been introduced to agile project planning based on the
“planning game”;
■ understand cost estimation techniques and how the COCOMO II
model can be used for software cost estimation.
Contents
23.1 Software pricing
23.2 Plan-driven development
23.3 Project scheduling
23.4 Agile planning
23.5 Estimation techniques
23.6 COCOMO cost modeling
668 Chapter 23 ■ Project planning
Project planning is one of the most important jobs of a software project manager. As
a manager, you have to break down the work into parts and assign them to project
team members, anticipate problems that might arise, and prepare tentative solutions
to those problems. The project plan, which is created at the start of a project and
updated as the project progresses, is used to show how the work will be done and to
assess progress on the project.
Project planning takes place at three stages in a project life cycle:
1. At the proposal stage, when you are bidding for a contract to develop or provide
a software system. You need a plan at this stage to help you decide if you have
the resources to complete the work and to work out the price that you should
quote to a customer.
2. During the project startup phase, when you have to plan who will work on the
project, how the project will be broken down into increments, how resources
will be allocated across your company, and so on. Here, you have more infor-
mation than at the proposal stage, and you can therefore refine the initial effort
estimates that you have prepared.
3. Periodically throughout the project, when you update your plan to reflect new
information about the software and its development. You learn more about the
system being implemented and the capabilities of your development team. As
software requirements change, the work breakdown has to be altered and the
schedule extended. This information allows you to make more accurate esti-
mates of how long the work will take.
Overhead costs
When you estimate the costs of effort on a software project, you don’t simply multiply the salaries of the people
involved by the time spent on the project. You have to take into account all of the organizational overheads
(office space, administration, etc.) that must be covered by the income from a project. You calculate the costs
by computing these overheads and adding a proportion to the costs of each engineer working on a project.
http://software-engineering-book.com/web/overhead-costs/
You should use three main parameters when computing the costs of a software
development project:
For most projects, the biggest cost is the effort cost. You have to estimate the total
effort (in person-months) that is likely to be required to complete the work of a pro-
ject. Obviously, you have limited information to make such an estimate. You there-
fore make the best possible estimate and then add contingency (extra time and effort)
in case your initial estimate is optimistic.
For commercial systems, you normally use commodity hardware, which is rela-
tively cheap. However, software costs can be significant if you have to license mid-
dleware and platform software. Extensive travel may be needed when a project is
developed at different sites. While travel costs themselves are usually a small frac-
tion of the effort costs, the time spent traveling is often wasted and adds significantly
to the effort costs of the project. You can use electronic meeting systems and other
collaborative software to reduce travel and so have more time available for produc-
tive work.
Once a contract to develop a system has been awarded, the outline project
plan for the project has to be refined to create a project startup plan. At this stage,
you should know more about the requirements for this system. Your aim should
be to create a project plan with enough detail to help make decisions about pro-
ject staffing and budgeting. You use this plan as a basis for allocating resources
to the project from within the organization and to help decide if you need to hire
new staff.
The plan should also define project monitoring mechanisms. You must keep track
of the progress of the project and compare actual and planned progress and costs.
Although most companies have formal procedures for monitoring, a good manager
should be able to form a clear picture of what is going on through informal discus-
sions with project staff. Informal monitoring can predict potential project problems
by revealing difficulties as they occur. For example, daily discussions with project
670 Chapter 23 ■ Project planning
staff might reveal that the team is having problems with a software fault in the com-
munications systems. The project manager can then immediately assign a communi-
cations expert to the problem to help find and solve the problem.
The project plan always evolves during the development process because of
requirements changes, technology issues, and development problems. Development
planning is intended to ensure that the project plan remains a useful document for staff
to understand what is to be achieved and when it is to be delivered. Therefore, the
schedule, cost estimate, and risks all have to be revised as the software is developed.
If an agile method is used, there is still a need for a project startup plan because
regardless of the approach used, the company still needs to plan how resources will
be allocated to a project. However, this is not a detailed plan, and you only need to
include essential information about the work breakdown and project schedule.
During development, an informal project plan and effort estimates are drawn up for
each release of the software, with the whole team involved in the planning process.
Some aspects of agile planning have already been covered in Chapter 3, and I discuss
other approaches in Section 23.4.
In principle, the price of a software system developed for a customer is simply the
cost of development plus profit for the developer. In practice, however, the relation-
ship between the project cost and the price quoted to the customer is not usually so
simple. When calculating a price, you take broader organizational, economic, polit-
ical, and business considerations into account (Figure 23.1). You need to think
about organizational concerns, the risks associated with the project, and the type of
contract that will be used. These issues may cause the price to be adjusted upward
or downward.
To illustrate some of the project pricing issues, consider the following scenario:
Factor Description
Contractual terms A customer may be willing to allow the developer to retain ownership
of the source code and reuse it in other projects. The price charged
might then be reduced to reflect the value of the source code to the
developer.
Cost estimate uncertainty If an organization is unsure of its cost estimate, it may increase its price
by a contingency over and above its normal profit.
Financial health Companies with financial problems may lower their price to gain a
contract. It is better to make a smaller-than-normal profit or break even
than to go out of business. Cash flow is more important than profit in
difficult economic times.
Market opportunity A development organization may quote a low price because it wishes to
move into a new segment of the software market. Accepting a low
profit on one project may give the organization the opportunity to make
a greater profit later. The experience gained may also help it develop
new products.
Requirements volatility If the requirements are likely to change, an organization may lower its
price to win a contract. After the contract is awarded, high prices can be
charged for changes to the requirements.
the project over several versions of the system. This may reduce the costs of
system deployment and allow the client to budget for the project cost over sev-
eral financial years.
1. Introduction Briefly describes the objectives of the project and sets out the con-
straints (e.g., budget, time) that affect the management of the project.
2. Project organization Describes the way in which the development team is
organized, the people involved, and their roles in the team.
23.2 ■ Plan-driven development 673
Plan Description
Deployment plan Describes how the software and associated hardware (if required)
will be deployed in the customer’s environment. This should
include a plan for migrating data from existing systems.
Quality plan Describes the quality procedures and standards that will be
used in a project.
Validation plan Describes the approach, resources, and schedule used for
system validation.
The main project plan should always include a project risk assessment and a
schedule for the project. In addition, you may develop a number of supplementary
plans for activities such as testing and configuration management. Figure 23.2 shows
some supplementary plans that may be developed. These are all usually needed in
large projects developing large, complex systems.
[project
«system» [unfinished] finished]
Project planner
Identify
constraints
Do the work
[ no problems ]
Identify Define project
risks schedule
Monitor progress
against plan
Define
[serious
milestones
problems]
and [minor problems and slippages]
deliverables
during the project, you should regularly revise the plan to reflect requirements,
schedule, and risk changes. Changing business goals also leads to changes in project
plans. As business goals change, this could affect all projects, which may then have
to be re-planned.
At the beginning of a planning process, you should assess the constraints affect-
ing the project. These constraints are the required delivery date, staff available, over-
all budget, available tools, and so on. In conjunction with this assessment, you
should also identify the project milestones and deliverables. Milestones are points in
the schedule against which you can assess progress, for example, the handover of the
system for testing. Deliverables are work products that are delivered to the customer,
for example, a requirements document for the system.
The process then enters a loop that terminates when the project is complete. You
draw up an estimated schedule for the project, and the activities defined in the schedule
are initiated or are approved to continue. After some time (usually about two to three
weeks), you should review progress and note discrepancies from the planned schedule.
Because initial estimates of project parameters are inevitably approximate, minor slip-
pages are normal and you will have to make modifications to the original plan.
You should make realistic rather than optimistic assumptions when you are defin-
ing a project plan. Problems of some description always arise during a project, and
these lead to project delays. Your initial assumptions and scheduling should there-
fore be pessimistic and take unexpected problems into account. You should include
contingency in your plan so that if things go wrong, then your delivery schedule is
not seriously disrupted.
If there are serious problems with the development work that are likely to lead to
significant delays, you need to initiate risk mitigation actions to reduce the risks of
project failure. In conjunction with these actions, you also have to re-plan the pro-
ject. This may involve renegotiating the project constraints and deliverables with the
customer. A new schedule of when work should be completed also has to be estab-
lished and agreed to with the customer.
23.3 ■ Project scheduling 675
Project scheduling is the process of deciding how the work in a project will be organ-
ized as separate tasks, and when and how these tasks will be executed. You estimate
the calendar time needed to complete each task and the effort required, and you sug-
gest who will work on the tasks that have been identified. You also have to estimate
the hardware and software resources that are needed to complete each task. For
example, if you are developing an embedded system, you have to estimate the time
that you need on specialized hardware and the costs of running a system simulator.
In terms of the planning stages that I introduced in the introduction of this chapter,
an initial project schedule is usually created during the project startup phase. This
schedule is then refined and modified during development planning.
Both plan-based and agile processes need an initial project schedule, although less
detail is included in an agile project plan. This initial schedule is used to plan how peo-
ple will be allocated to projects and to check the progress of the project against its
contractual commitments. In traditional development processes, the complete schedule
is initially developed and then modified as the project progresses. In agile processes,
there has to be an overall schedule that identifies when the major phases of the project
will be completed. An iterative approach to scheduling is then used to plan each phase.
Scheduling in plan-driven projects (Figure 23.4) involves breaking down the total
work involved in a project into separate tasks and estimating the time required to
complete each task. Tasks should normally last at least a week and no longer than
2 months. Finer subdivision means that a disproportionate amount of time must be
spent on re-planning and updating the project plan. The maximum amount of time
for any task should be 6 to 8 weeks. If a task will take longer than this, it should be
split into subtasks for project planning and scheduling.
Some of these tasks are carried out in parallel, with different people working on
different components of the system. You have to coordinate these parallel tasks and
organize the work so that the workforce is used optimally and you don’t introduce
676 Chapter 23 ■ Project planning
1. Calendar-based bar charts show who is responsible for each activity, the
expected elapsed time, and when the activity is scheduled to begin and end. Bar
charts are also called Gantt charts, after their inventor, Henry Gantt.
23.3 ■ Project scheduling 677
T1 15 10
T2 8 15
T3 20 15 T1 (M1)
T4 5 10
T5 5 10 T2, T4 (M3)
T6 10 5 T1, T2 (M4)
T7 25 20 T1 (M1)
T8 75 25 T4 (M2)
T9 10 15 T3, T6 (M5)
T11 10 10 T9 (M7)
Project activities are the basic planning element. Each activity has:
When planning a project, you may decide to define project milestones. A mile-
stone is a logical end to a stage of the project where the progress of the work can
be reviewed. Each milestone should be documented by a brief report (often sim-
ply an email) that summarizes the work done and whether or not the work has
been completed as planned. Milestones may be associated with a single task or
with groups of related activities. For example, in Figure 23.5, milestone M1 is
associated with task T1 and marks the end of that activity. Milestone M3 is asso-
ciated with a pair of tasks T2 and T4; there is no individual milestone at the end
of these tasks.
678 Chapter 23 ■ Project planning
Activity charts
An activity chart is a project schedule representation that presents the project plan as a directed graph. It shows
which tasks can be carried out in parallel and those that must be executed in sequence due to their dependen-
cies on earlier activities. If a task is dependent on several other tasks, then all of these tasks must be completed
before it can start. The “critical path” through the activity chart is the longest sequence of dependent tasks. This
defines the project duration.
http://software-engineering-book.com/web/planning-activities/
Week 0 1 2 3 4 5 6 7 8 9 10 11
Start
T1
T2
(M1/T1)
T3
T4 (M3/T2 & T4)
T5
(M4/T1& T2)
T6
T7
(M2/T4)
T8
(M5/T3 & T6)
T9
(M6/T7 & T8)
T10
(M7/T 9)
T11
(M8/T10 & T11)
T12
Finish
Week 0 1 2 3 4 5 6 7 8 9 10 11
Ali T1 T8
Geetha T2 T6 T7 T10
T3
Maya T8
Mary T5
Hong T7
T6
Figure 23.7 Staff
allocation chart
Agile methods of software development are iterative approaches where the software
is developed and delivered to customers in increments. Unlike plan-driven
approaches, the functionality of these increments is not planned in advance but is
decided during the development. The decision on what to include in an increment
depends on progress and on the customer’s priorities. The argument for this approach
is that the customer’s priorities and requirements change, so it makes sense to have a
flexible plan that can accommodate these changes. Cohn’s book (Cohn 2005) is an
excellent introduction to agile planning.
Agile development methods such as Scrum (Rubin 2013) and Extreme
Programming (Beck and Andres 2004) have a two-stage approach to planning, corre-
sponding to the startup phase in plan-driven development and development planning:
1. Release planning, which looks ahead for several months and decides on the
features that should be included in a release of a system.
2. Iteration planning, which has a shorter term outlook and focuses on planning the next
increment of a system. This usually represents 2 to 4 weeks of work for the team.
tasks that they will implement. Each developer knows their individual velocity and
so should not sign up for more tasks than they can implement in the time allotted.
This approach to task allocation has two important benefits:
Halfway through an iteration, progress is reviewed. At this stage, half of the story
effort points should have been completed. So, if an iteration involves 24 story points
and 36 tasks, 12 story points and 18 tasks should have been completed. If this is not
the case, then there has to be discussions with the customer about which stories
should be removed from the system increment that is being developed.
This approach to planning has the advantage that a software increment is always
delivered at the end of each project iteration. If the features to be included in the
increment cannot be completed in the time allowed, the scope of the work is reduced.
The delivery schedule is never extended. However, this can cause problems as it
means that customer plans may be affected. Reducing the scope may create extra
work for customers if they have to use an incomplete system or change the way they
work between one release of the system and another.
A major difficulty in agile planning is that it relies on customer involvement and
availability. This involvement can be difficult to arrange, as customer representa-
tives sometimes have to prioritize other work and are not available for the planning
game. Furthermore, some customers may be more familiar with traditional project
plans and may find it difficult to engage in an agile planning process.
Agile planning works well with small, stable development teams that can get
together and discuss the stories to be implemented. However, where teams are large
and/or geographically distributed, or when team membership changes frequently, it
is practically impossible for everyone to be involved in the collaborative planning
that is essential for agile project management. Consequently, large projects are usu-
ally planned using traditional approaches to project management.
Estimating project schedules is difficult. You have to make initial estimates on the
basis of an incomplete user requirements definition. The software may have to run on
unfamiliar platforms or use new development technology. The people involved in the
project and their skills will probably not be known. There are so many uncertainties
that it is impossible to estimate system development costs accurately during the early
23.5 ■ Estimation techniques 683
4x
2x
x
Feasibility Requirements Design Code Delivery
0.5x
stages of a project. Nevertheless, organizations need to make software effort and cost
estimates. Two types of techniques can be used for making estimates:
In both cases, you need to use your judgment to estimate either the effort directly
or the project and product characteristics. In the startup phase of a project, these
estimates have a wide margin of error. Based on data collected from a large number
of projects, Boehm et al. (B. Boehm et al. 1995) discovered that startup estimates
vary significantly. If the initial estimate of effort required is x months of effort, they
found that the range may be from 0.25x to 4x of the actual effort as measured when
the system was delivered. During development planning, estimates become more
and more accurate as the project progresses (Figure 23.9).
Experience-based techniques rely on the manager’s experience of past projects
and the actual effort expended in these projects on activities that are related to soft-
ware development. Typically, you identify the deliverables to be produced in a pro-
ject and the different software components or systems that are to be developed. You
document these in a spreadsheet, estimate them individually, and compute the total
effort required. It usually helps to get a group of people involved in the effort esti-
mation and to ask each member of the group to explain their estimate. This often
reveals factors that others have not considered, and you then iterate toward an
agreed group estimate.
684 Chapter 23 ■ Project planning
Effort = A 3 SizeB 3 M
A: a constant factor, which depends on local organizational practices and the type
of software that is developed.
Size: an assessment of the code size of the software or a functionality estimate
expressed in function or application points.
B: represents the complexity of the software and usually lies between 1 and 1.5.
M: is a factor that takes into account process, product and development attributes,
such as the dependability requirements for the software and the experience of the
development team. These attributes may increase or decrease the overall diffi-
culty of developing the system.
23.5 ■ Estimation techniques 685
The number of lines of source code (SLOC) in the delivered system is the funda-
mental size metric that is used in many algorithmic cost models. To estimate the
number of lines of code in a system, you may use a combination of approaches:
1. Compare the system to be developed with similar systems and use their code
size as the basis for your estimate.
2. Estimate the number of function or application points in the system (see the fol-
lowing section) and formulaically convert these to lines of code in the program-
ming language used.
3. Rank the system components using judgment of their relative sizes and use a
known reference component to translate this ranking to code sizes.
Accurate code size estimation is difficult at an early stage in a project because the
size of the final program depends on design decisions that may not have been made
when the estimate is required. For example, an application that requires h igh-performance
data management may either implement its own data management system or use a
commercial database system. In the initial cost estimation, you are unlikely to know
if there is a commercial database system that performs well enough to meet the per-
formance requirements. You therefore don’t know how much data management
code will be included in the system.
The programming language used for system development also affects the number
of lines of code to be developed. A language like Java might mean that more lines of
code are necessary than if C (say) was used. However, this extra code allows more
compile-time checking, so validation costs are likely to be reduced. It is not clear
how this should be taken into account in the estimation process. Code reuse also
686 Chapter 23 ■ Project planning
Software productivity
Software productivity is an estimate of the average amount of development work that software engineers c omplete
in a week or a month. It is therefore expressed as lines of code/month, function points/month, and so forth.
However, while productivity can be easily measured where there is a tangible outcome (e.g., an administrator
processes N travel claims/day), software productivity is more difficult to define. Different people may implement
the same functionality in different ways, using different numbers of lines of code. The quality of the code is also
important but is, to some extent, subjective. Therefore, you can’t really compare the productivity of individual
engineers. It only makes sense to use productivity measures with large groups.
http://software-engineering-book.com/web/productivity/
makes a difference, and some models explicitly estimate the number of lines of code
reused. However, if application systems or external services are reused, it is very
difficult to compute the number of lines of source code that these replace.
Algorithmic cost models are a systematic way to estimate the effort required to
develop a system. However, these models are complex and difficult to use. There are
many attributes and considerable scope for uncertainty in estimating their values.
This complexity means that the practical application of algorithmic cost modeling
has been limited to a relatively small number of large companies, mostly working in
defense and aerospace systems engineering.
Another barrier that discourages the use of algorithmic models is the need for
calibration. Model users should calibrate their model and the attribute values
using their own historical project data, as this reflects local practice and experi-
ence. However, very few organizations have collected enough data from past pro-
jects in a form that supports model calibration. Practical use of algorithmic
models, therefore, has to start with the published values for the model parameters.
It is practically impossible for a modeler to know how closely these relate to his
or her organization.
If you use an algorithmic cost estimation model, you should develop a range of
estimates (worst, expected, and best) rather than a single estimate and apply the
costing formula to all of them. Estimates are most likely to be accurate when you
understand the type of software that is being developed and have calibrated the cost-
ing model using local data, or when programming language and hardware choices
are predefined.
The best known algorithmic cost modeling technique and tool is the COCOMO II
model. This empirical model was derived by collecting data from a large number of
software projects of different sizes. These data were analyzed to discover the formu-
las that were the best fit to the observations. These formulas linked the size of the
23.6 ■ COCOMO cost modeling 687
Systems developed
Number of Based on Application Used for using dynamic
application points composition model languages, DB
programming etc.
3. A reuse model This model is used to compute the effort required to integrate
reusable components and/or automatically generated program code. It is nor-
mally used in conjunction with the post-architecture model.
4. A post-architecture model Once the system architecture has been designed, a
more accurate estimate of the software size can be made. Again, this model uses
the standard formula for cost estimation discussed above. However, it includes
a more extensive set of 17 multipliers reflecting personnel capability, product,
and project characteristics.
Of course, in large systems, different parts of the system may be developed using
different technologies, and you may not have to estimate all parts of the system to
the same level of accuracy. In such cases, you can use the appropriate submodel for
each part of the system and combine the results to create a composite estimate.
The COCOMO II model is a very complex model and, to make it easier to explain,
I have simplified its presentation. You could use the models as I have explained them
here for simple cost estimation. However, to use COCOMO properly, you should refer
to Boehm’s book and the manual for the COCOMO II model (B. W. Boehm et al.
2000; Abts et al. 2000).
ICASE maturity and Very low Low Nominal High Very high
capability
PROD (NAP/month) 4 7 13 25 50
Figure 23.11
Application- estimate to take into account the percentage of reuse expected. Therefore, the final
point productivity formula for effort computation for system prototypes is:
Effort 5 A 3 SizeB 3 M
Based on his own large dataset, Boehm proposed that the co-efficient A should be
2.94. The size of the system is expressed in KSLOC, which is the number of thou-
sands of lines of source code. You calculate KSLOC by estimating the number of
function points in the software. You then use standard tables, which relate software
size to function points for different programming languages (QSM 2014) to compute
an initial estimate of the system size in KSLOC.
The exponent B reflects the increased effort required as the size of the project
increases. This can vary from 1.1 to 1.24 depending on the novelty of the project, the
development flexibility, the risk resolution processes used, the cohesion of the
development team, and the process maturity level (see web Chapter 26) of the organ-
ization. I discuss how the value of this exponent is calculated using these parameters
in the description of the COCOMO II post-architecture model.
690 Chapter 23 ■ Project planning
The multiplier M is based on seven project and process attributes that increase or
decrease the estimate. I explain these attributes on the book’s web pages. You esti-
mate values for these attributes using a six-point scale, where 1 corresponds to “very
low” and 6 corresponds to “very high”; for example, PERS = 6 means that expert
staff are available to work on the project.
The development effort in the reuse model is calculated using the COCOMO
early design model and is based on the total number of lines of code in the system.
The code size includes new code developed for components that are not reused plus
an additional factor that allows for the effort involved in reusing and integrating
existing code. This additional factor is called ESLOC, the equivalent number of lines
of new source code. That is, you express the reuse effort as the effort that would be
involved in developing some additional source code.
The formula used to calculate the source code equivalence is:
In some cases, the adjustments required to reuse code are syntactic and can be
implemented by an automated tool. These do not involve significant effort, so you
should estimate what fraction of the changes made to reused code can be automated
(AT). This reduces the total number of lines of code that have to be adapted.
The Adaptation Adjustment Multiplier (AAM) adjusts the estimate to reflect the
additional effort required to reuse code. The COCOMO model documentation (Abts
et al. 2000) discusses in detail how AAM should be calculated. Simplistically, AAM is
the sum of three components:
Once you have calculated a value for ESLOC, you apply the standard estimation
formula to calculate the total effort required, where the Size parameter = ESLOC.
Therefore, the formula to estimate the reuse effort is:
Effort 5 A 3 ESLOCB 3 M
where A, B, and M have the same values as used in the early design model.
692 Chapter 23 ■ Project planning
COCOMO II cost drivers are attributes that reflect some of the product, team, process, and organizational factors
that affect the amount of effort needed to develop a software system. For example, if a high level of reliability is
required, extra effort will be needed; if there is a need for rapid delivery, extra effort will be required; if the team
members change, extra effort will be required.
There are 17 of these attributes in the COCOMO II model, which have been assigned estimated values by the
model developers.
http://software-engineering-book.com/web/cost-drivers/
PM 5 A 3 SizeB 3 M
By this stage in the process, you should be able to make a more accurate estimate
of the project size, as you know how the system will be decomposed into subsystems
and components. You make this estimate of the overall code size by adding three
code size estimates:
Architecture/risk resolution Reflects the extent of risk analysis carried out. Very low means little analysis;
extra-high means a complete and thorough risk analysis.
Development flexibility Reflects the degree of flexibility in the development process. Very low means
a prescribed process is used; extra-high means that the client sets only
general goals.
Precedentedness Reflects the previous experience of the organization with this type of project.
Very low means no previous experience; extra-high means that the
organization is completely familiar with this application domain.
Team cohesion Reflects how well the development team knows each other and works
together. Very low means very difficult interactions; extra-high means an
integrated and effective team with no communication problems.
Process maturity Reflects the process maturity of the organization as discussed in web
chapter 26. The computation of this value depends on the CMM Maturity
Questionnaire, but an estimate can be achieved by subtracting the CMM
process maturity level from 5.
1. Precedentedness, rated low (4). This is a new project for the organization.
2. Development flexibility, rated very high (1). There is no client involvement in
the development process, so there are few externally imposed changes.
3. Architecture/risk resolution, rated very low (5). There has been no risk analysis
carried out.
4. Team cohesion, rated nominal (3). This is a new team, so there is no information
available on cohesion.
5. Process maturity, rated nominal (3). Some process control is in place.
The sum of these values is 16. You then calculate the final value of the exponent
by dividing this sum by 100 and adding 0.01 to the result. The adjusted value of B is
therefore 1.17.
The overall effort estimate is refined using an extensive set of 17 product, pro-
cess, and organizational attributes (see breakout box) rather than the seven attributes
used in the early design model. You can estimate values for these attributes because
you have more information about the software itself, its non-functional require-
ments, the development team, and the development process.
694 Chapter 23 ■ Project planning
Figure 23.13 shows how the cost driver attributes influence effort estimates.
Assume that the exponent value is 1.17 as discussed in the above example. Reliability
(RELY), complexity (CPLX), storage (STOR), tools (TOOL), and schedule (SCED) are
the key cost drivers in the project. All of the other cost drivers have a nominal value
of 1, so they do not affect the effort computation.
In Figure 23.13, I have assigned maximum and minimum values to the key cost
drivers to show how they influence the effort estimate. The values used are those
from the COCOMO II reference manual (Abts et al. 2000). You can see that high
values for the cost drivers lead an effort estimate that is more than three times the
initial estimate, whereas low values reduce the estimate to about one third of the
original. This highlights the significant differences between different types of
project and the difficulties of transferring experience from one application domain
to another.
The COCOMO model includes a formula to estimate the calendar time required
to complete a project:
The nominal project schedule predicted by the COCOMO model does not neces-
sarily correspond with the schedule required by the software customer. You may
have to deliver the software earlier or (more rarely) later than the date suggested by
the nominal schedule. If the schedule is to be compressed (i.e., software is to be
developed more quickly), this increases the effort required for the project. This is
taken into account by the SCED multiplier in the effort estimation computation.
Assume that a project estimated TDEV as 13 months, as suggested above, but the
actual schedule required was 10 months. This represents a schedule compression of
approximately 25%. Using the values for the SCED multiplier as derived by Boehm’s
team, we see that the effort multiplier for this level of schedule compression is 1.43.
Therefore, the actual effort that will be required if this accelerated schedule is to be
met is almost 50% more than the effort required to deliver the software according to
the nominal schedule.
There is a complex relationship between the number of people working on a pro-
ject, the effort that will be devoted to the project. and the project delivery schedule.
If four people can complete a project in 13 months (i.e., 52 person-months of effort),
then you might think that by adding one more person, you could complete the work
in 11 months (55 person-months of effort). However, the COCOMO model suggests
that you will, in fact, need six people to finish the work in 11 months (66 person-
months of effort).
The reason for this is that adding people to a project reduces the productivity of
existing team members. As the project team increases in size, team members spend
more time communicating and defining interfaces between the parts of the system
developed by other people. Doubling the number of staff (for example) therefore
does not mean that the duration of the project will be halved.
Consequently, when you add an extra person, the actual increment of effort added
is less than one person as others become less productive. If the development team is
large, adding more people to a project sometimes increases rather than reduces the
development schedule because of the overall effect on productivity.
You cannot simply estimate the number of people required for a project team by
dividing the total effort by the required project schedule. Usually, a small number of
people are needed at the start of a project to carry out the initial design. The team then
696 Chapter 23 ■ Project planning
builds up to a peak during the development and testing of the system, and then declines
in size as the system is prepared for deployment. A very rapid build-up of project staff
has been shown to correlate with project schedule slippage. As a project manager, you
should therefore avoid adding too many staff to a project early in its lifetime.
Key Points
■ The price charged for a system does not just depend on its estimated development costs and
the profit required by the development company. Organizational factors may mean that the
price is increased to compensate for increased risk or decreased to gain competitive advantage.
■ Software is often priced to gain a contract, and the functionality of the system is then adjusted
to meet the estimated price.
■ Plan-driven development is organized around a complete project plan that defines the project
activities, the planned effort, the activity schedule, and who is responsible for each activity.
■ Project scheduling involves the creation of various graphical representations of part of the
roject plan. Bar charts, which show the activity duration and staffing timelines, are the most
p
commonly used schedule representations.
■ A project milestone is a predictable outcome of an activity or set of activities. At each milestone,
a formal report of progress should be presented to management. A deliverable is a work product
that is delivered to the project customer.
■ The agile planning game involves the whole team in project planning. The plan is developed
incrementally, and, if problems arise, it is adjusted so that software functionality is reduced
instead of delaying the delivery of an increment.
■ Estimation techniques for software may be experience-based, where managers judge the effort
required, or algorithmic, where the effort required is computed from other estimated project
parameters.
■ The COCOMO II costing model is a mature algorithmic cost model that takes project, product,
hardware, and personnel attributes into account when formulating a cost estimate.
F u r t h e r Rea d i n g
“Ten Unmyths of Project Estimation.” A pragmatic article that discusses the practical difficulties of
project estimation and challenges some fundamental assumptions in this area. (P. Armour, Comm.
ACM, 45(11), November 2002). http://dx.doi.org/10.1145/581571.581582
Chapter 23 ■ Exercises 697
Agile Estimating and Planning. This book is a comprehensive description of story-based planning
as used in XP, as well as a rationale for using an agile approach to project planning. The book also
includes a good, general introduction to project planning issues. (M. Cohn, 2005, Prentice-Hall).
All About Agile; Agile Planning. This website on agile methods includes an excellent set of articles
on agile planning from a number of different authors. (2007–2012). http://www.allaboutagile.com/
category/agile-planning/
Project Management Knowhow: Project Planning. This website has a number of useful articles on
project management in general. These are aimed at people who don’t have previous experience in
this area. (P. Stoemmer, 2009–2014). http://www.project-management-knowhow.com/project_
planning.html
Website
www.pearsonglobaleditions.com/Sommerville
http://software-engineering-book.com/videos/software-management/
E x e r c i ses
23.1. Describe the factors that affect software pricing. Define the “pricing to win” approach in
software pricing.
23.2. Explain why the process of project planning is iterative and why a plan must be continually
reviewed during a software project.
23.3. Define project scheduling. What are the things to be considered while estimating schedules?
23.4. What is algorithmic cost modeling? What problems does it suffer from when compared with
other approaches to cost estimation?
23.5. Figure 23.14 sets out a number of tasks, their durations, and their dependencies. Draw a bar
chart showing the project schedule.
698 Chapter 23 ■ Project planning
T1 10
T2 15 T1
T3 10 T1, T2
T4 20
T5 10
T6 15 T3, T4
T7 20 T3
T8 35 T7
T9 15 T6
T10 5 T5, T9
T11 10 T9
T12 20 T10
T13 35 T3, T4
T14 10 T8, T9
23.6. Figure 23.14 shows the task durations for software project activities. Assume that a serious,
unanticipated setback occurs, and instead of taking 10 days, task T5 takes 40 days. Draw up
new bar charts showing how the project might be reorganized.
23.7. The planning game is based on the notion of planning to implement the stories that represent
the system requirements. Explain the potential problems with this approach when software
has high performance or dependability requirements.
23.8. A software manager is in charge of the development of a safety-critical software system,
which is designed to control a radiotherapy machine to treat patients suffering from cancer.
This system is embedded in the machine and must run on a special-purpose processor with a
fixed amount of memory (256 Mbytes). The machine communicates with a patient database
system to obtain the details of the patient and, after treatment, automatically records the
radiation dose delivered and other treatment details in the database.
The COCOMO method is used to estimate the effort required to develop this system, and an
estimate of 26 person-months is computed. All cost driver multipliers were set to 1 when
making this estimate.
Chapter 23 ■ References 699
Explain why this estimate should be adjusted to take project, personnel, product, and
organizational factors into account. Suggest four factors that might have significant effects
on the initial COCOMO estimate and propose possible values for these factors. Justify why
you have included each factor.
23.9. S
ome very large software projects involve writing millions of lines of code. Explain why the
effort estimation models, such as COCOMO, might not work well when applied to very large
systems.
23.10. I s it ethical for a company to quote a low price for a software contract knowing that the
requirements are ambiguous and that they can charge a high price for subsequent changes
requested by the customer?
Refe r e n ces
Abts, C., B. Clark, S. Devnani-Chulani, and B. W. Boehm. 2000. “COCOMO II Model Definition Manual.”
Center for Software Engineering, University of Southern California. http://csse.usc.edu/csse/
research/COCOMOII/cocomo2000.0/CII_modelman2000.0.pdf
Beck, K., and C. Andres. 2004. Extreme Programming Explained: 2nd ed. Boston: Addison-Wesley.
Boehm, B., B. Clark, E. Horowitz, C. Westland, R. Madachy, and R. Selby. 1995. “Cost Models for
Future Software Life Cycle Processes: COCOMO 2.” Annals of Software Engineering: 1–31.
doi:10.1007/BF02249046.
Boehm, B., and W. Royce. 1989. “Ada COCOMO and the Ada Process Model.” In Proc. 5th COCOMO
Users’ Group Meeting. Pittsburgh: Software Engineering Institute. http://www.dtic.mil/dtic/tr/
fulltext/u2/a243476.pdf
Boehm, B. W., C. Abts, A. W. Brown, S. Chulani, B K. Clark, E. Horowitz, R. Madachy, D. Reifer, and
B. Steece. 2000. Software Cost Estimation with COCOMO II. Englewood Cliffs, NJ: Prentice-Hall.
Cohn, M. 2005. Agile Estimating and Planning. Englewood-Cliffs, NJ: Prentice Hall.