<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tom Graves / Tetradian &#187; metamodel</title>
	<atom:link href="http://weblog.tetradian.com/tag/metamodel/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.tetradian.com</link>
	<description>Random ramblings over the metaphoric edge</description>
	<lastBuildDate>Sat, 04 Feb 2012 16:57:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Helping others make sense of my work</title>
		<link>http://weblog.tetradian.com/2011/11/02/helping-others-make-sense-of-my-work/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=helping-others-make-sense-of-my-work</link>
		<comments>http://weblog.tetradian.com/2011/11/02/helping-others-make-sense-of-my-work/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 09:37:16 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[sense-making]]></category>
		<category><![CDATA[taxonomy]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=4172</guid>
		<description><![CDATA[Have been struggling hard for the past few days with a truly brilliant challenge from Bulgarian enterprise-architect Ivo Velitchkov, when he dropped by for a visit near here over the weekend. And I&#8217;d have to admit I&#8217;m no nearer solving it as yet. Hmm&#8230; His point is this: there&#8217;s a huge body of knowledge &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Have been struggling hard for the past few days with a truly brilliant challenge from Bulgarian enterprise-architect <a title="Ivo Velitchkov (@kvistgaard) on Twitter" href="http://twitter.com/kvistgaard" target="_blank">Ivo Velitchkov</a>, when he dropped by for a visit near here over the weekend. And I&#8217;d have to admit I&#8217;m no nearer solving it as yet. Hmm&#8230;</p>
<p>His point is this: there&#8217;s a huge body of knowledge &#8211; or something like that, I guess? &#8211; that&#8217;s scattered throughout this website, in <a title="Books by Tom Graves" href="http://tetradianbooks.com" target="_blank">my books</a>, on the <a title="Slidedecks for Tetradian on Slideshare" href="http://www.slideshare.net/tetradian" target="_blank">Slideshare account</a>, and various other places too. But there&#8217;s <em>so much</em> of it, spread across so many different themes and topics, with ideas developing and changing over the years: so how on earth can anyone make sense of it all? How does it all tie together? What links with what? What&#8217;s changed, what hasn&#8217;t changed? And how do we use it all, anyway?</p>
<p>Looking around, fact is that he&#8217;s right: I need to apply a bit more enterprise-architecture to my own enterprise-architecture here. Rather than just churning out the work, day after day, more and more new ideas, new concepts, new connections, I need to do more to help people <em>make sense</em> of those ideas in context, and to put them to practical <em>use</em>.</p>
<p>So I&#8217;ll make a quick start here, with a brief summary of how the various sources fit together. But for the rest, I&#8217;ll need you to help me to help you &#8211; if you see what I mean? <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>This <strong><a title="'Work-in-progress' weblog for Tetradian and (more generally) Tom Graves" href="http://weblog.tetradian.com/" target="_blank">weblog</a></strong> is where most of the visible action happens. Its main role is to present &#8216;work in progress&#8217;, and to ask for comment and feedback to guide that work-in-progress. The good part is that this is where you&#8217;ll find whatever I&#8217;m working on at the moment &#8211; always pushing the boundaries, which I hope is significant for a fair few people at least. The catch is that, almost by definition, what you&#8217;ll see here isn&#8217;t likely to be in &#8216;finished&#8217; form. It also covers a huge scope: for example, that &#8216;<a title="Post 'The no-plan ‘Plan’ for whole-enterprise architecture – a summary'" href="http://weblog.tetradian.com/2011/10/22/the-no-plan-plan-for-whole-enterprise-architecture-a-summary/" target="_blank">no-plan Plan</a>&#8216; for an extended view of enterprise-architecture is just one small part of it. So it&#8217;s very fragmentary, and there&#8217;s a lot of it &#8211; more than 500 distinct articles so far, excluding background admin items and the regular collections of &#8216;A week in Tweets&#8217;. And I&#8217;ll admit the search-tools here aren&#8217;t good: a small set of categories, a subset of tags, and a very simple text-search field. Making sense of what&#8217;s going on here isn&#8217;t easy, especially for someone who&#8217;s just dropped in for the first time: so yes, I need to do more to make it easier. Yet what do I need to do?</p>
<p>The <strong><a title="Tetradian Books website" href="http://tetradianbooks.com" target="_blank">books</a></strong> are &#8216;finished work&#8217;, of course. Each book addresses a single issue or theme, and can be used as a standalone item in its own right. Yet other than the barest set of categories, there&#8217;s not much there to show how they all link together &#8211; which they do, even across the categories. For example, the main purpose of the screenplays and stories is to illustrate ideas that are often too abstract &#8211; or, in some cases, too challenging &#8211; to explain other than through some form of fiction: yet in essence they&#8217;re still the <em>same</em> ideas as in the overall theme of enterprise-architecture. Likewise the books on dowsing: although some people don&#8217;t like the fact, they do actually describe the process and practice of sensemaking in some of its most extreme and most concrete forms. But again, making sense of those cross-connections isn&#8217;t easy or obvious: I need to do more to make it easier for it to make sense. Yet what would that be?</p>
<p>I probably don&#8217;t make enough use of the <strong><a title="Sidewise weblog" href="http://sidewise.biz" target="_blank">Sidewise</a></strong> weblog. It&#8217;s sort of halfway between this blog and the books: complete standalone articles that address a single theme. More like a <a title="Zahmoo - a story-bank, to make the most of stories" href="http://www.zahmoo.com/" target="_blank">story-bank</a>, I guess &#8211; or an <em>idea-bank</em>, perhaps? It&#8217;s there, anyway: though I do need to explain more about how it links in with everything else. Yet how?</p>
<p>The <strong><a title="Slidedecks on Slideshare from Tetradian" href="http://www.slideshare.net/tetradian" target="_blank">slidedecks</a></strong> are likewise &#8216;finished&#8217; &#8211; though without the context of the respective conference or whatever, they often seem a bit incomplete. It&#8217;s probable I ought to record a sound-track for each: perhaps you might let me know if that would help?</p>
<p>Then there&#8217;s the two &#8216;official&#8217; websites, the <a title="Website for Tetradian Consulting" href="http://tetradian.com" target="_blank"><strong>Tetradian website</strong></a> and <strong><a title="Website for Tom Graves" href="http://tomgraves.org" target="_blank">Tom Graves website</a></strong>. Both of these are literally years out of date: at present they&#8217;re useful as historical archives, but not much more than that. It&#8217;s obvious I need to update them both, and urgently: but what would be the best approach? What do those sites need? More to the point, what do <em>you</em> need from those two websites?</p>
<p>And there&#8217;s also the <strong><a title="SEMPER Metrics website" href="http://sempermetrics.com" target="_blank">SEMPER Metrics website</a></strong>. Its purpose is to showcase the <a title="See book 'SEMPER and SCORE: enhancing enterprise effectiveness'" href="http://tetradianbooks.com/2008/07/semper/" target="_blank">SEMPER diagnostic</a>, that assesses organisational &#8216;ability to do work&#8217;, and indicates appropriate tools, techniques and tactics to address any identified problem-areas. It even includes a fully-functional implementation of the diagnostic; but since the access-permissions mechanism still doesn&#8217;t work properly at present, I&#8217;d have to admit that there&#8217;s not much point&#8230; But it&#8217;s there, and usable, sort-of, and potentially useful to quite a lot of people, too: yet what should I do to bring it up to date, and link it in to everything else?</p>
<p>So I&#8217;ve spent a lot of time and effort over the past few days trying to find <em>any</em> tools that would help me bring all of this together into a more meaningful, accessible, <em>usable</em> form. Fact is that I can&#8217;t find anything that would actually work. There&#8217;s <a title="CMapTools introduction" href="http://cmap.ihmc.us/" target="_blank">CMapTools</a>, of course, or <a title="Open University: Introduction to Compendium" href="http://compendium.open.ac.uk/institute/about.htm" target="_blank">Compendium</a> or <a title="Open University: Introduction to Cohere" href="http://cohere.open.ac.uk/" target="_blank">Cohere</a>; yet none of them will read in a website or weblog and help me to build an automated, self-maintaining set of concept-maps across all of the articles and other items, which is what seems to be most needed here. Any suggestions, anyone?</p>
<p>The key item that would seem to make sense for this kind of sensemaking would be a glossary/thesaurus, coupled with annotated links to articles and other items. Would that work?</p>
<p>I do have a sort of &#8216;wiki-engine&#8217; that I wrote some years back that I can re-use for this purpose, though it&#8217;ll take some significant hacking to get it closer to self-updating from this weblog. Would that be worth the effort?</p>
<p>And what else would help you to make sense of all of this body of work? And help you to put it into practice in your <em>own</em> context?</p>
<p>Anyone have any advice / comments / suggestions for me here, please?</p>
<p>Many thanks, anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/11/02/helping-others-make-sense-of-my-work/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Dependency and resilience in enterprise-architecture models</title>
		<link>http://weblog.tetradian.com/2011/09/22/dependency-resilience-in-ea-models/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dependency-resilience-in-ea-models</link>
		<comments>http://weblog.tetradian.com/2011/09/22/dependency-resilience-in-ea-models/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 11:20:35 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[dependency]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[enterprise canvas]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[resilience]]></category>
		<category><![CDATA[systems]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3835</guid>
		<description><![CDATA[This one&#8217;s back on the metamodel theme again, and is a follow-up to a query by Peter Bakker in his post &#8216;Thinking about Graeme Burnett&#8217;s questions&#8216;, in reply to my previous post &#8216;EA metamodel: two questions&#8216;. Peter wrote: I think that the most important question of all is still missing, namely: &#8211; What do you rely [...]]]></description>
			<content:encoded><![CDATA[<p>This one&#8217;s back on the <a title="Posts on metamodels for enterprise-architecture" href="http://weblog.tetradian.com/tag/metamodel/" target="_blank">metamodel</a> theme again, and is a follow-up to a query by <a title="Peter Bakker (@pbmobi) on Twitter" href="http://twitter.com/pbmobi" target="_blank">Peter Bakker</a> in his post &#8216;<a title="Peter Bakker: 'Thinking about Graeme Burnett's questions'" href="http://peterbakker.wordpress.com/2011/09/21/thinking-about-graeme-burnetts-questions" target="_blank">Thinking about Graeme Burnett&#8217;s questions</a>&#8216;, in reply to my previous post &#8216;<a title="Post 'EA metamodel: two questions'" href="http://weblog.tetradian.com/2011/09/15/ea-metamodel-two-questions/" target="_blank">EA metamodel: two questions</a>&#8216;.</p>
<p>Peter wrote:</p>
<blockquote><p>I think that the most important question of all is still missing, namely:<br />
&#8211; <em>What</em> do you rely on?</p></blockquote>
<p>(The &#8216;you&#8217; here is the entity-in-focus, as with Graeme&#8217;s original two questions of &#8220;tell me about yourself?&#8221; and &#8220;tell me what you&#8217;re associated with?&#8221;.)</p>
<p>Peter&#8217;s right, of course: it <em>is</em> one of the most important questions we need to ask. It&#8217;s one reason why I generally extend Graeme&#8217;s second question to &#8220;tell me what you&#8217;re associated with, <em>and why</em>?&#8221;. Yet there&#8217;s a practical concern here about just how where the intelligence needed to answer that question should reside &#8211; and I don&#8217;t think it belongs in the metamodel.</p>
<p>To explain why, we probably need to do a brief detour into modelling in general within enterprise-architecture, and in particular our modelling of dependency and resilience. As I see it, there are two key aspects to Peter&#8217;s &#8220;What do you rely on?&#8221; question:</p>
<ul>
<li><em>dependency</em> &#8211; about what this entity relies on, within the shared-enterprise</li>
<li><em>resilience</em> &#8211; about what this entity needs to do, or can do, to get back on track if what it relies on isn&#8217;t there</li>
</ul>
<p>In a systems-theory sense, the first answer to Peter&#8217;s reliance-question must be &#8220;Everything!&#8221; <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Any shared-enterprise represents a system, and by definition everything within that system depends on the presence of everything else within that system (otherwise it wouldn&#8217;t be part of that system). So in practice, from a modelling perspective, there are two additional aspects to the dependency-issue:</p>
<ul>
<li><em>distance</em> from &#8216;self&#8217; (where &#8216;self&#8217; is the entity that&#8217;s our current focus of attention)</li>
<li><em>criticality</em> to self &#8211; the risk or opportunity represented by the presence or absence within the system of another entity</li>
</ul>
<p>To illustrate distance-from-self, consider a typical biological-ecosystem: for example, the world of a dung-beetle:</p>
<ul>
<li>distance-1: the dung-beetle relies on the presence of dung</li>
<li>distance-2: the dung-beetle relies on dung-producing-animals</li>
<li>distance-3: the dung-beetle relies on fodder for dung-producing animals</li>
<li>distance-4: the dung-beetle relies conditions that support appropriate fodder for the dung-producing animals in the ecosystem</li>
<li>(and so on&#8230;)</li>
</ul>
<p>So if we have an invasive species of vegetation that out-competes the existing vegetation and is either toxic or non-palatable to the local cattle, our dung-beetle could be in trouble&#8230; Yet <em>on its own</em> it may have no way to know this, because the connections to the critical issues are indirect, several steps distant-from-self. And the greater the distance-from-self, the more whole-of-system knowledge any given entity will need, in order to understand its contextual dependencies, opportunities and risks.</p>
<p style="padding-left: 30px;">(By the way, this is one of the main reasons why I&#8217;ve been pushing so hard for a &#8216;notation-agnostic&#8217; metamodel for enterprise-architecture and the like. For example, a UML diagram typically shows only the direct point-to-point connections; so we&#8217;d typically need to be able to swap out of that diagram and into, say, a Senge-style systems-dependency model or fishbone root-cause model, <em>using the same entities</em>, in order to understand the <em>systemic</em> interdependencies of each of those items. Currently we can sort-of do this in <em>some</em> of the EA toolsets, though typically only within a single notation-set such as UML: my point is that we need to be able to do this, cleanly and consistency, <em>across all and any notations</em> in the EA space. The base for all modelling should be the entities and the relations and flows between them &#8211; <em>not</em> the notations with which we model them.)</p>
<p>Criticality is closely related to specialism; and in turn, resilience is closely related to criticality. The catch is that that criticality can occur <em>anywhere</em> in the system. For example, our dung-beetle may need larger piles of dung for its larvae to live in. As long as it doesn&#8217;t need specific nutrients that only come from one species, it&#8217;d probably be happy with any of the larger herbivores: cows, buffalo, camels, elephants, whatever. Even forest-clearance mightn&#8217;t much affect it, because to our dung-beetle a cow is much the same as a giraffe: criticality for that kind of change is low, hence resilience might seem to be high. Yet if there&#8217;s a change from cattle or camels to &#8216;pellet-dung&#8217; producers such as sheep or goats, our dung-beetle could well be in trouble, because that kind of dung is too small to work with. And without the dung-beetle, the nutrient-recycling processes within the ecosystem may be too slow for self-renewal. Hence not just the dung-beetle but its entire ecosystem may be at risk from arbitrary decisions made by humans in &#8216;markets&#8217; that may be tens or hundreds or thousands of miles away.</p>
<p>These whole-of-system dependencies and resilience-issues are classic simulation / systems-theory territory, illustrated well by the old military adage of a century or so ago:</p>
<blockquote><p>For want of a nail, the shoe was lost;<br />
for want of the shoe, the horse was lost;<br />
for want of the horse, the rider was lost;<br />
for want of the rider, the battle was lost.</p></blockquote>
<p>Whole-of-system resilience is also a common concern in studies on <a title="Wikipedia on Complex adaptive systems" href="http://en.wikipedia.org/wiki/Complex_adaptive_system" target="_blank">complex adaptive systems</a>, where resilience in one area can sometimes even <em>enhance</em> resilience in other more apparently-fragile areas. And there can also be dependency/resilience issues <em>between</em> nominally-interdependent systems that are in &#8216;system-of-systems&#8217; relationships with each other: these are common in military contexts, though <a title="Nick Gall (@ironick) on Twitter" href="http://twitter.com/ironick" target="_blank">Nick Gall</a> gives a useful non-military example in the section &#8216;<a title="Nick Gall: 'Models of interdependent Networks', in 'Panarchitecture' paper for Gartner" href="http://www.gartner.com/DisplayDocument?doc_cd=209754&amp;ref=g_BETAnoreg#3_2" target="_blank">Models of interdependent networks</a>&#8216; in his seminal &#8216;<a title="Nick Gall (Gartner): 'From Hierarchy to Panarchy: Hybrid Thinking's Resilient Network of Renewal'" href="http://www.gartner.com/DisplayDocument?doc_cd=209754&amp;ref=g_BETAnoreg" target="_blank">Panarchitecture</a>&#8216; paper for Gartner.</p>
<p>Identifying those kinds of dependencies usually requires a lot of &#8216;whole-system intelligence&#8217; &#8211; in other words, cross-mapping of dependencies and criticalities that may be many steps distant from each other. There are two classic approaches to this:</p>
<ul>
<li>&#8216;inside-out&#8217; &#8211; each entity knows everything it needs to know about its <em>own</em> system-context</li>
<li>&#8216;outside-in&#8217; &#8211; an external observer assesses the interactions across the <em>entire</em> system-context</li>
</ul>
<p>In practice, neither of these approaches work well, especially for any large real-world system. The &#8216;inside-out&#8217; approaches assumes high intelligence and information-gathering capability in each entity, which certainly doesn&#8217;t apply down at the level of bacillae and bacteria in living ecosystems; the &#8216;outside-in&#8217; approach requires phenomenal computing-power, and probably can&#8217;t cope with any kind of non-linear relationships anyway; and both demand vast cross-context information-flows that can rarely if ever be seen in real-world systems.</p>
<p>Instead, what <em>actually</em> works is observation of patterns of emergence: the &#8216;intelligence&#8217; &#8211; so to speak &#8211; arises from the <em>network of relationships</em>, rather from any specific entity either within or (nominally) outside of the system.</p>
<p>Hence, to bring it all back to the EA-metamodel, I suspect that the question &#8220;What do you rely on?&#8221; may actually be a bit misleading here: it&#8217;s certainly a question that we need to ask, and answer, but it&#8217;s not a question we can meaningfully answer at the <em>metamodel</em> level. Some kind of intelligence would definitely be needed in order to assess contextual concerns such as whole-system interdependence and resilience: yet the metamodel itself doesn&#8217;t <em>have</em> any intelligence as such &#8211; it&#8217;s just a means to structure information.</p>
<p>Hence for any given entity, it would be meaningful to ask <em>directly</em> each of Graeme&#8217;s questions:</p>
<ul>
<li>&#8220;tell me about yourself&#8221; typically identifies the immediate <em>content</em> of the item [and in this metamodel, also the content of any items within the scope of its related-items list]</li>
<li>&#8220;tell me what you&#8217;re associated with&#8221; identifies the immediate (&#8216;distance-1&#8242;) relations in which the item is referenced</li>
<li>&#8220;&#8230;and why&#8221; identifies the reasons given within those &#8216;distance-1&#8242; relations</li>
</ul>
<p>Answering those questions doesn&#8217;t require much intelligence: we could easily embed that within an object-method for entities, for example. But as soon as we step beyond that immediate &#8216;distance-1&#8242; level, the relationships and dependencies become very complex, very quickly &#8211; and I don&#8217;t think we would be able to embed that within the entities as such. (Okay, we probably <em>could</em> do it, but I doubt that doing so would be effective enough to worthwhile in a practical sense.)</p>
<p>Hence I would suggest that <em>at the metamodel level</em> we should stick to Plan A, and keep everything as simple as possible: Graeme&#8217;s two questions (in that slightly-amended form) should be enough to cover most if not all of what we need to support an emergent view of enterprise context.</p>
<p>Your comments on this, of course?</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/22/dependency-resilience-in-ea-models/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>EA metamodel: two questions</title>
		<link>http://weblog.tetradian.com/2011/09/15/ea-metamodel-two-questions/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ea-metamodel-two-questions</link>
		<comments>http://weblog.tetradian.com/2011/09/15/ea-metamodel-two-questions/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 12:36:13 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3815</guid>
		<description><![CDATA[Following on from the previous work on EA metamodels, I keep coming back to those two questions from Graeme Burnett: for everything in a context, we need to be able to ask &#8220;tell me about yourself?&#8221; and &#8220;tell me what you&#8217;re associated with?&#8221;. That focus does help to keep things simple here&#8230; (Please remember that [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from <a title="Post 'Back to the roots for EA toolset metamodels'" href="http://weblog.tetradian.com/2011/09/01/back-to-roots-for-ea-toolset-metamodels/" target="_blank">the</a> <a title="Post 'More detail on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/" target="_blank">previous</a> <a title="Post 'EA metamodel and method'" href="http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/" target="_blank">work</a> <a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">on</a> <a title="Post 'EA metamodel - the big picture (and the small picture too)'" href="http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/" target="_blank">EA</a> <a title="Post 'What's the point of this EA metamodel?'" href="http://weblog.tetradian.com/2011/09/08/why-ea-metamodel/" target="_blank">metamodels</a>, I keep coming back to those two questions from Graeme Burnett: for everything in a context, we need to be able to ask &#8220;tell me about yourself?&#8221; and &#8220;tell me what you&#8217;re associated with?&#8221;.</p>
<p>That focus does help to keep things simple here&#8230;</p>
<p style="padding-left: 30px;">(Please remember that this is still very much a thought-experiment, but I do believe we&#8217;re getting closer now to something that really is implementable.)</p>
<p>To recap, we&#8217;d previously ended up with the concept of a &#8216;mote&#8217;, a kind of very-low-level entity that consists merely of an ID, something a bit like a role or opcode, a single optional parameter, and an optional list of related-motes. Conceptually, an individual mote looks a bit like a bacillus:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/mote.png"><img class="aligncenter size-full wp-image-3043" title="mote" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/mote.png" alt="" width="126" height="159" /></a></p>
<p>On its own, it&#8217;s tiny &#8211; <em>really</em> tiny, and almost meaningless. But that related-mote list turns out to be incredibly powerful &#8211; much more powerful than I thought it would be, in fact. It&#8217;s also looks like it&#8217;d be surprisingly easy to implement.</p>
<p>Even more interesting, it actually removes the distinction between metamodel-layers within implementations, because with this mote-structure they&#8217;re all the same: <em>everything</em> is a mote. Whether it&#8217;s a model, a metamodel, a metametamodel or metametametamodel, everything is either a single mote or a collection of motes, all with the exact same structure.</p>
<p><a title="Post 'The enterprise is the story'" href="http://weblog.tomgraves.org/index.php/2010/01/26/the-enterprise-is-the-story/" target="_blank">Everything&#8217;s a story</a>, too: &#8220;tell me about yourself&#8221; returns a mote&#8217;s own story, whilst &#8220;tell me what you&#8217;re associated with&#8221; returns the story that this mote shares with others. The story may be very simple &#8211; as it is with a tag-mote &#8211; or very broad and complex &#8211; as it would be with a mote that represents that represents an entire model &#8211; but it&#8217;s still just a story, retrieved from each mote in the same way.</p>
<p>More interesting still, the mote-structure also in effect defines a file-structure that can be used both to exchange models between toolsets, <em>and</em> exchange model-types and notations between toolsets. And in essence, subject to a certain amount of intelligence in the toolset, all of that exchange can be done with text-files in a standard structure-format such as JSON or XML. Which gives us a fully non-proprietary file-format for just about everything we would need in an EA toolset.</p>
<p>(Toolsets would differentiate themselves by their user-interface and user-features: what we&#8217;re describing here is just a data-structure and file-format, and a conceptual API to drive everything within that structure &#8211; not a full features-specification for toolsets!)</p>
<p>And what&#8217;s perhaps most interesting of all is that <em>all</em> of that arises from those two questions: &#8220;tell me about yourself&#8221;, and &#8220;tell me what you&#8217;re associated with&#8221;.</p>
<p>Interested?</p>
<p><span id="more-3815"></span></p>
<h4>A database-structure for motes</h4>
<p>To show that this <em>is</em> implementable, start with a database-structure in which to store motes. (The only data-structures that I know are flat-files &#8211; which probably won&#8217;t work well for this &#8211; and SQL relational-databases &#8211; which probably will work, if not very efficiently. I&#8217;ll use SQL-type structures, but I&#8217;ll leave it to others to translate into something more effective with current data-technologies.)</p>
<p>It seems that we&#8217;d need just two SQL tables for the whole repository: one for the body-section of motes (<em>MoteBody</em>), and the other for the related-mote lists (<em>MoteReln</em>).</p>
<p>These would need only a few minor tweaks and additions to the provisional mote-structure described earlier in the post &#8216;<a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">EA metamodel &#8211; a possible structure</a>&#8216;.</p>
<p>Suggested structure for the <em>MoteBody</em> table:</p>
<ul>
<li>MoteID &#8211; globally-unique ID (e.g. UUID?)</li>
<li>MoteNamespace &#8211; namespace for the role/opcode (shortish text, e.g. CHAR(64))</li>
<li>MoteRole &#8211; &#8216;role&#8217; or opcode for the mote (shortish text, e.g. CHAR(64))</li>
<li>MoteParam &#8211; parameter-value for this mote (could be anything, but type can be identified by an attached mote &#8211; i.e. could be BLOB or LONGTEXT or a self-identifying polymorphic, dependent on database type and capability)</li>
<li>MoteIsReadOnly &#8211; says whether or not the parameter-value can be changed (boolean)</li>
</ul>
<p>That&#8217;s it: the motes themselves really <em>are</em> tiny. (I added &#8216;MoteIsReadOnly&#8217; to deal with the likelihood that some parameter-values of some mote-types would need to change, whilst many others should not: it would typically be inherited from the master-template for that mote-type, anyway.)</p>
<p>Namespaces possibly aren&#8217;t essential, because it could be part of the MoteRole anyway. But I can see that a lot of people would prefer to keep them separate, so as to link specific roles (opcodes) with specific model-types or notations. (We might also add a category-identifier for the same reason, particularly for parameters and for relation-types.)</p>
<p>What I&#8217;ve described as &#8216;roles&#8217; would actually be a bit more like opcodes (as in assembler-language), or perhaps closer to root-level operators in a &#8216;word&#8217;-based language such as FORTH. In effect, roles would act as a kind of API (or API-interface) for the overall meta-language implied by this structure. There are quite a few examples summarised in the &#8216;<a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">EA metamodel &#8211; a possible structure</a>&#8216; post.</p>
<p>Suggested structure for the <em>MoteReln</em> table:</p>
<ul>
<li>MoteRelnID &#8211; locally-unique ID (e.g. AutoNum &#8211; only needs to be locally-unique because it won&#8217;t appear in any file-transfer)</li>
<li>MoteRelnParent &#8211; unique-ID of the &#8216;parent&#8217;-mote, the mote for which this forms part of its related-mote list (type as per <em>MoteBody</em> table)</li>
<li>MoteRelnDest &#8211; unique-ID of the &#8216;attached&#8217;-mote, the mote nominally referenced in the &#8216;parent&#8217;s related-mote list (type as per <em>MoteBody</em> table)</li>
<li>MoteRelnSubst &#8211; either null etc (i.e. no substitute), or unique-ID of a &#8216;substitute&#8217;-mote, replacing the previously-attached mote in the related-mote list (type as per <em>MoteBody</em> table)</li>
</ul>
<p>Again, that&#8217;s it: it&#8217;s very simple. The table&#8217;s search-order is significant, by the way: the related-mote list develops in time-order, with new attachments appended to the end of the list. Hence we probably <em>don&#8217;t</em> index this by MoteRelnID &#8211; though we might well do so by MoteRelParent.</p>
<p>The &#8216;substitute&#8217; is a suggested part of a mechanism to handle versioning. To go back to a previous version, we simply stop the search or scan when we hit an appropriate version-identifier mote, reading forward from the start of the list. The &#8216;substitute&#8217; tells the scan that this entry has been replaced by the substitute. [Hmm... I may have this somewhat back-to-front? - it needs further thinking, anyway. But the overall principle of versioning via identified 'substitutes' does seem sound, and again does keep everything very simple.]</p>
<p>For indexes, there&#8217;s the usual trade-off between speed, efficiency and index-size. In principle we might need to index <em>everything</em>. In practice, it&#8217;d probably be essential to index the MoteIDs, but probably not much else.</p>
<h4>&#8220;Tell me about yourself&#8221;</h4>
<p>To answer the question &#8220;Tell me about yourself?&#8221; for a single mote, we do a straightforward tree-walk, starting with this mote, and then, in linear order, every member of its related-mote list, following the trees for <em>their</em> related-mote lists, and so on.</p>
<p style="padding-left: 30px;">(Note that that would return <em>everything</em> related to this mote. In practice we would probably want to apply some kind of filter on what we return from the tree-walk, so as to constrain the resultant &#8216;story&#8217; to whatever is meaningful in the context.)</p>
<p>The result would be a collection or table, very similar to the structure of <em>MoteBody</em>, containing only the mote-bodies (because we&#8217;ve unpacked all of the related-mote lists into this collection). We would probably need one extra field, to identify the &#8216;parent&#8217; for each mote-body in the list &#8211; in other words, the mote in whose related-mote list this was referenced; the &#8216;parent&#8217; for the mote with which we started is effectively itself. Note that we may well end up here with multiple copies of the same nominal mote, because they were referenced in different &#8216;parent&#8217;-motes&#8217; related-mote lists.</p>
<p>The motes in this collection are <em>not</em> &#8216;triples&#8217; as such &#8211; in other words entities made up of &#8216;subject / verb / object&#8217; &#8211; but in practice they usually do end up being interpreted in that form. The subject is the &#8216;parent&#8217;-mote; the verb is implied by, or is, the role; and the object is the mote&#8217;s parameter.</p>
<p>If we take the simplest example, a tag-mote, which should have an empty related-mote list: its &#8216;story&#8217; would be &#8220;I am a tag from the <em>whatever</em> namespace labelled <em>something</em>&#8220;.</p>
<p>A parameter-mote, with a related-mote list of parameter-type, and label in a specific language, might be: &#8220;I am a parameter whose <em>integer</em> value is 42, and my label in <em>en-GB</em> is &#8216;What do you get if you multiply six by nine?&#8217;&#8221;. [Yup, it's correct, in base-13: an inside-joke for fans of <em>Hitchhiker's Guide To The Galaxy</em>... <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ] The label&#8217;s language-identifier is in the related-mote list for the parameter-label &#8211; it didn&#8217;t need to be referenced in the parameter-mote itself, because we could find find it via the tree-walk.</p>
<p>It&#8217;ll get tedious if I give any more examples, but you can see how the principle works here. Because every mote ultimately has the same structure, we can do the same kind of tree-walk for <em>any</em> kind of mote &#8211; including much larger motes such as an entity, a relation or a model, or even the entire contents of the repository.</p>
<p>I know I haven&#8217;t described the exact details of where all the verbs and sentence-structures come from, but I hope it&#8217;s evident that it should be fairly straightforward to implement. For an already-existing example of the same principle being applied in real-time &#8216;storytelling&#8217; interpretation of models, see the <a title="MyCreativity add-on for Southbeach toolset" href="http://www.southbeachinc.com/mycreativity/index.html" target="_blank">MyCreativity</a> add-on to the <a title="Southbeach toolset" href="http://www.southbeachinc.com/" target="_blank">Southbeach</a> toolset.</p>
<p>Everything could be described in text form in this way. For a &#8220;tell me about yourself&#8221; in a graphic sense &#8211; such as in a visual model &#8211; the details on how the mote should display itself (if at all) would be in <em>presentation</em>-motes referenced in the mote&#8217;s related-mote list. These would usually be derived from the mote used as the base-template for this mote. This would apply primarily to <em>entity</em>-motes, <em>relation</em>-motes, <em>model</em>-motes and other items that would usually be presented in graphic form.</p>
<h4>&#8220;Tell me what you&#8217;re associated with&#8221;</h4>
<p>Deriving the same kind of story for &#8220;tell me what you&#8217;re associated with&#8221; for each mote will vary somewhat, because the meaning of &#8216;associated-with&#8217; is somewhat different for each mote-type.</p>
<p>Again, the simplest case is a tag-mote, for which &#8216;associated-with&#8217; in effect means &#8216;motes in which I&#8217;m referenced&#8217;. For this, all we need do is scan the <em>MoteReln</em> table for self-references as &#8216;MoteRelnDest&#8217;, and look up the details of the &#8216;parent&#8217; (the referencing mote, as identified in the matching &#8216;MoteRelnParent&#8217; field) in the <em>MoteBody</em> table &#8211; a very simple query in SQL or the respective equivalent.</p>
<p>A <em>relation</em>-mote is associated with (usually) two <em>entity</em>-motes (or other motes), but is also associated with a model, because the relation would itself have been defined within that model. These associations should actually be part of the &#8220;tell me about yourself&#8221; question, because the motes that denote these links should all be referenced in the <em>relation</em>-mote&#8217;s related-mote list.</p>
<p>The &#8220;tell me what you&#8217;re associated with&#8221; story is a bit more complicated for <em>entity</em>-motes, because an <em>entity</em>&#8216;s relationships are referenced in the <em>relation</em>&#8216;s related-mote list &#8211; not that of the <em>entity</em>-mote. In effect, we have to run the search somewhat backward: scan the <em>MoteReln</em> table for MoteParent of type &#8216;<em>relation</em>&#8216;, and MoteDest of type &#8216;<em>source</em>&#8216; or &#8216;<em>destination</em>&#8216;, where the parameter for that <em>source</em> or <em>destination</em> (i.e. the referenced MoteID) is that of the <em>entity</em> with which we started. The <em>relation</em> in effect gives us the verb for a triple; the fact of being either <em>source</em> or <em>destination</em> indicates whether this <em>entity</em> is the subject or object of the triple; and, in turn, the item that&#8217;s at the other end of the relationship. The <em>relation</em> would also indicate &#8211; via the parent <em>model</em>-mote referenced in its related-mote list &#8211; the model in which the relationship was defined.</p>
<p>There&#8217;s obviously a lot more detail that needs to be worked through to implement all of this for real, but the principle does seem straightforward enough.</p>
<h4>A note on access-control</h4>
<p>All of the above in effect assumes that everyone should be able to see and use everything. That ain&#8217;t how it works in the real world&#8230; <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' /> </p>
<p>So to cope with that reality, I&#8217;ve assumed that, other than for fairly harmless root-level mote-types such as tags and language-identifiers, almost every mote will need some kind of access-control. The mechanism I would suggest for this would be yet another mote-type, such as described for the <em>responsibility</em> mote or namespace in the &#8216;Some key mote-types&#8217; section of the &#8217;<a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">EA metamodel &#8211; a possible structure</a>&#8216; post.</p>
<p>The content of this <em>responsibility</em>-mote would act as a second-order filter on the results returned from the &#8220;tell me about yourself&#8221; and &#8220;tell me what you&#8217;re associated with&#8221; scans. (This assumes that the mote in question can be viewed at all under the respective access-rights, of course.) The filter in effect enacts simple information-hiding: if it can&#8217;t be seen under these access-rights, it doesn&#8217;t get returned by the scan. This is one of the reasons why <em>relation</em>-links are not cross-referenced in the related-mote list for <em>entity</em>-motes and the like. This also means that we don&#8217;t return a full count of all possible <em>relation</em>-links: we <em>only</em> return a count (or the like) of <em>relation</em>-links that can be shown.</p>
<p>Because the access-control mechanism uses the same extensible structure as for every other type of mote, it can be adapted to just about any conceivable security/access-control need. It&#8217;s also fully granular, right down to the level of individual motes.</p>
<p>&#8212; &#8212;</p>
<p>Best I stop there for now? I&#8217;ll write another post soon on how I think the mote-&#8217;role&#8217; or opcode mechanism would work, and how it could drive or link into a toolset-API, but that can wait until later.</p>
<p>Anyway, comments, as usual, if you would?</p>
<p>[A special thank-you to <a title="Anthony Draffin (@adraffin) on Twitter" href="http://twitter.com/adraffin" target="_blank">Anthony Draffin</a>, who chased me to get back to writing more on this!]</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/15/ea-metamodel-two-questions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>More on simplified Enterprise Canvas</title>
		<link>http://weblog.tetradian.com/2011/09/11/more-on-simplified-ecanvas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-on-simplified-ecanvas</link>
		<comments>http://weblog.tetradian.com/2011/09/11/more-on-simplified-ecanvas/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 14:32:04 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[enterprise canvas]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[story]]></category>
		<category><![CDATA[toolset]]></category>
		<category><![CDATA[values]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3761</guid>
		<description><![CDATA[Following on from the previous post on &#8216;Simplifying the Enterprise Canvas&#8216;, a few more notes on how to use the notation, and some practical matters on modelling. Perhaps not quite as technical as some of the other recent posts, but I&#8217;ll admit that if enterprise-architectures and the like are not of much interest to you, [...]]]></description>
			<content:encoded><![CDATA[<p>Following on from the previous post on &#8216;<a title="Post 'Simplifying the Enterprise Canvas" href="http://weblog.tetradian.com/2011/09/10/simplifying-ecanvas/" target="_blank">Simplifying the Enterprise Canvas</a>&#8216;, a few more notes on how to use the notation, and some practical matters on modelling.</p>
<p>Perhaps not <em>quite</em> as technical as some of the other recent posts, but I&#8217;ll admit that if enterprise-architectures and the like are not of much interest to you, you might want to skip this one. If that <em>is</em> of interest, though, please do read on! <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-3761"></span></p>
<p><strong>Information in the <em>Service</em> entity</strong></p>
<p>I said in the previous post that the <em>Service</em> entity needed a name-parameter and not much else. Which was just plain wrong: my apologies&#8230;</p>
<p>If we follow the principles of <a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">&#8216;The Metamodel To Rule Them All&#8217;</a>, the <em>Service</em>-entity is going to need to carry a <em>lot</em> of descriptive information, about what the service does, what it is, who or what does it, what it uses, where it fits within the overall scheme of things, and so on. (Part of that was implied when I mentioned the use of the &#8216;single-row extended-Zachman&#8217; to map out service-content &#8211; but all that information has to be stored <em>somewhere</em>.)</p>
<p>All of that implies that the <em>Service</em>-entity will need at least one more parameter, and probably several of them. The minimum requirement would be a free-form text field, probably to be used in wiki-style format. A separate and distinct description-field would be useful, too, to help build a service-glossary and service-catalogue.</p>
<p>It&#8217;s simple enough to add this in the toolset-metamodel: it just needs to be done from the start, that&#8217;s all.</p>
<p><strong>Layers and <em>realization</em>-relations in Enterprise Canvas</strong></p>
<p>A reminder that the layers or &#8216;rows&#8217; in Enterprise Canvas parallel those in Zachman: they are <em>layers of abstraction</em> &#8211; not arbitrary pseudo-&#8217;layers&#8217; of implementation, as in classic IT-centric &#8216;enterprise&#8217;-architecture.</p>
<p>The set of layers in Enterprise Canvas are a slightly-extended variant of the Zachman set:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2010/07/canvas-rows.png"><img class="aligncenter size-medium wp-image-1224" title="canvas-rows" src="http://weblog.tetradian.com/wp-content/uploads/2010/07/canvas-rows-300x177.png" alt="" width="300" height="177" /></a></p>
<p>The &#8216;row-0&#8242; above the Zachman set provides compatibility with <a title="Wikipedia on ISO-9000 quality-system standards" href="http://en.wikipedia.org/wiki/ISO_9000" target="_blank">ISO-9000</a> and the like, and represents an unchanging permanent-anchor &#8211; specifically, the shared-enterprise <em>Vision</em> and its concomitant <em>Values</em>.</p>
<p>The &#8216;row-6&#8242; below the Zachman set represents the past, what has actually happened within our architecture; all of the other layers represent future intent, progressively moving closer towards the real-world detail of &#8216;the Now&#8217; as we move down through the rows. This gives us the support we need for architectural review following a continuous-improvement process such as <a title="Wikipedia on PDCA (plan, do, check, act)" href="http://en.wikipedia.org/wiki/PDCA" target="_blank">PDCA</a> or <a title="Wikipedia on After Action Review" href="http://en.wikipedia.org/wiki/After_action_review" target="_blank">After Action Review</a>:</p>
<ul>
<li>What was supposed to happen?</li>
<li>What actually happened?</li>
<li>What was the source of the difference?</li>
<li>What can we learn from this, to do differently next time?</li>
</ul>
<p>In Enterprise Canvas, we use <em>realization</em>-relations to link between rows &#8211; and <em>only</em> between rows. We <em>don&#8217;t</em> use <em>realization</em>-relations to connect between the pseudo-&#8217;layers&#8217; (&#8216;Business&#8217;, &#8216;Applications&#8217;, &#8216;Technology&#8217; etc) in TOGAF and Archimate and the like.</p>
<p>In most architectural work we&#8217;ll focus on row-2 to row-4, shown here as Business-model, System-model and Design-model &#8211; otherwise known as &#8216;business-context&#8217;, &#8216;logical&#8217; and &#8216;physical&#8217;. A &#8216;logical&#8217; (implementation-independent) design <em>realises</em> &#8211; i.e. makes more concrete &#8211; the support for a business-need or business-service described in the &#8216;business-context&#8217;; a &#8216;physical&#8217; (implementation-specific) design <em>realises</em> an implementation for a &#8216;logical&#8217; service; and so on. (Going the other way, the &#8216;logical-service&#8217; is the <em>reason</em> for the existence of the &#8216;physical-service&#8217;, the &#8216;business-service&#8217; is the <em>reason</em> for the existence of the &#8216;logical-service&#8217;, and so on all the way upward to the shared-enterprise Vision.)</p>
<p>If we&#8217;re working only within one row, we don&#8217;t need (or use) any <em>realization</em>-relations in our model. We only use <em>realization</em>-relations to describe linkages between different layers of abstraction, such as how a specific implementation realises a business-need.</p>
<p><strong>Beware of pseudo-&#8217;layers&#8217;</strong></p>
<p>I know I&#8217;ve said this several times in various posts, but it needs to be hammered home: <em>the &#8216;layers&#8217; used in IT-centric frameworks such as TOGAF and Archimate are not layers of abstraction</em>, and hence should <em>not</em> be used as layers in enterprise-architecture models. Those pseudo-&#8217;layers&#8217; are highly misleading, as they blur the fundamental distinctions between abstraction and implementation-type: for example, the so-called &#8216;Business&#8217;-layer is often used as a random grab-bag containing a jumbled-up mess of any non-implementation-specific abstraction <em>and</em> anything that might be classed as &#8216;not-IT&#8217;. The resultant scrambling of inter-entity relationships is illustrated well in this diagram from the <a title="Archimate v1.0, Chapter 7: Cross-layer dependencies" href="http://www.opengroup.org/archimate/doc/ts_archimate/chap7.html" target="_blank">Archimate specification</a>:</p>
<p style="text-align: center;"><img class="alignnone" title="Archimate specification, Figure 39: Relationships between Business Layer and Application Layer Concepts" src="http://www.opengroup.org/archimate/doc/ts_archimate/ts_archimate_files/image077.png" alt="" width="500" height="150" /></p>
<p style="text-align: center;">Archimate v1.0, Figure 39: (c) Open Group 2009</p>
<p>The relationship between &#8216;Business Object&#8217; and &#8216;Data Object&#8217; is correctly shown here as a <em>realization</em>: it crosses a boundary between layers of abstraction. However, all of the other links would be shown in Enterprise Canvas as variations on a theme of <em>composition</em> &#8211; i.e. relationships that do <em>not</em> cross layer-boundaries.</p>
<p><strong>Be wary of implicit inter-layer transitions in &#8216;containment&#8217; views</strong></p>
<p>&#8216;Containment&#8217; is a popular space-saving technique supported by many toolsets, such as Phil Beauvoir&#8217;s excellent free <a title="Archi toolset for Archimate" href="http://archi.cetis.ac.uk/" target="_blank">Archi</a> cross-platform toolset for Archimate (funded by UK <a title="JISC: 'the UK’s expert on information and digital technologies for education and research'" href="http://www.jisc.ac.uk/" target="_blank">JISC</a>). Within the model, <a title="Archi 'Automatic Relationship Management System' for nested-relations" href="http://archi.cetis.ac.uk/movies/nested-relations/nested-relations.html" target="_blank">an entity can &#8216;contain&#8217; other entities</a>, which usually implies that the &#8216;child&#8217; entities have <em>composition</em>-relations with the &#8216;parent&#8217;.</p>
<p>In Enterprise Canvas, this is implied in the matrix-subdivision of the core Service entity into nine subsidiary cells:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-svc.png"><img class="aligncenter size-medium wp-image-3767" title="sim-contain-svc" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-svc-300x161.png" alt="" width="300" height="161" /></a></p>
<p>And also implied in the &#8216;before / during / after&#8217; split of the inter-service flow, as represented in this metamodel by the <em>Exchange</em>-entity:</p>
<p><img class="aligncenter size-medium wp-image-3768" title="sim-contain-svc-exch" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-svc-exch-300x135.png" alt="" width="300" height="135" /></p>
<p>There&#8217;s no doubt that this is &#8216;cleaner&#8217; and (usually) easier to read than doing the same thing with <em>composition</em>-links:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-unpack.png"><img class="aligncenter size-medium wp-image-3770" title="sim-contain-unpack" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-unpack-300x177.png" alt="" width="300" height="177" /></a></p>
<p>However, do beware that in some cases, the &#8216;containment&#8217; may actually be a <em>realization</em>-link, not a <em>composition</em>-link. A very common example is where we would want to show an implementation-independent (row-3) service &#8216;containing&#8217; the implementation-specific (row-4) services that bring that higher-level abstraction into reality. The catch is that that&#8217;s a <em>realization</em> relationship &#8211; a transition between rows, or layers of abstraction &#8211; rather than a simple matter of granularity within the same layer. Hence if we use &#8216;containment&#8217;, we need some means to distinguish between <em>composition</em>-relations and <em>realization</em>-relations for the implied links between the &#8216;parent&#8217; and its &#8216;children&#8217;.</p>
<p>One way to do this is that, in keeping with the dotted-line of the <em>realization</em>-relation, we could use a dotted-line rather than solid-line for the boundary of a <em>Service</em>-entity or <em>Exchange</em>-entity. What&#8217;s not immediately clear, though, is to which entity we should apply the dotted-line, because the <em>realization</em> could be considered to go either way. One convention we could use is that if only some of the &#8216;children&#8217; have <em>realization</em>-relations with the parent, then the dotted-line would apply to each of those children; whereas if all of the children have <em>realization</em>-relations with the parent, the dotted-line should apply to the parent:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-real.png"><img class="aligncenter size-medium wp-image-3771" title="sim-contain-real" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-contain-real-300x87.png" alt="" width="300" height="87" /></a></p>
<p>It would be good if the toolset could manage this automatically for us, but in almost all cases we should be able to do this manually if need be.</p>
<p><strong>Alternate modelling for <em>Exchange</em> entities</strong></p>
<p>The <em>Exchange</em>-entities represent whatever passes between <em>Service</em>-entities in a <em>flow</em>-relation between each other.</p>
<p>In the standard modelling-usage that I described in the previous post, the <em>Exchange</em> is literally placed between <em>Service</em> entities, and the <em>flow</em>-relation links directly to the <em>Exchange</em> on both the &#8216;incoming&#8217; and &#8216;outgoing&#8217; side:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exch-inline.png"><img class="aligncenter size-full wp-image-3772" title="sim-exch-inline" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exch-inline.png" alt="" width="284" height="58" /></a></p>
<p>This is probably the best way to model <em>Exchange</em>-entities if there&#8217;s a strong emphasis on <em>flow</em>-content &#8211; as there is in <a title="Wikipedia on VPEC-T (values, policies, events, content, trust)" href="http://en.wikipedia.org/wiki/VPEC-T" target="_blank">VPEC-T</a> analysis, for example, where we focus on what a service would need or provide <em>before</em> looking for other services that would provide or consume that inter-service content.</p>
<p>But if we&#8217;re more interested in relationships between services, with only secondary interest in the content of what passes between them, it may be better to attach the <em>Exchange</em>-entity to the respective <em>flow</em>-relation, rather than visibly interposing it in the flow:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exch-attach.png"><img class="aligncenter size-full wp-image-3773" title="sim-exch-attach" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exch-attach.png" alt="" width="190" height="133" /></a></p>
<p>The disadvantage of the &#8216;attached-<em>Exchange</em>&#8216; option is that it&#8217;s not well suited to showing a split into subsidiary-<em>Exchange</em> items linked to the attached &#8216;parent&#8217; via <em>composition</em>-relations: visually it becomes too messy, and hard to &#8216;read&#8217;. If you need to show composition / decomposition, use the in-<em>flow</em> format instead.</p>
<p>Ideally, the toolset and its metamodel should be able to support both display-formats. If it can support only one variant, use the in-<em>flow</em> format, rather than the &#8216;attached&#8217; format.</p>
<p><strong>Keeping things simple</strong></p>
<p>Remember that one of the key aims here is to keep things simple, without ever dropping down into the over-simplistic. If we ignore for the moment the row-0 special-case of the <em>Vision</em> and <em>Value</em> entities, there are only two entity-types in the entire notation: <em>Service</em>, which does something; and <em>Exchange</em>, which represents something that passes between services. That&#8217;s it.</p>
<p style="padding-left: 30px;">Because of that principle that &#8216;everything is a service&#8217;, it should be straightforward to substitute a graphic or photograph for the <em>Service</em>-entity in a model &#8211; which should make it much easier to create variations of models that will make visual sense to executives, line-managers and other non-architects, whilst still retaining the formal rigour of the model beneath the visible surface.</p>
<p>And there are only three types of relationship possible between those entities, which in turn follow very simple rules:</p>
<ul>
<li><em>flow</em>-relations (between services) or <em>composition</em>-relations (internal structure of services and exchanges) can only connect <em>within</em> a single &#8216;row&#8217; or layer of abstraction</li>
<li><em>realization</em>-relations (from abstract to concrete) can only connect <em>between</em> layers of abstraction</li>
</ul>
<p>Again, that&#8217;s it.</p>
<p style="padding-left: 30px;">It would be helpful if the metamodel could also include common non-semantic items such as groups and junctions and annotations, but they&#8217;re not required as such for the notation: they&#8217;re just useful.</p>
<p>And <em>because</em> the notation is so simple, it allows the true complexity in the context to emerge and surface cleanly through the modelling process. We don&#8217;t get distracted by arbitrary pseudo-&#8217;layers&#8217;: it&#8217;s just the enterprise, <em>as</em> enterprise.</p>
<p>For many modelling-purposes, the only relation-type we&#8217;ll need is the <em>flow</em>-relation. For example, a simple supply-chain with switching between multiple suppliers:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multisupply.png"><img class="aligncenter size-medium wp-image-3775" title="sim-multisupply" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multisupply-300x115.png" alt="" width="300" height="115" /></a></p>
<p>Or a business-model with multiple client-segments, where we use <em>Exchange</em>-entities to record the different transactions and transaction-content for each client-group:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multiclient.png"><img class="aligncenter size-medium wp-image-3776" title="sim-multiclient" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multiclient-300x158.png" alt="" width="300" height="158" /></a></p>
<p>We use decomposition &#8211; modelled via <em>composition</em>-relations &#8211; to drill down into more details about structure. When we&#8217;re aiming to model trade-offs between implementation-options, or service-substitutions in disaster-recovery, we start to see the real value of a notation that <em>doesn&#8217;t</em> make arbitrary distinctions between IT-based, machine-based and manual service-implementations:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multibuild.png"><img class="aligncenter size-medium wp-image-3778" title="sim-multibuild" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-multibuild-300x227.png" alt="" width="300" height="227" /></a></p>
<p>For most modelling, we won&#8217;t use <em>realization</em>-relations at all. The main occasions where we <em>would</em> use them are:</p>
<ul>
<li>mapping &#8216;logical-to-physical&#8217; transforms, and other moves from abstract to concrete</li>
<li>mapping dependencies of &#8216;why&#8217; / &#8216;how&#8217; between the layers &#8211; for example, showing how a specific service contributes to the overall aims of the shared-enterprise</li>
</ul>
<p>But that&#8217;s about it, really. Very simple. And yes, best to keep it that way as much as we can.</p>
<p><strong>Enterprise Canvas &#8211; the full set of service-relationships</strong></p>
<p>Because the notation consists of just two main entity-types and three relation-types, it&#8217;s certainly simple when compared to other notations. And at first glance it also <em>looks</em> simple when compared with the original Enterprise Canvas summary of inter-service relationships:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2010/11/napkin-kitchensink_sml.png"><img class="aligncenter size-medium wp-image-1453" title="napkin-kitchensink_sml" src="http://weblog.tetradian.com/wp-content/uploads/2010/11/napkin-kitchensink_sml-300x204.png" alt="" width="300" height="204" /></a></p>
<p>Not quite so simple, though, when we map out in this notation the full set of relations shown in that visual-summary above, including the relative roles of each of the <em>flow</em>-relations and all of the implied <em>composition</em>-relations:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-complete.png"><img class="aligncenter size-full wp-image-3779" title="sim-complete" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-complete.png" alt="" width="450" height="300" /></a></p>
<p>That should, I think, give some idea of the full power of the Enterprise Canvas and its underlying concepts: there&#8217;s a lot in there&#8230;</p>
<p>The original Enterprise Canvas is compact and concise, but it&#8217;s likely to be hard to implement in any of the existing EA toolsets. (That original notation is still probably the best for rough-sketches on paper or whiteboard, though.) This simplified version is somewhat less concise, but it would be much easier to implement in an EA toolset, and easier for us to increase its uptake and more general adoption across the EA disciplines. Ultimately, though, just choose whatever works best in the context!</p>
<p>Comments / suggestions as usual, if you would? Many thanks for reading this far, anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/11/more-on-simplified-ecanvas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Simplifying the Enterprise Canvas</title>
		<link>http://weblog.tetradian.com/2011/09/10/simplifying-ecanvas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=simplifying-ecanvas</link>
		<comments>http://weblog.tetradian.com/2011/09/10/simplifying-ecanvas/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 21:10:36 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[effectiveness]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[enterprise canvas]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[story]]></category>
		<category><![CDATA[toolset]]></category>
		<category><![CDATA[values]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3739</guid>
		<description><![CDATA[The Enterprise Canvas is a model-type for use in enterprise-architecture, that can be used to describe any aspect of the enterprise, providing a consistent, unified view all the way from strategy to execution. But can we simplify it so as to build support for it in existing EA toolsets? The full specification for Enterprise Canvas [...]]]></description>
			<content:encoded><![CDATA[<p>The Enterprise Canvas is a model-type for use in enterprise-architecture, that can be used to describe any aspect of the enterprise, providing a consistent, unified view all the way from strategy to execution. But can we simplify it so as to build support for it in existing EA toolsets?</p>
<p>The full specification for Enterprise Canvas is in my book <em><a title="Book 'Mapping the Enterprise: modelling the enterprise as services with the Enterprise Canvas'" href="http://tetradianbooks.com/2010/11/ecanvas/" target="_blank">Mapping the Enterprise</a></em>, which at present you can still download for free from <a title="Free download of PDF-format version of book 'Mapping the Enterprise'" href="http://tetradianbooks.com/2010/11/ecanvas-ebook/" target="_blank">here</a>; there&#8217;s also a free two-page <a title="Summary-sheet for 'Mapping the Enterprise' (Enterprise Canvas)" href="http://tetradianbooks.com/2010/12/ecanvas-summary/" target="_blank">summary-sheet</a> in PDF format. It incorporates and unifies themes from a wide variety of other model-types in common use in EA, such as <a title="Wikipedia on Zachman Framework" href="http://en.wikipedia.org/wiki/Zachman_Framework" target="_blank">Zachman</a>, <a title="Wikipedia on Archimate" href="http://en.wikipedia.org/wiki/ArchiMate" target="_blank">Archimate</a>, <a title="Wikipedia on Business Model Canvas" href="http://en.wikipedia.org/wiki/Business_Model_Canvas" target="_blank">Business Model Canvas</a>, <a title="Wikipedia on VPEC-T" href="http://en.wikipedia.org/wiki/VPEC-T" target="_blank">VPEC-T</a>, <a title="Wikipedia on Viable System Model" href="http://en.wikipedia.org/wiki/Viable_System_Model" target="_blank">Viable System Model</a>, <a title="Slidedeck 'What is an Enterprise' on Slideshare" href="http://www.slideshare.net/tetradian/what-is-an-enterprise" target="_blank">Market Model</a> and many others, at first glance it can often seem a fairly complex beast.</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2010/11/napkin-kitchensink_sml.png"><img class="aligncenter size-medium wp-image-1453" style="border-style: initial; border-color: initial;" title="napkin-kitchensink_sml" src="http://weblog.tetradian.com/wp-content/uploads/2010/11/napkin-kitchensink_sml-300x204.png" alt="" width="300" height="204" /></a></p>
<p>The image above summarises the core service-entity and its relationships, but in addition to that, services can be described at seven distinct levels of abstraction, services-flows take place over several distinct phases (the &#8216;Market Cycle&#8217;), and so on. It&#8217;s a powerful way to model what&#8217;s going on within an enterprise, but there&#8217;s a lot to it; and I&#8217;d have to admit it&#8217;ll seem a bit daunting at first&#8230;</p>
<p>And there&#8217;s a real problem that at present there&#8217;s no EA toolset that implements it. Hence the only way to use it at present in EA modelling is via pen and paper, and then manual transfer to other more constrained, context-specific model-types. Which kind of defeats the object of the exercise, about unifying across the whole enterprise space&#8230;</p>
<p>So there&#8217;s a real challenge there: compress it all down into a simplified form that <em>can</em> be implemented on an existing EA toolset.</p>
<p>And courtesy of a great meeting yesterday with <a title="Alex Yakovlev (@ayakovlev) on Twitter" href="http://twitter.com/ayakovlev" target="_blank">Alex Yakovlev</a>, it looks like we&#8217;ve cracked it:</p>
<ul>
<li>one main entity-type (<em>Service</em>)</li>
<li>one subsidiary entity-type (<em>Exchange</em>)</li>
<li>three relation-types (<em>flow</em>, <em>composition</em> and <em>realization</em>)</li>
</ul>
<p>There are also two more subsidiary entity-types (<em>Vision</em> and <em>Value</em>) that are probably optional because they&#8217;re only used in one specific context and can be simulated anyway by other entity-types (<em>Service</em> and <em>Exchange</em> respectively).</p>
<p>That&#8217;s it.</p>
<p>And it&#8217;s all close enough to common model-types such as UML, Archimate or BPMN that it can be implemented via a few minor tweaks to entity-types and relation-types that already exist within those models. Which means that we should be able to translate automatically to and from those other model-types. That&#8217;s <em>definitely</em> good news. (For me, anyway. <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p>So, here goes: formal details for a simplified variant of Enterprise Canvas that can be implemented as a UML Profile or equivalent metamodel in any EA toolset that supports that kind of metamodelling. (Alex is aiming to get an initial UML Profile for <a title="Wikipedia on Sparx Enterprise Architect" href="http://en.wikipedia.org/wiki/Enterprise_Architect_(Visual_Modeling_Platform)" target="_blank">Sparx Enterprise Architect</a> done in the next few days &#8211; I&#8217;ll post here when it becomes available.)</p>
<p><span id="more-3739"></span></p>
<p><strong><em>Service</em> entity-type</strong></p>
<p>In Enterprise Canvas, <em>everything</em> is or delivers a service. One side-effect is that that means that, in a model, everything (and everyone) that does something &#8211; the service in focus, its suppliers and customers, its investors and beneficiaries, and the services that coordinate, direct and validate it &#8211; can all be represented as instances of a single entity-type, <em>Service</em>.</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-service.png"><img class="aligncenter size-full wp-image-3747" title="sim-service" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-service.png" alt="" width="76" height="57" /></a></p>
<p>Parameters for the <em>Service</em> entity would depend somewhat on the abstraction-layer being represented.</p>
<p>At the top layer, row-0 &#8216;Enterprise&#8217;, a <em>Service</em> actually represents the shared-enterprise vision, which should be defined solely by its name. (If supported, a <em>Vision</em> entity should be used for this, rather than a <em>Service</em>.)</p>
<p>At the next layer, row-1 &#8216;Scope&#8217;, <em>Service</em> entities can be used (if somewhat incorrectly) as placeholders and carriers for the lists of overall enterprise-content.</p>
<p>At row-2 &#8216;Business Services&#8217;, <em>Service</em> entities should be used, but without much if any content, as the focus at this layer is on key relationships between enterprise-scope services.</p>
<p>At row-3 &#8216;Service-content&#8217; and below, more detail should added, according to the needs of the respective layer (&#8216;Logical&#8217; implementation-independent, &#8216;Physical&#8217; implementation-specific, deployment, and run-time record). Content and activity of the service should typically be described in terms of the &#8216;single-row extended-Zachman&#8217; taxonomy used within Enterprise Canvas:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/01/single-row-extZachman.png"><img class="aligncenter size-medium wp-image-1560" title="single-row-extZachman" src="http://weblog.tetradian.com/wp-content/uploads/2011/01/single-row-extZachman-300x134.png" alt="" width="300" height="134" /></a></p>
<p><em>Toolset implementation</em>: Start from an appropriate metamodel entity-type, such as UML or BPMN &#8216;Activity&#8217;, or Archimate &#8216;Business Service&#8217;. Rename this entity-type &#8216;Service&#8217;. Ensure that it has a &#8216;name&#8217;-parameter; other parameters are probably optional.</p>
<p>For conceptual compatibility with BPMN (&#8216;Activity&#8217;), Archimate (&#8216;Business Service&#8217; etc) and UML Activity Diagram (&#8216;Activity&#8217;), a <em>Service</em> entity should be displayed as a rounded-rectangle.</p>
<p><strong><em>Exchange</em> entity-type</strong></p>
<p>The <em>Exchange</em> entity-type represents what is passed <em>between</em> services, or involved in relationships between those services:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exchange.png"><img class="aligncenter size-full wp-image-3748" title="sim-exchange" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-exchange.png" alt="" width="58" height="58" /></a></p>
<p><em>Exchange</em> entities should only be used in models representing row-3 &#8216;Service-content&#8217; or below. The content of the exchange should be described in terms of the &#8216;Asset&#8217;-column in the single-row extended-Zachman taxonomy above.</p>
<p><em>Toolset implementation</em>: Start from an appropriate metamodel entity-type, such as UML Activity &#8216;Object&#8217; (&#8216;Document&#8217;), BPMN &#8216;Data Object&#8217;, or Archimate &#8216;Business Object&#8217;. Rename this entity-type &#8216;Exchange&#8217;. Ensure that it has at least a &#8216;name&#8217;-parameter, and preferably a text-box and/or checklist to summarise the content of the exchange, as above.</p>
<p>The <em>Exchange</em> entity-type could be represented in several different ways, depending on the content of the exchange, and the notation used as the base for the metamodel. A suggested default would be the &#8216;data object&#8217; type used in several notations, as above. Alternatively we might use different symbols to represent different asset-types used in the respective exchange: for example, a box for physical objects, a page for information, a stick-figure for relations, and a flash for brands and other aspirational-assets.</p>
<p>However, given that many exchanges may involve multiple asset-types or composites, it may be better to use only the default, or to allow annotation of the single entity-type, allowing one or more of the asset-type symbols as &#8216;decorations&#8217;, similar to the &#8216;decoration&#8217; add-ons used in Archimate to distinguish between service-types.</p>
<p><strong><em>Vision</em> and <em>Value</em> entity-types</strong></p>
<p>The Vision and its concomitant Values are the ultimate anchors for everything that happens in the shared-enterprise &#8211; or, to put it the other way round, every service and exchange must in some way help towards the realising of the shared-enterprise vision and its values:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-vision-value.png"><img class="aligncenter size-medium wp-image-3749" title="sim-vision-value" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-vision-value-300x126.png" alt="" width="300" height="126" /></a></p>
<p>The <em>Vision</em> and <em>Value</em> entities should appear only in row-0 &#8216;Enterprise&#8217;, and are the only content that should appear in that row. For most purposes, only one <em>Vision</em> should be used: multiple <em>Vision</em> entities should only be used for the special case of assessing clashes between multiple shared-enterprises impacting on an organisation. (If necessary, a suitably-labelled <em>Service</em> entity may be used as a substitute for a <em>Vision</em> entity.) Use of <em>Value</em> entities is always optional in modelling; any number of <em>Value</em> entities may be attached to a <em>Vision</em> via <em>composition</em>-relations.</p>
<p>Everything in row-1 &#8216;Scope&#8217; should have a <em>realise</em>-relation to the <em>Vision</em> and, optionally, to one or more of the Value-entities (if any).</p>
<p><em>Service</em>-entities that are used to represent (&#8216;validation-services&#8217; (i.e. services that deliver &#8216;validation&#8217; support for other other services, via a <em>flow</em>-relation with a &#8216;validate&#8217; role), should generally take part in <em>realise</em>-relation chains that ultimately link up to a respective <em>Value</em> entity (if present).</p>
<p><em>Toolset implementation</em>: In both cases, start from an appropriate metamodel entity-type, such as the Archimate &#8216;Service&#8217;-lozenge or &#8216;Meaning&#8217;-cloud for <em>Vision</em>, and the Archimate &#8216;Value&#8217;-oval for <em>Value</em>. In both cases, the only parameter should be a name of descriptor for the respective vision or value.</p>
<p>For simplicity, the representation should draw on that used for the respective base-type &#8211; i.e. lozenge, cloud or oval:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-vision-cloud.png"><img class="aligncenter size-medium wp-image-3751" title="sim-vision-cloud" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-vision-cloud-300x60.png" alt="" width="300" height="60" /></a></p>
<p>Although usage of distinct <em>Vision</em> and <em>Value</em> entities would be preferred, for clearer modelling, a simpler metamodel-implementation could use a <em>Service</em> entity as a substitute for the <em>Vision</em> entity. In this case, to keep the metamodel as simple as possible, no <em>Value</em> entity should be defined, and hence no specific relation-type links need be defined; instead, the single <em>Service</em> should used as the anchor-point for <em>realise</em>-relations with all layers of abstraction and concretisation (&#8216;rows&#8217;) from below.</p>
<p><strong><em>flow</em> relation-type</strong></p>
<p><em>Service</em>-entities are connected to each other by <em>flow</em>-relations, to which <em>Exchange</em>-entities may be attached or imposed to indicate what is exchanged between those services:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-flow.png"><img class="aligncenter size-full wp-image-3752" title="sim-flow" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-flow.png" alt="" width="284" height="58" /></a></p>
<p>The <em>flow</em>-relations should only be used in row-2 (&#8216;Business Services&#8217;) and below. In row-3 and below, each <em>flow</em> should also take on a distinct role, representing the Enterprise-Canvas inter-service relationships, as follows:</p>
<ul>
<li><em>provide</em>: simple provision of products and services, used to link with other services in Supplier and Customer relationships to this service (a Supplier is a source for or &#8216;provides&#8217; a flow; a Customer is a destination for or &#8216;consumes&#8217; a flow)</li>
<li><em>invest</em>: a flow from a service in an Investor relationship to this service</li>
<li><em>benefit</em>: a flow to a service in a Beneficiary relationship to this service</li>
<li><em>coordinate</em>: a flow or exchange with a service in a Coordination guidance-relationship to this service</li>
<li><em>direct</em>: a flow or exchange with a service in a Direction guidance-relationship to this service</li>
<li><em>validate</em>: a flow or exchange with a service in a Validation guidance-relationship to this service</li>
</ul>
<p>(An open or &#8216;unspecified&#8217; role should generally be used in row-2 <em>flow</em>-relations, and in other rows for flows in which the role has not yet been determined.)</p>
<p>Connection-rules are as follows:</p>
<ul>
<li>a <em>flow</em>-relation may link a <em>Service</em>-entity to another <em>Service</em>-entity.</li>
<li>a <em>flow</em>-relation may link a <em>Service</em>-entity to an <em>Exchange</em>-entity, or an <em>Exchange</em>-entity to a <em>Service</em>-entity.</li>
</ul>
<p>Note that flows can only link &#8216;horizontally&#8217; across a row (layer of abstraction). They cannot and must not be used to link between services and/or exchanges in different rows.</p>
<p><em>Toolset implementation</em>: Start from an appropriate metamodel relation-type such as Archimate &#8216;flow&#8217;. The parameters should include an optional name, an identifier for the role (e.g. via dropdown-list), and an optional text-area to describe the content (if no <em>Exchange</em> entity is attached), triggering-events and other relevant information.</p>
<p>For consistency with Archimate, BPMN and UML, the <em>flow</em>-relation should be represented by a dotted-line ending in a solid arrow-head, indicating the primary direction of the flow:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-flowline.png"><img class="aligncenter size-full wp-image-3753" title="sim-flowline" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-flowline.png" alt="" width="77" height="10" /></a></p>
<p>(For <em>flow</em>-relations in which there is no emphasised direction of flow, an arrow-head should be used at both ends.)</p>
<p><strong><em>composition</em> relation-type</strong></p>
<p>In addition to layers of abstraction (&#8216;rows&#8217;), we often also need to model layers of granularity (composition), in which we examine in finer detail of the structure and implementation of a <em>Service</em> or <em>Exchange</em>.</p>
<p style="padding-left: 30px;">The nine subsidiary cells of a service within Enterprise Canvas (a matrix of inbound / self / outbound, and before / during / after the main-transaction) and the three subsidiary flows in an inter-service exchange (again, before / during / after the main-transaction) are somewhat-abstract examples of composition or decomposition. However, these are merely the standard partitionings used in Enterprise Canvas, and any appropriate alternate partitioning may be used instead.</p>
<p style="padding-left: 30px;">One somewhat-confusing example of composition/decomposition is the purported &#8216;layering&#8217; in TOGAF or Archimate. In that context, parts of a service may be composed of (actually, implemented by) software applications, which in turn are in part composed of (actually, hosted on) physical IT systems and networks.</p>
<p>All of these can be modelled by <em>composition</em> relations between <em>Service</em>-entities, and between <em>Exchange</em>-entities:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-composition.png"><img class="aligncenter size-medium wp-image-3754" title="sim-composition" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-composition-300x98.png" alt="" width="300" height="98" /></a></p>
<p>The <em>composition</em>-relations should only be used in row-2 (&#8216;Business Services&#8217;) and below. In row-3 (&#8216;Service Content&#8217;) and below, it may be necessary to annotate the composition to add further specifics about the nature or sub-type of the composition, for example:</p>
<ul>
<li><em>composition</em>: the &#8216;child&#8217; services or exchanges are of the same general type as the &#8216;parent&#8217;</li>
<li><em>aggregation</em>: the &#8216;child&#8217; services or exchanges are a mix of structurally-different types relative to the &#8216;parent&#8217;</li>
<li><em>assignment</em>: the &#8216;child&#8217; service or exchange is of a structurally-different type taking on the role of a &#8216;child&#8217; to the &#8216;parent&#8217;</li>
<li><em>used-by</em>: the &#8216;child&#8217; service or exchange is &#8216;realised by&#8217; a structurally-different type to the &#8216;parent&#8217; (e.g. business-service implemented by software-application, in turn hosted-by physical-IT) but at the <em>same</em> level of abstraction</li>
</ul>
<p>(Note that in Archimate and UML these are all defined as different relation-types. For <em>this</em> context they are best understood as variants on a theme of composition/decomposition.)</p>
<p>The default meaning for a <em>composition</em>-relation is that the &#8216;child&#8217;-entity is of a structurally similar type to the &#8216;parent&#8217; &#8211; i.e. a simple composition/decomposition relationship.</p>
<p>Connection-rules are as follows:</p>
<ul>
<li>a <em>composition</em>-relation may link a <em>Service</em>-entity to another <em>Service</em>-entity.</li>
<li>a <em>composition</em>-relation may link an <em>Exchange</em>-entity to another <em>Exchange</em>-entity.</li>
<li>a <em>composition</em>-relation may link a <em>Value</em>-entity to a <em>Vision</em>-entity.</li>
</ul>
<p>Note that composition/decomposition relationships can only link <em>within</em> a row (layer of abstraction). They cannot and must not be used to link between services and/or exchanges in different rows. To link between rows (i.e. different layers of abstraction), <em>always</em> use a <em>realization</em>-relation &#8211; a <em>composition</em>-relation should <em>never</em> be used for this purpose.</p>
<p style="padding-left: 30px;">Take especial care when emulating an Archimate &#8216;assigned-to&#8217; or &#8216;uses/used-by&#8217; relation: these are often used in Archimate in a very misleading way, as a kind of analogue of a <em>realization</em>-relation, but one that occurs at the <em>same</em> level of abstraction. Their main function in Archimate, TOGAF and many other IT-centric frameworks is to provide links between their purported &#8216;layers&#8217; (Business, Application, Technology), which in reality are arbitrary subset-partitions of the conceptual-space. In effect, &#8216;Business&#8217; is used for anything that involves purpose or human concerns; &#8216;Application&#8217; is used for all information-related concerns (but for IT-maintained information only); and &#8216;Technology&#8217; for anything to do with IT-hardware (with no allowance for any non-IT forms of technology). These pseudo-&#8217;layers&#8217; have no intrinsic relationship to layers of abstraction, and again are often highly misleading in <em>enterprise</em>-architecture practice. &#8220;You Have Been Warned&#8221; etc&#8230;</p>
<p><em>Toolset implementation</em>: Start from an appropriate metamodel relation-type such as Archimate &#8216;composition&#8217;. The parameters should include an optional name, an identifier for the sub-type (e.g. via dropdown-list), and an optional text-area to describe the composition/decomposition context.</p>
<p>For consistency with Archimate, BPMN and UML, the <em>composition</em>-relation should be represented by a line ending in a solid diamond-arrowhead, with the arrow-head pointing to the &#8216;parent&#8217;:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-compositionline.png"><img class="aligncenter size-full wp-image-3756" title="sim-compositionline" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-compositionline.png" alt="" width="153" height="15" /></a></p>
<p>For other Archimate variations such as aggregation, assignment and used-by, it is probably best to use the respective Archimate line-decoration (open-diamond, dot and line-arrow respectively).</p>
<p><strong><em>realization</em> relation-type</strong></p>
<p>Links between layers of abstraction &#8211; for example, a transform between a &#8216;logical&#8217; implementation-independent (&#8216;row-3&#8242;) service and a &#8216;physical&#8217; implementation-specific (&#8216;row-4&#8242;) instantiation of that service &#8211; should be modelled via <em>realization</em>-relations between <em>Service</em>-entities and between <em>Exchange</em>-entities:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-realization.png"><img class="aligncenter size-full wp-image-3757" title="sim-realization" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-realization.png" alt="" width="209" height="152" /></a></p>
<p>The <em>realization</em>-relations should be used between <em>all</em> rows, as appropriate, to create a full trail of dependencies between &#8216;Why&#8217; (abstract, moving &#8216;upward&#8217; between rows) and &#8216;How&#8217; (concrete, moving &#8216;downward&#8217; between rows).</p>
<p>There are no sub-types of <em>realization</em>-relation.</p>
<p>Connection-rules are as follows:</p>
<ul>
<li>a <em>realization</em>-relation may link a <em>Service</em>-entity to another <em>Service</em>-entity.</li>
<li>a <em>realization</em>-relation may link an <em>Exchange</em>-entity to another <em>Exchange</em>-entity.</li>
<li>a <em>realization</em>-relation may link a <em>Service</em>-entity &#8216;upward&#8217; to a <em>Vision</em>-entity or <em>Value</em>-entity.</li>
</ul>
<p>Note that <em>realization</em> relationships can only link <em>between</em> rows (layers of abstraction). They cannot and must not be used to link between services and/or exchanges in the same row. To link within rows (i.e. the same layer of abstraction), <em>always</em> use a <em>flow</em>-relation or <em>composition</em>-relation &#8211; a <em>realization</em>-relation should <em>never</em> be used for this purpose.</p>
<p style="padding-left: 30px;">Take especial care when emulating an Archimate &#8216;realization&#8217; relation. These are generally correct, in the sense that they usually link between different levels of abstraction (for example, Data Object realises Business Object); but note that in Archimate they can also be used to link between entities at the <em>same</em> level of abstraction. As usual, the problem here is the misleading pseudo-&#8217;layers&#8217; (Business, Application, Technology) in Archimate, TOGAF and the like.</p>
<p><em>Toolset implementation</em>: Start from an appropriate metamodel relation-type such as Archimate &#8216;realization&#8217;. The parameters should include an optional name and an optional text-area to describe the realisation context.</p>
<p>For consistency with Archimate, BPMN and UML, the <em>realization</em>-relation should be represented by a dotted-line ending in a open-triangle arrowhead, with the arrow-head pointing to the more abstract &#8216;parent&#8217;:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-realizationline.png"><img class="aligncenter size-full wp-image-3758" title="sim-realizationline" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-realizationline.png" alt="" width="77" height="25" /></a></p>
<p>No sub-types are required for the <em>realization</em>-relation.</p>
<p><strong>Some comments on modelling</strong></p>
<p>This simplified version of Enterprise Canvas does incorporate all of the original features, but in somewhat different form: a significant amount of the information &#8211; particularly around relative roles of services &#8211; is now carried within the entities and flows, rather than as per the original entity-notation. There are also some potential inconsistencies in the way relations are mapped in the &#8216;Scope&#8217; layer (row-1). In some ways this version is simpler to use, but a side-effect is that more responsibility for correct modelling of underlying detail is passed to the modeller rather than explicit in the notation.</p>
<p>By default, colours for entities and flows are not semantically significant. Use colour in any way which suits the meaning best.</p>
<p>A quick summary of the full simplified notation is as follows:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-summary.png"><img class="aligncenter size-medium wp-image-3759" title="sim-summary" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/sim-summary-300x200.png" alt="" width="300" height="200" /></a></p>
<p>One crucial area of concern is around inter-layer (inter-row) relationships &#8211; i.e. via<em> realization</em>-relations. In common with UML and BPMN, Enterprise Canvas demands a rigorous approach to proper modelling of links between versus within the respective layers of abstraction. However, anyone whose main architecture-modelling background is via Archimate, TOGAF or the like may not be fully aware either <em>of</em> that rigour, or of the need for it in practice. The problem is that because of the explicit IT-orientation and implicit IT-centrism of those frameworks, separation of layers of abstraction is blurred together with pseudo-&#8217;layers&#8217; of implementation-category, as described above: &#8216;Business&#8217; for purpose and human focus, &#8216;Application&#8217; for (IT-specific) information, and &#8216;Technology&#8217; for (IT-specific) physical hardware. In effect, the &#8216;Business&#8217; pseudo-layer includes both purpose/human implementation (row-4 and below) <em>and</em> most items in implementation-independent layers of abstraction (row-3 or above). This cavalier approach to layers of abstraction is a <em>major</em> cause of problems when trying to use Archimate and the like in any non-IT-centric context.</p>
<p>In short: use <em>flow</em> and <em>composition</em>-relations only <em>within</em> layers of abstraction (rows); use <em>realization</em>-relations only <em>between</em> rows. <em>Don&#8217;t mix them up!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/10/simplifying-ecanvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s the point of this &#8216;EA metamodel&#8217;?</title>
		<link>http://weblog.tetradian.com/2011/09/08/why-ea-metamodel/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-ea-metamodel</link>
		<comments>http://weblog.tetradian.com/2011/09/08/why-ea-metamodel/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 10:30:23 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3198</guid>
		<description><![CDATA[I&#8217;ve been writing a lot recently about metamodels for enterprise-architecture and the like: but what&#8217;s the point? Why bother? Why all this fuss about something that&#8217;s way too technical to be of interest to almost anyone in the real workaday world? The real point behind all of this discussion (and there&#8217;ve been some really valuable comments [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been writing a lot recently about <a title="See links in post 'EA metamodel - the big picture (and the small picture too)'" href="http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/" target="_blank">metamodels for enterprise-architecture</a> and the like: but what&#8217;s the point? Why bother? Why all this fuss about something that&#8217;s way too technical to be of interest to almost anyone in the real workaday world?</p>
<p>The <em>real</em> point behind all of this discussion (and there&#8217;ve been <a title="Comments on post 'Back to the roots for EA metamodels'" href="http://weblog.tetradian.com/2011/09/01/back-to-roots-for-ea-toolset-metamodels/#comments" target="_blank">some</a> <a title="Comments on post 'More detail on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/#comments" target="_blank">really</a> <a title="Comments on post 'EA metamodel and method'" href="http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/#comments" target="_blank">valuable</a> <a title="Comments on post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/#comments" target="_blank">comments</a> <a title="Comments on post 'EA metamodel - the big picture'" href="http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/#comments" target="_blank">here</a> &#8211; many thanks indeed!) is that it&#8217;s not actually much about the metamodel at all. The structure of the metamodel itself is just a detail that we need at some stage to make things happen.</p>
<p>It&#8217;s not really about the model-types or models that could be constructed via such a metamodel &#8211; other than that we want this metamodel to support <em>any</em> type of model that would be needed in EA or strategy or the like.</p>
<p>It&#8217;s not even much about toolsets &#8211; other than that we need some non-proprietary method to allow us to move model-data and model-definitions from one toolset to another, and that we need toolsets that will more truly support the ways we actually work.</p>
<p>What it&#8217;s <em>really</em> about is how we use models in enterprise-architecture and other cross-domain disciplines.</p>
<p>The key-word there is &#8216;<em>cross-domain</em>&#8216;. In a single-domain context &#8211; software-architecture, perhaps, or IT-oriented process-design &#8211; there are standard model-types for that domain (such as UML and BPMN respectively), and we need to be careful to follow the rules that define those model-types. Sometimes &#8211; as with UML &#8211; there are multiple model-types and multiple notations, but they all act as views into the same formally-constrained context-space. The main focus in a single-domain context is on design and implementation &#8211; on <em>doing</em> something, in accordance with the rules that apply within the respective part of Reality Department.</p>
<p>In cross-domain disciplines like enterprise-architecture or strategy or business-model development, life is a lot messier (in terms of modelling, anyway <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). There is, by definition, almost an infinity of model-types and notations that could be used in different ways, all of which follow different and often conflicting rules. Most of those model-types come from specific single-domains &#8211; but often we don&#8217;t use the various model-types in the same way. Some of the emphasis is still on design &#8211; on linking the different domains together, despite the clashes between all those different rules. Yet we also need some means to map across those disparate domains: which is why &#8211; from <em>our</em> perspective &#8211; we need an underlying metamodel that would allow us to keep track of entities and relations and the like as they move between different models. Some structures such as UML and the underlying <a title="Wikipedia on MOF (Meta-Object Facility)" href="http://en.wikipedia.org/wiki/Meta-Object_Facility" target="_blank">MOF</a> standard will allow us to do this to some extent within a single domain &#8211; yet doing the same <em>between</em> domains is still something of a nightmare. Which is one reason why we need this &#8216;EA-metamodel&#8217; work to happen.</p>
<p>Yet often, in cross-domain work, the real focus is not on design, but on <em>sense-making</em>, and thence to <em>decision-making</em>. (Design does matter, of course, and matters a lot, but it usually comes later in the process.) <a title="Peter Bakker (@pbmobi) on Twitter" href="http://twitter.com/pbmobi" target="_blank">Peter Bakker</a> put it well in <a title="Comment by Peter Bakker to post 'EA metamodel - the big picture'" href="http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/#comment-64384" target="_blank">one of his comments</a>:</p>
<blockquote><p>For me the goal is not to make a tool to make or adapt other models but to gain insights from a diversity of models together which you won’t get from looking at the models separately.<br />
For that we need a sense-making tool which can translate the information from all those different senses (models) into a common “brain language” and use that common “brain language” to create new insights (patterns).</p></blockquote>
<p>To illustrate the point, Peter indicated in <a title="Comment by Peter Bakker to post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/#comment-64228" target="_blank">other</a> <a title="Comment by Peter Bakker to post 'EA metamodel - the big picture'" href="http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/#comment-64353" target="_blank">comments</a> that he was using the ideas here in a &#8216;thought-experiment&#8217; to develop context-insights by moving ideas around between four different model-types:</p>
<ul>
<li>mind-map</li>
<li>Business Model Canvas</li>
<li>tubemap</li>
<li>Venn-diagram</li>
</ul>
<p>Each of those model-types have their own distinct notations, rules and ways of working. Yet in this type of work, they&#8217;re <em>also</em> all merged together into a single sense-making process. Same, and different &#8211; both at the same time.</p>
<p>Overall, it&#8217;s a process I call &#8216;context-space mapping&#8217;, because we build maps and cross-maps across the whole context-space. (There are quite a lot of <a title="Posts on context-space mapping" href="http://weblog.tetradian.com/?s=%22context-space+mapping%22" target="_blank">posts here on context-space mapping</a>, if you&#8217;re interested; also some detailed description and practice in my book &#8216;<em><a title="Book 'Everyday Enterprise-Architecture - sensemaking, strategy, structures and solutions'" href="http://tetradianbooks.com/2010/05/everydayea/" target="_blank">Everyday Enterprise-Architecture</a></em>&#8216;.) And within that process, we tend to use models in radically different and often in intentionally-&#8217;wrong&#8217; ways. We move things around; we compare, contrast; we break the nominal rules of the model-type (which means, though, that we need to <em>know</em> those rules first if we&#8217;re going to get any real value from breaking them&#8230;); we use models in very different ways from which they were originally designed &#8211; using UML or Business Model Canvas as a concept-map, for example.</p>
<p>What we look for in that process is not so much the certainty of following the rules, but the insights that arise <em>between</em> the models, <em>behind</em> the rules. When &#8216;the usual rules&#8217; don&#8217;t seem to work, or don&#8217;t seem to make sense &#8211; which is usually the case in any sense-making exercise &#8211; we need to run the logic itself backwards, in order to derive what rules actually apply in that part of the real-world that we&#8217;re dealing with. It&#8217;s part of what I sometimes describe as the &#8216;<a title="Post 'Analyst, anarchist, architect'" href="http://weblog.tetradian.com/2011/08/02/analyst-anarchist-architect/" target="_blank">business-anarchist</a>&#8216; role, and which is a distinct discipline in its own right &#8211; the discipline of surfacing implications and hidden assumptions, and then reworking them into something we can actually <em>use</em>.</p>
<p>That&#8217;s what we need that type of toolset for &#8211; to support that type of cross-domain, cross-disciplinary sense-making.</p>
<p>That&#8217;s what we need that versatility in models for &#8211; to support the toolset in how it defines and uses and displays and cross-compares all the different types of models.</p>
<p>And that&#8217;s what we need that metamodel for &#8211; to support consistency and idea-tracking across the whole of that sense-making model-space, mapping across the entire context from every alternate direction and view.</p>
<p>So in all of this deep-technical-detail and so on, it&#8217;s essential that we never lose track of the <em>real</em> goal here: a means to support how we <em>actually</em> work with models and the like in enterprise-architectures. That metamodel-structure that I&#8217;d proposed in the previous posts is just one idea towards implementation of all of that. It&#8217;s nothing special, it&#8217;s not &#8216;My Preciousss&#8217; or whatever <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  &#8211; it&#8217;s just a way to present <em>something</em> that people can argue about and test out the underlying ideas. Other people who know they&#8217;re doing with the detail-work on metamodels would no doubt do it much better than I can: yet we do need <em>somewhere</em> to start, some way to start the ball rolling.</p>
<p>That&#8217;s what it&#8217;s <em>really</em> about. It&#8217;s not the metamodel itself that counts; it&#8217;s what we can <em>do</em> with it that counts. <em>That&#8217;s</em> the real point here.</p>
<p>Over to you for comments, perhaps?</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/08/why-ea-metamodel/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>EA metamodel &#8211; the big picture (and the small picture too)</title>
		<link>http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ea-metamodel-big-picture</link>
		<comments>http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 10:54:33 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3038</guid>
		<description><![CDATA[In the various previous posts about EA metamodels, we&#8217;ve been exploring some of the detailed structures for toolsets and the like at a very, very low-level. But what&#8217;s the big-picture here? What&#8217;s the point? So let&#8217;s step back for a moment, and look at real-world EA practice. Much of our work consists of conversations with [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a title="Post 'Guess I could do with some help here...'" href="http://weblog.tetradian.com/2011/08/10/could-do-with-some-help-here/" target="_blank">various</a> <a title="Post 'More on that enterprise-architecture help-needed'" href="http://weblog.tetradian.com/2011/08/15/more-on-that-ea-help-needed/" target="_blank">previous</a> <a title="Post 'Back to the roots for EA toolset metamodels'" href="http://weblog.tetradian.com/2011/09/01/back-to-roots-for-ea-toolset-metamodels/" target="_blank">posts</a> <a title="Post 'More detail on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/" target="_blank">about</a> <a title="Post 'EA metamodel and method'" href="http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/" target="_blank">EA</a> <a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">metamodels</a>, we&#8217;ve been exploring some of the detailed structures for toolsets and the like at a very, very low-level. But what&#8217;s the big-picture here? What&#8217;s the point?</p>
<p>So let&#8217;s step back for a moment, and look at real-world EA practice.</p>
<p>Much of our work consists of conversations with people, and getting people to talk together, so as to get the various things and processes and activities and everything else in the organisation and shared-enterprise to work better together.</p>
<p>To support those conversations, and to help sense-making and decision-making, we create models. Lots and lots of models. Different models, in different notations, for different different stakeholders, and different contexts.</p>
<p>Lots and lots of different ways to describe things that are often essentially the same, but happen to be seen from different directions.</p>
<p>Yet keeping track of the samenesses and and togethernesses and relationships and dependencies of everything in all those different portrayals is often a real nightmare.</p>
<p>Finding a way to resolve that nightmare is what this is all about.</p>
<p><strong>A bit of context</strong></p>
<p>Look around at your own context. If you&#8217;re doing any kind of architecture-work, or even just explaining things to other people, you&#8217;ll be doing lots of diagrams and drawings and models. Some will be hand-drawn, some will be done on a drawing-package such as Visio or Dia or LucidChart, and some may be done within a purpose-built modelling tool such as ArgoUML or Agilian or Sparx Enterprise Architect or Troux Metis. Lots of different ways of doing the same sort of thing with different levels of formal-rigour.</p>
<p>But if we look at it with a more abstract eye, what we&#8217;re using is different types of notation. Some will be too freeform to describe as a &#8216;notation&#8217; as such, though the point is that it&#8217;s still used for sense-making and decision-making. Once we get to a certain level, we tend to use some fairly standard notation such as UML or BPMN or Porter Value-Chain or Business Motivation Model or Business Model Canvas, simply because it&#8217;s easier to develop shared understanding with a shared model-notation.</p>
<p>And again with an abstract eye, each notation consists of the following:</p>
<ul>
<li>a bunch of &#8216;things&#8217; &#8211; the <em>entities</em> of the notation</li>
<li>a bunch of connections-between-things &#8211; the <em>relations</em></li>
<li>a bunch of rules or guidelines about how and when and why and with-what things may be related to other things &#8211; the <em>semantics</em> that identify the meanings of things and their relations and interdependencies</li>
<li>often, a graphic backplane, parts of which may be semantically significant as &#8216;<em>containers</em>&#8216; for things (such as the &#8216;building blocks&#8217; in Business Model Canvas)</li>
</ul>
<p>(Often a notation will also be linked to various <em>methods</em> of how to use the notation, or to <em>change-management processes</em> that relate to or guide the use of the notation. That&#8217;s something we&#8217;ll need to note and include as we go deeper into the <em>usage</em> of metamodels within EA and the like.)</p>
<p>Each notation describes entities and relations and semantics in a different way. But often they&#8217;re actually the <em>same</em> entities that we see in another notation. What we need, then, is a way to keep track of entities (and some of the relations and semantics) as we switch between different notations.</p>
<p><a title="Wikipedia on Unified Modelling Language" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML</a> (Unified Modelling Language) does this already for software-modelling and software-architecture: a bunch of different ways to look at the &#8216;areas of concern&#8217; for software-architecture and the like. That&#8217;s a very good example here: entities that we develop in a Structure Diagram can be made available (&#8216;re-used&#8217;) in any of the other dozen or so diagram-types (notations) within the overall UML.</p>
<p>Yet UML <em>only</em> deals with the software-development aspects of the context. For example, there&#8217;s no direct means to link it to an Archimate model, to show how it maps to business processes in an architectural sense. There&#8217;s certainly no means to link it to Business Motivation Model, to show dependencies on business-drivers; there&#8217;s no means to link it Business Model Canvas, to rethink the overall business-model (and what part software might or might not play in a revised business-model). Those may not be of much concern to software-architecture &#8211; but they <em>are</em> of very real concern to entrprise-architecture or any other architecture that needs to intersect with software-architecture and place it within the overall business or enterprise context.</p>
<p>Hence what we&#8217;re talking about here is a much-larger-scale equivalent of UML. It needs to accept that every notation is different &#8211; in other words there&#8217;s no possibility of &#8220;One Notation To Rule Them All&#8221;, a single notation that would cover every possible need at every level. Instead, like UML, it would aim to be able to maintain and update entities and relations as they move between different notations &#8211; in other words, something quite close to &#8220;One Metamodel To Link Them All&#8221;.</p>
<p>The catch is that we need to go a long way below the surface to make it work. For UML, that underlying support is provided by <a title="Wikipedia on OMG Meta-Object Facility" href="http://en.wikipedia.org/wiki/Meta-Object_Facility" target="_blank">MOF</a> (OMG Meta-Object Facility), which is also shared with other OMG specifications such as <a title="Wikipedia on MG Business Process Model and Notation" href="http://en.wikipedia.org/wiki/BPMN" target="_blank">BPMN</a> (and perhaps also OMG <a title="Wikipedia on OMG Business Motivation Model" href="http://en.wikipedia.org/wiki/Business_Motivation_Model" target="_blank">BMM</a> &#8211; Business Motivation Model?). Yet MOF only applies to the <a title="OMG (Object Management Group)" href="http://www.omg.org/" target="_blank">OMG</a> (Object Management Group) specifications: what about all the other models and notations and everything else that&#8217;s defined and maintained by everyone else, often not even in a formal metamodel format? To link across that huge scope of &#8216;the everything&#8217;, we need something that goes at least one level deeper again: and that&#8217;s what this is all about.</p>
<p>The simplest start-point is that pair of questions from Graeme Burnett, that would apply to any entity or relation or almost anything:</p>
<ul>
<li>Tell me about yourself?</li>
<li>Tell me what you&#8217;re associated with, and why?</li>
</ul>
<p>I&#8217;d suggest that <em>that&#8217;s</em> where we need to start: with something that is integral enough to be described as &#8216;yourself&#8217;, and to which we could apply those questions. That&#8217;s our root-level &#8211; a kind of UML for UML-and-everything-else.</p>
<p>Yet that really is at a very low level &#8211; deeper than MOF, which is deeper than UML, which is deeper than the UML Structure Diagram, which is deeper than any class-structure model that we might build on that metamodel for UML Structure Diagram.</p>
<p>As we go down through all of those layers, it needs to get simpler and simpler, in order to identify and support the commonality between all those disparate surface-elements. At the kind of level we&#8217;re talking about here &#8211; what&#8217;s known as the &#8216;M3/M4 metamodel layer&#8217; &#8211; it needs to be very simple indeed &#8211; which makes it a bit difficult to describe what&#8217;s going on, especially by the time we&#8217;ve worked our way back up all the way to the surface again.</p>
<p>And, yes, this is where it gets a bit technical&#8230;</p>
<p><span id="more-3038"></span></p>
<p><strong>Building on motes</strong></p>
<p>At this point I&#8217;ll link back to a <a title="Reply by Tom G to comment by Peter Bakker" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/comment-page-1/#comment-64266" target="_blank">reply</a> to a <a title="Comment by Peter Bakker on post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/comment-page-1/#comment-64228" target="_blank">comment</a> by Peter Bakker on the previous post <a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">&#8216;EA metamodel &#8211; a possible structure</a>&#8216;.</p>
<p>Some while back, someone said in a comment to one of the previous that the metamodel I&#8217;ve been describing is &#8220;like going back to assembly language”. Which, in a sense, it is &#8211; I&#8217;ll freely admit that.</p>
<p>The commenter didn’t mean it politely – he evidently thought that this was a fatal design flaw, one that invalidated the whole exercise.</p>
<p>But he’d actually missed the point: down at the root &#8211; in software, at least &#8211; everything <em>is </em>assembly-language. (Or machine-code, to be pedantic, but that’s described here too, of course.)</p>
<p>For <em>this</em> layer we&#8217;re talking about here &#8211; a layer even deeper than MOF, a layer that is shared across <em>every</em> possible notation - it <em>is</em> the equivalent of assembly-language. It has to be: there&#8217;s no choice about that.</p>
<p>And the point here is that if we don’t get the thinking right at this level, we’re not going to get the interoperability and versatility that we need at the surface-level. But this &#8216;M3/M4 layer&#8217; really <em>is</em> the equivalent of assembly-language. M2/M3 is the equivalent of the compiler, M1/M2 (the surface-ish metamodel) is the high-level language, and M0/M1 (the modelling that we actually work with) is the equivalent of the software-application. It&#8217;s essential not to get confused about the layering here: this is a very deep level indeed, far deeper than most people would usually need to go. But we <em>need</em> to get it right here.</p>
<p>Peter said in his comment:</p>
<blockquote><p>I pretend that I want to start my own Tubemapping Promotion Enterprise <img src="http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" /><br />
Therefore I will sketch three models:<br />
1. a mindmap for the brainstorm part<br />
2. a business model canvas for the business model derived/extrapolated from the mindmap<br />
3. a tubemap to visualize the routes from here (the idea) to there (a running business)<br />
I keep them as simple as possible of course.</p>
<p>Next step is to see if I can metamodel/model all three models together with motes following my perception of your guidelines above.</p></blockquote>
<p>So when we’re developing a multi-notation model &#8211; such as Peter&#8217;s tubemapping &#8216;app&#8217;, in this case &#8211; we need to consider all those four inter-layers at once:</p>
<ul>
<li>at the surface layer (M0/M1) we need a notation for each of the distinct models (such as, in Peter&#8217;s example, for mind-map, Business Model Canvas, and tubemap)</li>
<li>at the metamodel (M1/M2) we need a metamodel that would describe the components and interactions (entities and relations, plus the rules and parameters that define them) that make up each of those notations</li>
<li>at the metametamodel layer (M2/M3) we need to identify how to move entities (and, in a few cases, relations) between each of the metamodels, without losing or damaging anything from what’s already been done at the individual (meta)model layers</li>
<li>at the ‘atomic’ layer (M3/M4, the focus of this post) we need to identify the ‘assembly-language’ fine-detail of exactly what happens at each stage and with each change to each of the underlying motes, so as to verify that everything actually works and nothing is missed.</li>
</ul>
<p>Note that for most work we shouldn’t ever need to look at the ‘atomic’ layer. We’re only doing it now because we’re roadtesting the ideas for this ‘mote’ concept, deliberately running everything backwards from the surface layer to check out the interoperability and the rest.</p>
<p>(In other words, yes, we’re doing a deep-dive into the ‘assembly-language’ layer, and it isn’t what we’d normally do. But if you’re a CompSci student, you’d usually expect to have to build a compiler at some stage, to prove that you know what’s going on ‘under the hood’. You’d typically start from hand-sketches that become UML diagrams that become language-specifications for the compiler that works with assembly-language. Most everyday users aren’t CompSci students mucking around with compilers – but <em>someone</em> has to do it if we’re to get usable surface-layer applications. Same here, really. <img src="http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif" alt=":-)" /> )</p>
<p>What I&#8217;ve been suggesting is that we can support all of those requirements at this layer with a single underlying entity, which I&#8217;ve nicknamed the &#8216;mote&#8217;. This has a very simple structure:</p>
<ul>
<li>unique identifier</li>
<li>role-identifier (text-string) &#8211; specifies what role this mote plays in the (slightly) larger scheme of things</li>
<li>parameter (raw-data) &#8211; to be interpreted as number, pointer, text, date or anything, according to context</li>
<li>variable-length list of pointers to &#8216;related-motes&#8217;</li>
</ul>
<p>In graphic form, it looks a bit like a bacillus:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/mote.png"><img class="aligncenter size-full wp-image-3043" title="mote" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/mote.png" alt="" width="156" height="199" /></a></p>
<p>But we need to remember that it&#8217;s <em>tiny</em> &#8211; again, much like a bacillus. It&#8217;s the ways that they all link together that provide it with the overall power. The mote&#8217;s parameter carries just a tiny bit of information; but when that information is placed in context with that from other motes, we can build up towards a much bigger picture.</p>
<p>In effect, what we have in the EA-toolset&#8217;s repository is a kind of &#8216;mote-cloud&#8217;:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/motecloud.png"><img class="aligncenter size-medium wp-image-3044" title="motecloud" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/motecloud-300x200.png" alt="" width="300" height="200" /></a></p>
<p>The ways in which the motes link together I&#8217;ve summarised in the previous post, &#8216;<a title="Post 'EA metamodel - a possible structure'" href="http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/" target="_blank">EA metamodel &#8211; a possible structure</a>&#8216;. Many remain always as tiny little fragments of information, re-used all over the place in simple many-to-one relationships. But some motes do get large enough to notice &#8211; and that&#8217;s what we start to see further up the scale, as Entity, Relationship, Model and so on.</p>
<p>Interestingly, there <em>is</em> one context in which we <em>do</em> work directly at the mote-level. It’s when we ask those two questions: “tell me about yourself?” and “tell me what you’re associated with, and why?”. The information to answer those questions is carried <em>directly</em> within the mote, in its embedded role and parameter and via its related-mote list. The ‘yourself’-mote in this case would only be an Entity, a Relation or a Model.</p>
<p>Hope this helps to clarify things a bit further? Comments / suggestions requested as usual, anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/06/ea-metamodel-big-picture/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>EA metamodel &#8211; a possible structure</title>
		<link>http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ea-metamodel-possible-structure</link>
		<comments>http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 10:43:55 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3024</guid>
		<description><![CDATA[What would this &#8216;generic modelling metamodel&#8217; look like? And how could we implement it? This continues the work from previous posts on this theme, such as &#8216;More detail on EA metamodel&#8216; and &#8216;EA metamodel and method&#8216;. The legal bit: The aim is that this should contribute towards an open standard, and should not be used [...]]]></description>
			<content:encoded><![CDATA[<p>What would this &#8216;generic modelling metamodel&#8217; look like? And how could we implement it?</p>
<p>This continues the work from previous posts on this theme, such as &#8216;<a title="Post 'More detail on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/" target="_blank">More detail on EA metamodel</a>&#8216; and &#8216;<a title="Post 'EA metamodel and method'" href="http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/" target="_blank">EA metamodel and method</a>&#8216;.</p>
<p style="padding-left: 30px;"><strong>The legal bit</strong>: The aim is that this should contribute towards an open standard, and should <em>not</em> be used in proprietary fashion. For now, a Creative Commons Attribution-NonCommercial-ShareAlike (<a title="Creative Commons Attribution-NonCommercial-ShareAlike license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" target="_blank">CC BY-NC-SA</a>) license applies to this text.</p>
<p>This will be, again, long, very technical, and probably with no illustrations (you&#8217;ll see later why there&#8217;s little point in trying to describe this visually &#8211; it just gets too messy). Sorry. <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' />  But if this is of no interest to you, you can always skip it, can&#8217;t you? <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><span id="more-3024"></span></p>
<p>A reminder that this is all at the M3/M4 metametametamodel layer: the layer at which we describe very simple structures that can define metamodel-families that can define metamodels that can define the structures for models. What we&#8217;re after here is something with which we can describe <em>any</em> metamodel or metamodel-family &#8211; UML, BPMN, Archimate, Southbeach, Cohere, mindmap, Porter supply-chain, Business Model Canvas, whatever &#8211; in the <em>same</em> consistent way, such that we can move entities and relations between each of them, as using each model-type as views into the same overall &#8216;holograph&#8217;.</p>
<p>The other aim is that we should end up with a <em>single</em> file-structure that can move this information &#8211; selected subsets of the &#8216;holograph&#8217; &#8211; between toolsets across the whole of the toolset-ecosystem.</p>
<p>What follows here is a first attempt towards a workable way to do this.</p>
<p>At the moment this description is just in pseudocode. It <em>should</em> be implementable as-is &#8211; I&#8217;ve roughed out some ideas for a preliminary PHP/MySQL implementation, anyway &#8211; but judging from the recursive database searches that that first design implies, it would be horribly inefficient and slow. It <em>would</em> be valid for a text-based file-format, though (such as JSON or XML), it <em>does</em> maintain separation between data and presentation (hence should work with a Model-View-Controller implementation-pattern) and so far I <em>think</em> it should work okay with a RESTful interface-protocol &#8211; so I think it should be implementable in line with current standards. Over to you on that, anyway.</p>
<p><strong>Core concepts</strong></p>
<p>The &#8216;holograph&#8217; consists of a cloud of information-objects &#8211; call them &#8216;atoms&#8217;, or &#8216;motes&#8217;, or &#8216;molecules&#8217;, or some such term. (I&#8217;ll describe them as &#8216;motes&#8217; from now on.)</p>
<p>For security reasons, encryption could be applied to all or any part of this mote-cloud.</p>
<p><em>All motes have the same structure</em>, as follows:</p>
<ul>
<li>globally-unique identifier</li>
<li>mote-role (including namespace of role)</li>
<li>parameter-value for this mote</li>
<li>list of (pointers to) other related motes</li>
</ul>
<p>Each mote has an identifiable role &#8211; how it should be interpreted, the purpose that it represents within the overall holograph. A namespace typically relates to a specific metamodel or metamodel-family: UML has its own namespace, as does BPMN, BMCanvas, mindmap and so on. At the file-format level, a namespace represents the equivalent of a CSS file for XHTML: in effect, loading a namespace makes the respective metamodel and notation available to the toolset.</p>
<p>Each mote carries <em>one</em> parameter, as indicated by the role. (The value may be null or <a title="Wikipedia on NaN ('Not a Number')" href="http://en.wikipedia.org/wiki/NaN" target="_blank">NaN</a> or some other &#8216;non-value&#8217;, hence in effect the mote carries 0..1 parameters.) The parameter-value is raw data: the rules for interpretation and validation of that data are specified by other motes referenced in the related-mote list for this mote.</p>
<p style="padding-left: 30px;">There&#8217;s an important design-decision as to whether parameter-values for motes can ever be changed. Some cases suggest that we should allow it; others suggest that we should never delete or change anything, but simply create a new mote for each update. I suspect that we&#8217;ll end up with a mixture of both, determined by mote-role, but that&#8217;s a decision that can be put off until later.</p>
<p>The related-mote list represents the usage and change-history for this mote. It is unidirectional: it lists other motes that are used <em>by</em> this mote &#8211; not those that <em>use</em> this mote. It is a list of pointers to other motes &#8211; not a container for other motes, because there may often be a many-to-one relationship between motes. In effect, this mechanism allows motes to have the equivalent of any number of parameters, complete with a full version-history for each of those parameters, without actually containing those parameters.</p>
<p>The sequence of the related-mote list is time-linear, and accumulative: nothing is ever deleted as such. The equivalent of deletion is that an entry in the list may be marked as &#8216;superseded&#8217;, indicating that another item in the list has now superseded that item in its role.</p>
<p>Access-control for motes is defined by references to other motes that have access-control roles.</p>
<p>Version-management for motes is defined via references within the related-mote list to version-identifier motes. The version-identifier references and &#8216;superseded&#8217; markers in the related-mote list would be read in time-order &#8211; hence the process of recreating a version would consist of reading the related-mote list up to the respective version-ID marker.</p>
<p>Although nothing is ever deleted, it should be possible to create &#8216;export&#8217;-variants of motes in which version-IDs and &#8216;superseded&#8217;-references are stripped out &#8211; in other words, all the information for the current version only for each mote. Likewise, we could create an archive in which appropriate subsets of known-superseded motes are moved to a permanent-archive, with all references to those motes superseded by a pointer to the archive.</p>
<p>In general, toolsets should be able to ignore the absence of any mote that cannot be found. (There may be a small subset of core-level mote-types to which this general rule may not apply &#8211; particularly those relating to security and access-control.) Among other things, this enables information-hiding likely to be required by access-control rules.</p>
<p><strong>Some key mote-types</strong></p>
<p>In the bullet-lists that follow, the mote-name or &#8216;role&#8217; is shown first; then, in brackets, the meaning of the mote-parameter; followed by a brief summary of how the mote is used.</p>
<p>Before we get on to the mote-types that are of most obvious interest &#8211; such as <em>entity</em>, <em>relation</em> and <em>model</em> &#8211; we need to summarise a whole range of base-level or &#8216;housekeeping&#8217; motes. These include:</p>
<ul>
<li><em>parameter-type</em> (type-ID): how a mote-parameter should be interpreted and validated (e.g. boolean, string, integer, floating-point number, etc) &#8211; in effect, part of an API for the toolset</li>
<li><em>parameter-name</em> (text-string): the display-name for a mote-parameter &#8211; language is indicated by a language-mote in the related-mote list</li>
<li><em>language-name</em> (text-string): identifies the language to which a mote or mote-parameter applies &#8211; usually some form of <a title="Wikipedia on Language-code" href="http://en.wikipedia.org/wiki/Language_code" target="_blank">language-ID</a></li>
<li><em>based-on</em> (mote-ID): the &#8216;type&#8217; on which a mote (entity, relation, model, etc) is based</li>
<li><em>tag</em> (text-string): general-purpose tag &#8211; used as &#8216;hooks&#8217; for relations, to mark namespace-affiliation, and for many other &#8216;tagging&#8217; purposes</li>
<li><em>source-tag</em> (mote-ID for tag-mote): reference to a tag-type that may be used as a &#8216;hook&#8217; within a mote for the &#8216;source&#8217;-end of a relation</li>
<li><em>destination-tag</em> (mote-ID for tag-mote): reference to a tag-type that may be used as a &#8216;hook&#8217; within a mote for the &#8216;destination&#8217;-end of a relation</li>
<li><em>source</em> (mote-ID): reference to a mote used as the &#8216;source&#8217;-end of a relation</li>
<li><em>destination</em> (mote-ID): reference to a mote used as the &#8216;destination&#8217;-end of a relation</li>
<li><em>presentation</em> (presentation-info): content on how to display or represent something &#8211; related-mote list will include an identifier from the &#8216;presentation&#8217; namespace, to indicate how to interpret the mote&#8217;s parameter</li>
<li><em>media</em> (media-info): content for associated media &#8211; related-mote list will include an identifier from the &#8216;media&#8217; namespace, to indicate how to interpret the mote&#8217;s parameter</li>
<li><em>responsibility</em> (responsibility/access role): identifies a responsibility/access set, as per the &#8216;responsibility&#8217; namespace &#8211; related-mote list for each of the instances would include any number of pointers to <em>person</em> and/or <em>role</em> motes</li>
<li><em>role</em> (role-name within the business): identifies a business role, as a proxy for one or more individual persons &#8211; related-mote list may include pointers to actual &#8216;person&#8217;-identifiers</li>
<li><em>person</em> (person-ID): identifies an actual person, for responsibility-mapping purposes</li>
<li><em>version</em> (version-ID): identifies an edit-version(or, for security-purposes, an access-version) that applies to one or more motes &#8211; related-mote list would include a date-time stamp and user-ID, and probably other parameters as required</li>
</ul>
<p>The &#8216;presentation&#8217; namespace applies to the primary presentation of the mote itself, and could include the following identifier-motes:</p>
<ul>
<li><em>mime-type</em> (<a title="Wikipedia on MIME-type (Multipurpose Internet Mail Extension)" href="http://en.wikipedia.org/wiki/MIME" target="_blank">MIME-type</a> identifier): interpret the mote-parameter in terms of the respective standard MIME-type</li>
<li><em>draw</em> (schema-ID): interpret the mote-parameter in terms of a non-MIME schema &#8211; for example, some toolset-specific equivalent of the Visio draw-spreadsheet</li>
</ul>
<p>The &#8216;media&#8217; namespace applies to secondary information related to the mote, but would otherwise essentially be the same as for the &#8216;presentation&#8217; namespace &#8211; i.e. <em>mime-type</em> and suchlike.</p>
<p>The &#8216;responsibility&#8217; namespace could include the following identifier-motes:</p>
<ul>
<li><em>mote-owner</em> (role or person): role or person responsible for the mote itself</li>
<li><em>mote-creator</em> (person): person who created the mote itself</li>
<li><em>mote-editor</em> (person): person who last edited the mote itself</li>
<li><em>owner</em> (role): role and, ultimately, person who in <a title="Wikipedia on RACI (Responsibility-assignment matrix)" href="http://en.wikipedia.org/wiki/Responsibility_assignment_matrix" target="_blank">RACI</a> terms is <em>responsible for</em> (&#8216;accountable for&#8217;) the item referenced by the mote</li>
<li><em>actor</em> (role or person): role or person who in RACI terms <em>assists in</em> (usually is a user of) the item referenced by the mote</li>
<li><em>consulted</em> (role or person): role or person who in RACI terms needs to be <em>consulted</em> about any usage or changes to the item referenced by the mote</li>
<li><em>informed</em> (role or person): role or person who in RACI terms needs to be <em>informed</em> about any changes to the item referenced by the mote</li>
<li><em>access</em> (role or person): role or person that may access the referencing mote</li>
<li><em>exclude</em> (role or person): role or person that may not access the referencing mote</li>
</ul>
<p>(Any other suggestions for generic &#8216;housekeeping&#8217; motes?)</p>
<p><strong>Entity</strong></p>
<p>An <em>entity</em> is a mote that describes a &#8216;thing of interest&#8217; in modelling.</p>
<p>Structurally, it is just another mote &#8211; exactly as for all other motes. Its parameter will usually be a text-name for the mote. However, its related-mote list would usually include references to the following types of motes:</p>
<ul>
<li><em>description</em>: a mote with a text-parameter and a label of &#8216;description&#8217; &#8211; used as the content for a derived glossary</li>
<li><em>discussion</em>: a mote with a text-parameter &#8211; used as the container for a wiki-type discussion</li>
<li><em>parameter</em>: any number of motes that represent additional parameters for this mote</li>
<li><em>relation-type</em>: tag-mote that acts as the &#8216;hook&#8217; for a <em>source-tag</em> or <em>destination-tag</em> mote attached to a relation</li>
<li><em>presentation</em>: a set of one or more <em>presentation</em> motes that indicate how the mote should be presented &#8211; one of these should probably be marked as the default-presentation (perhaps the first, perhaps indicated by a tag?)</li>
<li><em>responsibility</em>: a set of <em>responsibility</em> motes that identify the RACI and access-controls for this mote</li>
<li><em>model</em>: a set of tag-motes or other parameter-motes that identify the model(s) or notation(s) in which this mote was first created and subsequently used or changed</li>
<li><em>based-on</em>: a reference to another entity-mote that was used as the &#8216;type&#8217; or template on which this entity was based or from which it was derived</li>
</ul>
<p>(Any suggestions for other items needed in the &#8216;entity&#8217; related-mote list?)</p>
<p>Note that an entity is &#8216;model-agnostic&#8217;: it can be used with <em>any</em> model or notation, subject to filtering within the toolset (usually via reference to namespaces and/or attached tag-motes).</p>
<p>To display an entity, a referenced <em>presentation</em> mote is called by the toolset.</p>
<p>To edit or update an entity, new references are added to the mote-list, with &#8216;superseded&#8217; flags attached to the previous mote-references as required. A reference to a version-identifier mote would usually be added to the mote-list once edits are complete, <em>preceding</em> any updates and &#8216;superseded&#8217;-references so as to support the versioning-method described above.</p>
<p>An &#8216;entity-type&#8217; is simply an entity pointed to as &#8216;based-on&#8217; by some other entity-mote: every entity is an &#8216;instance&#8217; of some other entity (ultimately, of the root-definition of mote), but may <em>also</em> be used as a &#8216;type&#8217;.</p>
<p><strong>Relation</strong></p>
<p>A <em>relation</em> is an entity that is used to denote a link between two other entities.</p>
<p>Structurally, it is just another mote. Ultimately it&#8217;s based on the &#8216;entity&#8217; type of mote, and its related-mote list would be likely to include the same types of motes as for &#8216;entity&#8217;. However, the mote-list would also include:</p>
<ul>
<li><em>source-tag</em>: one or more tag-motes that, when embedded in an entity (or relation, or model, since these are structurally derived from &#8216;entity&#8217;), identify that that entity may be used as the &#8216;source&#8217;-end of the relation</li>
<li><em>destination-tag</em>: as for <em>source-tag</em>, but for the &#8216;destination&#8217;-end of the relation</li>
<li><em>source</em>: mote-ID of the single mote that is linked as the &#8216;source&#8217;-end of the relation</li>
<li><em>destination</em>: mote-ID of the single mote that is linked as the &#8216;destination&#8217;-end of the relation</li>
</ul>
<p>(Any suggestions for other items needed in the &#8216;relation&#8217; related-mote list?)</p>
<p>There is no built-in constraint on <em>source-tag</em> or <em>destination-tag</em>: for example, the same tag may be used for both, indicating a non-directional relation.</p>
<p>Since relations link to tags rather than to entity-types, the number of relation-types and required relation-linkage definitions increases much more slowly than in a conventional entity-oriented structure (i.e. increase is almost linear, rather than near-exponential or near-factorial).</p>
<p>Dependent on the notation, other parameters may be needed in the related-mote list to define line-type, arrow-type, and so on.</p>
<p>To model flows and exchanges, it may be useful &#8211; again, notation-dependent &#8211; to attach an entity to the relation itself, to identify the content and conditions for the flow.</p>
<p>Some types of relations will be needed that can attach to any entity &#8211; or relation, or model &#8211; such as the &#8216;thesaurus&#8217;-type relations (broader-term, narrower-term, synonym, antonym, conflict etc). Another is the &#8216;annotation&#8217; pattern, which would consist of a text-entity and attached relation that could be linked to anything else. For these cases, we might design this such that the absence of any <em>source-tag</em> or <em>destination-tag</em> mote (or one end only, for the &#8216;annotation&#8217; pattern) would indicate that the respective relation can be attached to anything.</p>
<p>Display, edit and &#8216;based-on&#8217; are the same as for entity-motes.</p>
<p><strong>Model</strong></p>
<p>A <em>model</em> is an entity that acts as a container for entities and relations between those entities.</p>
<p>Structurally, it is just another mote. As for &#8216;relation&#8217;, it&#8217;s ultimately based on the &#8216;entity&#8217; type of mote, and its related-mote list would be likely to contain most of the same types of motes. However, the mote-list would also include:</p>
<ul>
<li><em>model-tag</em> (tag-ID): one or more tag-motes that identify the model, and will be attached to any entity or relation created (or edited?) whilst the model is in use in the toolset</li>
<li><em>allowed-tag</em> (tag-ID): any number of tag-motes that can be used as filters to select entities and relations that are allowable for use within the model (also possibly <em>excluded-tag</em>, for items that explicitly may not be used within the model?)</li>
<li><em>allowed-relation</em> (relation-ID): one or more relation-types that can be used within the model, which via their embedded tag-lists in turn identifies the entity-types that can be included (possibly use <em>allowed-tag</em> instead for this purpose &#8211; i.e. tags attached to relation-types?)</li>
<li><em>mapping</em> (mapping-ID): a mote that contains a set of parameters that identify the relative positions of entities and relations in terms of some (usually graphical) modelling-schema</li>
</ul>
<p>(Any suggestions for other items needed in the &#8216;model&#8217; related-mote list?)</p>
<p>A model and notation will need validation-rules, modelling-constraints and many other parameters and functions. Although some of these can be embedded as parameters within the related-mote list for the &#8216;model&#8217;-entity, or act as triggers via a toolset API, it&#8217;s probable that not everything could be managed via configuration alone. For items that cannot be embedded directly into the &#8216;mote&#8217;-structure, there would need to be a separate &#8216;plug-in&#8217; for the toolset, referenced by an appropriate tag or other mote within the &#8216;model&#8217;-entity definition.</p>
<p>Note that models will often need their own displayable or non-displayable parameters, such as those used in a description-box placed in one corner of the displayed model.</p>
<p>Display, edit and &#8216;based-on&#8217; are much the same as for entity- and relation-motes. To display itself, the model &#8216;calls&#8217; the presentation-functions (or rather, presentation-configuration parameters) within the respective motes. In editing, the model would also update its <em>mapping</em> schema, to keep track of the relative positions of its entities and relations. Every model-instance would be based on another model-instance that is used as its model-type.</p>
<p><strong>Other comments</strong></p>
<p>Because all motes have the same underlying structure, it should be relatively simple to implement this even within SQL, or preferably with a more polymorphic object-type database. The recursive database-calls would imply a significant impact on performance, hence at run-time &#8211; especially for a large repository &#8211; it would probably be wise to convert these to fully-encapsulated objects, but it actually is not essential other than for performance-reasons.</p>
<p>The simplest file-format would be a JSON- or XML-representation of the full set of motes (or selected subset of motes).</p>
<p>A model-definition file (in other words, a means to add a model-type or notation to a toolset) consists simply of the subset of motes that describe that model-type and its associated relations and entity- and relation-presentations, optionally including one or more tags to identify and denote a namespace.</p>
<p>A taxonomy-type framework such as Zachman or TOGAF/Archimate-style layering can in effect be represented very simply by a set of related tags. Graphic frameworks such as Business Model Canvas or Porter Value-Chain can be represented by a backplane image stored within a &#8216;presentation&#8217; or &#8216;media&#8217; mote.</p>
<p>&#8212; &#8212;</p>
<p>Okay, that&#8217;s it for now: over to you for comments, suggestions brickbats, whatever?</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/05/ea-metamodel-possible-structure/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>EA metamodel and method</title>
		<link>http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ea-metamodel-and-method</link>
		<comments>http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/#comments</comments>
		<pubDate>Sat, 03 Sep 2011 20:44:49 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3013</guid>
		<description><![CDATA[How would this EA metamodel actually work? And why would we need it, given that we have more than enough frameworks and models already? This follows on from the earlier post &#8216;More detail on EA metamodel&#8216;, and in particular part of a comment there from Stuart Boardman: I completely agree that method and governance should [...]]]></description>
			<content:encoded><![CDATA[<p>How would this EA metamodel actually work? And why would we need it, given that we have more than enough frameworks and models already?</p>
<p>This follows on from the earlier post &#8216;<a title="Post 'More detail on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/" target="_blank">More detail on EA metamodel</a>&#8216;, and in particular part of a <a title="Comment by Stuart Boardman on post 'More on EA metamodel'" href="http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/#comment-64010" target="_blank">comment</a> there from <a title="Stuart Boardman (@ArtBourbon) on Twitter" href="http://twitter.com/ArtBourbon" target="_blank">Stuart Boardman</a>:</p>
<blockquote><p>I completely agree that method and governance should be kept separate from the meta-model. It may, however, be useful to develop those (informally) in parallel. The one can be a useful litmus test for the other.</p></blockquote>
<p>So, let&#8217;s do just that: do a worked-example of what <em>actually</em> happens right now in enterprise-architecture and related work, and how a consistent &#8216;model-agnostic&#8217; metamodel could make things a lot easier for all of us.</p>
<p>For sanity&#8217;s sake most of this will be in text form: I&#8217;ll aim to add a few illustrations, but if I tried to do it all in models with current tools it&#8217;d take me days to do it, rather than a matter of hours. (With present tools a picture can easily be a thousand words&#8217; worth of time &#8211; in other words about two hours <em>each</em>. I simply don&#8217;t have that kind of time to spare: sorry&#8230; &#8211; and it&#8217;s not hard to visualise anyway, for those of us who have experience of the modelling tools generally in use in &#8216;the trade&#8217;.)</p>
<p>And, once again, this&#8217;ll be long: apologies once more&#8230; But I think (hope?) it&#8217;ll be worth it, anyway.</p>
<p><span id="more-3013"></span>For this I&#8217;ll keep it simple, and keep the focus mainly on method; I&#8217;ll tackle governance-issues in another post.</p>
<p>Imagine, then, that we want to do some strategy-work on our organisation&#8217;s business-model. (I&#8217;m using &#8216;business-model&#8217; here in a generic sense of &#8216;how our organisation does its its business&#8217; &#8211; in other words conceptually the same for a commercial organisation, an NGO, a government department or anything else.)</p>
<p>So the first point is that we know we&#8217;re going to do an identifiable item of work, with an explicit aim: review and perhaps restructure our business-model. We could call that a &#8216;project&#8217; or an &#8216;iteration&#8217; or some such &#8211; the label doesn&#8217;t much matter.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: Within our toolset, we create a container-object for all of the work that we&#8217;ll do for this project. In doing this, the user-interface presents a list of categories that we might use, and from this we select &#8216;Business&#8217; and &#8216;Strategy&#8217;. These tags, and a link to the project-container, will be applied to every entity and relation that we create or amend during this project.</p>
<p>We now want to do some kind of business-model, to map out what our organisation does, and what we might do to change it.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: Because we&#8217;ve said that this is about business and strategy, the user-interface suggests a range of model-types that we could use. We select Business Model Canvas: this displays a BMCanvas frame, to which we can apply &#8216;sticky-note&#8217; entities and relations between them.</p>
<p>Following the guidelines for modelling with Business Model Canvas, we start to map out the business-model:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/05/bmcanvas.png"><img class="aligncenter size-medium wp-image-1739" title="bmcanvas" src="http://weblog.tetradian.com/wp-content/uploads/2011/05/bmcanvas-300x199.png" alt="" width="300" height="199" /></a></p>
<p>One option might be to map out the existing (as-is) model first; we do this by using one specific colour on sticky-notes to indicate the as-is.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: We specify on the user-interface that this colour will represent the as-is; this in turn will apply a tag to each object we create, to indicate that status or time-relationship. As we place &#8216;sticky-note&#8217; objects onto the Canvas, the entity will also acquire a tag indicating that it belongs to Value Proposition, Customer Channels or whatever.</p>
<p>On the Canvas, we also draw relations between some of the &#8216;sticky-notes&#8217;, to indicate how the business-model actually works.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: As we add relations, the user-interface would also request extra information about the flows and events that drive the linkage between the respective entities in the business-model. This information would be embedded in tags attached to the relation.</p>
<p>This is all happening in a workshop-session, so we want to record the discussion as well, to make sure that we can review it later without losing all of the context.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: The user-interface can attach audio, video, images, URLs or text to any object. As we got through the exploration, we might, for example, attach an audio-stream to the overall project, but also tag particular parts of the audio-stream to the individual objects to which that part of the discussion applies. [See AudioNote and similar iPad apps for how this kind of function already works in practice.]</p>
<p>Having defined the as-is, we now want to start to develop ideas about the to-be business-model.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: Within the user-interface, we create a duplicate set of instances from the current instance-set, and attach a new tag to each of the instances to indicate that this will be the to-be.</p>
<p>It&#8217;s likely that we&#8217;ll want to change things round quite a bit. Before we go into this in detail, though, we want to explore a bit more about the business-context. We&#8217;ll start off with a Market Model:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/05/ent-market-org.png"><img class="aligncenter size-medium wp-image-1738" title="organisation, supply-chain, market and enterprise" src="http://weblog.tetradian.com/wp-content/uploads/2011/05/ent-market-org-300x139.png" alt="" width="300" height="139" /></a></p>
<p style="padding-left: 30px;"><strong>Action</strong>: The user-interface displays the Market Model frame, placing the initial to-be items from the Business Model Canvas &#8216;Key Partners&#8217; cell into the &#8216;Supplier&#8217; cell here, and &#8216;Customer Segments&#8217; into this &#8216;Customer&#8217; cell. Everything else from the other cells in the Business Model Canvas is carried through into this model, within the &#8216;Organisation&#8217; cell, but not displayed unless explicitly asked for.</p>
<p>We might at this point briefly open up a mind-map model to brainstorm ideas about other players in the overall market/extended-enterprise space.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: By default, the mind-map in this context would centre around the enterprise-vision. An initial entity is created for this purpose, with tags to specify the three components of the vision: the items that link everyone in the shared-enterprise, what is done to those items, and why this is of importance overall to each player. We can optionally add Values entities attached to the Vision entity, but it&#8217;s not mandatory. The mind-map then shows the &#8216;Supplier&#8217; and &#8216;Customer&#8217; entities in relation to the core Vision. We can then add further entities to represent other players in the overall space, perhaps with &#8216;child&#8217; entities to attach notes about the business-drivers for the respective players, as in this example about the shared-enterprise of Carnaval in Rio de Janeiro:</p>
<p><a href="http://weblog.tetradian.com/wp-content/uploads/2011/09/carnaval.png"><img class="aligncenter size-medium wp-image-3022" title="carnaval" src="http://weblog.tetradian.com/wp-content/uploads/2011/09/carnaval-300x219.png" alt="" width="300" height="219" /></a></p>
<p>Every path between players represents a potential direct or indirect business-relationship, focussed around the shared-enterprise vision, and guided by the respective business-drivers. We might, for example, decide to explore in more depth some aspects of those relationships, via a <a title="Southbeach modelling: 'Improve Everything Always'" href="http://www.southbeachinc.com" target="_blank">Southbeach</a>-style systems-model in which we describe relations in terms of whether they are potentially useful or harmful to our own organisation or business-model.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: Open a Southbeach model with all of the entities (or just the first-level entities &#8211; i.e. the players in the enterprise) centred around our own organisation. Attach and set tag-attributes to indicate Southbeach &#8216;Useful&#8217;, &#8216;Harmful&#8217; or &#8216;Neutral&#8217; roles, and define Southbeach-notation relations between the entities as required.</p>
<p>Having gained some clarity on how we feel about our organisation&#8217;s relationships with other enterprise players, we now return to the Market Model, to clarify the nature of our relationship with each of those players. To do this, we place the entities from the mid-map into the respective region of the Market Model. For Suppliers and Customers, we have contractual relationships; for other players in the market space, the relationship is based on influence via direct engagement, in accordance with the market&#8217;s rules; whilst for those beyond the market space, the relationship is determined only by indirect influence.</p>
<p style="padding-left: 30px;"><strong>Action</strong>: relations and Market Model tags are added to the &#8216;other-player&#8217; entities according to where we place them within the Market Model.</p>
<p>We now return to the Business Model Canvas, to build and refine our to-be business-model, leveraging the enhanced clarity we&#8217;ve gained and documented about our relationships across the broader shared-enterprise.</p>
<p>&#8212;-</p>
<p>And so on, and so on: we continue bouncing between different model-types as required, until we consider that the original business-question with which we started the project has been answered. For example, we might switch into Enterprise Canvas, to explore more about the pre-transaction, transaction and post-transaction flows, or the management and coordination issues. We might expand on specific aspects of &#8216;Key Activities&#8217; and &#8216;Key Resources&#8217; in Business Model Canvas via an Archimate model, or explore a specific business-process via a BPMN model. It&#8217;s up to us, dependent on what we need to do: the only real restriction would be in terms of which model-types are loaded into the toolset.</p>
<p>At each stage, entities are created, modified, reviewed, linked, occasionally deleted. Tags are added to store attribute-values, to anchor relations and links, and to keep track of this edit-history and accumulated information; and because of the &#8216;safe-ignore&#8217; rule for all models, nothing is lost, as we switch from one model-type to another.</p>
<p>Every entity and relation is unique; yet ultimately they also all have the same structure &#8211; which means there&#8217;s only one file-format, to enable model re-use and model exchange between toolsets.</p>
<p>And for every entity, for every relation, every tag, every model, we can ask the same core questions:</p>
<p>Tell me about yourself?</p>
<p>Tell me what you&#8217;re associated with, and why?</p>
<p>So what we have here is something that can support almost any level of complexity; yet it&#8217;s still easy to drive, easy to use, to any level of constraint (or lack of it) that we might need; and also, at root, structurally very simple.</p>
<p>I hope that explains it all a bit better than before? Comments/suggestions anyway, if you would.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/03/ea-metamodel-and-method/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>More detail on EA metamodel</title>
		<link>http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-detail-on-ea-metamodel</link>
		<comments>http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 19:48:22 +0000</pubDate>
		<dc:creator>Tom G</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Complexity / Structure]]></category>
		<category><![CDATA[Enterprise architecture]]></category>
		<category><![CDATA[Knowledge]]></category>
		<category><![CDATA[business architecture]]></category>
		<category><![CDATA[complexity]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[metamodel]]></category>
		<category><![CDATA[narrative]]></category>
		<category><![CDATA[paradigm]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[toolset]]></category>

		<guid isPermaLink="false">http://weblog.tetradian.com/?p=3001</guid>
		<description><![CDATA[Moving on to more detail on that EA metamodel. (By the way, a quick thank-you to Nic Plum and Sally Bean for really helpful peer-reviews on this. ) The legal bit: There&#8217;s a heck of a lot of unpaid work that&#8217;s gone into this, and also a lot of my own &#8216;prior art&#8217; on these themes, [...]]]></description>
			<content:encoded><![CDATA[<p>Moving on to more detail on <a title="Post 'Guess I could do with some help here...'" href="http://weblog.tomgraves.org/index.php/2011/08/10/could-do-with-some-help-here" target="_blank">that</a> <a title="Post 'More on that enterprise-architecture help-needed'" href="http://weblog.tetradian.com/2011/08/15/more-on-that-ea-help-needed/" target="_blank">EA</a> <a title="Post 'Back to the roots for EA toolset metamodels'" href="http://weblog.tetradian.com/2011/09/01/back-to-roots-for-ea-toolset-metamodels/" target="_blank">metamodel</a>.</p>
<p>(By the way, a quick thank-you to Nic Plum and <a title="Sally Bean (@Cybersal) on Twitter" href="http://twitter.com/Cybersal" target="_blank">Sally Bean</a> for really helpful peer-reviews on this. <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p style="padding-left: 30px;"><strong>The legal bit</strong>: There&#8217;s a heck of a lot of unpaid work that&#8217;s gone into this, and also a lot of <a title="Posts on metamodels and related topics" href="http://weblog.tetradian.com/?s=metamodel" target="_blank">my own &#8216;prior art&#8217;</a> on these themes, dating back to at least <a title="Post 'Time for open-source architecture?'" href="http://weblog.tetradian.com/2008/09/20/open-source-ea/" target="_blank">September 2008</a>, with more <a title="Website on ideas for 'Open-source EA toolsets'" href="http://ea.openfutures.org/OsEATools" target="_blank">detailed specification</a> dating from at least mid-2009. Although it&#8217;d be nice if someone actually paid me for some of the work that&#8217;s gone into this <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_neutral.gif' alt=':-|' class='wp-smiley' />  it really needs to be something that&#8217;s shared in the most open way possible, such as via open-source, so consider this for now to be published under a Creative Commons Attribution-NonCommercialShareAlike (<a title="Creative Commons Attribution-NonCommercial-ShareAlike license" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" target="_blank">CC BY-NC-SA</a>) license. I don&#8217;t really want to see any restrictions on it at all, but unfortunately we do need some kind of protection here: it&#8217;s definitely <em>not</em> okay for some commercial organisation to lift it, put a couple of minor tweaks on it, pretend that the whole thing is and always has been their own private &#8216;intellectual property&#8217;, and then demand money from everyone else for the privilege &#8211; because we&#8217;ve seen way too much of that already, thankyouverymuch. Sigh&#8230;</p>
<p>What follows is deliberately broad and abstract. It&#8217;s missing quite a few implementation-details, in part because I&#8217;ve probably missed a few key items, but even more because some is still a bit hazy and <em>needs</em> proper review by folks who really know what they&#8217;re doing with implementable metamodels. As all too usual, it&#8217;s also long: my apologies&#8230; Oh well!</p>
<p><span id="more-3001"></span><strong>Core concepts</strong></p>
<p>Right at the root of the metamodel is a single object, with just two attributes:</p>
<ul>
<li>globally-unique identifier</li>
<li>&#8216;instantiable&#8217; boolean (if true, is &#8216;type&#8217;; if false, is &#8216;instance&#8217;)</li>
</ul>
<p>We also create a special-purpose variant of this:</p>
<ul>
<li>collection &#8211; a container for objects</li>
</ul>
<p>And, from that, another special-purpose variant:</p>
<ul>
<li>tag &#8211; an object that contains a collection of attributes</li>
</ul>
<p>From this, we create our three core specialisations:</p>
<ul>
<li>entity &#8211; a &#8216;thing&#8217;, which may also contain collections or tags</li>
<li>relation &#8211; an entity that may link between two tags</li>
<li>model &#8211; an entity that incorporates a collection of allowable relation-types and (references to) entity/relation instances, together with any required validation-rules</li>
</ul>
<p>Fundamentally, <em>everything</em> is based on the same root entity-type. This commonality enables us to have a single standard repository-structure and exchange-format that can be used for <em>every</em> possible notation, re-used across all model-types and toolsets.</p>
<p><strong>Collections</strong></p>
<p>A <em>collection</em> is just a container. It can contain any types of objects, including tags and other collections. A collection is always embedded within another object, which provides its identity and supports any additional attributes (via tags) that it may need.</p>
<p>Example: every object (certainly every entity) will need a RACI collection to identify object-owners and people or roles responsible for or affected by the real-world item represented by the model-object type or instance.</p>
<p><strong>Tags</strong></p>
<p>A <em>tag</em> is a container for attributes. At the simplest level, an attribute is a name/value pair, but it might be better to implement it with somewhat more content, to include a distinct non-editable unique-identifier, an editable name, a value-type (simple, MIME-type or other), validation-rules and the attribute-content itself.</p>
<p>A tag is also optionally a target for relations (links between objects). Every object will need to be able to support at least a default &#8216;isAssociatedWith&#8217; link to arbitrary other objects; the target-point for this would be a default tag embedded in every object.</p>
<p>More explanation later of how the tag-system would work in practice, and how it could be implemented.</p>
<p><strong>Versioning and &#8216;inheritance&#8217;</strong></p>
<p>Every object would need to support in-depth versioning. As I see it, the simplest way to envision this is that every object is in effect its own wiki-page. The surface view of the object represents the current state of all the attributes and suchlike of that object, but it accretes a history of changes over time, and the entire history is always still available if required.</p>
<p>A &#8216;snapshot&#8217; of &#8216;current state&#8217; or suchlike consists simply of attaching a tag to one or more objects that signals the option to revert (usually temporarily) to the state that applied at that time.</p>
<p>Since there is only one root-object, with everything else defined by add-on tags, &#8216;multiple-inheritance&#8217; consists simply of importing into a single &#8216;child&#8217;-object the tags that represent the state (attributes, relation-anchors etc) of the respective &#8216;parent&#8217;-objects. This may be done selectively, to enable partial-multiple-inheritance. De-inheritance can be done in much the same way, by removing or disabling selected tags within a child-object.</p>
<p>(One point not yet resolved is whether a &#8216;child&#8217; incorporates an entire copy of its &#8216;parent&#8217;(s), or whether it simply points to them and builds its own versioning thereafter. In terms of data-storage, the latter is probably preferable, but does imply certain risks. However, it&#8217;s not critical at this preliminary design-stage, and decisions on this can probably be left until initial implementation.)</p>
<p><strong>Entity</strong></p>
<p>An entity is an object that incorporates (&#8216;contains&#8217;) tags that define and maintain its attributes.</p>
<p>Attributes supported by an entity (i.e. via tags) may include any number of media-items of any appropriate type, including audio, video, images, URLs etc.</p>
<p>An entity will support one or more presentation-types. The default presentation-type is a summary of content in text-form (i.e. &#8216;wiki-page&#8217;), plus, for graphic display, a simple rectangle enclosing the entity-name. Other presentation-types may include images or bit-maps, SVG or other scalable/vector images (perhaps via a Visio-style layered-spreadsheet or equivalent). A model-type may specify a default presentation-type via an appropriate tag associated with the model-type (i.e. the presence of the tag on entities would suggest or enforce a specific presentation for that entity), such that the same entity would appear in different visual forms on BPMN or UML diagrams or concept-maps.</p>
<p><strong>Relation</strong></p>
<p>A relation is a specific type of entity that can connect to tags on other entities.</p>
<p>At present, I assume that relations can connect only between two entities (or, where the relation itself has embedded link-tags, between entities and/or other relations). A &#8216;one-to-many&#8217; relation is actually a set of nominally-identical relations, but may be displayed in &#8216;branched&#8217; form (as often used in concept-maps, for example) if the respective model-type supports that display-format.</p>
<p>Because relations connect to tags rather than to specific entity-types, the number of relation-types expands almost linearly with the complexity of the underlying metamodel, rather than exponentially or near-factorially as in conventional relation-to-entity metamodels. In general, sub-types &#8216;inherit&#8217; the tag-set from their parent entity-type(s), hence no new relation-types need be created for each new sub-type.</p>
<p>Relation-types are typically associated with a notation, which in turn is typically associated with one or more specific model-types.</p>
<p>As for entities, each relation will support one or more presentation-types. The most common default graphic presentation-type for relations is a one-dimensional line, with optional arrowheads. Line-routing, collision-avoidance and the like are an aspect of user-interface and graphic display rather than a function of the relation itself: the only explicit function of the relation is to indicate that two entities are related in some way.</p>
<p>For some purposes, and in some user-interface contexts, creating a relation that is not anchored at one end will cause a matching null-entity to be created, according to the tag(s) associated with that relation and the applicable rules of the model-type currently in use. (See the Archi &#8216;<a title="Archi 'Magic Connector' functionality" href="http://archi.cetis.ac.uk/movies/magic_connector/magic_connector.html" target="_blank">Magic Connector</a>&#8216; for an example of this type of user-interface functionality.)</p>
<p>One important optional tag for relations (e.g. &#8216;isFlow&#8217;) indicates that the relation also represents a &#8216;flow&#8217; &#8211; a transaction or other exchange between entities. This is typically used to model simulations. The directionality, content and other aspects of the flow would be indicated by other tags, as mediated by the respective model-type within which the simulation is executed.</p>
<p><strong>Model-type and model</strong></p>
<p>A model (graphic, text, simulation etc) is an instance of a model-type.</p>
<p>A model-type is an entity that maintains a collection of tags and relation-types that define the allowable content. Note that, via this mechanism, a model-type does <em>not</em> need to specify the allowable entity-types &#8211; hence enabling extension of metamodels without requiring alterations to the list of relations or to the model-type.</p>
<p>A model-instance maintains a collection of references to entity- and relation-instances, together with any context-specific information required for graphic displays. (In some cases a model-type might also include templates for default entity- and/or relation-instances, such as for page-headers and other displayable model-identifiers.)</p>
<p>By default, any instances created within the model-type would be assigned all of the respective tags for that model-type or notation (i.e. initially constrained to that notation and usage). For example, a BPMN model-type would create only entities that are tag-compatible with the BPMN standard, and that can be displayed in accordance with the BPMN notation. However, since ultimately these are all still just entities with tags, and further tags can be added if required, potentially any of these entities may be re-used in any way in any other compatible notation. For example, we could re-use a BPMN Event in an Archimate model, representing the same Event in a different way for different modelling-purposes; a BPMN Swimlane entity might be re-used in Archimate as a Device, an Application or an Actor, with all of its BPMN relations carried through transparently to the Archimate model.</p>
<p>Full validation of models and entity-relationships is a function of the model-type, not the metamodel. This makes it possible to relax formal rigour during development or for certain types of simulation.</p>
<p>Crucially, <em>a toolset and model-type must preserve any entity-tags and/or relations that it does not use or display</em>. This is required to enable &#8217;round-tripping&#8217; between model-types and toolsets. Any toolset that does not support this will be able to import existing entities and relations, or export new entities and relations, but will not be able to &#8217;round-trip&#8217; amended entities and relations.</p>
<p>Model-types and models are often described in terms of views or viewpoints. For this purpose, a viewpoint or view is simply another standard entity, which is then associated with the model-type.</p>
<p>Models would typically display their results, in whatever form required, by &#8216;calling&#8217; the appropriate presentation-type for each entity and relation in its scope (i.e. referenced within its instance-collection).</p>
<p><strong>Non-semantic entities</strong></p>
<p>Many types of models require or would support a variety of &#8216;non-semantic&#8217; entities &#8211; in other words entities which do not in themselves add to the semantics of a model. Typical examples include:</p>
<ul>
<li>annotation &#8211; an arbitrary explanatory note attached to an object or relation</li>
<li>group &#8211; a &#8216;box&#8217; or other container to cluster a group of entities together for ease of reading</li>
<li>model-caption</li>
</ul>
<p>An annotation would typically be implemented as an instance of a fairly low-level entity (i.e. one with few tags), optionally associated only with the model or model-view, but more usually with a connected relation that may be linked to any other entity or relation. (In other words, similar to an &#8216;annotation&#8217; entity in Visio or Powerpoint.)</p>
<p>A group may be displayed just as a box, but in fact it has an implicit relation with all of the &#8216;contained&#8217; entities. (See the Archi &#8216;<a title="Archi 'Automatic Relationship Management System'" href="http://archi.cetis.ac.uk/movies/nested-relations/nested-relations.html" target="_blank">Automatic Relationship Management System</a>&#8216; for an example of how this would work in practice.)</p>
<p>A model-caption is a container for information about a model or model-view (such as used in several of the Visio templates, and in most types of controlled-diagrams). In effect, this is an entity that is attached to the model-instance, rather than actual content for the model, but would be displayed in the normal way.</p>
<p><strong>Glossary and thesaurus</strong></p>
<p>The total collection of entities and relations within the repository forms the content &#8216;holograph&#8217; for the respective scope.</p>
<p>A glossary and thesaurus represent different views into that &#8216;holograph&#8217;, in part to answer the questions &#8216;Tell me about yourself?&#8217; (glossary) and &#8216;Tell me what you&#8217;re associated with?&#8217; (thesaurus).</p>
<p>The glossary for the context, or for any selected subset of the context, consists of a live report derived from the &#8216;definition&#8217; tags of all entities in scope.</p>
<p>The thesaurus consists of a report, usually starting from a single entity, of all thesaurus-type relations from that entity. These would typically include standard relations such as synonym, antonym, broader-term, narrower-term, conflicts-with and so on. (In some cases these relations between entities may be automatically generated.)</p>
<p><strong>Frameworks and notations</strong></p>
<p>Taxonomy frameworks such as Zachman, or the layered structures used in TOGAF or Archimate, can be represented very simply via sets of tags, and (in the case of supposed &#8216;layers&#8217;) explicit rules around relations that connect to those tags.</p>
<p>Notations consist of sets of tags that define (or extend) specific entity-types, and matching sets of representation-types.</p>
<p><strong>Governance and change-management</strong></p>
<p>Governance regimes such as used in the TOGAF ADM, PRINCE2, PMP and the like, and models such as Gantt-charts, can be represented by sets of entities, collections, and relations between them and other entities and/or relations within the scope covered by a particular change-project, change-programme or whatever. In short, <em>everything</em> is just an entity, or a relation between entities.</p>
<p>A governance method would in effect be the usage of a specific model-type which uses a governance-set, using the validation-rules defined within that model-type.</p>
<p>As described above, <em>every</em> entity, relation and model should have an associated RACI (responsibility-assignment) collection.</p>
<p>Governance-artefacts such as reference-models may be created by &#8216;freezing&#8217; an existing model as a new model-type, and then enabling relations from there to other entities that represent the implementation of the respective items described in the reference-model. A waiver or dispensation (i.e. an accepted and documented breach of the validation-rules for the reference-model) in effect consists of a descriptive entity that is linked to the non-compliant item and to the respective section of the reference-model.</p>
<p><strong>Toolset-ecosystem</strong></p>
<p>The full toolset-ecosystem for enterprise modelling and sense-making covers a huge range, including:</p>
<ul>
<li>enterprise-wide repository, supporting specialist edit/moderation tools and simpler client-server interfaces (e.g. static or annotatable web-pages)</li>
<li>team-based tools &#8211; essentially a smaller-scale version of the enterprise-tools, with a repository shared across the team</li>
<li>single-user repository-based tools</li>
<li>non-repository tools (such as Visio or Powerpoint)</li>
<li>tablet-style systems with gesture-based interface, often thin-client only or with limited local repository</li>
<li>handheld tools (smartphone etc) primarily used as thin-client</li>
<li>pencil and paper</li>
</ul>
<p>Given this scope and range, it is extremely unlikely that there would ever be &#8216;One Toolset To Rule Them All&#8217;. However, this metamodel <em>can</em> link between them all, by providing a means to share information and models between them. Each toolset-type could also use any of the model-types, frameworks and notations supported by the metamodel, and link between all of those as well. In that sense, not &#8216;One Toolset To Rule Them All&#8217;, but possibly &#8216;One Standard Data-Structure To Link Them All&#8217;. <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Conceptually, the metamodel described here is best suited to the enterprise-wide repository. Merge and data-cleansing would be important moderator/curator activities at this level.</p>
<p>For team-based tools and single-user repository-based tools, these would support the metamodel directly. They would need to be able to import and export individual models and/or selected sections of the entire repository. Again, merge and data-cleansing are important activities, though this is likely to be the scope within which most actual specialist modelling takes place.</p>
<p>For non-repository tools, distinct import and export functions will be required. These tools do not actually have any real concept of &#8216;entity-type&#8217;: everything is an uncontrolled instance, in essence without any layering or depth. Import into these tools is relatively straightforward, simply by &#8216;flattening&#8217; the internal structure of existing instances and selecting an appropriate representation for the respective notation; but real care will be needed when importing into a repository-based system an exported model from a non-repository tool, because much of the underlying structure may have been lost, and connection to a parent entity-type will be questionable at best.</p>
<p>Tablet-style tools may or may not be repository-based &#8211; the main distinction here is the interface-metaphor (gestural rather than text/visuals or keyboard/mouse) rather than the underlying metamodel. If repository-based, or thin-client only where the repository is maintained only on the source server, the usage is much the same as for a team-based or single-user tool. If essentially a non-repository-tool (equivalent to Visio or Powerpoint), then the respective constraints apply. If solely graphic (i.e. a &#8216;draw&#8217; application), the image-file should be handled much as for pencil and paper.</p>
<p>Most handheld tools would be used as thin-client, with primarily for local consumption and with little to no original information-capture. The thin-client relationship would, however, enable update of uncontrolled sections of information &#8211; such as the free-form &#8216;wiki-page&#8217; section for each entity or relation.</p>
<p>Pencil and paper will still remain one of the most common tools for idea-capture and initial development. Some applications already exist to scan paper-based drawings and create the respective entities and relations; these will always need subsequent moderation and data-check, but it <em>is</em> feasible. The layered tag-based structure for this metamodel should make that process easier than for some other existing metamodels and notations, particularly as it allows information-capture in &#8216;non-standard&#8217; forms.</p>
<p><strong>Implementing the metamodel</strong></p>
<p>Implementation could be relatively straightforward, because at a fundamental level <em>there is only one entity-type, and only one relation-type</em> &#8211; everything else is created via the &#8216;tag&#8217; concept, which itself should be reasonably simple to implement. The only fundamental difference between entities and relations is that relations can link to things, whilst entities cannot (in their own right, anyway). The &#8216;wiki-page&#8217; concept is also fairly straightforward.</p>
<p>This could be implemented via a conventional relational-database, although an object-database would probably be a better choice in practice. I&#8217;ve implemented something fairly similar to this in PHP, with a MySQL back-end: it&#8217;s used as the base for several of my existing websites, such as <a title="Tom Graves website" href="http://tomgraves.org" target="_blank">tomgraves.org</a>, <a title="Tetradian website" href="http://tetradian.com" target="_blank">tetradian.com</a>, <a title="SEMPER Metrics website" href="http://sempermetrics.com" target="_blank">sempermetrics.com</a> and the <a title="OS-EA Tools website" href="http://ea.openfutures.org/HomePage" target="_blank">OS-EA Tools</a> site. (It&#8217;s versatile, as you&#8217;ll see; but yes, as you&#8217;ll also see, it&#8217;s, uh, clunky &#8211; which is why I&#8217;m definitely <em>not</em> the person to be writing the code for this&#8230; <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  )</p>
<p>As I see it at present, the common file-format can be a straightforward XML or JSON text-file. The core, and each notation or framework or the like (each, in effect, little more than a set of tag-definitions) would be specified as the equivalent of an XML DTD (data-type description), with a defined namespace, conceptually similar to namespaces in XML or Java.</p>
<p>Each notation and associated model-type is therefore a &#8216;plug-in&#8217;, conceptually similar to plug-ins in Eclipse and the like, except that in principle it could be possible (and in practice may indeed be possible) to implement these &#8216;plug-ins&#8217; via a simple configuration-file, without requiring any embedded plug-in-specific code.</p>
<p>There&#8217;s a tricky area around how to specify representation-types for model-types, and how to define validation-rules within model-types, but I don&#8217;t see that it&#8217;d be a &#8216;deal-breaker&#8217;. It just needs someone who&#8217;s more experienced than I am about designing a configuration-language.</p>
<p>The other key point, though, is that because everything is in effect defined via an equivalent of a DTD, this means that any toolset that can interpret that configuration-file would also be able to implement and use <em>any</em> model-type or notation that can be defined via that form of DTD &#8211; and as far as I can see at present, that includes just about every notation or framework that I know of in general use in current enterprise-architecture, strategy, sense-making and the like. In other words, not <em>quite</em> &#8216;One Toolset To Rule Them All&#8217;, but in practice not far off it.</p>
<p><strong>Summary</strong></p>
<p>The metamodel described here can, in principle, cover just about all enterprise-architecture needs, and many other related needs, with one very simple structure.</p>
<p>The core of the structure is a single entity-type; a single relation-type; a very simple &#8216;collections&#8217; structure that can be used within any of these; a concept of &#8216;tags&#8217; that carry attributes and/or presentation-types, and to which relations may be linked; and a structure for model-types that inverts the usual structure by focussing on relation-types rather than entity-types.</p>
<p>Because the structures are so simple, it should be straightforward to implement in practice, for different toolsets using a range of different user-interface metaphors, across the whole of the toolset-ecosystem.</p>
<p>Okay, that&#8217;s it: over to you? Any comments/advice/suggestions, anyone?</p>
<p>(And many thanks for reading this far, of course! <img src='http://weblog.tetradian.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.tetradian.com/2011/09/01/more-detail-on-ea-metamodel/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>

