- Specify. You will describe the problem in the form of a functional specification
- Design. They will make a drawing
- Pieces. They (possibly multiple people in parallel) will use the design to select and manufacture pieces
- Product. They will weld the pieces together into the tool you need
- Test. You test it, and it may require minor adjustments
- Specify. You will describe the problem in the form of a functional specification
- Product. They will make the software tool
- Test. You alpha test, they fix, you beta test, they fix. Repeat until satisfactory
Rather than trying to solve the software problem at once, first imagine a hardware workshop that works like this:
- Specify. You will describe the problem in the form of a functional specification
- Product. They will weld materials together into a tool
- Test. You test, they fix, you test again, they fix. Repeat until satisfactory
A good software workshop would use the same five steps the good mechanical workshop uses:
- Specify. You will describe the problem in the form of a functional specification
- Design. They will make a (modular) design
- Pieces. They (possibly multiple programmers in parallel) will use the design to build and select software modules
- Product. They will use the modules to build the software you need
- Test. You test it, and it may require minor adjustments
I'd like to thank a former colleague at Bruker AXS that gave me this nice comparison. I know he wishes to remain anonymous on the 'net. Image credits: Dystopos on Flickr.

There is a big difference between welding and software though, a change in welding might take hours or days to change but in software it would take seconds.
ReplyDeleteThe other issue is in the software specification phase, it is hard to know what the clients want as they don't know and they often don't understand or appreciate a solution until they see it and use it.
Thanks for your insight, Andy!
ReplyDeleteThere are certainly differences between hard- and software setup, but they are not as large as most people think. Badly designed hardware becomes expensive to copy and so it is naturally avoided. Many people do not see that badly designed software may be essentially free to copy, but becomes expensive to maintain.
Software changes can only be done quickly if the design has been right from the beginning. This forms an important bridge to the second half of your remark: specifications that are probably incomplete are an extra reason to make sure the design is right, because you just know things will have to be added later. Anticipation is the art of the software architect.
To have frequent interactions with the customer, agile development can be a great help. And even using agile development a true design is required.
Except, of course, if what they want is a hack... Unfortunately customers often think they need a hack, but most often they really don't.