Time to get back to the themes from the post ‘More on that enterprise-architecture ‘help wanted’‘, with a focus on toolsets and metamodels.
The usual approach to toolsets – just about any kind of toolset, as far as I can tell – is to describe the overall context, knock up a metamodel, and then build a toolset that works with that metamodel.
That’s fine as long as we don’t need to use the content for anything else, in any other way, or (in all too many cases) in any other toolset. If we do need to do anything like that – and frankly, most of us do – well, then, we have a problem…
What we actually need is a toolset that can do any kind of modelling and simulation that we could possibly want. Given the nature of Reality Department, we’re not likely to get it… Oh well. But if we can’t have that One Toolset To Rule Them All, then perhaps a good second-best is a metamodel (or metametamodel, or whatever layer we need to go to) that underpins a file-format that can move anything that we need to share across all the disparate toolsets. And that, I believe, is doable. Hence this series of posts.
Let’s start right at the roots.
(And please watch for anything that I’ve missed, or that I seem to have got wrong – because that’s the way we’ll get this to work right, for everyone.)
Let’s start with the idea of a ‘thing’. This ‘thing’ could be or represent anything at all: an object, a piece of information, a perceived connection, an idea, a question, whatever. It’s just, well, something. Anything.
Given a collection of ‘things’, we then might want to describe perceived relationships between various of those ‘things’.
And we then might want to model those ‘things’ and relationships between ‘things’ in a structured or semi-structured way, to aid in sense-making and decision-making. (We then might also want to describe explicit viewpoints and views that determine the scope and role of models, as per IEEE1471 / ISO42010.)
This gives us the core of what we need to support here: entities (‘things’), relations, and model-types.
(I think that part is straightforward, but if not, please say so?)
Way back when, whilst we were designing an information-system for an aircraft tear-down, my colleague Graeme Burnett said that for anything of interest, anything in scope, we need to be able to ask of each ‘thing’:
- Tell me about yourself, and about what happens to you, with you, by you?
- Tell me what you’re associated with, and why?
Which in a sense leads us to the usual metamodel set, but with a few extra twists:
- entities and their attributes
- relationships and their attributes
- lifecycles and other types of change of entities
- flows and other types of change between entities
- questions about entities, relationships, attributes, flows, lifecycles and other changes
(What else needs to be added to this list? What have I missed so far?)
We need these items to be able to be portrayed in any representation (in both the visual sense and technical sense), including plain-text. This means that any representation needs to be separate from any entity or relationship or other item, yet needs to be associatable with it. In other words, we can’t link a metamodel rigidly with a notation, or vice versa, as with UML or BPMN or Archimate, for example – we must be able to re-use the same entities and relations and so on in multiple notations.
Some examples of how we might want to re-use the same entities might include:
- enterprise-architecture notation such as Archimate in Archi, or other notations such as UML, BPMN and so on
- enterprise-architecture metamodels such as in Troux Semantics
- systems models such as in Southbeach
- narrative questions such as in Southbeach MyCreativity
- context-maps such as in CMapTools
- social-networks for shared-concepts such as in Cohere
- personal sensemaking such as in Compendium
- support ‘barely repeatable processes’ such as in Thingamy
- partial-duplication for what-if experiments and for as-is versus to-be comparisons
- modelling of flows between entities
(Any other items that we ought to add to this list?)
As indicated in that list, we need to be able to support a wide variety of views and model-types. But the key point here is that there’s actually only one type of entity – or rather, every different entity is based on and resolves to the same core entity-type. The same applies to relationships: although there are many different apparent types, ultimately they all resolve back to the same core relationship-entity. That’s what would enable their portability between views, notations, model-types and applications.
This also implies that there’s no fundamental distinction between a ‘type’ and an ‘instance’. The only difference is that a type is instantiable, and an instance isn’t: we convert an instance to a type by making it instantiable, and we create an instance by making a non-instantiable copy of a type.
(Is there any part of the above that seems unworkable or doesn’t make sense?)
We need to be able to support several different levels of model-validation:
- free-form (no validation), as in Visio
- partial or variable validation, as in Archimate (or most forms of architecture-development)
- strict formal validation, as in BPMN to BPEL conversion
(Free-form and strict are relatively easy to implement; partial or variable validation can be a lot harder! Partial or variable-validation also means that we need to support null-entities or placeholders to indicate ‘dangling’ relations or items that have yet to be defined.)
We need to support to keep the information clean, including:
- explicit identifiers (distinct from editable names)
- standardised explicit change/lifecycle, as per CRUD or REST
- deduplication, merge and split
- change of base-type for entity or entity-instance
- resolve of dangling links (i.e. links where the ‘far-end’ entity has been deleted)
- entity owner(s) – or preferably a complete RACI set for each entity
(What have I missed here?)
If I’ve got this right – and I’ll admit it’s a big ‘if’ – then conceptually we need only one core entity-type, and one core-relation-type, to cover all potential uses.
If so, then that would open an enormous range of possibilities for enterprise-architecture and for many other disciplines as well.
There are a number of tweaks and tricks to make this work in practice – particularly the concept of ‘tags’, which I’ll explain in the next post, and likewise a fundamental reorientation of the relationship between entity-types, relation-types and model-types – but in essence that seems to be enough to get started.
Comments, anyone, please?