As software become more complex it increasingly gains biological features, and we increasingly need to rethink the way we consider it.
Complexity is the logical consequence of our wish to always delegate more work to computers. Historically computers did payroll, simply computing the amount of money to give to each employee given its rate and working time. It was easy to tell the machine to get each value, then multiply and print the result.
Now we have networks of software agents that interact in ways we can hardly represent, even inside a piece of software we have mecanisms like auto retry on failure that ultimately run their own life. In financial pricing systems the computations may involve so many calculation conventions mixed together (day counts, interest rate fixing, calendar folk…) that we can hardly tell what particular formula is used for a given instrument, since the overal formula is highly flexible. Sure each simple part was told step by step what to do, but as we consider the entire system, it nearly becomes a new kind of living creature !
If you just put many pieces that work together in the same box, then you get complexity since our limited brain cannot see, nor think, about each piece at the same time. So we say the system is complex, which also means: “I cannot understand it completely at a time”.
Like biological entities, softwares are increasingly made of many simple parts, similar to cells, that together create a useful and complex system with a purpose. Moreover the overal system can adapt to its changing environment (I’m not talking about mutation, but just about the way insects can cope with many various situations, that is similar to how modern software can cope with a wide variety of data, data patterns, incidents…).
Another essential quality that software increasingly share with biological creatures, e-g ants or bees, is how an overal ability, or intelligence, is emerging from a group of simple, dumb parts interacting together. Simple cells together become an insect that can move, eat, follow its mates. Simple insects together become a collective creature that can hunt bigger animals, survive floods or other insects attacks. Similarly, simple objects group together to compose a complex application.
In complex animals like humans, in our brains simple neurons together become brain functions that are capable of recognising faces, symbols, sounds. Simple brain functions together become our mind that is capable of reasoning, communicate with symbols… and have emotions ! Such comparision is not incidental, searches have proven that human mind is not One mind, but actually a group of simpler mind parts working together in sync, this explains why we may change our mind depending on which part is talking louder than the others, by the way !
Comparing all that to most complex software does make sense. After all, building complex software is indeed an attempt to re-create artifical brains to work on our behalf. And to build software we put together simple parts into modules that we put together into more complex modules, and so forth until it can solve the business problem it is expected to solve. Will this help me in my everyday work ? Sure not yet.