In Praise of Yeast: [...] One of the best studied of all genetic circuits in the world is the one yeast uses to feed on a sugar called galactose. [...] So how did this elegant circuit evolve? (Via The Loom.)
To a programmer, this story shows a wonderful example of refactoring where one class (one gene) that has grown to do double duty is broken into two separate classes (to copies of the gene) that can then be changed to specialize on one task alone. The more I read about evo-devo, the more I notice uncanny parallels with the processes in large, long-lived software projects in which change is highly constrained by history and context. The main difference is that the programmers who change the code believe that the changes they make direct the code base towards increased fitness, whereas random mutations don't need to bother with the pretense.