There are many people and tasks involved in getting a software product out the door. In our early history there was a lot of chaos around a product release. Near the end we frequently discovered forgotten or very late tasks. To try to fix this we started crafting incredibly detailed schedules for each product, with tasks like:
- start thinking about the box, due July 9
- first draft of the box, due July 25
- feedback on first draft, due August 1
- second draft of the box, due August 14
- finalize box design, due August 22
- send box design to the printer, due August 24
- put left foot forward, put right foot forward, inhale, exhale, etc.
We used Microsoft Project to keep track of all this detail. It sucked. Only one person knew how to use it, so all changes went through him. He would put the giant finished Gantt chart in a public place, and no one ever looked at it. A complete waste of time.
We thought that creating a bunch of process would help people stay organized. Instead, it created busywork and then frustration when most people ignored the process.
Now we have a simple standard release schedule. It’s just a rough outline and we don’t bother to customize it for each product. We just look it over occasionally. It’s interesting that our releases go much smoother than they did when we devoted huge effort to detailed schedules.
What has changed? In the early days the model was Dad planning your homework assignments and then pestering you to do them. If you forgot an assignment, Dad yelled at you and then helped you do the work. Now we treat team members like adults. They are given broad tasks with deadlines. It’s up to them to figure out how to get there, ask for help, or go down in flames. With adults you don’t need a lot of process.