December 3, 2010

Abstract and concrete architectures

Introduction

The topic of “abstract” vs “concrete” architecture seems increasingly popular, especially in relation to the ArchiMate language. Recently this topic came up in consulting assignments, teaching settings, and the linkedIn group for ArchiMate. In a previous posting I briefly touched upon this topic when I wrote about the combining the specialization relation and the aggregation relation to create a plug-and-play process architecture. In this posting I will re-examine this topic. The proposed solution has been tried and tested and is now used in several organizations.

The issue

The issue to be solved is fairly straight forward. In architecture modeling, two approaches can be followed: (a) an architecture model is very close to the physical world and attempts to represent all the `things’ in it one-on-one, albeit at a high level of abstraction, or (b) an architecture model abstracts from reality as much as possible and only represents `patterns’ of (interactions between) `things’ in the real world. The former is frequently referred to as a conceptual or abstract architecture, whereas the latter is often referred to as a physical or concrete architecture.

Many architecture approaches, including e.g. Capgemini’s Integrated Architecture Framework and TOGAF distinguish between conceptual, logical, and physical architectures. Conceptual and logical are abstract, whereas the physical architecture is concrete. The ArchiMate language does not distinguish between these levels, even though it is often claimed that behavioral concepts (services, functions, processes) are abstract and active structure elements (actors, roles, application components) are concrete.

Both abstract and concrete architecture models can be very useful and the question is how to combine them in a single model to get the best of both worlds. The underlying assumption is that ArchiMate – an open industry standard – language is used.

The solution

The basic observation underlying the solution proposed in this blog post is this: at the abstract level we identify the type of things we wish to talk about, whereas in at the concrete level, we identify their manifestations in the real world. For example, at the abstract level we want to talk about ERP software that supports people in performing their work. At the physical level, however, we want to talk about the fact that location A uses an ERP implementation from one vendor, whereas location B uses an ERP implementation from a different vendor, for performing the same kind of tasks (i.e., in a similar process).

The ArchiMate relation that is closest in semantics is the specialization relation which can is defined formally as “The specialization relationship indicates that an object is a specialization of another object”. This relation is mostly used for type/instance relations and is well known in many langauges including UML, Object Role Modeling etc. In this case we use it to denote that an abstract model element may have different concrete manifestations.

Example 1: component types and instantiations

The first example diagram illustrates the situation outlined in the previous section. At the abstract level, life is relatively simple; all that is to be modeled is the fact that for the process named Hotel reservation (be it at the front desk, or online) uses two application services that are realized by an ERP component:

At the physical level, we wish to denote that two ERP implementations exist and that branch offices (modeled using the Actor concept, see e.g., this posting) uses these different implementations. The following figure shows how this can be represented:

A big advantage of this approach is the fact that the specialized (concrete/ installed) versions of the ERP package inherit all aspects of the abstract ERP component. I.e., the two application services are inherited and need not be modeled again. Similarly, use of infrastructure services, access to data etc. is all modeled only once. This allows one to create an Amsterdam-specific image which could look something along the lines of:

Note that this mechanism should not be used to represent that we have two ERP packages by two different vendor platforms. Vendor platforms, such as SAP or PeopleSoft are usually modeled using the System Software concept.

Example 2: domesticated applications

Another interesting example of this mechanism showed up when discussing the use of the domestication (thanks for sharing this Ronald, Magchiel !).

The example case starts with the definition of a domesticated application. This was defined by the group as an application that uses federated authentication services as well as group service using some standards (modeled using the principle concept in BiZZdesign architect). It was recognized that domesticated applications can be accessed (suggesting the Application Interface concept) using OpenSocialGadgets. These gadgets are used in a portal environment that is called EduSocialPortal. The abstract architecture therefore can be modeled as follows:

Again, the specialization mechanism is used to cross the bridge to the more concrete/physical level. Specific domesticated applications (i.e., Alfresco) deliver services (document management) that can be accessed via gadgets and are made available in a specific EduSocialPortal (Coin demo portal):

Again, the inheritance mechanism ensures that the proper application functions with underlying infrastructure services are used.

Final remarks

The specialization concept is a powerful one and can allows for a straight forward way of modeling at two levels of abstraction. As is so often the case: this comes at a cost as both levels as well as the links between them have to be managed and kept up to date. Even more, when generating views in an architecture tool, the modeler should be very aware that concepts of two levels of abstraction may be combined in a single view. I highly recommend adding a profile (i.e., “stereo typing”) concepts from the conceptual layer so that they can be easily recognized using a color-view.

4 comments:

Erik Proper said...

Good point. Good temporary solution. At the same time ... I think ArchiMate is deerly missing the distinction between ontological/logical/physical level. Yes. I'm not using the word conceptual, but that's a discussion in its own.

But. I like this post. Now the ArchiMate forum has some work to do ...

Unknown said...

Erik,

The distinction between different "levels" is interesting, though I'm not sure yet whether I agree with your line of reasoning.

Following the 1471 definition of what architecture is, it can be argued that architecture is above all *personal*; what is "fundamental" about the organization of a system depends on ones perspective. This means that different viewers of a system may have a different conception of what constitutes its architecture. In order to communicate about their (personal!) interpretation of architecture of the system, modeling languages can be used to create representations and this is where different levels of abstraction come into view.

In my personal view, ArchiMate can easily be used to denote how the system is organized at the physical level: identify the 'things' (processes, it, etc.) and identify how they relate to each other. By means of abstraction one can arrive at a more... conceptual / logical (for lack of a better word, agree with you there) description of the system. When done properly, this may result in a description of the 'fundamental organization'.

By abstracting even more, patterns may be recognized in this fundamental organization, which is what i focussed on in my blogpost. Whether this is a temporary solution or not is up to the open group I guess... I'm not sure what a more structural solution would look like. Personally I'm not a big fan of extending the language if it is not strictly necessary!

You also mentioned the ontological point which appeals the 'nature of being'. I'm not sure if ArchiMate is a good language for ontological representations as it seems to focus mostly on some sort of decomposition which seems a whole different way of viewing the world indeed. For that matter, the attempt you made to merge / related ArchiMate and DEMO in one of your books provides a good starting point for this discussion.

Erik Proper said...

Bas,
I fully agree that a modelling language should have as view concepts as needed. I would even go as far as to say that ArchiMate has too many concepts. That is. We should more strongly stress the role of the core concepts, that have "just" been copied across the B/A/T layers, and then linked together using realises/uses.

What follows below is purely my personal opinion as a researcher. It has no bearing on where I expect AMate to evolve towards. ALthough I hope it would.

I think the core shift to make would be to see that what is modelled at each level: B/A/T, but also at conceptual/logical/physical is an open-active system, where Actors conduct Activities, which realise Services. These Service may be of Value to other Actors. The Activities are performed on Objects, and may be regulated by Rules. Et cetera.
This leads to 6 or 8 core concepts and mutual relations. Simple. Crisp.

When needed, this set of concepts COULD be used to model a layered system of systems:
- Business
- Application
- IT Infrastricture
(some people might want to insert an Information layer ...)
with connecting relations:
- is represented as (realises in AMate)
- uses

But orthogonally, one MIGHT decide to make a distinction between ontological/logical/physical considerations, leading to three abstraction levels of the system:
- Ontological, i.e. implementation free
- Logical, maybe still IT platform independent.
- Physical, IT platform specific
connected by relation:
- realises

Needless to say that an extension mechanism to define one's own "sub concepts" such as "contract", "product", et cetera, is indeed still useful.

But the core ... simple. Crisp.

Unknown said...

We're touching on some fundamental aspects here and i'm starting to wonder if we should make this a new blog post eventually... For now, replying in-line.

Modeling languages in general should have as few concepts as possible, but not fewer (Einstein was right there!). I'm not ready to subscribe to the point of view that ArchiMate has too many concepts. I will go as far to observe that there are some concepts that are (a) rarely used, and (b) hard to explain. In the same vain, I do not agree with you that concepts have been 'simply copied from one layer to the next'. For example, the infrastructure layer does not have a function in its behavior column, but does have system software. In teaching ArchiMate, the same questions keep popping up:

- why is this the case?
- why is system software in the behavior column, and application component in the structure column?

some cleanup is surely needed there (with all risks and issues pertaining to backward compatibility). If we indeed start to distinguish between abstract / concrete architectures, then I guess I'd like to see an infrastructure function at the abstract level and system software at the physical level.

I like your comment with respect to worldviews (open social/active versus closed technical). In my opinion, ArchiMate as a language can be used in both perspectives but the way in which we verbalize things is completely different. Back to SBVR-like issues I suppos. For example, consider:


Actor -> assignment -> Process -> used by relation -> application service

classic 'Taylorist' interpretation would be something along the lines of "the application service is used in a process that is executed by some actor". interpretation of the same model in a more open social interpretation would be along the lines of "the actor performs some process in which an application service is used". Again (meta)communication is the main issue here (see e.g. my paper on worldviews, available on my website)

As a final thought, you have explained in your comment what you mean by the three levels (ontological, logical, physical). The distinction is crisp which is nice (better than the one Capgemini's IAF uses, in my opinion). I have seen many instances in practice where (business) functions were used succesfully to denote the essential, ontological, implementation free behavior of enterprises. The idea was that functions ehh... function / work on objects and the function x object combinations are chained to form a process.

My colleague from Belgium (Parick Derde) had a very nice example which I will attempt to recall in brief. Consider a kitchen and ask yourself what the basic type of activities are in such domain. A list cut be: "cutting" , "cleaning", "heating", etc. model these as functions. The cutting function could operate on different types of objects, such as steak or veggies. To prepare a full meal, several function x object combinations are chained, along the lines of [cutting, veggies], [heating, pan], [cooking, {veggies, steak}] etc.

So yes, some spring cleaning is necessary but lets be careful about it and think it through!