Designing the User Experience

So far, I have covered two important aspects of software design that will impact how this software will evolve into the future. A brief recap: Evolvability. When developing software, you are fighting a battle against the combinatorial mathematics that govern the complexity of any respectably sized software project. There are simply a huge number of…


Stealing Ideas: External Evolutionary Events and API Mimicry

Last month, we released the .NET Framework 2.0. However, a significant number of organizations are not going to immediately migrate to the new platform and tools. While it’s not that difficult to see the benefits of using the new platform, most organizations are very careful and deliberate about changing their platform. That leaves these organizations…


What is the sweet spot for genetic programming?

Alex Barnett posted a comment in my last post referencing a video on the University of Washington website: This is a worthwhile video, and I wanted to comment on some of the contents. Of course, I freely admit my bias towards some of his opinions, because he seems to share my opinion that Richard…


Genetic Programming and Units of Selection

Genetic Programming is a fascinating field of study. Essentially, this is the study of software that writes software, selecting the software it has written that exhibits the highest degree of fitness, and allowing this software to continue to evolve over time. In essence, what Genetic Programming is trying to do is find some route to…


Developing Less Complex Software: Gadgets and Coding for Fun

In my last entry, I discussed complexity in evolution, and how the most highly complex software is, in fact, the edge case. Far more software is less complex; more people have written a “Hello World” program than have written an application of the complexity of, say, Microsoft BizTalk Server. This begs the question – how…


Evolution, Complexity, and Software Platforms

Webster’s Dictionary defines evolution as, “a process of continuous change from a lower, simpler, or worse to a higher, more complex, or better state.” I really hate pretty much every speech or writing which starts with the dictionary definition of something. Certainly it is a starting point, but it is probably the least creative of…


Defining Units of Selection

In my previous posts, I discussed the concepts of non-random selection and arms races. With this understanding in mind, we can start to see a very important concept arise.   Accurately defining the unit of selection is absolutely critical to effectively evolving your software.   It is all too easy to introduce pleiotropy into software….


Selection and Evolutionary Arms Races

Selection is the basis by which evolution can develop the enormously complicated systems that exist today. The underlying principal is non-random selection of random mutations. In any organism, there is some degree of genetic drift. Despite the built-in error correction of DNA replication, mutations still occur, and they occur randomly. I should be explicit here…


Evolution vs. Revolution

In my previous posts, I have been arguing the point that throwing away source code and starting over from scratch is a notably bad idea in general. In this, I am echoing what Joel Spolsky says so eloquently in his post Things You Should Never Do. (Incidentally, I just observed the zero-filled naming convention that…


Evolving an Imperfect Design

I continue to be surprised by suggestions that an entire body of code – one which has proven its ability to survive in the software ecosystem, should be completely disposed of and replaced with new, less “buggy” code. I read another treatise on this recently, and I still fail to understand the logic. Why would…