Stuart Kauffman's "The Origins of Order: Self-Organization and Selection in Evolution" (ISBN 0195079515
) is a big thick book (709 pages) saying some fairly new things about evolution. If you want a more readable (if somewhat patronizing) shorter book, there's his "At Home in the Universe: The Search for Laws of Self-Organization and Complexity" (ISBN 0195111303
But relevant to design is the idea of autocatalytic sets. Basically, if you pile together enough components and enough random interconnections, you'll form Something That Works. For instance, a collection of enzymes capable of refreshing all its members by catalyzing a set of reactions starting from some food set. That's an "autocatalytic set."
Of course, this is the the opposite of minimalism (as implied in PhysicalCuesInSoftwareDevelopment
). Kauffman suggests that instead of starting with a single short RNA molecule getting copied and then elaborated as time went on, evolution started with a complicated and random, but self-supporting soup of molecules, and simplicity (as well as RNA/DNA-style reproduction) came later. And even now, the DNA programs we see don't follow what we would call elegant design.
Near a complex design, there are lots of random but viable variations, so the thing is robust and easier to evolve in a random way. Simple systems are fragile to random modifications.
What's this have to do with software!? Well, machine language, self-modifying code and CISC came before object-orientation and RISC. Also, maybe complexity-first models creativity and brainstorming better than narrowing on a targeted design. And you could look at innovation in a controlled vs a wild-west economy.
The fact that complexity makes for better random evolvability, but (the right kind of) simplicity makes for better conscious evolvability, is easy to say but still mysterious and worth keeping in mind. For instance, have you ever worked on a product that had a feature that became a new product and the new life of the company?