Saturday, September 24th, 2016
As noted previously, The Code is The Design, that is, in software all the effort is design, and thus requires creative and talented people; creative processes are not easily planned, and so predictability may well be an impossible target.
Uncertainty is one of the few certainties about software development.
This is true, for 99% of development teams and software projects all around the world.
However, there is a way to achieve predictability and certainty, but you must be willing to pay for it:
One of the most famous software projects is the space shuttle software: every time it fires up the shuttle, their software is controlling a $4 billion piece of equipment and the lives of a half-dozen astronauts. Even the smallest error in space can have enormous consequences: the orbiting space shuttle travels at 17,500 miles per hour; a bug that causes a timing problem of just two-thirds of a second puts the space shuttle three miles off course.
But how much work the software does is not what makes it remarkable. What makes it remarkable is how well the software works. This software never crashes. It never needs to be re-booted. This software is bug-free. It is perfect, as perfect as human beings have achieved.
This software is the work of 260 people in a strictly an 8-to-5 kind of place. The on-board shuttle team produces grown-up software, and the way they do it is by being grown-ups. When we have to write perfect software instead of software that’s just good enough, then it’s time to grow up.
Their culture is equally intolerant of creativity and the individual coding flourishes. They have to do exactly what the manual says, and they’ve got someone looking over its shoulder. It is not possible to have people freelancing their way through software code that flies a spaceship, with peoples lives depending on it. There are several people reviewing every single line modified.
People have to channel their creativity into changing the process, not changing the software. The team’s most important creation is not the perfect software they write, it’s the process they invented that writes the perfect software.
No coder changes a single line of code without specs carefully outlining the change. For instance, the upgrade of the navigational system (6,366 lines of code) required 2,500 documentation pages. The specs for the current program fill 30 volumes and run 40,000 pages. These requirements are almost pseudo-code; they say: you must do exactly this, do it exactly this way, given this condition and this circumstance.
They maintain a huge database with historical information about the genealogy of every line of code. They also store a lot of information about every error discovered in the development and testing phase.
They can predict the cost and schedule of every development, and even the number of errors they are going to detect.
Using this very detailed process, they have achieved certainty and predictability for each new version of their software, and they can create and follow this process because in this project, money is not the critical constraint: $35 million (only in 1995) per year budget is a trivial slice of the NASA pie, but on a dollars-per-line basis, it makes the team among the world’s most expensive software organizations.
The shuttle process is so extreme, the drive for perfection is so focused, that it reveals what’s required to achieve relentless execution.
Summing-up: in normal projects, we can reduce uncertainty by developing in small iterations and getting feedback as soon as possible. There’s another way of achieving certainty and predictability: we can create a perfect process when the money is not the critical constraint.