Skip to content

Evolutionary Biology and Software Engineering

ADMIN | 23-11-2010

In this article, I presented the idea that the functions within a large commercial software package form an ecosystem.

Hexagon pattern 1

For my first blog post, I’ve decided to cheat. About a year ago, I wrote an article, ACIS as an Ecosystem, for our company newsletter. In this article, I presented the idea that “the functions within a large commercial software package form an ecosystem, in the technical sense of a collection of evolving actors which interact among themselves." At the time, I wanted to go into more detail about the evolution theory behind this statement (because it’s both rigorous and really cool), but was limited by space. This blog entry allows me to indulge myself by expanding on this article.

The story begins in Auckland, New Zealand in 1995, where my girlfriend and I were stranded when our luggage (and her passport) was stolen after a physics conference. I was reading the chapter of The Selfish Gene where Richard Dawkins introduced the concept of memes. In the memes chapter, he describes the requirements for a set of actors to form an evolutionary system:

  1. There must be a system for duplicating actors.
  2. The duplication must not have 100% fidelity, i.e. “duplication with errors”
  3. There is some form of selection pressure on the actors.

This idea of abstract evolutionary systems blew my socks off; and it still does today. Dawkins used it to point out that ideas and ideologies (memes) evolve, but it can also be used to understand evolutionary systems as incredibly powerful (and counter-intuitive) optimization engines.

This is relevant to 3d development because the “functions” (actually, probably a smaller unit) in the source code control system of a large application obey the rules for an evolutionary system:

  1. A typical, morally just, way for a function to be duplicated is for it to be edited for a bugfix or enhancement. The new version of the function is a copy with less than 100% fidelity with respect to the original. A less morally just (but probably equally common :) way for a function to be duplicated is through cut and paste programming.
  2. Functions are usually changed when they’re copied.
  3. Bugfixes and enhancements provide selection pressure; old versions of functions are removed from the system and new ones introduced according to the pressures.

The second part of the story is described in more detail in the newsletter article. Basically, the inputs which are provided to a function are the outputs of other functions; the functions form an interrelated web. The reason that this is important is that the environment in which a function must operate is provided by the other functions in the application. If Function B is not robust against divide-by-zeros, and a change in Function A causes it to start supplying zero-values to B, then B’s environment has changed in a way that is likely to cause it to fail, which in turn will cause the A-B system to feel selection pressure when the bug reports start rolling in.

This is exactly analogous to a biological ecosystem. In a biological ecosystem, there are two broad categories of environmental influence which impinge upon a biological organism:

  1. Physical environment, which consists of non-biological influences such as temperature, rainfall, gravity, etc.
  2. Biological environment, which consists of other biological organisms such as grass, tigers, bacteria, etc.

If we think of biological actors as analogous to functions, then the biological environment is analogous to the web of functions. The physical environment, on the other hand, is analogous (I think) to the manner in which the application is run, i.e. the end users and the entire system of business practices which turn end-user feedback into changes to the code. In software, it is the physical environment analogue which supplies the selection pressure to drive out bugs.

Why do I think this is important? Because I’m a firm believer in the principle that insight is important. As a physicist, I look for models that describe the physical world; it appears that the ecosystem model is a good one for describing large, widely deployed software systems.

Models are useful in two ways: they provide intuition and they provide analysis tools. For an intuition example, consider what happens when a penguin (adapted to cold, oceanic climates) is transported to the middle of the Sahara (hot desert). The penguin is hit with a huge set of stressors to which it is poorly adapted. The intuition here is that similar non-robustness can be expected when using software applications in new ways, such as porting operating systems to mobile devices. For an analysis example, consider the relative roles and merits of unit testing vs. design-by-contract methodologies for ensuring quality. I’m planning this for a future blog entry, so I’ll leave it as an exercise for the reader for now. I will say, however, that the ecosystem model indicates that low-probability configurations of inputs are important.

You might also like...

c138_2_cropped
3 Min read
3D ACIS
We often focus the success of new partners, showcasing how Spatial helped with bringing a new product to market. But...
Large Tolerant  Vertex
3 Min read
3D Software Development Kits
boolean operation Boolean operations on individual bodies are common functions in 3D modeling. While simple in concept,...
3 Min read
3D Software Development Kits
In much the same way as physical design has moved from paper 2D drawings to 3D models in software, so has analysis....
4 Min read
3D InterOp
Part and parcel with model-based engineering is model translation. Because the model is now the specification, accurate...
4 Min read
3D ACIS
We are moving things around in the office here at Spatial to accommodate some new people. As a result, our marketing...
2 Min read
3D ACIS
This article shares a simple architecture which can be used to capture meta-data about the use of ACIS APIs in your...
1 Min read
3D ACIS
How To Create an Ellipsoid using 3D ACIS The 3D analytics supported directly in 3D ACIS include: sphere, block,...
2 Min read
3D ACIS
Basically, there are two priorities when using a software component, particularly a 3D modeling kernel: Does it do what...
1 Min read
3D ACIS
A geometry kernel is a big thing. It’s a huge thing. Maybe even big enough to see from space. By most accounts, even...
1 Min read
3D ACIS
My comrades and I did a performance analysis of Intel’s Hyper Threading Technology (HTT), using thread-safe ACIS and...
3 Min read
3D ACIS
In earlier posts I’ve written a lot about the various approaches to multiprocessing and the potential benefits. What I...
2 Min read
3D ACIS
The challenges of a major software release are not unique to Spatial. And like other organizations, the launch process...
5 Min read
3D ACIS
We’ve known for a long time that the integrity of B-rep data plays a major role in the success of downstream modeling...
3 Min read
3D ACIS
Answer: when it’s a 'HappyPathPoint'.
1 Min read
3D ACIS
To finish up this series of posts; what Gregg's post described happened a few years ago. Since that first team room,...
4 Min read
3D ACIS
This post will discuss two aspects of my favorite programming language, C++:
2 Min read
3D ACIS
Way back in the Dark Ages of the mid-90s, I used to read a newsgroup called comp.lang.c++. You can tell this was the...
7 Min read
3D ACIS
Here’s a subject to which everyone can relate in one way or another: growable arrays. An array is a contiguous memory...