Software Cells #F: Adding Culture to the Software Universe - Making the Platform Visible in the Holarchy
In the meantime I had the chance to apply the Software Universe as well as Software Cells to customer problems and wrote an article on Software Cells. Also a friend working at BEA used it to simplify his message for their ESB Quicksilver product.
I'm happy to report, Software Universe/Cells lived up to what I expected in term of making software design easier. But I also realized, some refinements to the model are in order.
The first refinement I´d like to introduce is a new holon level for the platform software is build/running on. I call it the Culture holon. A Culture holon consist of all the Application holons running on the same platform within a Solution. "Culture" seems to be an appropriate term for this kind of entity, since a platform like .NET or Java defines a set of rules and technologies for software running on them, like a social culture does for the individuals living in it.
A second change you can see in the above picture is I renamed the Solution level to Product. The word "solution" simply has such a general meaning, it can cause confusion. You need to find solutions to all sorts of problems on all holon levels, so it seems better to not assign the term to a holon level.
So when you develop software for a customer, you develop a Product. Sounds reasonable, doesn´t it :-)
This Product in turn consists of one or many Cultures, i.e. pieces of software running on different platforms, e.g. a WinForms frontend talking to Oracle running on Linux.
Each Culture is made up of one or more Applications, i.e. processes running Hosts as containers for Components.
And here comes the third change to the holarchy: I dropped the Assembly level. Components consist of Types. That´s it. No intermediate Assembly level anymore. Why? Because assemblies are a platform dependent artifact and don´t really add any "value" to the holarchy. If a developer decides to implement a Component as one or more assemblies is a neglectable detail, I´d say.
Components contain Types, they draw a boundary around types solving a specific sub-problem.
So, why are Cultures important? Because they describe another change in communication between holons. In addition to stack based and stream based communication in general there is platform specific and platform independent communication sitting on top of them! Cultures in the holarchy make this explicit - that´s important. Platform independent communication or communication crossing platform boundaries requires different technologies/knowledge than platform specific communication. In addition different platforms offer different technological options, e.g. Hosts.
With Cultures introduced to the Software Universe, you can´t forget to take platforms into account when thinking about software, you can´t forget to make conscious decisions about the contracts visible to software on other platforms. I think, that´s expressiveness a general model for software needs.