By Evan
Robinson
Presented at the CGDC
April 1997
|
I. Abstract:
How to wrestle a schedule and budget eating
monster project back into its cage. Methods for reining in the project that
threatens to go on forever, cost everything you've got, suck every resource
you have, and still not get done on time. How to recognize it early, how
to control it before it gets out of control, how to know if you should kill
it, and how to get a wildly out-of-control project back under
control.
I. The Short Version
For those of you who really want to be at another
talk right now...
A. Focus
It sounds simple, and perhaps it should be
(although my slide illustrates a potential difficulty) -- all you need do
to keep your projects under control is maintain your teams
Focus.
I. Recognizing The OCP
Weve all seen one, been a part of one,
or at least heard about one -- a project that goes on forever (its
90% done!), or costs eight times as much as planned, or absorbs every
resource a company has (and then some). It has built a life force of Its
own. It Will Not Die. Its an Out of Control Project (OCP).
As with most problems, the first step in finding
a solution is admitting that you have a problem. Because of the nature of
our work (and the typical development model as promulgated by Electronic
Arts), its easy for an OCP to remain below radar for a
long time -- because of inexperienced or non-existent project management
(PM), busy producers, unrealistic expectations (well make up
this slip after Alpha), or a host of other reasons (most of which are
well-intentioned but some of which are almost criminal).
A. All Projects
When was the last time YOU felt completely
in control throughout your development effort, finished on or ahead of schedule,
on or under budget, and had everybody working 40 hours/week or under?
To some extent, at some time, I believe ALL projects are out-of-control.
And we probably prefer that, since some of the best things come from chaos.
Besides, as part of a taxonomy, All Projects isnt very useful in selecting
which projects are out-of-control.
A. Projects in Crunch Mode -- Hope, Faith,
and Lots of Hours
Every project goes into Crunch Mode at some
point. Crunch Mode is when everybody (or almost everybody) is working lots
of extra hours. If youre in Crunch Mode more than about two weeks at
a time, or youre in Crunch Mode just to stay even with the schedule,
your project is out-of-control.
There often comes a time in the OCP where it is consuming every resource
available to it and still slipping. The usual response at this point is to
keep working, head down, and pray that everything works out OK. Eventually
either the project is finished and ships, or the company notices whats
going on and kills it.
A. Projects Slipping Repeatedly
At periodic (hopefully weekly) schedule meetings
(EA calls them Product Status Meetings) its time for schedules to be
adjusted if necessary. Watch carefully if a project is slipping continually,
especially if it is slipping out each meeting by the time between meetings
(slipping a week at each weekly meeting). Keep track of how milestone dates
move on projects. When a project slips this way, it means it is standing
still. But while standing still it is consuming all the resources assigned
to it.
If the project is in the final stages of debugging, it may actually be the
case that the project is standing still -- one class A defect means an
unshippable project, and if everyone is looking for it and cant find
it, the project IS standing still. But during development it should be very
unusual for a product to be standing still -- progress should be made on
some aspects almost no matter what.
A. The Second Slip
My heuristic (rule of thumb) for recognizing
an OCP is simple -- a project is out-of-control the second time it slips.
Poor PM techniques can make this heuristic useless -- if there is no schedule,
you cant tell if a project slips. If there are no well-defined milestones
you cant tell if a project slips. If the schedule is constantly being
rebuilt, you cant tell if a project slips.
Its common for a project team to say we were slow getting started
because (insert reason here) but well make the time up in the (insert
future phase of project here) phase. This does occasionally happen
-- if a project gets a slow start to implementation because of lack of equipment
or software or other easily correctable problem, it is conceivable that the
second milestone will catch up some or all of the time lost. It is not very
common, however.
A. A Cautionary Note -- the deliberate OCP
Its not unknown for a OCP to be deliberate,
as in I know I can get this project approved if I say it will cost
$1,000,000 and be done in 9 months while knowing that it will more
likely take 18 months and cost $2,500,000. I am not talking about honest
(if naïve) mistakes, but knowing, deliberate underestimating. This behavior
is unprofessional and, in my opinion, constitutes malpractice and should
be grounds for termination. The only protection against a deliberate OCP
is careful examination of products at their early stages (Script Review and
Technical Design Review).
I. Dealing with an OCP: Conventional
Responses
The most common reaction to a slip is
well work harder and make up the time. An equivalent (but
generally more extreme) reaction is to add more appropriate resource to the
project (artists if art is slipping, engineers if implementation is slipping,
etc.). A third almost equivalent reaction is to extend the schedule by the
amount of the slip. Lets take them one at a time...
A. Extend Schedule By Slip Amount
Pros: easy; looks like youve solved
the problem
Cons: rarely succeeds; cant easily be hidden from upper management
This is often the easy way out selected by inexperienced PMs
or Producers. Weve slipped (insert length here), but were
back on track and will stay on this new schedule. Wrong! Unless the
reason for the initial slip can be found, eliminated, and shown to have no
further effect on the schedule, just slipping the schedule is unlikely to
succeed.
Most schedule slips have longer-term, overarching effects on a full schedule.
If the first milestone is late because half the tasks took more time than
planned, you should assume that half the remaining tasks will take more time
than planned too! If, on the other hand, the initial slip can be traced directly
to one-time problems now solved (we slipped two weeks because we
didnt have development systems), merely moving the schedule out
may do the trick.
A. Work Harder (then Work Lots Harder)
Pros: no additional direct cost to the company;
can be hidden from upper management
Cons: works in a limited set of circumstances; can have negative consequences
(burn out, panic) to team
Extra hours can sometimes restore a project to a controlled state if:
* The team wasnt already working lots
of extra hours
* The slip is smaller (percentage-wise) than the extra hours added
* The extra hours dont need to be worked for more than about two
weeks
If any of these arent true, working harder
wont do fix the problem. It may instill a sense of panic in a team,
or an awareness that this project is FUBAR or a SNAFU.
A. Add Resource
Pros: reasonable response most likely to succeed
Cons: cant be easily hidden from upper management; adds directly to
bottom line cost of project, non-proportional gain isnt intuitively
obvious.
Adding resource is probably the best of the common responses. It does require
an admission that a problem exists (often to upper management) and it does
directly increase the bottom line cost of the project. It also has hidden
costs. It requires that new resources be brought up to speed on an existing
project (which is probably under-documented), it requires that tasks be
re-partitioned (according to a new set of skills available), and in most
cases it increases management and communication overhead. See section 4.3,
Adding Resources for notes on getting this right.
I. Dealing with an OCP: Good
Responses
A. Know the Development Triangle -- How To
Make Tradeoffs
A critical precursor to successful project
management (PM) is the Development Triangle (see Dynamics of Software Development
by Jim McCarthy for additional discussion). Every project can be specified
along three axes or legs: Time Required, Features Required, and Resources
Available. These three axes are proportional in that:
* Time varies directly with Features (as Features
increase/decrease, Time increases/decreases)
* Time varies inversely with Resources (as Resources increase/decrease, Time
decreases/increases)
* Features varies directly with Resources (as Resources increase/decrease,
Features increases/decreases)
Time
Features Resources
Every tradeoff possible in development is
encapsulated in this idea -- to reduce required time, you must reduce features
or add resources. To increase features, you must increase resources or increase
time. If you must reduce resources, you must increase time or reduce features.
And so on.
The Development Triangle is the essential tool that enables you to decide
what to do with your product (be in control) by recognizing your available
choices.
A. Update Meetings
1. Increase Team Focus
The purpose of periodic update meetings is
twofold: 1) gather required schedule information; and 2) increase team focus.
As discussed briefly above in The Short Version, I consider the critical
factor in getting through Recovery Mode to be team focus.
When a team knows what has to be done, by when, and why, and actually agrees
with the decisions and the realism of the schedule (because theyve
been part of the process and are kept informed), they can focus on what they
are doing. They dont have to worry about what to do next because they
already know. They know whats important and whats not.
1. Weekly Updates
During most of a project, weekly update meetings
with the Project Manager are sufficient. During these meetings the PM should
get updates from each team lead (or each team member). Every task completed
should be noted. Any upcoming dependencies should be noted and checked to
see if they are going to be a problem. Everyone should leave the meeting
with a clear idea of what is most important in the next week.
1. Daily Updates
During crisis periods (just before major
milestones, when the project is slipping, etc.), daily update meetings may
be necessary. These meetings should focus on the top ten things that need
to get done -- the most important first. Everyone should leave the meeting
with a clear picture of what they have to do in the immediate future.
If these meetings are happening after Alpha, they may also be considered
to be Change Management meetings, in which each desired change is brought
before a group who will decide whether the change should be
implemented.
A. Adding Resources
Adding resources is neither anathema nor a
panacea. It will neither solve all problems nor make all situations worse.
Fred Brooks pithy saying adding programmers to a late project
makes it later is not a bad rule of thumb, but it has exceptions.
Adding resource to a project requires up-front and continuing investment:
new people must be brought up to speed (which takes both their time and the
time of the people on the project -- good documentation can help reduce both
those), more management time and effort must be spent to coordinate the increased
resources, and communication overhead within the project team is likely to
increase (formal meetings will get longer, more time will be spent in informal
hallway meetings and asking each other exactly what is going
on...). This up-front and continuing cost must be carefully weighed against
the expected (and likely) benefits. Adding resource (except testing resource)
to a project after Alpha is unlikely to shorten the schedule.
A. Cutting Features/Content
Removing features or content from a project
seems like an obvious solution when the schedule is too long. In my experience
it is not implemented as often as one might expect.
It does no good to remove features or content already created! For this reason,
you must assess and remove features or content relatively early in the project
lifecycle. Of course, there are exceptions -- if a feature is associated
with many defects, removing the feature may be more efficient than debugging
it. If a collection of content already created is only used in association
with content or features not yet created, removing it may do some good --
though it will probably have unpleasant morale consequences.
Generally, once a project reaches Alpha there is little point in removing
features (since they are already implemented). There may be a point in removing
the need for additional content which cannot be produced in the time
available.
A. Putting You Out If Its Misery
Sometimes you just need to call in Well and
shoot it in the head.
It can be a difficult decision to kill a project, but the usual response
when someone hears about it is why did it take so long? Usually
everyone knows that a project is in serious trouble -- its just that
the development team (or certain members of it) can sometimes manage to convince
themselves that everything is all right or that the problems are not
serious.
When it comes time to kill a project, remember that its the project
you are killing, not the team, not the individuals. Be sensitive -- this
may come as a shock to a team which has convinced itself everything is all
right -- and it is a stress not unlike losing a job (with which it may come
hand-in-hand) or a close relative. Be aware that the team is likely to be
some combination of angry, defensive, and scared -- be prepared to reassure
them (but always tell them the truth) about their futures, and try to get
a guarantee in advance from the company that the team will be taken care
of. If they cant be kept on at the company, at least make sure they
will have a reasonable time (and the assistance of the company) to find new
work.
I. Avoiding an OCP: Project
Management
The underlying discipline of staying in control
of a project is called Project Management or PM. PM is everything from
maintaining to-do lists to performing the scheduling portions of a Technical
Design Review to reviewing milestones for completeness. PM is normally associated
with task lists and PERT or Gantt charts and people who come around and ask
questions like Task 341, Create HUD was scheduled to run
from 3/5 to 3/7 -- is it done yet? If its not, what percentage done
is it?
From a broader perspective, PM is all of the processes which keep a project
under control. Here are a few which are specially valuable in controlling
or avoiding the OCP...
A. Starting Out Right
Good PM starts at the very beginning of a project.
You begin with the realization that what you are about it do is difficult
and deserves careful consideration. Typically the start of a project should
include creating: a Script (Product Design); a Technical Design Document
(Program Design); Task Lists; a baseline Schedule; an initial Budget; and
a set of Milestones.
These documents are often slighted or scanted because everybody knows
that things will change. Well thats fine, but when you set out
on a trip, you dont ignore the maps because we dont know
exactly where were going and where were going to stop for each
meal. In fact, if youre going hiking and you just plan to wander
around a certain area, you pay more attention to taking maps along so that
you can see where you are, where youve been, and where you can go from
here. These documents, especially the Product and Program Designs, are your
maps when doing a project.
Ideally, all these documents should be live -- constantly updated
during development. In practice, they will always lag somewhat behind the
real documentation -- the code and art. Thats all right
so long as you dont let it be an excuse to do nothing. CASE tools are
improving and some primitive round-trip engineering tools already exist which
allow you to generate code (or at least headers) from Booch or UML diagrams
and to generate diagrams from code.
A. Scheduling
Scheduling a software project is an ongoing
process -- you being with a schedule known to be in error, but you refine
it as you go along. There are inevitably tasks which must be added to a schedule
and often tasks which become irrelevant and have to be removed. There are
always tasks which take a different amount of time than originally
expected.
Schedules should be updated on a regular basis. Weekly is probably ideal
for most of a project. Careful looks should be taken at the next section
of a project at each Milestone review.
A common mistake is to completely rebuild the schedule periodically during
development. Once the schedule has been rebuilt it is very difficult to extract
original schedule information from it. A better solution is to use an automatic
tool which includes baselines and alter the schedule file as time goes on
(keeping it under source control if possible) so that the original (baseline)
schedule is always available for examination.
I. Other Resources
A. Learn To Do Better
Make sure you schedule time during and between
projects to learn, both from your experience (remember, experience is what
you get when you dont get what you want) and from others.
Hold Post-Mortem meetings to discuss the most recently completed (or killed)
project. Make sure everyone understands that this is a time for honest
conversation about the things that went wrong and the things that went right.
I would go so far as to arrange for anonymous input to some reasonably neutral
party to filter and provide to the group. Identify weak and strong points
and change your development process to emphasize the strong and eliminate
the weak.
Make sure that everyone on your project is always learning. Its a good
rule of thumb that white-collar workers should spend 10% of their time
(thats _ a day per week) keeping up with the literature. Training classes
and conferences should be part of the project budget, and down time between
projects should be devoted to improving their skills. Ideally, team members
should drive this process, but its up to managers to make sure it happens
if the company doesnt want to pay for it or the team is too apathetic
to fight for it.
A. Books
A quick look at my bookshelf suggests the following
books, sorted by authors surname:
Crunch Mode: Building Effective Systems on a Tight Schedule, John Boddie
Constantine on Peopleware, Larry Constantine
201 Principles of Software Development, Alan Davis
Peopleware, DeMarco & Lister
A Discipline for Software Engineering, Watts Humphrey
Assessment and Control of Software Risks, Capers Jones
Dynamics of Software Development, Jim McCarthy
Code Complete, Steve McConnell
Rapid Development, Steve McConnell
I. Summary
A. Panic Early and Avoid the Rush!
A. Avoid the OCP -- learn to do it right
A. Here Endeth the Lesson -- go forth and prosper
Evan Robinson
EvRobinson@aol.com
|