Chapter 1 ■ projeCt organization
12
That’s it! Do these five and, if the requirements are right, the project will be successful. Fail at any one of them
and the project will fail.
I’ve already explained why the first three tasks are so critical, and I’ll have much more to say about requirements
in Chapter 2.
Task 4, surprisingly often overlooked, is to ensure that you develop all of the deliverables. It’s too easy to
get wrapped up in the complexities of managing the programming and forget more mundane requirements like
documentation, training, installation, and support. Task 5 is to make sure that you actually execute the plans you’ve
hatched by doing the first four tasks. Programmers are notorious for getting distracted from their main mission.
What’s more, you have to keep them happy, or their productivity will drop all the way to zero, and perhaps even go
negative.
I’ve been careful to use the term “management” and not “manager.” All projects must have management, no
matter how small; without it, the resources are not being applied to accomplishing the objective. With a team of one
or two, there’s no need to designate one of them as the manager. But teams of three or more need to know who’s the
boss. It’s too inefficient to decide matters by consensus, and it runs the risk of losing track of the path toward the goal.
More than a half-dozen people, and there needs to be a full-time manager.
But, however you arrange it, the five essential tasks need to be done. You might argue that a schedule and work
assignments are unnecessary with a collaborative, egoless, team-oriented approach, but I don’t agree. I think that
leads to guaranteed failure: a late project, with unpopular jobs, such as conversion, documentation, or training, left
incomplete or haphazardly done.
Here’s how I did things for SuperSked, the checker-scheduling software for supermarkets. By the time I was
brought in to manage engineering, they had already spent a year burning through $500K or so of VC that was
supposed to get them a Windows version of their system, which had originally been built for character-oriented UNIX
terminals. After a year, they had a fancy object-oriented user-interface framework completed, and nothing else.
I agreed to take another $250K or so of VC money and finish the system in about six months. If I failed, the plug would
be pulled, and the company would fold.
So, of the three dimensions—requirements, resources, and schedule—two were already fixed. Actually, so were
requirements, since the new system had to completely replace the old system, which meant it had to provide the same
demand forecasting, adherence to union rules, cost optimization, and printed schedules that the old system provided,
but on Windows.
I decided that it was doable and signed on. There were about eight people in development, including a
mathematician who worked on the optimization algorithm and a testing specialist. The new CEO and I fired three
people who were technically competent enough but were spending too much time arguing that the existing system
was on the right track. After a week or so of study, I threw out 100% of the code that they had spent a year writing
but kept the database design, which was excellent. I hired two programmers, one recommended to me by a former
colleague and one from a newspaper ad.
That concluded tasks 1 and 2 on the list: the people and the requirements.
I knew the endpoint of the schedule, but not the intermediate points. Since we had six months of life left,
I planned the development for four, to give us one month for system testing and one month for unforeseen problems,
which, by definition, can’t be planned for.
So, I plotted out the system as best I could and divided the work into 16 weekly segments. Of course, we didn’t
stick exactly to that plan—one never does—but I had to convince myself that the problem had a solution. Task 3 done.
Then I divided up the work, unilaterally. In other projects this would be done collaboratively, but there was no
time for that. I just told the people what I wanted them to do. That was task 4.
With all this set up, my only management job was task 5, keeping everyone focused. I did that with a weekly
meeting in which we went around the room so each person could state very quickly where he was. We also had the
existing system to maintain, so customer issues were on the table, too.
The weekly meetings usually resulted in a few items that required my further attention, which I handled by
visiting, privately, whoever was involved. A strict rule was that we never discussed anything at these weekly meetings.
They were for status only. They never went more than a half-hour.