We are in the age of craftsmanship when it comes to software development. I recently gave a presentation at STPCon where I compared the production of software to the production of automobiles, all of that leading up to a discussion on Lean Manufacturing and how that might apply to software. At first I thought that automation (replaceable parts made possible by tool and die making) was the answer to quality software, but now I am beginning to wonder.
My presentation focused on Formula One race cars and how performance testing software was a lot like testing a Formula One car. Those cars are state-of-the-art when it comes to wheeled vehicle design, and they are also hand crafted. It occurred to me that craftsmanship is a desirable thing. Would you rather have a car that comes off an automated assembly line or would you rather have a hand-crafted one? Software and automobiles are not the same class of objects. Ford invented the assembly line in order to product large numbers of dependable automobiles at a reasonable cost. The assembly line churns out copy after copy of a car design, and they are all identical. With software we make it once and copy it over and over. In other words, we have no need to create the software from scratch over and over again. Once we've made it, we don't have to make it again. It's a different beast.
With automation, everything we make is an exact copy of the one we made before. With craftsmanship, everything we make is different from the one we made before. There will be similarities, but they will not be identical. With automobiles, all the dependency is on the designer. A good designer can turn out an automobile that is a work of art, or a total lemon. We can start out with a good design and end up with a total lemon if our assembly process is flawed. Herein lies the key to successful software creation. We need to begin with a good design and marry it to a repeatable assembly process.
I recall watching a news clip of the pilot of one of the joint strike fighter competitors right after he stepped out of the cockpit after the first test flight. He said, "It flew just like it did in the simulator." That statement struck me. They designed the plane using Computer Aided Design software, and then they built a simulator to test the design before they even started on the prototype. Imagine if we could do that with software.
