Software Project Manager
Software Project Manager
PART 1
ELEMENTS OF EFFECTIVE
SOFTWARE MANAGEMENT
Chapter 1
Developing and maintaining software has become one of the most challeng-
ing and rewarding tasks a person can do. I’ve been privileged to attempt it in
various settings for the last 15 years, and I’ve seen good software managers
and bad ones. I’ve also been both at one time or another. This rather hum-
bling experience has taught me what to value in a project manager. It has
taught me that many managers approach software somewhat like the model
in Figure 1.1. The project starts, everyone works hard, and software comes out
some time later. If someone asks about progress, the project is always “almost
finished.” (If the project is headed by a more experienced project manager, it
is always “93.7% finished.”)
After much thought and observation, I believe this cloudy view of project
management stems from a lack of three key perspectives. Of course, just hav-
ing these perspectives does not guarantee a successful project, but it will go a
long way toward making success possible.
study, take courses, read books, apply myself to people as diligently as I have
ever applied myself to anything? If the answer is still “no,” stop reading right
now, and give this book to a friend. Stay in coding and have a challenging, re-
warding life.
If you are still reading, you must have answered “yes” to at least one set of
questions. Now take a hard look at how you feel about yourself. Gerald Wein-
berg (Weinberg, 1994), an excellent source of advice on people, has pointed
out that we need a good sense of self-worth, self-esteem, self-confidence, and
self-examination to work closely with people. If we don’t have these, we will
be hurt and hurt others often and deeply.
I have seen the truth of this on more than one occasion when a manager
would attempt to change the way people do their jobs. Improvement, a goal
for all, requires change and most people don’t like to change. If I as a manag-
er walk into a gathering of programmers and announce that the group would
be better off changing the way they do things, I can almost always expect
unanimous rejection. If I do not have confidence and self-esteem, I will drag
my bruised ego out of the room and never implement the needed improve-
ment. If, however, I do like myself and believe in my knowledge and abilities,
I am more likely to realize that the group’s negative reaction is a normal re-
sponse to potential change, not a personal attack. A self-confident manager
works through the fear of change person by person over time and implements
the improvement.
I was able to move a group of programmers from coding cowboys to SEI
CMM level 2. (Chapter 6 describes the Software Engineering Institute’s Capa-
bility Maturity Model in more detail.) It was neither easy nor quick, but it
happened. Patience, knowledge, and self-esteem are required, and most peo-
ple with a little determination can do the same.
Unfortunately, most of us are operating with a distinct handicap. We
weren’t taught people or management skills. When we were in school, the in-
structor described the problem, and students individually coded a solution.
Problems at work, however, require interaction with people, which can be
fraught with difficulties. As Weinberg says, “the three causes of [software pro-
ject] failure are people, people, and people.” (Weinberg, 1994) The lack of a
people perspective has helped litter the software industry with failed projects.
Rob Thomsett (Thomsett, 1995) states that “most projects fail because of peo-
ple and project management concerns rather than technical issues.” I agree.
I’ve seen new managers tell a group of talented programmers exactly how to
c01.qxd 4/2/2004 9:59 AM Page 5
앫 Be flexible. Let your people perform. The same people will react differ-
ently to a new project with a new product. Managers cannot manage
each project just like the last one. The basic repeatable principles remain
the same; only the particulars change (Constantine, 1995).
앫 Have compassion. You must also learn how to deal compassionately with
difficult people. In Chapter 4 on managing a project day to day, I call
for removing toxic people from projects. Some people habitually hurt
others; some lie and steal. However, removing them does not always
mean firing them. Some of the people who act this way can be helped.
An organization should never condone theft, dishonesty, or hatred, but
it should also strive to act with kindness, patience, and compassion in
helping to correct such actions. Try to help reform problem employees
and help good employees when they need help. Be careful, however,
about attempting to perform miracles. Rescuing can become a destruc-
tive addiction. Do what you can, recognize your limitations, and call in
professional help when needed.
앫 Know when to lead and when to manage. Lead people; manage the process
and product. Leading means that others are following, so set an exam-
ple. If you act honestly and courteously all the time, people are apt to
do the same. Examples also extend to behavior with other groups. You
can be sure that your people will be watching as you talk to upper man-
agement, so tell the truth.
앫 Accept the role of meetings. You will perpetually be in meetings (Maguire,
1994; Gause and Weinberg, 1989). They will be held in halls, offices,
parking lots, and even in rooms. These meetings are not just bureaucra-
cy; they are communication. If they are bureaucracy, it is your fault and
you should empower yourself to correct it. Chapter 5 gives you some
techniques for doing this.
Perhaps the best advice comes from the sports and recreation world
(Hawkins, 1994). Choose the best people, keep the team small, minimize
distractions, train them, meet together as a team regularly, know them, and
c01.qxd 4/2/2004 9:59 AM Page 6
set an example. This is common sense, but all too uncommon in practice. As
managers, we know what we should do and we have the means to do it. The
last step is to get in the habit of doing it regularly.
The software industry is plagued with problems. Projects fall behind sched-
ule, have cost overruns, or fail outright. And the failures are sometimes spec-
tacular (who can forget the Denver International Airport baggage handling
system or the Federal Aviation Administration’s traffic control system?).
I’m convinced that a good part of the reason for these failures is a lack of
business perspective. Most of us were introduced to software through pro-
gramming. The problems were easy enough and we were smart enough to sit
down and code the solutions without much thought. The problems we face
now are more difficult, and we can’t solve them alone. This requires different
techniques and delving into what seems like mindless bureaucracy. Tasks like
writing requirements, selecting a design alternative, and having others review
our work are some techniques that can make us smart enough to solve these
larger, more complex problems.
But these tasks encompass more than an immediate perspective. They re-
quire some idea of the big picture. They mean that we must look hard at man-
agement problems in the context of business requirements.
A well-known study by the Standish Group (Glass, 2002) paints an em-
barrassing picture. In the survey, 23% of the projects were canceled before
completion (projects couldn’t be saved); 49% of the projects were finished,
but were over budget, late, and did not have the required functionality.
Only 28% were on budget with all the desired functions. These numbers
were improved from 1995 (Johnson, 1995), but still have much room for
improvement.
I suspect that projects fail to deliver as frequently as they do because prac-
titioners don’t see the needs of the business enterprise. Building software at
work is done for the benefit of the business. This means asking questions
like “Who will use the software? Who wants it and who doesn’t? What will
the software do for the user and our business? Where will people use it?
When do the users need (not want) it? Why do the users want it? Why does
our business need it? Why are we developing it? What can we do differently
that will bring greater benefit to our business and consequently to us as em-
ployees?
I agree with Howard Rubin (Rubin, 1996), who said “a world-class (soft-
ware) organization’s primary distinguishing aspect is a common understand-
ing of how its technical performance is transferred into value for the enter-
prise.”
One of the best pieces of advice a software project manager can heed is to
build only the software people want (Szmyt, 1994). This seems obvious, but
c01.qxd 4/2/2004 9:59 AM Page 7
it is ignored all too frequently. Programmers build software; they don’t look
for reasons not to. When programmers learn a new technique, they quickly
create a new solution (whether or not anyone else wants it) and invent a
problem for it.
Unfortunately, if people don’t want the software, they won’t use it. All the
money spent building it and trying to have people use it is wasted. Compa-
nies that waste money go out of business, and people lose paying jobs. Build
interesting new software at home; at work, build software that people want
and the business needs.
The key is to add value to the customer’s endeavors. I close with a com-
ment from Jerry Weinberg’s SHAPE forum (Weinberg, 1997). “We all think
we add value, but it’s not value if the customer doesn’t see it that way. If what
you value is not what the customer values, it doesn’t mean either one of you
is “bad.” It just means there is not a very good fit.” One simple way to deter-
mine if I am adding value to the customers is to ask them. In my experience,
they answer honestly. I place these comments here because they span the con-
cepts of the people and business perspectives. Business, as most things, comes
down to people. If the people aren’t satisfied, the business isn’t either.
Software project managers must do the right things in software projects. This
is known as using the right process or applying best practices. Table 1.1 takes
a look at current level of practice and what is recommended for a successful
project. The left column shows that the build phase or coding always occurs
(McConnell, 1993). If there is no code, there is no software. The second col-
umn shows the tasks some projects may complete, although often uninten-
tionally. Software managers should state the problem clearly (define require-
ments), decide among alternative solutions (design), bring together the
elements of software into a product, and test the result systematically. The
third column (when combined with the first two) shows what should be
done. If you are a software manager who does not do each one of these on
every project, this book is for you.
A major influence in the process movement has been the Capability Maturity
Model of the Software Engineering Institute (Humphrey, 1989; CMU/SEI,
1995). The CMM is a progression of levels, each of which contains key
processes. An organization starts at the Initial level (see Chapter 6) and step
by step adopts processes that lead to a greater ability to produce software. The
SEI produced several more capability maturity models (e.g., one for software
acquisition, one for people management, one for system engineering, etc.).
They consolidated and replaced these with the Capability Maturity Model In-
tegrated (CMMI). The CMMI contains proven engineering and management
basics. Some people have maligned these CMMs as being too bureaucratic
(government and defense oriented) and instead pushed best practices and,
more recently, agile methods. If you look closely at the two, however, most
best practices lists contain the same items as the CMMI.
I believe the CMMI works, and I’ve seen it work. I prefer not to debate
whether it can be improved. A couple dozen experts in the United States are
qualified to argue the finer points of the CMMI; the rest of us would be much
better off if we simply followed it.
Humphrey created a CMM for the individual called the Personal Software
Process (PSP) (Humphrey, 1995). The PSP (see Chapter 6) guides an individ-
ual programmer through a similar progression of processes. I worked through
Humphrey’s method and found that it also works at work. The exercise
proved, much to my annoyance, that I was not smart enough to sit down and
code off the top of my head. The PSP makes you write out a design, review it,
write code, print the code, and review the code before compiling it the first
time. My own metrics proved that with this mindful bureaucracy, I could pro-
duce more error-free software in less time.
These techniques (the CMMI, PSP, and others like them) apply basic engi-
neering and management principles to software. Over the years, we software
practitioners convinced ourselves that software was different. The basics did
not apply to us; we needed to break the mold. We were wrong. Software is dif-
ferent in some ways, but it has more in common with other fields than we
want to admit. We must use what others have proven works at work.
Some people feel they cannot do the right thing in their current job. I’ve
heard it all: “Our management won’t let us write requirements and hold a re-
quirements inspection.” “Our programmers would revolt if we asked them to
let others inspect their code.”
To these objections, I respond with two statements, which are easier said
than done, but are not impossible to either say or do. You can probably fill in
the blanks better than I can.
The idea behind best practices (Glass, 1995) is to examine organizations that
succeed consistently to discover what they do. If enough of these best-per-
forming organizations practice similar tasks, these become a best practice for
the industry. This is similar to, but not the same as, the emphasis on process.
The best practices also include elements of people and product.
Below is a best practices list compiled from the best practices lists of many
well-known authors: (Bach, 1995; Comaford, 1995; Jones, 1996a; Jones,
1996b; Johnson, 1995; Parnas, 1996; Racko, 1995; Reid, 1995; Sharp, 1995;
Wirth, 1995). Note that the newest of these sources dates from 1996. Al-
though I have read several dozen papers and texts since then that discuss best
practices, none of them offer anything beyond this list. All the latest best prac-
tices come from one form or another of those listed here. I will repeat this list
and discuss it again in Chapter 6.
앫 Risk management
앫 User manuals (as system specifications)
앫 Reviews, inspections, and walkthroughs
앫 Metrics (measurement data)
앫 Quality gates (binary quality decision gates)
앫 Milestones (requirements, specifications, design, code, test, manuals)
앫 Visibility of plans and progress
앫 Defect tracking
앫 Clear management accountability
앫 Technical performance related to value for the business
앫 Testing early and often
앫 Fewer, better people (project managers and technical people)
앫 Use of specialists
앫 Opposition of featuritis and creeping requirements
앫 Documentation for everything
앫 Design before implementing
c01.qxd 4/2/2004 9:59 AM Page 10
There is no one big secret to developing software. If there were, more people
would succeed at it. Fortunately, there are several little secrets, which can
make a big difference to a project.
Avoid having team members work in isolation. Users, designers, pro-
grammers, testers, and managers, should be able to talk face to face in a mat-
ter of minutes. These days, that does not necessarily mean they are in the
same building. It does mean, however, that you avoid saving up issues for the
monthly flight to the coast. People who interact daily come to know one an-
other, and the group of individuals more easily becomes a team. If possible,
physically colocate everyone; if not possible, virtually colocate them. Inex-
pensive video conferencing provides a means for quick, easy discussion and is
the closest thing to a physical meeting. Daily e-mail is a step down, but still
permits inexpensive information transfer. With ftp sites and the like, people
can work on the same virtual computer as if they were sitting down the hall.
Think and use these technologies to provide fast, frequent contact at work.
Stay with your project team. Most of us started in front of the computer,
programming solutions. We feel comfortable there, but the computer will not
complete the project; the people will. Spend most of your time with the peo-
ple working on your project. Most people drift to what is comfortable when
under stress. For most of us, this means we go back to the computer terminal.
Watch out for that tendency and spend your time with your people.
Concentrate on tasks, not tools. Learn how to perform a task first, and
perform it until it becomes second nature. The tasks must become an estab-
lished part of your culture. It takes time and money to learn how to use a
tool. That learning cannot occur at the same time you learn how to perform a
task. For example, learn how to plan projects using cards, sticky notes, and
other common objects. Once you have mastered that task, learn how to use
Microsoft Project or another schedule tracking tool. Don’t try to learn both at
the same time.
c01.qxd 4/2/2004 9:59 AM Page 11
REFERENCES