| Software projects are inherently complex, and
complex projects cannot succeed without careful planning. A well-planned project will be
actively controlled, will ensure that progress is visible, and will look after the
well-being of the people who are doing the projects work. Software projects are also
inherently risky, and they cannot succeed without active risk management. Involving users
in the project early and continuously, striving to hold the product to the minimal
sufficient product, and maintaining a focus on the desired result help to address key
project risks. |
Small projects can succeed through sheer force of will and a bit of
luck. Medium and large projects require a more systematic approach. This chapter outlines
some of the skills needed to make a medium-size project succeed.
Planning
Many technical workers would rather do technical work than spend time
planning. Many technical managers do not have sufficient training in technical management
to feel confident that their planning will improve the projects outcome. Since
neither party really wants to do the planning, it often doesnt get done.
But failure to plan is one of the most critical mistakes a project can
make. Because of the upstream/downstream effect described in the last chapter, effective
planning is needed to resolve problems upstream, at low cost, rather than downstream, at
high cost. The average project spends about 80 percent of its time on unplanned
reworkon fixing mistakes that were made earlier in the project.
Success in software development depends on making a carefully planned
series of small mistakes in order to avoid making unplanned large mistakes. Exploring four
design alternatives and discarding three of them amounts to making three small mistakes.
Not doing enough design work and rewriting the code three times amounts to making three
large mistakes. Because fixing upstream defects downstream costs 50 to 200 times as much
as fixing them upstream does, carefully orchestrated projects jump at the chance to fix as
many mistakes as possible at the bargain price of 1/50 to 1/200 their potential cost.
Where do projects find the time to plan? Its easy. You take a
small percentage of the time that most projects spend on unplanned rework and invest that
in the project early to avoid doing extensive rework later. Not all the time spent on
upstream activities will actually result in downstream savings, but much of it will. A
good rule of thumb for upstream quality assurance activities is that each hour spent on
activities such as technical reviews will save 3 to 10 hours of downstream costs. Seen
from a slightly different perspective, each day a developer spends reviewing a project
requirements or architecture will typically save the project 3 to 10 days later in the
project.
Examples of Software Planning
How does a project team plan a project to deliver software on a budget?
Here is some of the work used specifically for project planning:
A Software Development Plan maps
a course for the project. Committing the plan to writing allows the projects
stakeholders to refer to the plan throughout the project.
Project estimates provide a
foundation for project plans. A careful estimate leads to scoping the project
appropriately, which in turn leads to budgeting, staffing, and scheduling it
appropriately. A shoddy estimate can undercut the project in all these respects, making it
difficult to complete the project successfully and impossible to complete it efficiently.
Revised estimates created at the
end of each major phase allow for mid-course corrections and help to keep the project on a
solid footing.
A quality assurance plan that
includes both technical reviews and testing assures that the project will not succumb to a
costly, defect-ridden test, debug, correction cycle.
A detailed implementation plan
defines the order in which the software will be constructed. It ensures that the software
solution is constructed in a way that maximizes the value available to the customer at
each stage and minimizes the risks.
In addition to these explicit planning activities, several of a software
projects major activities can be thought of as planning activities.
Requirements development
identifies in detail the problem the project team is trying to solve. It amounts to
planning to solve the right problem.
Architecture creates a high-level
specification for the way in which the problem will be solved. It is a plan to build the
right solution to the problem.
Detailed design is a
comprehensive plan of what the project is going to build. It is a plan to build the right
solution in the right way.
Planning Checkpoint Review
Planning is so critical to the success of a project that some experts
have reported that a projects success or failure is determined as early as 10
percent into the project. Whether the exact number is 10 percent or some other number,
very early in the project the project team should have produced a user interface
prototype, detailed requirements, and a detailed project plan including careful cost and
schedule estimates. That information can be used to make a "go/no go" decision
about the project.
Two-Phase Funding Approach
One problem with software project funding in some organizations is that
project managers have to ask for funding for the entire project before they have had a
chance to complete much exploratory work. Such funding requests inevitably miss the mark
because too little is known about the desired software to support creation of meaningful
cost and schedule estimates. The software industrys experience is that estimates
created at this stage of a project often miss the mark by as much as a factor of 4 on
either the high or low side.
A better approach is for the project manager to request funding in two
major phases. The project manager first requests funding for the exploratory phase during
which the first 10-20 percent of the project is completed. At the end of that phase, the
project team holds a Planning Checkpoint Review. In conjunction with that review, senior
management or the customer makes a go/no go decision, and then the project manager
requests funding for the remainder of the project. At this point there is still a large
potential for variation in project cost, but the exploratory work that has been done will
bring it down from a factor of 4 either way to more like ± 50 percent.
Preparing for the Planning Checkpoint Review
Before the planning checkpoint review can be held, the following
materials need to be available:
Name of projects key
decision maker
Vision statement
Business case for the software
Preliminary effort and schedule
goals
Preliminary effort and schedule
estimates
Top 10 Risks List
User Interface Style Guide
Detailed User Interface Prototype
User Manual/Requirements
Specification
Software Quality Assurance Plan
Detailed Software Development
Plan
Each of these materials is explained in more detail elsewhere in this
book.
If these materials are not available, theres no point in holding
the Planning Checkpoint Review because there wont be enough information available to
determine the projects viability. If the project team continues to be unable to
create these materials in order to support the Planning Checkpoint Review, it is safe to
assume that the project is not being run effectively and faces a great risk of failure.
The exact amount of time required to create these materials will vary
depending on how much work is needed to identify the softwares requirements. In
circumstances in which end users know exactly what software they want built, this period
might take only 10 percent of the softwares total development schedule. In more
typical cases, it might take 10 to 20 percent of the total development schedule. On some
projects, the hardest part of the job is helping the end users figure out what they want
built, and so occasionally this part of the project can take 25 percent of the total
development schedule or more. The initial funding request and plans for the Planning
Checkpoint Review should take this variability in requirements work into account.
Agenda of the Planning Checkpoint Review
The Planning Checkpoint Review should focus on the following topics:
Is the original product concept
still viable?
Will it be possible to develop a
product that matches the projects vision statement?
Is the business case for the
software still justified when the updated, more accurate cost and schedule estimates are
considered?
Can the major risks to the
project be surmounted?
Have users and developers been
able to agree on a detailed user interface prototype?
Is the User Manual/Requirements
Specification complete and stable enough to support further development work?
Is the Software Development Plan
complete and adequate to support further development work?
What is the estimated cost of
completing the project?
What is the estimated schedule
for completing the project?
The work done during the first 10-20 percent of the project should be
sufficient to answer these questions, and the answers to these questions should give the
client or top management enough information to decide whether to fund the second phase of
the project.
Major Benefits of the Planning Checkpoint Review
Breaking software project funding into two major phases helps software
organizations in at least three ways. First, there is a tendency to view any canceled
project as a failure, but a project canceled at the 10-20 percent complete point should be
considered a resounding success. Canceling one project that ultimately goes nowhere after
it is 10-20 percent instead of 80-90 percent complete can pay for the exploratory phases
of a lot of other projects.
Second, by deferring the bulk of the funding request until after the
project is 10-20 percent complete, it provides for much more reliable funding requests for
the bulk of the project.
Finally, requiring project managers to complete 10-20 percent of their
project before requesting funding for the rest of it forces them to focus on the upstream
activities that are critical to a projects success. These activities are often
abbreviated or ignored, and the damaging consequences of such neglect dont otherwise
become apparent until late in the project when many defects have to be corrected at great
cost downstream. If the project team is required to complete the most important upstream
work before proceeding with downstream work, overall project risk can be substantially
reduced.
Risk Management
A special kind of planning is risk management. Anyone who has been
through a medium or large software project knows first-hand that dozens of things can go
wrong. The most successful projects take active steps to avoid succumbing to such
problems. You might be an optimist, but with software projects, as the saying goes, you
can hope for the best but you should prepare for the worst.
Several of the most serious software project risks are related
specifically to planning:
Failure to plan
Failure to follow the plan that
has been created
Failure to revise the plan when
project circumstances change
Not practicing active risk management on a software project is
tantamount to ignoring decades of experience in which the software industry has learned
thousands of times that software development is a high-risk activity. Many risks can be
prevented or minimized if the project performs active risk management. Many of those same
risks can cripple a project if not actively addressed.
The practices contained in this books survival strategy (and
discussed throughout the rest of the book) have been chosen because they involve less risk
than alternative practices or because they promote detection and control of other kinds of
project risk. You dont really have a choice about whether to practice risk
management on a software project. As Tom Gilb says, if you dont actively attack the
risks on a software project, they will actively attack you.
Project Control
A theme of this book is that software projects can be controlled to meet
their schedule, budget, and other targets. To some people, the idea of
"controlling" a project sounds almost inhumane. It conjures up images of an
oppressive project manager wielding authority with a whip and brass knuckles. If
thats what you think, realize that the opposite of "controlling" a project
is having a project that is literally out of control.
For some reason people think that it is somehow possible to have a
project that is under control without anyone or any group of people actually controlling
it. Both my brain and my experience tell me that is impossible.
The opposite of "controlling" a project is
having a project that is literally out of control.
Some people object to the idea of project control because they think it
refers to controlling the people on the project. It doesnt. It refers to controlling
the project itself. Here are some examples of what I mean:
Choosing a software lifecycle
model such as the staged delivery model used in this book to provide a framework for the
projects technical work.
Managing changes to requirements
so that only necessary changes are accepted.
Setting design and coding
standards so that the designs and source code produced are consistent with each other.
Creating a detailed plan for the
project so each developers work contributes to the goals of the project and
doesnt conflict with other developers work.
Control is not something that happens as a by-product of good technical
work. Control needs to be built into the project explicitly through active project
management and continuous, ongoing control activities. Specific activities are discussed
throughout the rest of the book.
Project Visibility
Closely related to project control is the concept of
"visibility," which refers to the ability to determine a projects true
status. Is the project performing within 10 percent of its schedule and budget targets, or
only within 100 percent? Is the project on track to achieve its quality goals, or is it
lagging behind? If the project team cant answer such questions, it doesnt have
enough visibility to control its project.
Here are examples of activities that contribute to visibility:
Using a vision statement or goals
to set broad objectives for the project. If you dont know where you want the project
to go, it probably wont go there.
Holding a Planning Checkpoint
Review after the project is 10 percent complete to determine whether the project is viable
and should be completed.
Regularly comparing actual
performance against planned performance to determine whether the plan is working,
corrective action needs to be taken, or the plan needs to be modified.
Using binary milestones to
determine whether tasks are done or not done. Milestones are considered either "100
percent done" or "100 percent not done" because allowing that little step
from "100 percent done" to "90 percent done" has historically been
found to reduce the quality of the status information from "very good" to
"awful."
Driving the product to a
releasable state periodically to help determine the products true condition and
control its quality level.
Revising estimates at the end of
each phase to support improved plans based on more information and better understood
planning assumptions.
Many project teams have found the hard way that good visibility is not
something they get automatically. If you want good visibility, the project team has to
plan it into the project from the start, and if you want a successful project, you have to
have good visibility.
Peopleware
Software development requires creativity, intelligence, initiative,
persistence, and a great degree of internal motivation. Any effective approach to software
development must remember that if the development team isnt on board, the project
cannot possibly succeed. It might ship. But it will ship with low quality. Or it will ship
without the spark of inspiration that differentiates a merely passable product from a
great one. Or a substantial part of the development team will quit within a few weeks of
releasing the product.
Tom DeMarco and Timothy Lister popularized the term
"Peopleware" to refer to software management practices that recognize the
importance of the human role in software development. If you are not a software developer,
some of the most important peopleware guidelines might surprise you.
Align developers interests and work assignments.
As a general rule, the single greatest motivator for an individual software developer
is the alignment between the developers interests and the developers assigned
work. If developers find their work interesting, they are highly motivated. If they find
their work boring, they are demotivated. After 15 years of research, Robert Zawacki
reported that about 60 percent of a developers productivity comes from the match up
between the job and the developer. For best productivity, be sure that developers are
assigned to jobs they find stimulating.
Do try to show developers that you sincerely appreciate them.
Like everyone else, developers like to be appreciated. If the project sponsors
sincerely show they appreciate the developers, the developers commitment to the
project will tick up a notch. If developers think the display of appreciation is phony or
manipulative, their commitment will tick down.
Dont try to motivate developers with cheerleading campaigns,
impossible challenges, or monetary rewards.
Some people are motivated by impossible goals.
Because developers pride themselves on being realistic, they tend to be demotivated by
goals that are too far out of reach.
Provide thinking-oriented office space.
Software development is process of continuous discovery and invention. The atmosphere
most supportive of that process is one that is relaxed and contemplative. Effective
software development requires that developers achieve a level of concentration similar to
that of a mathematician or physicist. Can you imagine Albert Einstein sitting at his desk
while his manager berates him, "Albert, we need that theory of relatively now!
Hurry up!" Since software developers arent as smart as Albert Einstein, they
need an even more supportive work environment.
A handful of software research studies have found that productivity of
developers who work in private, quiet, one- or two-person offices can be as much as 2.5
times as great as the productivity levels of developers who work in open work bays or
cubicles. Software development is a deeply intellectual activity. Its hard to be
intellectually effective with phones ringing, announcements blaring over the public
address system, and people walking up to your cubicle every few minutes to ask questions
on various topics.
The job of the average manager requires a shift in
focus every few minutes. The job of the average software developer requires that the
developer not shift focus more often than every few hours.
Avoid open work bays.
There is a claim the recurs from time to time that open work bays encourage
communication on software projects. The problem is that open work bays encourage
incidental, unstructured communication that hurts productivity. Beneficial, incidental
communication can be encouraged more effectively by installing a soda machine in a place
where developers can bump into each other when theyre not trying to concentrate on
problems that demand their complete concentration. The claim in favor of the communication
benefit arising from open work bays has an intuitive appeal but doesnt bear close
examination, and the software research data indicates clearly that developers are most
productive in one- or two-person offices.
Many organizations are restricted in their ability to provide developers
with quiet, private offices. Either their general office spaces simply do not have enough
private offices for each developer to have one, or private offices are treated as VP-level
status symbols, which makes it impossible to provide them to developers. Some
organizations have found it effective to locate their software development teams in
separate facilities where they can provide developers with the productive environments
they need. Others improve their environments incrementally by letting developers work
occasionally in private conference rooms, wear head phones to cut down on distractions, or
work at home. Organizations that cannot find a way to provide developers with a quiet,
private environment free from interruptions will have no choice but to adjust their
productivity expectations sharply downward.
User Involvement
User involvement is critical to a software project in several respects.
Success in building software hinges on building a product that end users will use and
like. Without end-user involvement, software developers are notorious for crafting
technically elegant solutions to problems that users dont care about. Marketers are
notorious for overloading a software product with so many features that users cant
find the few features they really need.
There really is little magic involved in developing software products
that users love. The project team simply needs to ask the users what they want, show
them what they intend to build, and ask them how they like itthen listen
carefully until they fully understand both the stated and unstated elements of the
users responses.
It may take the project team several attempts to fully understand what
the user is asking for. Users must also understand that the mock-ups developers show them
to solicit their input are nowhere close to being the real product. Even identifying who
"the user" is can be difficult. All these issues are discussed more in Chapter
8.
User involvement saves time because it eliminates one large source of
requirements changesfeature creep arising from not defining the right product in the
first place. If users arent involved early on, when they are brought in to review
the product late in the project they identify ways in which the product that has been
developed falls short of their needs. At that point the development team is faced with a
difficult choice: Ignore the user input and adhere to the budget and schedule, or act on
the user input in the downstream part of the project and throw the budget and schedule out
the window. Typically a compromise is reached in which the easy user-originated changes
are adopted and the hard changes are deferred to a later version. Clearly, it is better to
involve users early on, while the software is malleable, and before a lot of work has been
sunk into software the users dont want.
Because of this dynamic of late-discovery-of-user-needs followed by
compromise-between-user-desires-and-schedule-and-budget, projects that involve users early
on tend to deliver products that are thought by users to have higher quality than projects
that do not involve users early on. Externally, the software better fits user needs and
expectations, which is one kind of quality. Internally, the software contains fewer
defects because there have been fewer changes in direction and the product architecture,
design, and implementation have been more stable. If the perceived user needs change
throughout the project, internal software quality will degrade rapidly as developers are
forced to cobble unforeseen functionality onto an existing framework that is ill-suited to
support it.
In addition to early involvement, users need to be involved on an
ongoing basis. Only rarely do software projects hit upon a really good solution on the
first attempt. Typically, a software project must generate several versions of a user
interface prototype before the users sit up and say, "Yes, that is the software I
want." A good, mature user interface prototype can move a project most of the way
toward delivering what end users want, but usability aspects of the software are
inevitably refined as the software itself is developed. Building user-oriented checkpoints
into the project helps the project to make a set of small, inexpensive mid-course
corrections rather than waiting to make one large, expensive correction at the end of the
project. (This books use of staged deliveries provides for such a series of
mid-course corrections.)
User involvement doesnt have to break the bank. In Usability
Engineering, Jakob Nielsen points out that the benefit-to-cost ratio is highest when 3
to 9 usability testers are used.
In 1994, the Standish Group conducted a review of more than 8000
software projects. Their review concluded that end-user involvement was the most
significant project success factor. Conversely, among projects that had failed, lack of
user input was the most significant failure factor. Experts in rapid development of
computer software have stated that ready access to end users is one of the most critical
success factors in rapid development projects.
Involving users throughout the project is a critical
software project survival skill.
Product Minimalism
Successful development of a software project requires a "less is
more" orientation from requirements time through acceptance and release. Because
software development work is so mentally taxing, it becomes critical that people working
on the project take active steps to make the project as simple as possible rather
than needlessly complicated. Feature specifications, designs, and implementation should
all emphasize simplicity. Many developers are attracted to complexity, so their tendency
is sometimes to make the problem more complicated rather than less. But success depends on
finding ways to make the project more simple.
When developers look for the most straightforward ways to accomplish the
projects objectives, they will eliminate huge sources of errors, and it is even
possible to influence this at the end-user level. There is often a 2-hour version of a
feature, a 2-day version, a 2-week version, and a 2-month version. Developers should start
with the 2-hour version. That will tend to be the simplest, most straightforward, and
least error-prone version. After that has been implemented, if it isnt sufficient,
they can implement the 2-day version, and see if thats sufficient. But they should
proceed from simple to complex, and not the opposite.
The French writer Voltaire commented that an essay was finished not when
there was nothing more to add, but when there was nothing more to take away. The general
movement on a software project should be in the direction of taking elements of the
software away to make it simpler rather than adding elements to make it more complex.
Focus on Shipping Software
Effective development teams are single-minded in their pursuit of
releasing their products. One of the ways in which Microsoft has been particularly
effective is explicitly focusing on the act of shipping products. Developers who
see a product through to release receive a "Ship-It" award, which acknowledges
them for driving a product to completion. Developers who have been with the company for
many years typically have large collections of Ship-It awards. This simple practice
emphasizes to developers that Microsoft doesnt make its money by developing software;
it makes its money by shipping software. Thats how most other companies that
produce software make their money too.
Focus is just as important for business software developers who release
software to their internal customers as it is for shrink-wrap developers who release
software to the general public. A clear vision helps any kind of software development team
focus on the product-release goal. If different developers carry different visions of the
product theyre developing to the end of the project, a great deal of time, effort,
and money will go into reconciling the differences in their visions.
A clear architecture can also help align the development team on the
release goal. If the project team doesnt create a good architecture, its hard
to focus technically. If it does create a good architecture, that builds focus into the
project at a deep technical level.
The software development team must be relentless in ensuring that every
technical decision contributes toward minimally satisfying the systems required
functions. If a project team is working on an academic project for a university class,
there might be some reason to make a product arbitrarily more complicated. But if a team
is working on a commercial product, their mission is to provide the simplest, cleanest
solution that solves the business problem. Any decision that is counter to these
characteristics should be rejected.
One message of this book is that software development is inherently a
functional activity that serves practical objectives. It has strong aesthetic and
scientific components, but it is not itself art or science. The effective software
developer realizes that software projects do not exist primarily to provide the developer
with a high-tech sandbox, and prioritizes his or her activities accordingly. The Microsoft
experience shows that this results orientation can be cultivated in project teams. The
developer who does not share this focus on the bottom line is a drag on the project and
ultimately of little use to the organization.
| Survival Check
The project team creates a detailed written plan designed to eliminate potentially costly
problems early in the project.
The project emphasizes the importance of
upstream work by holding Planning Checkpoint Review and making a go/no go decision when
the project is about 10 percent complete.
The project practices active risk management.
Project plans emphasize visibility and control.
The project plan involves real users early and
throughout the project.
The project is conducted in a productive
environment, or the project plans assume lower productivity.
Project plans call for a simple-to-complex
approach rather than the reverse. |
|