20 years ago Richard Dawkins done a documentary based around his book "the blind watch maker". In this documentary he shows how understanding evolutionary theory, The theory that optimal designs can be achieved by small variations in every generation with beneficial variations being retained, Can help us design computer programs that use "evolutionary strategy" to produce the most optimal and efficient designs. At the beginning of the clip he shows how "evolutionary strategy" can produce an aerofoil with least drag in only 30 generations on a system with nearly 350,000,000 possible shapes. In another remarkable demonstration he shows how evolutionary strategy can design the optimal pipe system which is remarkably similar to what natural evolution produced in the artery supplying blood to a dogs large intestine. The shape is almost identical, Even though the process used was blind and unconscious and simply followed two rules - 1) change every generation slightly 2) retain beneficial changes - Two things which we know occur in nature. http://www.youtube.com/watch?v=v2etmGcRl1c
The software development community has moving away from a design first approach. In a way, a lot of good open source projects sort of "evolve" rather than get designed. Designing complex things ahead of time, like life, or even software can paint you into a lot of corners that are difficult to get out of. It can also add a lot of unnecessary bloat and unneeded complexity. A methodology that has been gaining popularity over the last few years is Agile Development or Extreme Programming(which is a type of Agile Development). The analogy between Extreme Programming(XP) and evolution isn't a perfect one, but it's a lot more like evolution than software development used to be. With XP, you code, test, code, test, code and test. You only add functionality as you need it, and you actually write your tests firsts so you never really get bugs, and you release early and often; it is a highly iterative process, kind of like evolution on steroids and in fast forward. The main flaw in the analogy that I see between this and how life evolves is that with life, the tests aren't "written" first. A new feature is added on or taken away and then it is tested by the rigors of the environment to see if it should stay; this may even be fatal to the species. This is a paper that I've also found interesting. I found it a year or so ago while searching for "organic software design" or something like that. http://www.cdegroot.com/articles/1999-organic-software/