Evolution and Agile
Evolution is devoid of foresight. It has neither a strategy nor a plan. It is impossible to predict the next steps of the evolutionary process, not to say about preparing a more or less accurate development plan similar to the evolutionary one. If we try to guess the original intention and realize the true goal to build a logical chain that leads to the current reality, that’s the point where the false reasoning comes up. And that’s all to answer irrational questions, which simply should not be raised in general: about the sense of life and the purpose of existence.
Evolution is completely indifferent to the complexity obtained. Take, for example, a platypus. A poisonous waterfowl mammal that is close to reptiles by a number of attributes. It has a developed electroreception, lays eggs, is completely deprived of teeth. Platypus is an excellent example of a designed system, where each subsequent change was intended to meet immediate needs instead of following a clearly structured long-term plan. Nevertheless, as we can see, platypuses live and feel quite good.
Evolution doesn’t care about inconvenience if the main function is performed. The giraffe was created with a long neck not in vain — it helps the animal to interact optimally with tall trees. But the trouble is that when the giraffe puts his head down, the pressure in his head goes off scale, so the giraffe has the fifth valve in its heart that helps to control the pressure in the head when it is lowered.
Evolution is not engaged in optimization. Ancient fish had a nerve connecting the brain with the gills. It passed by the heart, located at the bottom part of the fish, near the head. Then, after the consistent development of all animals, the neck appeared, and the heart got into the chest. Nature can not just take and rebuild nerves in a new, optimal way, therefore, in animals, this nerve moves from the head deep into the body, makes a loop around the aorta, and returns back into the neck to “gills” evolved into the vocal chords. As a result, the nerve makes a hefty detour due to backward compatibility with the architecture of prehistoric fish.
Evolution is workable. The diversity of species and the complexity of each individual make this clear. It does not matter how much an organism is adapted to the environment. It is important how much this organism surpasses others.
Evolution ignores the extinction of individual species. On average, 40 species per day are disappearing and this is normal. The extinction of species is the very mechanism of regulation and management that is successfully used.
You probably understand that speaking of evolution, we analogize it to software development. And not some kind of random development process, but development based on a flexible methodology.
“Agile” is a huge self-deception in the development of products. It is incredibly useful for the total mass of applications and solutions on the market, but it is also catastrophically dangerous for a single product. The most successful solutions will survive, unadapted ones — will die out. Product development on this methodology will mean accepting all evolutionary flaws and problems in order to find an optimal solution on the market as a whole, and not for a specific product. And whether this product will survive or not — nobody cares.
Let’s imagine, that someone has a fatal hereditary disease that reveals itself in middle age. And, at first sight, struggle for life of this person is meaningless — his or her survival and offspring guarantee the same problems in future generations. If we dig a little bit deeper, we can say: the very presence of descendants makes it clear that from the point of view of evolution this person is quite eligible. After all, if you can have offspring, do it. As a result, having minor for the main functionality flaws, the individual still remains competitive. An application that performs the primary function will remain competitive even in spite of the awful design or the leaky and inelegant extra functionality. And no Agile is a hindrance for that. Thoroughly distributing such an application on user devices, you can achieve that functionality will be copied by other applications. And then we will get pdf-format, “OpenOffice” and the “super” key in Ubuntu.
All of the above can be summarized by several theses.
Copying the functionality of other applications is acceptable. Only you need to copy it competently. Remember the joke about two designers of Samsung and one of iPhone and look at the range of Samsung phone models now — they are quite independent.
Listening carefully to users and giving them what they ask is bad. Stochastic development can be useful only if there is no idea what is being developed at all. The main thing to remember is that you can get a platypus or giraffe as a result when you need a beaver or a horse.
An existence a final plan for the application is good. Even if it is changed a thousand times. Adherence to such a plan is doubly good. Even if you know that it will be changed a thousand times.
Rewriting functionality from scratch may be very useful. Sometimes. Just do not use this rule everywhere for any piece of bad-smelling code. But you should not neglect this way of development either.
Take care of yourself and develop more good products!
Originally published at riter.co on September 20, 2018.
What to read next: