Software Evolution Considered Harmful

There’s a common trope in CS education that goes something like this:
“All software evolves, so be prepared for it.”

Far be it from me to imply that one shouldn’t be able to respond to change; that’s not my intention. But the idea expressed above contains a flaw: software does not evolve.

Duh, John… everyone knows that software changes. Features creep. Scope broadens. New platforms and whizbangs are targeted. Get with it!

I concede the obvious: of course software changes. But repeat after me: software does not evolve. Because change != evolution.

Evolution is a blind, natural process; the result of random mutations in an organism. Now it may just so happen that the result of the mutation is beneficial to the reproductive success of the organism, meaning we’d expect to see creatures with such a trait outperform others without it. That’s how traits are selected for. In the overwhelming majority of cases, mutations are detrimental, and they don’t stick around for long (since there are many, many more ways of being dead than alive).

Now in order to say that software evolves, you’d have to accept that your development process goes something like this:
Developer opens a file at random, positions the cursor at random, punches a few keys at random. Developer then recompiles and sees what happens, hoping for the staggering luck that the resulting change actually does improve the software, and everybody loves it, so they buy it, and you’d expect to see more of it.

Okay, insert joke here about how your development process seems that way from time to time.

Jocularity aside, there’s more at issue here than a flawed analogy. Of more significance is the type of thinking it can engender. Nothing “just happens” in software. Whatever it is, somebody made it happen. Someone decided. They may very well have decided in error, but they decided. They decided “well, let’s just try and fit that feature in; it shouldn’t cause too many problems if it goes out only 70% tested… if it breaks, we’ll deal with it then.” Or they think “yeah, a talking paperclip… why not?” In other words, magical thinking. Don’t do that.

And CS departments should stop teaching that. Let them stress peopleware instead.

I know what it really is...

Intelligent Design

Not quite

I don't think that's quite it. You're ascribing "dumb luck" to a situation which is likely an assessment of business needs, goals, funding, etc.

It may seem random to outsiders and those not involved in the discussions, but - as John was pointing to - this is not a truly random process... as the definition of "evolution" requires.

Software Evolution

I aggree with Jonas. My English dictionary also contains definitions of "evolution" other than the biological one which is random and slow.

And indeed software evolves in more than one ways. Not only the code, the design and the feature set can evolve over time, but also our methodologies and technologies that we put to use do evolve. This is evident to anyone that has worked on a product that is 10 years old, weighing 2M LOC.

It is of primary importance that this technological evolution of such products is not left to chance, because the product will become a huge unmanageable mess, i.e. using MDAC 2.0 in one place, MDAC 2.5 in another, MDAC 2.8 SP1 someplace else, etc.
I think that teams that run such projects should take some time once every 2 years and bring the project up-to-date.


The fact that the program works is irrelevant.