One should learn from previous experiences and
previous mistakes. Even better, one should learn from others’ experiences and
mistakes. In software development, we have been very good at adapting knowledge from
other industries. This has been especially the case with the manufacturing
industry. From Taylorism to the more recent influences of Lean thinking, software development theories and practices have borrowed a lot from the manufacturing
industry.
Having said that, we need to be very aware of the
differences between manufacturing and software development. The former typically
deals with repeatable processes, while the latter is empirical.
In manufacturing, a repeatable process converts
consistent inputs into consistent outputs. Repeatable means that the conversion
of inputs to outputs can be replicated with little variation. In repeatable
process, a small variation of inputs typically translates to a small variation
of the outputs. But this is not the case with software development.
Software development is not a highly predictable and
repeatable activity. Software development is really about creation. The software creation process has too much complexity and variability to be treated the same
way as manufacturing; software creation is an empirical activity.
The New Oxford American Dictionary :
em·pir·i·cal adj. based on, concerned with, or
verifiable by observation or experience rather than theory or pure logic:
In manufacturing, a great deal of work is about
putting pieces together to build a specific product. In contrast, with software development these pieces are often created, re-created, or customized every
time. The manufacturing discipline and its pieces of work are more mature,
stable and well understood than the software discipline, and its pieces of work.