Wednesday, July 14, 2010
More on software factories
It seems to be a rather popular point of view that implementation is an almost mechanical process once you have the specification written. An assembly line in the style of Henry Ford: put the bolt on, next project. The observation I would like to make though is that putting the bolt on a car is a task that has very limited variation and is repeated exactly the same for each car. In software development it is best practice to put these tasks in a library that we re-use across projects. The challenge in software development is that projects are uniquely different. And that the requirements are usually very unclear. It's more similar to Henry Ford telling an assembly worker: "I would like a bolt and nut thingy somewhere along the exhaust pipe to keep the thing from falling off". The only way to get a clearer specification is to be as precise in our specifications as car manufacturers are: use 3D modelling and simulation tools to determine the exact strength and location of the nut/bolt to minimize failure. Why does it pay off for car manufacturers to invest in such a precise specification where the location, dimensions, materials and strength are determined in such detail? Because after doing that they will be able to mass produce the product easily and limit liability (with failing parts and other ugly accidents). And still, as we have recently seen, they will at times fail in building a product that meets all specifications. In software development we can only reach that level of detailed specification by formally specifying the application and performing model checking. I love that approach. But it's not very popular for mainstream business applications. It requires highly specialized individuals and large amounts of time. So we resort to being less precise and incrementally refining our attempts to build something that seems to at large meet requirements. Obviously, anyone that functions as 'a human model checker' is going to be wildly more successful during that process than someone that needs instructions like 'put bolt 1 on nut 2' .