What´s software anyway? Code, software is code, right? Well, I´d say, software is more than that. And to realize that is important for the whole software production process.
Lets step back and take the big picture into view: Software is an entity "sitting" in an environment; you could even say, it´s living in an environment, because it´s struggling to survive. Software comes into existence and from then on is trying be liked by users and customers, to be kept alive by them through usage. As long as it is used, it lives. As soon as users or customers start favoring another software for whatever reason, it runs the danger to be dumped, i.e. to be killed. So, I guess we can say, software has to be fit, to survive.
But what does "fittness" mean? It´s the right balance between efficiency and flexibility. If an organism would only strive for efficiency, it can easily be killed, if the environment changes. If, on the other hand, it strives for flexibility, it can be killed because it´s not fast enough or has a too weak armor, meaning it´s lacking efficiency with regard to a particular survival relevant aspect.
During a single livetime, an organisms efficiency-flexibility-balance is pretty much set. However it´s highly variable over the lifetime of a whole species. But how does a species attain this variability, how can it adapt? By constantly re-creating itself as a continuous stream of new "versions". A species thus is surviving through autopoiesis.
Back to software: If software is struggling to survive like any organisms, can´t we then also view it as an organism? What about MS-Word and OpenOffice and WordPerfect and Wordstar as specieses with particular versions as instances or organisms? Well, as the extinction of Wordstar and the rivalry between MS-Word and OpenOffice show, it´s a jungle out there and not every software or software species survives indefinitely. The better always is the enemy of the good.
But how could software be capable of autopoiesis? If software equals code, then there is no self re-creation. Software does not modify itself, it cannot evolve itself. (Lets leave genetic programming aside for the moment ;-)
So what´s wrong? I´d say, our picture of software=code is wrong. Software is not just code. There´s more to software than code, otherwise there would be no way to evolve.
I think we need to switch from software=code to software=code+developer. We need to take the developer (or development team) into the picture to arrive at autopoietic systems which can evolve in the face of an ever hostile environment.
The whole, software, consists of two inseparable parts. And only if the whole finds a balance between efficiency and flexibility it is going to survive.
That means, fiddling with properties and qualities of either part always affects the whole. That means, whenever talking about functional or non-functional requirements, the whole has to be taken into account. How does tweaking performance affect the whole´s ability to survive? How does neglecting architecture affect the whole´s ability to survive? How does testing, documentation, GUI-design, code readability etc. affect the whole´s ability to survive?
High performance and scaleability are efficiency concerns; good design and coding standards on the other hand support flexibility. Tight schedules: efficiency. Collective code ownership: flexibility. O/R Mapper: flexibility. Socket programming: efficiency.
My conclusion from this new view on software: We need to step back more often, when planning a software project and take into account not only code, but the union of code and developer. We need to take into account the whole of software when talking about optimizations, schedule, design, documentation, project organization etc.
Software is more than code!
Current data processing is suffering from the bane of the many data silos. Data is locked up in a hierarchy of containers and can hardly be connected in new ways. Once data has been grouped into relational database tables or object oriented classes, it’s difficult to regroup it or set up new relations. Regrouping would either break existing code or mean duplication of data. New relations would entail schema changes and be limited to connections between containers on only a few levels of abstraction. Products like Microsoft’s WinFS, dynamic languages and database refactoring tools are trying to overcome this lamentable state of data processing while having their own perspective on it.
This, of course, does not mean there is no value in current concepts and technologies any more. Relational databases and object oriented languages are very useful and will continue to be so for a long time. However, the general need to go beyond them to solve the data silo problem should be obvious.
At the heart of the data silo problem are the basic and mostly unquestioned concepts of data container and container reference.
For those of you who followed my musings on associative information processing or processing data by getting rid of data, here´s a new stab at explaining a completely different basic way of dealing with data. The above is an excerpt from a new paper I wrote on a concept called Pile (www.pilesys.com), which I find quite interesting (although still being in its infancy).
For all those interested in the slides of the Microsoft webcasts I did yesterday and today on my architectural model for software called "Software Universe" and "Software Cells", you can download them here and here as PDF documents.
And if you´ve any questions regarding the application of "Software Cells" in your projects... don´t hesitate to contact me via email (see www.ralfw.de) or via my blog.
Die dotnetpro hat auf Bitten von Clemens "unser Mannes bei Microsoft" Vasters :-), der in Redmond für die WCF Community zuständig ist, die aktuelle Episode meiner Video-Entwicklerserie dotnetpro.tv online gestellt: Christian Weyer führt darin ausführlich und anschaulich und wie immer eloquent kurzweilig in die Grundlagen von WCF ein und benutzt sogar bis dato nie gesehene, also quasi einzigartige Darstellungen am Flipchart :-)
Hier gehts zum streaming video...