<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Principia: Power from Simplicity</title>
	<atom:link href="http://blog.principia-it.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.principia-it.co.uk</link>
	<description>Effective IT Systems Management</description>
	<lastBuildDate>Sat, 12 Jun 2010 17:27:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.principia-it.co.uk' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/6f78c9f4917c134dd89eb02c5ec6e5d8?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Principia: Power from Simplicity</title>
		<link>http://blog.principia-it.co.uk</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.principia-it.co.uk/osd.xml" title="Principia: Power from Simplicity" />
	<atom:link rel='hub' href='http://blog.principia-it.co.uk/?pushpress=hub'/>
		<item>
		<title>When is a change a change?</title>
		<link>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/</link>
		<comments>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 17:27:04 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[Build Management]]></category>
		<category><![CDATA[Change Management]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[change]]></category>
		<category><![CDATA[CM]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=624</guid>
		<description><![CDATA[A change can be viewed in two ways; conceptually or literally. What I mean by this distinction is that when I say the requested change is to &#8220;correct spelling mistakes in the poem&#8221; I am specifying conceptually what the change is to achieve (and after the fact, what the change achieved). On the other hand [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=624&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>A change can be viewed in two ways; conceptually or literally. What I mean by this distinction is that when I say the requested change is to &#8220;correct spelling mistakes in the poem&#8221; I am specifying conceptually what the change is to achieve (and after the fact, what the change achieved). On the other hand we are used to dealing with change in a more literal sense of as set of revisions, for example, &#8220;I edited file1 in this change&#8221;. In this post I discuss some of the issues and implications of these two views of change.<span id="more-624"></span></p>
<p>Let&#8217;s put this into concrete terms.</p>
<p>Suppose the original change request is something like, &#8220;correct the spelling mistakes in the poem&#8221; and the poem is held in two files. </p>
<p><span class="code">file1.txt</span> contains the following text.</p>
<pre class="brush: plain;">Mary hard a litl lamb,
It's fles was wite as snow,</pre>
<p>And <span class="code">file2.txt</span> contains the following text.</p>
<pre class="brush: plain;">And everywere that Mary went,
That lam was sure to go.</pre>
<p>&nbsp;</p>
<p>We correct these two file to the following using a change record <span class="code">CR1</span>.</p>
<pre class="brush: plain;">Mary hard a little lamb.
It's fleece was white as snow</pre>
<p>And</p>
<pre class="brush: plain;">And everywhere that Mary went,
That lamb was sure to go.</pre>
<p>&nbsp;</p>
<p>Here then is my first build (<span class="code">build1</span>).<br />
<div id="attachment_742" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrity.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrity.png?w=300&#038;h=266" alt="" title="Initial build" width="300" height="266" class="size-medium wp-image-742" /></a><p class="wp-caption-text">Initial build: conceptual and literal change equivalent</p></div><br />
This build has integrity because it contains the content of all valid changes nominated to the build as <em>known at the time the build was constructed</em>, but it is not correct because <span class="code">CR1</span> fails to satisfy the original request to &#8220;correct the spelling mistakes in the poem&#8221;.</p>
<p>So, not bad, but the still have &#8220;hard&#8221; instead of &#8220;had&#8221; in the first line of <span class="code">file1.txt</span>. This does not change the integrity of <span class="code">build1</span>, but does make another build (<span class="code">build2</span>) necessary to include a correction to the erroneous work submitted into <span class="code">build1</span>. </p>
<p>There are different ways we might choose to track the correction of the defect arising from <span class="code">build1</span>.</p>
<table class="wit indent">
<tbody>
<tr>
<td>Reuse&nbsp;CR1</td>
<td>
<p>Regress <span class="code">CR1</span> to a lifecycle state where the developer can add to it. Allow changes to be associated with <span class="code">CR1</span>, and then resubmit <span class="code">CR1</span> into a new build.</p>
<p>This approach, while simple, may be misleading. When revisiting <span class="code">build1</span> we need to be sure that we look at <span class="code">CR1</span> as it was when the build was executed, not as it is after the correction is applied. This can make metrics collection unnecessarily complex.</p>
</td>
</tr>
<tr>
<td>Create a new&nbsp;change</td>
<td>
<p>Treat the defect resolution as a separate change. This could be a new change or a special &#8216;defect&#8217; record.</p>
<p>This has the benefit of keeping track of the revisions that correct the defect in the original change separate to the original change. A feature potentially useful in simplifying metrics collection.</p>
</td>
</tr>
<tr>
<td>Create a separate but subsidiary change</td>
<td>
<p>We create a separate change record to track the specific revisions created to correct the defect, but we relate it to the original change request in a child-parent relationship (the original change being the parent.</p>
<p>This has the benefit of keeping track of the specific revisions that correct the defect while maintaining a link to the original change.</p>
</td>
</tr>
</tbody>
</table>
<p>Each approach has its own merits but, from the perspective of build integrity, they share an the important feature; when dealing with the conceptual change &#8220;correct the spelling mistakes in the poem&#8221;, they are semantically equivalent. For <span class="code">build2</span> to have integrity it must include both the revisions associated with the original change and all new revisions associated with the correction to the change, regardless of how that correction is controlled.</p>
<p>We correct the defect in <span class="code">build1</span> with an additional change to <span class="code">file1.txt</span> to produce the following.</p>
<pre class="brush: plain;">Mary had a little lamb,
It's fleece was white as snow,</pre>
<p>The following illustration shows <span class="code">build2</span> (in this case I have re-used <span class="code">CR1</span> to correct the defect). I should be obvious that missing any revision associated with <span class="code">CR1</span> has the potential to break the build&#8217;s integrity (we may have only part of <span class="code">CR1</span> in the build).<br />
<div id="attachment_745" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png?w=300&#038;h=234" alt="" title="Second build using reworked change" width="300" height="234" class="size-medium wp-image-745" /></a><p class="wp-caption-text">Fix Build: Conceptual change implemented with reworked literal change</p></div><br />
Using a separate change record to control the defect does not really solve this problem, it merely makes it less apparent. Consider the following illustration, it shows the same situation but this time I have used another change record (<span class="code">D1</span>) to control the defect.<br />
<div id="attachment_744" class="wp-caption aligncenter" style="width: 310px"><a href="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png"><img src="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png?w=300&#038;h=234" alt="" title="Second build with separate change" width="300" height="234" class="size-medium wp-image-744" /></a><p class="wp-caption-text">Fix build: Conceptual change now implemented with two literal changes</p></div><br />
Although I can exclude the defect resolution from the build configuration and, in this special case, claim to have maintained build integrity, it is difficult to justify semantically as I have not really included the sum of the conceptual change — the change is supposed to achieve a specific effect upon the system (the spelling correction), something it failed to do with the original literal <span class="code">CR1</span> in <span class="code">build1</span> but we hope it does with the combination of literal changes managed by change records <span class="code">CR1</span> and <span class="code">D1</span>.</p>
<p>And this is the point. Yes, the literal changes <span class="code">CR1</span> and <span class="code">D1</span> are, in one sense, changes. In practical terms though each on its own fails to achieve the objective of the original change request and consequently they are little more than sets of revisions. The two literal changes controlled by records <span class="code">CR1</span> and <span class="code">D1</span>, taken together, achieve the original goal of the change request &#8220;correct spelling mistakes in the poem&#8221;. It is this latter type of change (what I have called conceptual change) that is more interesting to configuration management and build integrity is maintained through these conceptual changes rather than the less significant literal changes.</p>
<p>This distinction between the conceptual change and literal change becomes increasingly important as we consider configuration integrity, a subject I shall discuss in more detail in subsequent posts.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/build-management/'>Build Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/change-management/'>Change Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/build/'>build</a>, <a href='http://blog.principia-it.co.uk/tag/change/'>change</a>, <a href='http://blog.principia-it.co.uk/tag/cm/'>CM</a>, <a href='http://blog.principia-it.co.uk/tag/development-2/'>development</a>, <a href='http://blog.principia-it.co.uk/tag/scm/'>SCM</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/624/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=624&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/06/12/when-is-a-change-a-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrity.png?w=300" medium="image">
			<media:title type="html">Initial build</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrityfix.png?w=300" medium="image">
			<media:title type="html">Second build using reworked change</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/06/buildintegrityfix1.png?w=300" medium="image">
			<media:title type="html">Second build with separate change</media:title>
		</media:content>
	</item>
		<item>
		<title>Toward a CM Ontology</title>
		<link>http://blog.principia-it.co.uk/2010/05/22/toward-a-cm-ontology/</link>
		<comments>http://blog.principia-it.co.uk/2010/05/22/toward-a-cm-ontology/#comments</comments>
		<pubDate>Sat, 22 May 2010 10:39:51 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Information Management]]></category>
		<category><![CDATA[SCM Tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[CM]]></category>
		<category><![CDATA[ontology]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Semantic Web]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=675</guid>
		<description><![CDATA[As I suggested in a previous post, I think the future of CM (and most especially SCM) lies substantially with the semantic web. My reasoning is simple; CM is about information management and this information needs to be shared, controlled and updated across increasingly more diverse organisations and systems. To provide this facility we need [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=675&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As I suggested in a <a href="http://blog.principia-it.co.uk/2010/04/07/absence-cm-tool-identities-and-some-thoughts-on-the-future-of-cm/">previous post</a>, I think the future of CM (and most especially SCM) lies substantially with the <a href="http://semanticweb.org/wiki/Main_Page">semantic web</a>. My reasoning is simple; CM is about information management and this information needs to be shared, controlled and updated across increasingly more diverse organisations and systems. To provide this facility we need a <em>lingua franca</em>, a common means to control and consolidate information between disparate sources. The semantic web provides the means to achieve this information management and exchange.</p>
<p>The great advantage of semantic web over efforts such as the now defunct Application Lifecycle Framework (<a href="http://www.eclipse.org/archived/index.php">ALF</a>) is that it requires no agreement between vendors (beyond using semantic web technology). The weakness of efforts such as ALF is always that they demand buy-in from the main tool vendors. A substantial number need to agree to develop and support the new standard.</p>
<p>Certainly semantic web is no panacea, but at least if Vendor A chooses one semantic representation of CM information and Vendor B chooses another they can still communicate by creating a correspondence rule set between the two representations (a little like XSLT can transform one XML into another — only a little though, semantic web has much more to offer).</p>
<p>So vendors need to agree to use and provide semantic web representations for CM information? No, not really. Most tools provide APIs that would allow this information to be interpreted from, or added to, any existing tool. Certainly a non-trivial effort, but one that is at least feasible. Better still, if multiple implementations are created for any tool these can again be consolidated using semantic web techniques.</p>
<p>The real power of semantic web technology comes from two sources; the abstraction of information semantics, and the ability to draw inferences from this information. Once you have an ontology, some inference rules and semantic relationships between ontologies, your inference rules will work across ontologies — neat. What does all the gobbledy-gook mean? It means that if Vendor A develops an ontology with a set of inference rules (rules for extracting more information from the underlying information) then Vendor B can map their ontology onto Vendor A&#8217;s and use Vendor A&#8217;s inference rules too. Actually it&#8217;s even better. User X can extend the rules and have them apply to Vendor A and/or Vendor B&#8217;s information sets equally, even if the original inference rules were designed for only Vendor A.</p>
<p>Brilliant. Problem solved then? Sadly, no. Although this all offers promise of a way forward there remains a lot of work to establish these semantic descriptions and, as many have discovered before, agreeing on the precise meaning of each semantic element is nontrivial in its own right. Not that this should stop us attempting the task.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/information-management/'>Information Management</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/cm/'>CM</a>, <a href='http://blog.principia-it.co.uk/tag/ontology/'>ontology</a>, <a href='http://blog.principia-it.co.uk/tag/scm/'>SCM</a>, <a href='http://blog.principia-it.co.uk/tag/semantic-web/'>Semantic Web</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/675/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/675/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/675/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=675&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/05/22/toward-a-cm-ontology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Absence, CM Tool, identities, and some thoughts on the future of CM</title>
		<link>http://blog.principia-it.co.uk/2010/04/07/absence-cm-tool-identities-and-some-thoughts-on-the-future-of-cm/</link>
		<comments>http://blog.principia-it.co.uk/2010/04/07/absence-cm-tool-identities-and-some-thoughts-on-the-future-of-cm/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 18:00:34 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[ITSLM]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[SCM Tool]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=658</guid>
		<description><![CDATA[Some of you may have noticed a bit of an hiatus in my posts. I&#8217;ve been a bit under the weather, feeling lethargic and run down, and not in a good frame of mind for writing. Lucky you, I am in the mood now. Remember a few posts back I mentioned working on a CMS [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=658&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Some of you may have noticed a bit of an hiatus in my posts. I&#8217;ve been a bit under the weather, feeling lethargic and run down, and not in a good frame of mind for writing. Lucky you, I am in the mood now.</p>
<p>Remember <a href="http://blog.principia-it.co.uk/2010/02/11/cms-tool-high-level-architecture/">a few posts back</a> I mentioned working on a CMS reporting tool? Well, I&#8217;ve been working with a client on a tool for managing parallel development, which is closely related to the type of reporting I had in mind for the CMS reporting tool. The client&#8217;s focus is on Dimensions, but in the interests of creating a flexible system I&#8217;ve been designing with other underlying in mind (although, as is often the way, timescales and pragmatism mean the implementation is sometimes more tool specific than the original design). The result of this has been some extended mental gymnastics that have resulting in some useful and hopefully interesting thoughts that I would like to share with you now.</p>
<p>The parallel development tool needs to both report, analyse and, ultimately, update the host SCM database. There are a number of special considerations that I won&#8217;t go into now, but these created much candle burning and banging of my head on desks, walls and other solid objects as I struggled to resolve some apparently simple problems that turned out to be rather tricky. (The sad thing is, as is often the case with these things, once I had an answer it turned out to be deceptively simple.) The upshot of all this cranial damage covers a wide variety of topics, too many for a single post, but we can make a start.</p>
<h2>Identification</h2>
<p>How do we identify things?</p>
<p>Each tool has its own method of identifying the things it controls. In Dimensions items are ultimately identified by some sort of unique specification; files are identifies by an Object Spec, projects (worksets) are identified by Project Specs and so on. Each of these Specs. provides a unique reference within the context of a specific Dimension base database. Subversion identifies things by their position in it virtual file system; path and revision. Again, Subversion references are qualified by the repository in which they are held. Since Subversion repositories can be referred to by any number of methods there is no one unique &#8216;name&#8217; for an item in Subversion once you step beyond the bound of the repository (I can, for example, use several host names to refer to the same repository).</p>
<p>With this in mind, how can we uniquely refer to a single controllable entity (I shall  use the term &#8216;Artefact&#8217; to represent a uniquely identifiable thing). For simplicity we&#8217;ll focus our attention on a file, after all with software configuration management (SCM) this is the most common sort of Artefact we want to control. As I discussed briefly in <a href="http://blog.principia-it.co.uk/2010/03/17/items-have-history/">a previous post</a>, files exist along two histories; the Revision History (in which new Artefacts are created for each revision of the file), and the Lifecycle History (in which an Artefact may undergo change without changing its revision, without becoming a new Artefact). Dimensions does a nice job of recording these two histories, but our challenge here is to differentiate identities.</p>
<p>Do we assign the identity to the Artefact&#8217;s revisions, or do we assign the identity to each Lifecycle historic state?</p>
<p>To illustrate, consider <span class="code">file1.txt</span>. This file will be subject to the simple lifecycle illustrated below. </p>
<div id="attachment_662" class="wp-caption aligncenter" style="width: 206px"><a href="http://principiait.files.wordpress.com/2010/04/very-simple-lifecycle.png"><img src="http://principiait.files.wordpress.com/2010/04/very-simple-lifecycle.png?w=196&#038;h=313" alt="" title="Very simple lifecycle" width="196" height="313" class="size-full wp-image-662" /></a><p class="wp-caption-text">A very simple lifecycle</p></div>
<p>Starting in the state <span class="code">NEW</span> we assign the <span class="code">file1.txt</span> Artefact a revision of <span class="code">1</span>. The Artefacts two histories and its change log are illustrated below.</p>
<div id="attachment_665" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/04/simple-change-log1.png"><img src="http://principiait.files.wordpress.com/2010/04/simple-change-log1.png?w=450&#038;h=231" alt="" title="Simple Change Log" width="450" height="231" class="size-full wp-image-665" /></a><p class="wp-caption-text">file1.txt - a simple change log</p></div>
<p>The developer chooses to change the original <span class="code">file1.txt</span> but while in lifecycle state <span class="code">NEW</span> we do not require a new Artefact, the resulting edited version of <span class="code">file1.txt</span> remains revision <span class="code">1</span>. The lifecycle state also remains <span class="code">NEW</span>, so although we have travelled the <span class="code">In-place Edit</span> path in the lifecycle, the result is an edit event but no change in either the state or the revision of <span class="code">file1.txt</span>. Using state and revision to identity the Artefacts (the one before the edit and the one after the edit) is therefore not sufficient to account for the two different edited versions of <span class="code">file1.txt<span>.</p>
<p>We could simple state that we are not interested in such edits or we could also simply assign some &#8216;point&#8217; revision to distinguish these intra-state revisions. Both of these options have been adopted by tools in the past, but when trying to generalise a solution we need to accommodate as many possibilities as we can. Generalising a solution should allow us to sit atop any underlying implementation. To arrive at a generalisation we need to explore the problem domain further.</p>
<h3>Derived Identities</h3>
<p>Perhaps the answer lies in <a href="http://valerieaurora.org/monkey.html">content-based addressing</a> (CBA). With CBA we identify Artefacts by creating a signature based upon intrinsic attributes of the item itself. This works very well for electronic data (in our case, files). There are many CBAs available and they are widely used in peer-to-peer systems for identifying files. The current darling of the CBA world is the <a href="http://en.wikipedia.org/wiki/SHA-2">SHA-2</a> family of hashing functions. These hashing functions process the stream of bytes in a file (or any other source of data), producing a single &#8216;summary&#8217; string of characters which is much shorter than the original (often 64, 128, or 256 bits long).</p>
<p>CBA has huge appeal for our purpose in uniquely identifying an Artefact. A CBA is almost guaranteed to be unique to the data being encoded (I say almost because any CBA will ultimately collide — two data sets produce the same hash — since a potentially infinite set of data is being mapped onto a finite set of hash codes). A CBA is intimately related to the Artefact&#8217;s characteristics and so no assignment authority is required (see <a href="#Assigned%20Identities">Assigned Identities</a> a little later). This also means that given an Artefact we can work out its unique identity, providing we know the hash function and the attributes used for identification (a files data, for example).</p>
<p>CBAs work very well for electronic data. Unfortunately, CBAs do not work well for the general case. How, for example, might we assign a CBA to a physical Artefact?</p>
<p><a name="Assigned Identities"></a><br />
<h3>Assigned Identities</h3>
<p>This brings us to assigned identities. An assigned identity is one that, unsurprisingly, is assigned by some agent. Examples of assigned identities are legion. The <a href="http://en.wikipedia.org/wiki/Isbn">ISBN</a> you find on any book you buy is an assigned identity, not for that specific book, but for the data and form of that book (hardback version of the first edition of XYZ). Similarly, almost all products have a <a href="http://en.wikipedia.org/wiki/Universal_Product_Code">UPC</a> (Universal Product Code) — the one that you find encoded in bar codes. Again, UPCs are assigned to a &#8216;type&#8217; rather than the specific item; so the UPC code 50036 90803 refers to JBL Duet speakers, but not to the specific pair of JBL speakers sitting on my desk.</p>
<p>To ensure the uniqueness of assigned identities two conditions must be met: the scope of the identity must be well defined (ISBNs apply only to books, UPCs apply only to products, and not, for example, to ideas or patents), and there must be some central agency who defines and issues codes (or at least issues blocks of codes to be issued by approved agents).</p>
<p>Assigned identities are not derived from the Artefact that they represent, so there is no way, when presented with an Artefact, to establish that Artefact&#8217;s identity, other than by reference to some catalogue to see whether it already has an assigned identity. This could be a very long process if we relied on the data as a whole. ISBNs for example, can be looked up using the books format, title, and edition. These three attributes for the key by which the ISBN can be referenced in a catalogue. This presumes the existence and universal availability of a definitive catalogue.</p>
<p>Another form of assigned identity is the <a href="http://en.wikipedia.org/wiki/UUID">Universally Unique Identifier</a> (UUID). UUIDs also use hashing functions to condense a set of attributes to a string of 128 bits, but the source data is not the file&#8217;s content but a series of attributes that are themselves (hopefully) unique. There are many implementations of the UUID scheme and they use different attributes to generate the UUID itself. Like CBA, a UUID is <em>almost</em> guaranteed to be unique — certainly sufficiently unique for most practical purposes.</p>
<h3>So where does all this leave us?</h3>
<p>An identity based on CBA is great for known data sets because the identity is generated from the data itself. We can therefore recreate the identity independent of any central authority. We can take a file and work out its unique identity and then use this unique identity within our tools. This, as we shall see in coming weeks, has significant advantages to resolving configuration data across distributed databases.</p>
<p>The problems with CBAs are that they do not translate well into the physical realm (we need to establish some characteristic of the physical object that can be uniquely selected for encoding into data and subsequently used to generate the CBA), and they are quite costly to generate (we need to read and process the entire data set to create the CBA).</p>
<p>Assigned identities that rely on an assigning authority (like the ISBN) require significant organisation and coordination. Each assigning authority must be organised to ensure that each identity is assigned uniquely. And here we run into another question related to the other form of assigned identity, UUIDs.</p>
<p>What do we mean by &#8216;uniquely assigned&#8217;? Suppose I create a file containing the text &#8216;The quick brown fox jumped over the lazy dog&#8217; and I assign it a UUID. Some time later, you create a file with identical content and assign it a UUID. The two UUIDs will be different. Are we then dealing with two Artefacts?</p>
<p>In one sense we are. They are two distinct incarnations of the file. But in any useful sense, we are not. They are in fact the same file. Just as if I took my original file and copied it to another location in my file system I would consider it the same file. Or if you copied your file to my file system I would be unable to distinguish your file from mine. They are the same &#8216;thing&#8217;, but we have assigned different identities.</p>
<p>This is the problem with all assigned identities; how to ensure that the &#8216;thing&#8217; being identified has no identity already assigned.</p>
<h2>Is there an answer?</h2>
<p>Yes and no. The work currently underway with the <a href="http://semanticweb.org/wiki/Main_Page">semantic web</a> project (quick overview <a href="http://en.wikipedia.org/wiki/Semantic_Web">here</a>) offers some hope. There is still a reliance on &#8216;authority&#8217; to assign identities, but I think there is much to be learned from the general approach and using a combination of derived and assigned identities will allow easy reconciliation of information between CM datasources. I see the problem of configuration management (and particularly identification) as a special case of identification within the semantic web project.</p>
<p>This is a fascinating area (well, it is to me) of research and one that I believe will be increasingly important as CM moves into &#8216;the cloud&#8217;. As the distinction between CM data under your direct control and that controlled by proxy through service providers and third parties is eroded the need to consolidate CM information across disparate tool sets and managed by different agencies will become increasingly important. This is a problem that we must solve.</p>
<p>I spent some time a couple of years back considering <a href="http://en.wikipedia.org/wiki/Topic_Maps">Topic Maps</a> and <a href="http://en.wikipedia.org/wiki/Resource_Description_Framework">Resource Description Framework</a> (RDF) as possible SCM schema. Although they are functionally equivalent, RDF seems to have won out in the standards battle. If you are interested in seeing where I think information management is going in the 21st century (and where CM must also go), check out the semantic web.</span></span></p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/'>ITSLM</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/658/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=658&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/04/07/absence-cm-tool-identities-and-some-thoughts-on-the-future-of-cm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/04/very-simple-lifecycle.png" medium="image">
			<media:title type="html">Very simple lifecycle</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/04/simple-change-log1.png" medium="image">
			<media:title type="html">Simple Change Log</media:title>
		</media:content>
	</item>
		<item>
		<title>Revision histories with more than one root</title>
		<link>http://blog.principia-it.co.uk/2010/03/18/revision-histories-with-more-than-one-root/</link>
		<comments>http://blog.principia-it.co.uk/2010/03/18/revision-histories-with-more-than-one-root/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 18:23:53 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=645</guid>
		<description><![CDATA[Most of the time when we deal with revision history we are dealing with a directed acyclic graph with a single root. Most item revision histories develop from a single starting revision, as illustrated below. If two items belonging to different revision histories are combined we produce a graph with more than one root, as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=645&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Most of the time when we deal with revision history we are dealing with a <a href="http://en.wikipedia.org/wiki/Directed_acyclic_graph">directed acyclic graph</a> with a single root. Most item revision histories develop from a single starting revision, as illustrated below.</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/singlerootedrevisionhistory.png"><img src="http://principiait.files.wordpress.com/2010/03/singlerootedrevisionhistory.png?w=439&#038;h=138" alt="" title="Single Rooted Revision History" width="439" height="138" class="aligncenter size-full wp-image-649" /></a></p>
<p>If two items belonging to different revision histories are combined we produce a graph with more than one root, as illustrated below where <span class="code">file1.txt</span> revision <span class="code">3</span> has been combined (merged) with <span class="code">file2.txt</span> revision <span class="code">2</span> to produce <span class="code">file1.txt</span> revision <span class="code">4</span> (or arguably we might call it <span class="code">file2.txt</span> revision <span class="code">3</span>).</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistory.png"><img src="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistory.png?w=439&#038;h=198" alt="" title="Multi-rooted Revision History" width="439" height="198" class="aligncenter size-full wp-image-646" /></a></p>
<p>This second situation is often overlooked when considering product integrity. Tools often do not track merge operations between two revision histories like this, so the information about the merge is not available for analysis. The difficulty arises when, in our example, <span class="code">file2.txt</span> is developed to revision <span class="code">3</span> under the same change as revision <span class="code">2</span> (suppose <span class="code">CR1</span> was only partially tested when the merge took place and a defect was found and resolved in revision <span class="code">3</span>).<br />
<a href="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistorypostchange.png"><img src="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistorypostchange.png?w=439&#038;h=243" alt="" title="Multi-rooted Revision History Post Change" width="439" height="243" class="aligncenter size-full wp-image-652" /></a></p>
<p>It should be obvious that <span class="code">file1.txt</span> revision <span class="code">4</span> contains only part of change <span class="code">CR1</span>, it therefore lacks integrity. Checking this and reporting it to the user is very difficult if the merge operation is not properly tracked.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/645/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/645/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/645/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=645&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/03/18/revision-histories-with-more-than-one-root/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/singlerootedrevisionhistory.png" medium="image">
			<media:title type="html">Single Rooted Revision History</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistory.png" medium="image">
			<media:title type="html">Multi-rooted Revision History</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/tworootedrevisionhistorypostchange.png" medium="image">
			<media:title type="html">Multi-rooted Revision History Post Change</media:title>
		</media:content>
	</item>
		<item>
		<title>Items have history</title>
		<link>http://blog.principia-it.co.uk/2010/03/17/items-have-history/</link>
		<comments>http://blog.principia-it.co.uk/2010/03/17/items-have-history/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 18:02:25 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[SCM Tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=628</guid>
		<description><![CDATA[As those of you who have been following this blog for any time will know I am currently looking in some detail at parallel development, specifically how it can be managed safely by non-expert version managers. I have used parallel development with much success on many projects but codifying my knowledge into a tool is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=628&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As those of you who have been following this blog for any time will know I am currently looking in some detail at <a href="http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/">parallel development</a>, specifically how it can be managed safely by non-expert version managers. I have used parallel development with much success on many projects but codifying my knowledge into a <a href="http://blog.principia-it.co.uk/category/development/scm-tool/">tool</a> is proving challenging — and interesting too. In this post I will be considering item histories.<span id="more-628"></span></p>
<p>It is easy to become entangled in confused terminology when discussing items and item histories. To avoid such confusion I will define an Item as a specific version of something we control (most commonly in software configuration management these &#8216;things&#8217; are files, so for the remainder of this post I will use files to illustrate, but remember that an Item could be anything we version control).</p>
<p>With this definition in mind we can define one type of history as a set of Items related to one another by a predecessor/successor relationship. This is the most common history one becomes familiar with, the revision history.</p>
<p>But there is another history worth considering. The process of managing an Item may involve  the Item passing through a number of states. We commonly refer to these states as a lifecycle. An Item may be created into the NEW state, then be edited by a developer in the DEVELOP state. Once completed the developer may submit the item to the REVIEW state for a code review. The item may them pass through various states before finally reaching the RELEASED state. The lifecycle history is independent of the Item revision history.</p>
<p>To illustrate the difference between the lifecycle history and the revision history consider <span class="code">file1.txt</span> shown below. This file has three revision Items; <span class="code">1</span>, <span class="code">2</span>, and <span class="code">3</span>.</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png"><img src="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png?w=349&#038;h=59" alt="" title="file1.txt Revision History" width="349" height="59" class="aligncenter size-full wp-image-634" /></a></p>
<p>Zooming in to the <span class="code">file1.txt</span> revision <span class="code">3</span> Item we see the following lifecycle history.</p>
<p><a href="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png"><img src="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png?w=450&#038;h=265" alt="" title="file1.txt revision 3 Lifecycle History" width="450" height="265" class="aligncenter size-full wp-image-640" /></a></p>
<p><span class="code">file1.txt</span> revision <span class="code">3</span> passed through all of these lifecycle states, passing through the DEV-TEST states twice as a defect was found and resolved.</p>
<p>Version control tools track the revision history but seldom the Item lifecycle history. Configuration management tools, such as Dimensions, capture both the revision history and the lifecycle history.</p>
<p>Any generalised tool for analysing and reporting configurations from as wide a variety of sources must deal with these different histories.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/628/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/628/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/628/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=628&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/03/17/items-have-history/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/simplerevisionhistory.png" medium="image">
			<media:title type="html">file1.txt Revision History</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/03/simpleiifecyclehistory1.png" medium="image">
			<media:title type="html">file1.txt revision 3 Lifecycle History</media:title>
		</media:content>
	</item>
		<item>
		<title>Preventing ticket ping-pong</title>
		<link>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 12:17:59 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Tools 'n' Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=618</guid>
		<description><![CDATA[This is the first opportunity I have had for a while to put something on this blog — busy, busy, busy. (I can tell you that I am building up a fairly sizeable backlog of articles on parallel development and I will, I promise, get round to publishing them soon.) In the meanwhile, here&#8217;s a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=618&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This is the first opportunity I have had for a while to put something on this blog — busy, busy, busy. (I can tell you that I am building up a fairly sizeable backlog of articles on parallel development and I will, I promise, get round to publishing them soon.) In the meanwhile, here&#8217;s a brief thought on designing ticketing systems.</p>
<p>Many ticketing systems, supporting processes such as incident management, are prone to ticket ping-pong where tickets are bounced from queue to queue as people keep forwarding the problem to get it off their queue. This is simple to control once you see the problem.<span id="more-618"></span></p>
<p>Processes that suffer with this problem all have one thing in common; they all allow one user to simply pass a ticket from their queue to another unchallenged. For example, an incident ticketing system shows up a ticket on Person A&#8217;s queue. They cannot deal with it (or do not want to deal with it), so they look for someone they believe should deal with it and assign it to their queue (Person B). Person B looks at the ticket, decides they should not be dealing with it and looks around for someone else to deal with it (Person C). And so it goes, the ticket to bounced around from queue to queue never being handled but always being sent on, possibly even returning to Person A who forwards it on again and the cycle continues.</p>
<p>The problem is that the ticket owner in such systems is defined as the person who has the ticket on their queue and anyone can pass a ticket to another queue. Since no one wants to be lumbered with the ticket it just keeps being passed on. It becomes an SEP (someone else&#8217;s problem), doomed to forever wander the queues, never being resolved.</p>
<p>Fixing this process is actually very simple. When a ticket is initially raised by a user onto someone&#8217;s queue (let&#8217;s say Person A) the queue owner becomes responsible for progressing the ticket. If the Person A believes the ticket belongs to someone else (say, Person B), they propose it into Person B&#8217;s queue. But, and this is the important change to the process, <em>ownership of the ticket remains with Person A</em>. Person A remains responsible for ensuring that the ticket is progressed (not simply passed from queue to queue) until Person B accepts the ticket into their queue. This puts pressure on the Person A (as the ticket owner) to actually manage the process, whereas the original process did not pressure anyone because they could simply pass the ticket on to someone else.</p>
<p>It may seem unfair on Person A. It could be that they really cannot deal with the ticket. It could be that Person B really should take ownership of the ticket but they may be trying to avoid doing so by not accepting it into their queue. This is what escalation is for. If Person A has a legitimate cause they can escalate the problem and effectively force Person B to acknowledge their responsibility. In practice this is seldom an issue as Person B, if they recognise their responsibility will simply accept the ticket into their queue and progress it to completion.</p>
<p>I Person B genuinely cannot, or should not, deal with the ticket they simply inform Person A of their reason for not accepting it into their queue. Person A must now seek the correct person to resolve the ticket. Because Person A is responsible for the ticket until someone else takes charge of it they have a vested interest in finding the correct person to deal with it. If they propose the ticket to someone&#8217;s queue and do not get a quick response they have a vested interest in following up to find out why the ticket has not been accepted.  Person A is motivated to find the correct ticket owner since no one but the correct ticket owner will take the responsibility for progressing the ticket away from Person A and until some takes it from Person A it remains theirs to progress.</p>
<p>Ensuring that people cannot simply pass tickets around the system ensures that they are progressed because it puts pressure on owners to either resolve the ticket or to find the person who really should resolve the ticket.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/process-tools-n-tips/'>Process</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/618/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/618/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/618/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=618&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/27/preventing-ticket-ping-pong/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>In the beginning&#8230;</title>
		<link>http://blog.principia-it.co.uk/2010/02/18/in-the-beginning/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/18/in-the-beginning/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 18:00:33 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Parallel Development: theory and practice]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[SCM Tool]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=574</guid>
		<description><![CDATA[&#8230;was the definition. In this article I am going to lay out my definitions for some terminology that will become increasingly important as I develop my CMS model. The terms I will be discussing are as follows. Stream Branch Configuration Item Revision Configuration Component Repository Configuration Management Database Record At this point I caution the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=574&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>&#8230;was the definition.</p>
<p>In this article I am going to lay out my definitions for some terminology that will become increasingly important as I develop my CMS model.</p>
<p>The terms I will be discussing are as follows.</p>
<ul>
<li>Stream</li>
<li>Branch</li>
<li>Configuration Item</li>
<li>Revision</li>
<li>Configuration</li>
<li>Component</li>
<li>Repository</li>
<li>Configuration Management Database</li>
<li>Record</li>
</ul>
<p>At this point I caution the reader that these definitions are deliberately quite loose and informal. Each will be expanded, refined, rewritten and formalised as I work through articles in this blog. For now, my working definitions are as follows.</p>
<h3>Project</h3>
<p>A coordinated effort usually conducted by several individuals to deliver a Product. Project describes the totality of planning and activity requires to gather requirements and interpret these into Product.</p>
<h3>Product</h3>
<p>That which is to be delivered by a Project. Products include, but are not limited to:</p>
<ul>
<li>Executable software</li>
<li>Documents — manuals, design documents, requirements, installation guides, administration and maintenance manuals</li>
<li>Hardware — computers, network components, any other physical components required as part of the Product</li>
<li>Training materials — exercise version of data or system components, trainer presenation, training the trainer material, sandbox systems for trainees</li>
<li>Source code — when developing for a 3rd party. Source code may also be a deliverable in interpreted languages or when delivering web content such as HTML.</li>
<li>Media — video, graphics, audio</li>
</ul>
<h3>Stream</h3>
<p>Projects often consist of more than one piece of development. A common strategy is to manage these pieces of development as a sort of sub-project. Timescales of these Streams are overlapped to allow the project to compress its overall timescale.</p>
<h3>Branch</h3>
<p>An implementation technique used in development to manage simultaneous changes to common items. In software development Branches are common and used to allow two or more developers to work on the same source code simultaneously.</p>
<h3>Configuration Item</h3>
<p>A configuration item is an item within the configuration management system that is the focus for change management.</p>
<h3>Revision</h3>
<p>Each time an item is modified and submitted into version control, a new revision is created. In this way an item&#8217;s history can be traced by looking back through the sequence of revisions.</p>
<h3>Delta</h3>
<p>The difference between two revisions.</p>
<h3>Configuration</h3>
<p>A specific arrangement of item revisions.</p>
<h3>Component</h3>
<p>An item that is subject to version control, but is not elevated to the status of a configuration item.</p>
<h3>Repository</h3>
<p>A safe store for item revisions.</p>
<h3>Configuration Management Database</h3>
<p>A database containing information about each item revision and their relationships to one another and to records.</p>
<h3>Record</h3>
<p>A set of data that is subject to a process or workflow but not necessarily version control. Records normally carry information used to account for an item&#8217;s current disposition or the current state of a process or workflow.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/'>Parallel Development: theory and practice</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/574/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/574/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/574/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=574&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/18/in-the-beginning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>Fences and Ambulances</title>
		<link>http://blog.principia-it.co.uk/2010/02/17/fences-and-ambulances/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/17/fences-and-ambulances/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 18:00:37 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Tools 'n' Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=569</guid>
		<description><![CDATA[Suppose you are in charge of a cliff edge. Your task is to maintain the views from the cliff, but keep visitors safe. You can construct a fences along the top of the cliff, to stop people falling over, or you can place ambulances at the foot of the cliff, to clear up once someone [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=569&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Suppose you are in charge of a cliff edge. Your task is to maintain the views from the cliff, but keep visitors safe. You can construct a fences along the top of the cliff, to stop people falling over, or you can place ambulances at the foot of the cliff, to clear up once someone falls over.<span id="more-569"></span></p>
<p>Fences seem most appealing (even if only for humanitarian reasons), but they are expensive to construct and maintain. Furthermore, constructing a high fence will block the beautiful views across the sea and people will stop visiting the site (which is bad). So your fences can be only so high before they become an impediment and stop people using the facilities. Unfortunately, keeping the fences too low means people can still climb over them and (you guessed is) fall to their doom.</p>
<p>Maintaining ambulances at the foot of the cliff is also expensive. There is the possibility that people falling over the cliff will be so harmed that they do not survive the fall and even those that do survive may be out of commission for some time. Ambulances seem like a last resort, a safety net. Too few ambulances means more injured fallers die when they could have been saved, too many ambulances means increased cost without any benefit.</p>
<p>There is a balance to be struck. Fences to guard against the unwary and ambulances to recover the unfortunate (or plain stupid).</p>
<p>This balance between ambulances and fences is the line that process engineers walk. We try to design fences that are cheap to install, efficient to maintain, stop the majority of people falling over the cliff, and allow people to enjoy the facilities along the cliff edge safely. At the same time we know that there will always be those who venture beyond the fences (they cannot be secured without blocking the view and driving people away — possibly to another cliff), so we prepare a small fleet of ambulances to minimise the impact (forgive the pun) of those who fall.</p>
<p>Creating a process that allows facilities to be used efficiently but also provide a means of identifying and safely recovering when things go wrong is the skill of a good process engineer.</p>
<p>A good example of this is the combination of change and incident management. Change management is a fence, a process designed to avoid problems. Incident management is an ambulance, a process designed to minimise problems once they occur. When change management fails because either someone circumvents the process (climbs the fence) or because the process is incorrectly applied (the fence is damaged or too low) then incident management identifies the resulting problem and hopefully resolves it as quickly as possible (ambulances recovering the injured faller and saving their life).</p>
<p>If change management processes are too draconian they will be expensive (delaying change and making your organisation unresponsive) or simply circumvented when users perceive them to be an unacceptable impediment. If incident management is under resourced they will be incapable of recovering from problems when they occur. As change management becomes less effective the cost of incident management rises, as change management becomes more effective the need for incident management declines.</p>
<p>Striking the right balance is a matter of judgement and will vary from organisation to organisation, and from service to service. The more sensitive your service is to problems, the more change control is called for, the less sensitive your service is to problems, the less change control is required.</p>
<p>A problem in, for example, an order processing system for a mail-order company has serious consequences and suggests more change control should be applied. The cost of failure is so high that incident management costs would be unacceptable. Within the same organisation the system that produces the print catalogue is less sensitive, so change management costs would normally be lower and more incident management might be called for.</p>
<p>The key to good process design and implementation is balance between constructing fences and maintaining ambulances.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/process-tools-n-tips/'>Process</a>, <a href='http://blog.principia-it.co.uk/category/tools-n-tips/'>Tools &#039;n&#039; Tips</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/569/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/569/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/569/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/569/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/569/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/569/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/569/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/569/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/569/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/569/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=569&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/17/fences-and-ambulances/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
		<item>
		<title>CMS Tool: High-level architecture</title>
		<link>http://blog.principia-it.co.uk/2010/02/11/cms-tool-high-level-architecture/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/11/cms-tool-high-level-architecture/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 18:00:57 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[SCM Tool]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[CM Tools]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=578</guid>
		<description><![CDATA[Continuing my musings about a universal configuration management tool I&#8217;ve drafted the basic architecture. This is summarised in the following diagram (after the break). This simple architecture serves to isolate the key levels of abstraction in the CMS. As with all multi-layer architectures the important feature is that each layer creates an abstraction then allows [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=578&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Continuing my musings about a universal configuration management tool I&#8217;ve drafted the basic architecture. This is summarised in the following diagram (after the break).<span id="more-578"></span><br />
<div id="attachment_579" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-018-cm-tools-architecture.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-018-cm-tools-architecture.png?w=450&#038;h=461" alt="" title="CM Tool Architecture" width="450" height="461" class="size-full wp-image-579" /></a><p class="wp-caption-text">CM Tool Architecture</p></div><br />
This simple architecture serves to isolate the key levels of abstraction in the CMS.</p>
<p>As with all multi-layer architectures the important feature is that each layer creates an abstraction then allows layers it serves to use a stable interface. The CM Data layer, for example, will need to deal directly with individual the tools we wish to interrogate. (Recall that I am currently only proposing a tool that analyses and reports the content of the underlying tools, writing a tool to also update the content of those tools adds a whole new set of challenges to the problem. Challenges I have no desire to deal with right now, but which will be served well by this architecture nonetheless.) The CM Data layer presents one, hopefully, stable interface to the CM Model, so the CM Model will not have to be changed is a tool changes its interface (changing its database schema, command line, API, or whatever method we use to access it).</p>
<h2>CM Data</h2>
<p>This layer presents a common interface to the CM tools that the CMS is fronting. CM Data can be divided into two categories.</p>
<ul type="none">
<li><b>Item library</b> — this holds the items the CM tools store; files, directories, symbolic links, etc.</li>
<li><b>Data <i>about</i> items</b> — this is data such as relationships between items, attributes of items (owner, author, date modified, and so on).</li>
</ul>
<p>The CM Data layer will provide methods for accessing these data. Items will be held in a <span class="code">Repository</span> and the data about these items will be held in a <span class="code">CMDatabase</span>.<br />
All version control tools are a <span class="code">Repository</span> (they store items) and provide at least some data about those items (author, modified date, ancestor/successor relationships, contains relationships), so they provide some functions of a <span class="code">CMDatabase</span>. More advanced tools (like Dimensions and Synergy/CM) provide the same <span class="code">Repository</span> functions but they expand these considerably (adding in records such as change requests) and the <span class="code">CMDatabase</span> functionality is also expanded. These points will be revisited and clarified as we proceed.</p>
<h2>CM Model</h2>
<p>The CM Model will provide an abstraction of common CM artefacts (items and their relationships, collections, baselines, branches, changes and so on). The point of this abstraction is to, once again, provide a consistent and stable model to the layers that use the CM Model. So, the code in the Business Logic and Presentation layers is written to use the CM Model rather than the various implementations of these artefacts presented by the underlying tools. This means our system can access, say, an <span class="code">Item</span> without needing to know how it is represented in the tool or even which tool it is held in.</p>
<p>The CM Model is perhaps the most important part of the architecture to design. It needs to be sufficiently comprehensive to accommodate the various tools&#8217; concepts but at the same time it needs to be as simple as possible and as stable as possible to preserve a stable interface to the rest of the system.</p>
<h2>Business Logic</h2>
<p>The Business Logic layer is where all of the rules about how the CM Model is to be interpreted and managed. The most challenging aspect of the Business Layer is the need to allow users to define their own rules without requiring them to program anything into the system (although we will surely make the tool easy to extend programatically). This layer will require a detailed set of user cases and a considerable investment of time in the early design if the final product is to be flexible enough to accommodate a wide variety of users.</p>
<p>The Business Logic layer&#8217;s functionality can be divided into two classes; those features of SCM that are fundamental and those that are definable. Establishing fundamental features may be a matter of diktat on my part, but never-the-less I will try to only hardcode rule when absolutely necessary, preferring instead to provide configurable rules. *scratched head* This could take some time.</p>
<h2>Presentation</h2>
<p>Finally there is the presentation layer. Here all of the various methods of presenting the system&#8217;s functionality are gathered. This is perhaps the simplest layer to define functionally but the most difficult to design aesthetically. Having established what the system can do in the other layers the function of the Presentation layer is to provide a method of allowing the user to request that functionality, and providing a means for the system to provide the results to the user. The challenge with user interface (UI) design is how to achieve these two functions in an easy to use and, preferably, intuitive way.</p>
<p>In the first instance I shall probably provide a command line interface as a priority with some form of rudimentary GUI as a secondary development. Once these are done other interfaces may be considered.</p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/cmcrossroads/'>CMCrossroads</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/cm-tools/'>CM Tools</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/578/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/578/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/578/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=578&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/11/cms-tool-high-level-architecture/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-018-cm-tools-architecture.png" medium="image">
			<media:title type="html">CM Tool Architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Parallel development: theory and practice</title>
		<link>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 19:59:11 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[Configuration Management]]></category>
		<category><![CDATA[ITSLM]]></category>
		<category><![CDATA[Parallel Development: theory and practice]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=590</guid>
		<description><![CDATA[Having spent the past couple of weeks with a client working through the issues that need to be carefully considered when version controlling software, and in particular how to manage and control parallel development. I have come to three conclusions: People are often more afraid of the perceived problems than the practical realities of parallel [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=590&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Having spent the past couple of weeks with a client working through the issues that need to be carefully considered when version controlling software, and in particular how to manage and control parallel development. I have come to three conclusions:</p>
<ol>
<li>People are often more afraid of the perceived problems than the practical realities of parallel development.</li>
<li>People do not truly appreciate the problems and practical realities of version control and parallel development.</li>
<li>There is a need for more theoretical work on the topic and, perhaps more significantly, a need for more formal expression of the process and problems involved.</li>
<li>There is a quite substantial book that could be written on the subject.</li>
</ol>
<p><span id="more-590"></span><br />
The first two points are related to the last two insofar as people need a clear explanation of the discipline and, to really acquire a firm understanding of the subject, you need to commit to studying it. There is simply no easy way to explain the more complex material (and by simple I mean one side of A4 summaries demanded by people who think they need to know but who have no practical exposure to the technical nature of software development or version control — there is no &#8216;managers guide too..&#8217;).</p>
<p>As to the third point, I have expressed a concern about this before in various forums. Rather than continue to observe the problem I have decided to start doing something about it. So, over the coming weeks and months I will be expanding some ideas I&#8217;ve been mulling over for many years in a series of posts to this blog (special category set up <a href="http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/">here</a>) and on <a href="http://www.principia-it.co.uk/parallel-development-theory-and-practice">my website</a>. Be warned though, these articles will probably get very theoretical, often be speculative, and may raise as many new questions as they resolve existing ones. We shall see.</p>
<p>As for the final point, as I build up a sufficiently cogent set of material while writing on the blog (a process unlikely to be well structured), I will assemble more coherent articles on <a href="http://www.principia-it.co.uk/parallel-development-theory-and-practice">my website</a> and who knows I might get round to pulling them together into a book one day. (Ha! Another of the many books I either intend to write or am in the process of writing but may never finish or publish — *sigh* so many things to do, so little time.) I may even pull material together and add it to the <a href="http://www.cmcrossroads.com/cgi-bin/cmwiki/view/">CM wiki</a> or the <a href="http://www.itslmbok.com/wiki">ITSLM BoK</a>. You never know, stranger things have happened.</p>
<p>Rather than start here, I&#8217;ll start an introductory post right now and hopefully have it up in the next day or two. In the meantime, you could check out some past posts on the subject; <a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/">here</a> and <a href="http://blog.principia-it.co.uk/2009/06/23/basic-branching/">here</a></p>
<br />Filed under: <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/'>Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/'>ITSLM</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/parallel-development-theory-and-practice/'>Parallel Development: theory and practice</a>, <a href='http://blog.principia-it.co.uk/category/plain-old-blog/'>Plain Old Blog</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/'>Software Configuration Management</a>, <a href='http://blog.principia-it.co.uk/category/itslm/configuration-management/software-configuration-management/version-control/'>Version Control</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/590/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=590&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/10/parallel-development-theory-and-practice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/41c439c6892b6a1b53ea8c1686324b4c?s=96&#38;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D96&#38;r=G" medium="image">
			<media:title type="html">Principia IT</media:title>
		</media:content>
	</item>
	</channel>
</rss>