Now, I don't know about you, but after you have had your head around factories and modelling for a while, especially if designing features and tools for them, you would have encountered this term 'meta' a lot. And if so, then you have bound to have come undone by it in even the most harmless discussions.

If this is not you - stop right here, the follow discussion is way below your skill level of mental dexterity.

One of the things I find quite amusing, and of course, quite frustrating, all at the same time, when using this term, is that it's real easy to get caught talking at the 'wrong meta level'. Which, I have to admit I've been caught at on many occasions, much to my chagrin. Often, I don't realise this until it's too late, the conversation has ended and I realise that I failed to get my point across, because I was talking on the wrong meta-level. (Most of these discussions are over a phone line, so I don't really get a chance to back-peddle and try again). – lucky you!

The real problem here, of course, is that each meta-level can be so easily confused with the next, especially when you are more than one level in. Often, the concepts at each level are the same, and even with similar naming. When you get caught out here, it s real hard to recover!! Especially, if your audience requires you to accurately and precisely define the meta-level you are at, consistently and verbosely throughout the conversation. And fair enough right? When you are discussing complex abstract thoughts and ideas, it is very important everyone is on the same page, and at the right meta-level.

I can do this of course (in a pinch), it takes determination and serious concentration to survive the conversation, but often when I finally get to the right meta-level, my point is completely lost in the journey. So, it's no-one's fault but my own. I am actively working on it, but I just know others like me are going to struggle with the same thing in this space.

So what are meta-levels?

I'll give you a practical, visual example. I'll turn to DSL modelling since it's getting pretty popular in this space, and many people familiar with domain specific languages and their visual representation.

So, below is a model of something - in this case a layered architecture. Predictably, it contains the components such as 'Service Interfaces', 'Business Logic Components' and 'Data Access Components', each with a defined relationship to each other.

Below is the meta-model of that architecture. Each concept is a 'domain class' which represents the components above, each with define meta-data properties. It describes the domain classes, their relationships and data associated to them. Basically, you can think of this as the schema of the model you see above.

Now, below is the meta-meta-model (care of the DSL Toolkit team). It describes the 'concepts' and relationships of those concepts above and the data that can be associated to them. Again, you can think of this as the schema of the meta-model above.

When discussing meta-models at different levels and finding your starting point, it's often easier to guide someone to a place in the 'meta'-hierarchy, than it is to tell them where you are in the hierarchy at any point in time.

"I am at the meta-meta-meta model of the schema, oh no, I meant the meta-meta-schema level, oh hang-on that's wrong, I am at the model of the meta-schema - we do have one of those don't we? You know - the model that describes the meta-model of the model!?!"

If you lose your compass, you are basically poked, and have to navigate down the hierarchy again!

Well, that's not entirely true for everyone of course. For example, most of those who stopped reading at the first comment of this conversation could be extremely well skilled at this art, and they bedazzle us with their prowess in this area, so much so that when they say "…in the meta-meta-schema we see that the types are…." – mere mortals like me are still walking the imaginary hierarchy trying to figure out which level we are, visualising what model that is. Meanwhile, they have finished the conversation making some profound point that we missed completely! – "could you repeat that again?"

Let's do a test. In the context of factories: (for want of a better example)

Imagine you were designing a new type in the factory schema (i.e. the types (shapes) in this diagram) and you wanted to add a new type to this schema, call it 'Artefact' for arguments sake.

Q. Which meta-level of the factory schema would you say you need to add this new type?

A.1. "You might say, we need a new type at the factory meta-schema level",

A.2. "You might say, we need a new type at the meta-meta-schema of the factory schema?"

A.3. "You might say we need a new meta-type in the factory meta-schema?"

A.4. "All of the above?"

Well, congratulations, you are smarter than me! Because I still can't figure out if any of them is right!