• I think the Indy 500 analogy is flawed in that not all cars on the road are trying to win the Indy 500...

    There's a finite set of problems to solve with racing the Indy 500 - yes there are a lot of elements to consider but eventually the design is going to come to a point where it's as good as it can be. Application development is more like designing a car that can go anywhere and can do anything...

    You can streamline the development of applications to some degree, but there will always be a special requirement which doesn't quite fit the tools you have.

    Take this for example:

    Imagine that every time the Indy 500 came along, before it occurred the racing teams were told that there was going to be a change to the rules of the race. They were given the new rules - maybe there was going to be a set of spikes on the track that the car needed to cross every lap, or maybe the cars were not allowed to stop for new tyres/refuelling...

    Each team would come up with a different solution to the problem - it doesn't matter how standard the parts are, their guarantee of success is limited

    You can create parts which are reusable, but if those parts just won't fit a solution to a new problem then you are back to the drawing board. Yes some parts can be re-used, but you will almost always find a requirement which needs new designs.

    Let's just hope that every time someone asks you to design a car engine it's so that it can win the Indy 500!