From time to time I hear people complain, that the Software Development industry is immature. Sometimes they even propose software development should be more like a factory, producing software on some kind of production chain, highly standardized, highly automated. They complain the level of reuse isn't high enough.
I certainly agree, that we have a lot of room for improvement. But the complaints as they are put forward are just proof of total ignorance about how software development works.
- Reuse in software development is incredibly high. Even If I don't count the operating system and the web (application) server, any serious software development project I was on reused about two orders of magnitude more software then they wrote. For those not so familiar with 'orders of magnitude': 99% of the code base is reused, only about 1% is actually written from scratch (actually it is probably much less). If you doubt my words, remove your local maven repository and see how much maven loads down from the Internet and compare that to the stuff you check out from SVN. The problem is: Reuse happens so fast and so frictionless nobody actually notices it. This is as if workers in a factory would just use a different paint and maybe a different brush in order to change the resulting product form an ipod to a car.
- Automation is extremely high. In the project I am on right now we build about 100 to 200 artifacts every workday. Fully automated. All we do is check in a couple of code changes and of goes our software factory and builds about a dozen different jar files. If you compare this to highly automated industries like car building, this is as if a single designer sketches a new car on his computer and factory starts spitting out that car within 5 minutes. Coding is designing software, the compiler is doing the building part.
So instead of talking s**t about automation and reuse, let us tackle the real challenges of software development: When every pixel the designer (i.e. coder) changes results in completely different behavior of the product, and when this product is delivered to the customer within days, often hours, there is a high risk of shipping bugs.
We don't need more automation. We don't need more reuse. We need better strategies for preventing and finding bugs. I take the automation and reuse any time, but the important stuff are the bugs.