Darwinian software development
January 21, 2009
Sitting in a warm bath this morning, enjoying the peace before the storm, I came to realize a striking thing: software development goes very much like the law of the jungle. To survive in a changing ecosystem, software either mutates or is replaced. It has a darwinian growth.
Consider the ecosystem of a program as made of its running environment: software, hardware and fleshware, both users and developers, the features it must implement to fill its function, the extra features that make it more likable than other similar programs and the features it will have to implement in the future to meet emerging user needs.
Like a real ecosystem, a software ecosystem can remain unchanged for years. The business logic is well defined and users don't need to change the way they do whatever their business is. The volume of work remains constant. The developer in charge of maintenance gets acne upon hearing the word "refactoring". And so on. No change in the ecosystem allows for no change in the software. And that's fine.
But more often than not, software ecosystems are highly changing environments. Developers come and go and have very different opinions on how things should be implemented. The business evolves and requires new ways of working and thinking, and a brand new software logic. The volume of data to process grows and grows. A generation of new developers comes around and trashes the code beyond recognition (wow, we even have the equivalent of real-life cancer in this ecosystem!). All these natural events have one of two consequences on a program: either the program evolves or it dies. Much like a living organism :)
Ok, program evolution does not (hopefully) come from random code mutation. A developer is normally to blame. But this kind of controlled mutation is just a variant of the darwinian one, except more purposeful and efficient. In the end, the ecosystem still decides whether to keep the program alive or let it rest in peace. And how many time haven't we seen developers struggling to keep some code alive only to be beaten out by a competing program that just does the right things better. Programs rise and fall. Developers move on.
Considering this setup, no wonder that programs show signs of organic growth! Code evolve under the same darwinian rules as all things alive!
And developers are to programs what random mutations are to living beings. Great. A real kick to my self-esteem.
Consider the ecosystem of a program as made of its running environment: software, hardware and fleshware, both users and developers, the features it must implement to fill its function, the extra features that make it more likable than other similar programs and the features it will have to implement in the future to meet emerging user needs.
Like a real ecosystem, a software ecosystem can remain unchanged for years. The business logic is well defined and users don't need to change the way they do whatever their business is. The volume of work remains constant. The developer in charge of maintenance gets acne upon hearing the word "refactoring". And so on. No change in the ecosystem allows for no change in the software. And that's fine.
But more often than not, software ecosystems are highly changing environments. Developers come and go and have very different opinions on how things should be implemented. The business evolves and requires new ways of working and thinking, and a brand new software logic. The volume of data to process grows and grows. A generation of new developers comes around and trashes the code beyond recognition (wow, we even have the equivalent of real-life cancer in this ecosystem!). All these natural events have one of two consequences on a program: either the program evolves or it dies. Much like a living organism :)
Ok, program evolution does not (hopefully) come from random code mutation. A developer is normally to blame. But this kind of controlled mutation is just a variant of the darwinian one, except more purposeful and efficient. In the end, the ecosystem still decides whether to keep the program alive or let it rest in peace. And how many time haven't we seen developers struggling to keep some code alive only to be beaten out by a competing program that just does the right things better. Programs rise and fall. Developers move on.
Considering this setup, no wonder that programs show signs of organic growth! Code evolve under the same darwinian rules as all things alive!
And developers are to programs what random mutations are to living beings. Great. A real kick to my self-esteem.