Ideas in Software Development: Revolution vs. Evolution. Part 1.
Sep 22nd, 2008 | Concepts, Process
What does produce better ideas in software development – revolution or evolution? Revolution is a rapid triumph of the new ideas and breaking open of the old concepts. Evolution is the process of small frequent changes to improve and adapt to environment. The main difference – revolution replaces old ideas with the new promising unproven ideas, evolution gradually and continuously improves existing working ideas.
We often face this dilemma in software development – should we enhance existing features and improve the ways we work or should we instead come up with something radical and revolutionary.
Revolution!
Could we have our modern cars if people concentrated on improving horses only? Jet planes, Apple iPhone and Quantum Mechanics are products of revolutionary ideas, not improvements of old. Our intellectual creativity and brilliant unexpected ideas are the spark plug for our progress and domination on this planet. This is unique and most beneficial human trait. Probably computers will never become truly intelligent, because they cannot create new revolutionary ideas and can only use logical reasoning based on initial programmed set of ideas (see Gödel Incompleteness Theorem).
The best revolutionary (disruptive) ideas give you enormous advantage over competitors. You move to the new unsettled territory with the new framework of ideas, leaving far behind people with old ideas . Incremental evolutionary changes will not allow you to change situation fast and overhaul hindering ideas.
Computer mouse, World Wide Web and MapReduce are the outcomes of revolutionary ideas. Google innovative ideas enable it domination in search.
Revolution is the fastest way to move forward, but outcome is very dependent on the quality of ideas.
Revolutions could be risky and even dangerous. Great revolutionary ideas will move us to a much better place, bad revolutionary ideas will throw us to the hell. Revolutionary ideas could be just unreal fantasies. The big leap forward doesn’t use invaluable feedback from the environment and learning from own results – there is no much time to correct something in the jump. These ideas are pushed by strong individuals, whose energy and conviction could blind rational and objective minds and lead to authoritarianism and destruction.
Finally, revolution cause instability, resistance and uncertainty that have negative impact on the system and team dynamic for some time.
Revolution is the matter of chance, there are so many things should come together right for successful revolution even if it is based on the great ideas. And it is really difficult to constantly and reliably come up with revolutionary ideas.
Or Evolution?
We, humans, are the product of evolution and I think it is a strong enough evidence that evolution works. Evolution introduce small incremental changes, improve beneficial and weed out harmful traits in interaction with the environment. Highly fit, adaptive and efficient solutions come as a result.
Evolution’s strength is reliable, systematic and effective mechanism to improve and advance in the complex and unpredictable world.
Retrospectve is evolutionary mechanism for improving agile teams work. Refactoring and eliminating of code smells is mechanism for improving the code. User focus groups and marketing research are the mechanisms for improving product ideas.
We cannot decline the fact that evolution is creative too, but in another way than revolution. Evolution could create completely new solutions in the long run by selecting, improving, and optimizing existing traits. Biological evolution provides some examples:
- Creating global solutions from optimization of local. The first hard mineralised structures to evolve in our ancestors were the teeth of early fishes known as conodonts. Once the ability to form hard hydroxyapatite had evolved, it could be exploited elsewhere in the body and have been the basis of the bony skeletons of all vertebrates [link].
- Emergence of the new features. Our mind is emergent result of the mammals neocortex development for better evaluation of probabilities and predicting the future. The lobed fins of early fish have turned into structures as diverse as wings, fins, hoofs and hands.
- Repurposing – Reptilian jaw bones turned into mammalian ear bones, without the loss of the jaw. The neural circuitry that allows us to make fine limb movements have been adapted to produce speech as well.
It is similar in software – new ideas come up when we fight for optimization, refactoring produces new better components and we reuse well crafted libraries for the new unforeseen tasks.
There is a limit for evolution creativity – solutions should have immediate practical purpose. Some ideas could be never reached with incremental improvements. For example, two-way radio won’t be developed evolutionary as one-way radio is useless, improvements of the best horse breeds will never lead to the powerful cars and improvements of propeller planes will not lead to the jet planes. These breakthroughs need revolutionary ideas.
Evolution main deficiency is slowness. Modern businesses often don’t have time for many improvement cycles – they want results now. They are willing to risk, speculate and go with revolutionary ideas than patiently wait for evolution.
Another reason for preferring revolution over evolution is the scale of necessary changes and seriousness of the problem – sometimes it is more effective to implement new ideas than evolve old ones.
What is better?
Dear readers, what do you think is better – revolution or evolution? Is it possible to combine both? Microsoft, Google, Yahoo, Facebook, Apple – which companies are revolutionary and which are evolutionary? I’ll continue topic about revolutionary and evolutionary ideas in the next post.
How about a combined approach?
I can rely on some old, well-tested methods that are guaranteed to bring food on the table. At the same time, I can run another thread which explores an entirely new realm.
A person cannot do just _one_ thing, we have to switch tasks from time to time, in order to not get bored.
That’s why I don’t see why revolution and evolution should be mutually exclusive.
I must also say that revolution doesn’t have to be that expansive (in terms of how things get if you’re not lucky). Every revolution is a sum or evolutionary processes, isn’t it? All you need to do is take breaks every now and then, and evaluate your current status, see how things have changed since the last assessment, figure out what the risks are, think about ways to deal with them.
A revolution in technology can end in a disaster only if you haven’t done enough testing or planning.