Its an interesting perspective to consider humans, their means of interaction with others including other humans, animals, machines, their growth, evolution, human anatomy among others as a software architecture reference point.
Given a scenario for high load data transactions that come in, how would a typical single human handle it? How would many humans handle it? In case of multiple humans interacting to achieve a goal, how do they interact and how do they establish trust (also read tree-of-trust).
Would the human in concern work on multiple tasks in a round-robin fashion? Would the human sub-contract the work or would he just say he cant do it? What happens as the human matures – is s/he in a better shape to work on this task given the maturity and experience and how ? How do we mimic experience – is it all the time about machine learning?
Can we apply the human interaction and behaviours in a strange crowd and the resulting possible formation of a team into software components that could discover, trust and perform as a single component all dynamically without any system/person intervention? Would the software need “intelligence” to achieve this?
Can we apply principles of healing (physical, psychological) into software’s that report issues in their health – more than bug fixing, can we heal/fix/alter the behaviours of software components based on its interaction with other software components over the years ? Can we apply mentoring and counselling theories into software design?
On a related note, the human body itself provides ample opportunity as a reference point for a software component. There is enough structures already present in a human body that can be mimicked into a single software component.
We could treat the electric impulses within nerves as messages in a integration project or as packets in a tcp/ip transaction as the case may be. Can we include auto-heal modules into software components similar to the way the skin auto-heals (kinda) in case of a bruise/burn. Can we patch systems with antibody software components to further help the module to recover better and sooner? Can we adapt the techniques of ‘sense’ such as touch, sight etc such that the software component can adapt based on the environment it lives in. In a queue based integration, this could be about sensing the network load, message load and perhaps moving itself to a different machine.
Do we also worry about mutations of software’s ? Is reincarnation a versioning mechanism or is it about rewriting completely?
Is the spine analogous to the ESB? Is the food breakdown procedure and waste disposal a pipeline pattern with unused bytes of data after a filter a software component waste?
Is there a software design problem that this reference model cannot assist with ?