<?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, 06 Mar 2010 15:51:10 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<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>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[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/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[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 reader that these definitions are deliberately quite loose and informal. Each will [...]<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/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 layers it [...]<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>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/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 development.
People [...]<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>
		<item>
		<title>Who&#8217;s afraid of the big bad merge?</title>
		<link>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/</link>
		<comments>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 20:15:19 +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[Software Configuration Management]]></category>
		<category><![CDATA[Version Control]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[dependencies]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[parallel development]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=530</guid>
		<description><![CDATA[A common objection to using parallel development is the fear of the inevitable merging required to reintegrate the changes as the development proceeds. In this post I will take a look at some of the issues that arise from managing parallel development and, perhaps more importantly, provide some guidance on how to avoid the pitfalls [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=530&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>A common objection to using parallel development is the fear of the inevitable merging required to reintegrate the changes as the development proceeds. In this post I will take a look at some of the issues that arise from managing parallel development and, perhaps more importantly, provide some guidance on how to avoid the pitfalls of parallel development.<span id="more-530"></span></p>
<h2>Simple Merges</h2>
<p>The most basic merge is a very straightforward (although, as we shall see, can have hidden complexities).<br />
<div id="attachment_532" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-001-simple-merge-schematic.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-001-simple-merge-schematic.png?w=450&#038;h=212" alt="" title=" Simple Merge" width="450" height="212" class="size-full wp-image-532" /></a><p class="wp-caption-text">Simple Merge</p></div><br />
In this example changes to the file are merged between the two branches resulting in a new revision on the upper branch. Since the changes are to different parts of the file the merge can be performed automatically, resulting in a file containing both sets of changes.</p>
<p>The most obvious limitation of these simple merges is that the file must be &#8216;mergeable&#8217;, which for most tools means the file must be record oriented. Text files are a collection of records, one for each line in the file. Binary files tend to be resistant to merge unless a special tool is provided (MSWord can merge two documents with reasonable accuracy).</p>
<h2>Conflicting Merges</h2>
<p>Sometimes a merge involves changes to the same records (the same lines in a text file) in the same file. The illustration below shows just such a merge.<br />
<div id="attachment_535" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png?w=450&#038;h=242" alt="" title="Conflicting Merge" width="450" height="242" class="size-full wp-image-535" /></a><p class="wp-caption-text">Conflicting Merge</p></div><br />
The most notable feature of this merge is the line marked &#8216;Developer resolves conflicts&#8217;. Conflicting merges require human intervention to decide which parts of the conflicting lines should be accepted into the final merged version of the file.</p>
<p>Sometimes these conflict resolutions will require more than a simple decision about which line from the two changes should be adopted and the developer will need to rework both changes to make them work together. Fortunately the majority of merge conflicts are relatively straightforward providing integrations are performed frequently.</p>
<div class="sidebar">
<h3>Merge Frequency</h3>
<p>One of the skills you quickly develop when managing parallel development is knowing when to merge and how frequently to merge. One simple piece of guidance is to merge early and often. Unfortunately this is not always the most useful strategy, but that is a discussion for another post.
</p></div>
<h2>Renamed and Moved Files</h2>
<p>While merging a file&#8217;s content is commonly supported by version control tools, tracking renamed and moved files during a merge operation is less well supported but in todays software development world, where refactoring is common, it is increasingly essential.</p>
<p>The problem with renamed and moved files are summarised in the following illustration.<br />
<div id="attachment_543" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png?w=450&#038;h=246" alt="" title="Merge with rename" width="450" height="246" class="size-full wp-image-543" /></a><p class="wp-caption-text">Merge with rename</p></div><br />
In the top branch <span class="code">file2</span> has been modified, but in the lower branch <span class="code">file2</span> has been both modified and renamed to <span class="code">file3</span>. The desired result, shown in the final version to the right, contains the changes from both <span class="code">file2</span> in the top branch and the changes in <span class="code">file3</span> in the lower branch. But most importantly, the file has also been renamed to <span class="code">file3</span> in the upper branch.</p>
<h2>Rename/move conflicts</h2>
<p>Merges involving renames do not necessarily run smooth. Not only are they subject to the same content merge issues as the simple file merge but also the problem when the file is renamed/moved in both branches. This situation is illustrated below.<br />
<div id="attachment_545" class="wp-caption aligncenter" style="width: 460px"><a href="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png"><img src="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png?w=450&#038;h=256" alt="" title=" Rename conflict" width="450" height="256" class="size-full wp-image-545" /></a><p class="wp-caption-text"> Rename conflict</p></div><br />
In this case the tool has chosen to include both renamed files. This may not be what was intended, so care must be taken when dealing with renamed and moved files. Other tools will display a conflict and require user intervention to decide the correct name to assign to the file in the merged <span class="code">dir1</span>.</p>
<h2>Mitigation</h2>
<p>Before moving on to some other issues you will encounter when using parallel development, we pause briefly to consider how to avoid, or at least mitigate, some of the issues mentioned so far.</p>
<p>Firstly, despite the impression the previous sections may have conjured, merging is not fraught with perils. After many years of managing parallel development on projects ranging from the simple to very complex, I can assure you that, with a little common sense and some forethought the issues can be minimised (but seldom completely eliminated).</p>
<ol>
<li>Merge as early as you can, and then merge often to keep each merge as small and manageable as possible.</li>
<li>When you have input to a project&#8217;s design, ensure a sound architecture. This will minimise overlapping changes and consequently merge conflicts.</li>
<li>If you identify files that are merged often, try to decompose the file into smaller files to avoid high merge rates. (This is common with files used for configuration or files containing a lot of utility code.)</li>
<li>Keep refactoring on one branch. Renaming and moving files can cause tricky merge issues when performed on many branches.</li>
</ol>
<p>Now, <a href="http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/2/">on to some issues</a> that, while not unique to parallel development, can make your life difficult if not managed properly. </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/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/branching/'>branching</a>, <a href='http://blog.principia-it.co.uk/tag/dependencies/'>dependencies</a>, <a href='http://blog.principia-it.co.uk/tag/merging/'>merging</a>, <a href='http://blog.principia-it.co.uk/tag/parallel-development/'>parallel development</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/530/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/530/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/530/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=530&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/02/01/whos-afraid-of-the-big-bad-merge/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-001-simple-merge-schematic.png" medium="image">
			<media:title type="html"> Simple Merge</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-pard-dia-002-simple-conflicting-merge-schematic.png" medium="image">
			<media:title type="html">Conflicting Merge</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-003-merge-with-rename.png" medium="image">
			<media:title type="html">Merge with rename</media:title>
		</media:content>

		<media:content url="http://principiait.files.wordpress.com/2010/02/cm-swecm-dia-004-rename-conflict.png" medium="image">
			<media:title type="html"> Rename conflict</media:title>
		</media:content>
	</item>
		<item>
		<title>Common Interface</title>
		<link>http://blog.principia-it.co.uk/2010/01/31/common-interface/</link>
		<comments>http://blog.principia-it.co.uk/2010/01/31/common-interface/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 21:32:23 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[PERL]]></category>
		<category><![CDATA[SCM Tool]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[crazy ideas]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=528</guid>
		<description><![CDATA[After much deliberation and soul searching I&#8217;ve finally decided it&#8217;s time to address one of my all time bugbears. I am going to develop a set of transferable libraries for analysing and operating a CMS. And because I am most familiar with Perl (and, as explained in my earlier post Glue Software, I find it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=528&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>After much deliberation and soul searching I&#8217;ve finally decided it&#8217;s time to address one of my all time bugbears. I am going to develop a set of transferable libraries for analysing and operating a CMS. And because I am most familiar with Perl (and, as explained in my earlier post <a href="http://blog.principia-it.co.uk/2010/01/25/glue-software/">Glue Software</a>, I find it the most useful language for my needs) I shall write them in that language.</p>
<p>As with most people who have worked long enough on the coalface of SCM I have a ragtag collection of routines, scripts and utilities already but now is the time to pull them all together, clean them up, give some thought to a coherent design and build a better mousetrap that I can use whenever I go to a new client.</p>
<p>This is not an effort to develop a be-all-and-end-all CM system, but more a matter of me realising that I develop the same sort of scripts time and again. So I would be better off developing a more robust architecture that will allow me to exploit report generators or integrity checkers written when using one tool when I go to a client who uses another tool but has the same problem to be solved.</p>
<p>A typical example of a script I have written several times is one to check the integrity of a build configuration. Answering questions such as, &#8216;does this build configuration contain all, and only, the completed change requests assigned to this release?&#8217;</p>
<p>It would also be nice to have a tool for federated reporting across tools. Often clients have several version control tools and it would be nice to have one reporting front-end that I could plug into their many VCSs and get information about them all.</p>
<p>There are, of course, many problems to overcome (not least all the different philosophies supported by these tools) but this is not a case of trying to solve all problems in one go, rather the idea is to write a facade that will allow me to access the implementation tools through a common interface. In this way, all I need do for each client is write a new facade that complies with my own interface definitions but interrogates their particular implementation. The hard parts of these scripts, the logic, will remain unchanged and useful in multiple applications, treating the tools as databases.</p>
<p>As with many efforts born of frustration, this one is not completely thought out yet (in fact some of the ideas are positively vague), so expect more to come on this side project&#8230;</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/tools-n-tips/glue-software/perl/'>PERL</a>, <a href='http://blog.principia-it.co.uk/category/development/scm-tool/'>SCM Tool</a> Tagged: <a href='http://blog.principia-it.co.uk/tag/cms/'>CMS</a>, <a href='http://blog.principia-it.co.uk/tag/crazy-ideas/'>crazy ideas</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/528/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=528&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/01/31/common-interface/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>
	</item>
		<item>
		<title>Glue Software</title>
		<link>http://blog.principia-it.co.uk/2010/01/25/glue-software/</link>
		<comments>http://blog.principia-it.co.uk/2010/01/25/glue-software/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 08:00:41 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Glue Software]]></category>
		<category><![CDATA[PERL]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[Tools 'n' Tips]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=506</guid>
		<description><![CDATA[As someone who inevitably becomes involved in the technical implementation of configuration management systems (CMS) I am often called upon to create what I choose to call &#8216;glue software&#8217;. Glue software is not a full integration between two products (often there is simply no way to fully integrate products) but rather it is a more [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=506&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>As someone who inevitably becomes involved in the technical implementation of configuration management systems (CMS) I am often called upon to create what I choose to call &#8216;glue software&#8217;. Glue software is not a full integration between two products (often there is simply no way to fully integrate products) but rather it is a more <a href="http://en.wikipedia.org/wiki/W._Heath_Robinson">Heath Robinson</a> collection of scripts, triggers and hooks used to provide some connection between applications that support the CMS.</p>
<p>There are a multitude of technologies that can be used to create glue software, including but by means limited to; SQL, various shell scripts, C, C++, C#, Java, PHP, Python, various web technologies (XSLT, ASP etc.) and so on. Over the years I have used all of these and more but by far and away my favourite glue software development language is PERL. And here&#8217;s why&#8230;<span id="more-506"></span></p>
<p>PERL is ubiquitous. There is almost no regular platform on which PERL cannot be run; Windows, *NIX, Mac and Mainframe are all generally covered and therefore most of the platforms one is likely to be using in a modern CMS are covered.</p>
<p>PERL is simple. Well, more accurately, PERL is easy to teach/learn because it is accommodating, typically providing more than one way to express a programming notion. PERL is a fairly forgiving language, but it has to be said that sometimes this flexibility leads to confusing pieces of code. One soon learns to interpret the more idiomatic usage though and the confusion is lifted leaving only the choice of programming approach afforded by PERL&#8217;s flexibility.</p>
<p>PERL has a vast library of freely available libraries. Like many languages that are available  across multiple platforms, PERL has developed a wide following from many disciplines and this has meant the development of a large library of routines to do almost anything you want. Check out <a href="http://cpan.org">CPAN</a> and look through all the modules available there. To paraphrase Apple&#8217;s App. Store tag line, &#8216;there&#8217;s a PERL module for that&#8217;. This facility alone can save hours of tedious programming.</p>
<p>Write it once, use it anywhere. Using a native script language (such as ksh, Bourne shell, or even &#8211; shudder &#8211; BAT) means you are largely tied to one platform. PERL&#8217;s ubiquity, when combined with careful programming, means your carefully crafted and debugged script will work pretty much anywhere.</p>
<p>PERL has  a long and illustrious career as a web programming language. Pre-dating Java, PHP, ASP and others as serious dynamic web technologies<sup><a href="#fn1">1</a></sup> the Apache <span class="code">mod_perl</span> module has allowed PERL code to be embedded in  web pages for many years.</p>
<p>With PERL modules like Tk (or Tkx) you can create graphical user interfaces for your scripts that adapt to the window system on which they are displayed. (The newer Tkx provides a much more raw interface to the underlying TCL/Tk libraries. It also, to my eyes, produces a better UI that matches more closely the host platform. Basically because the TCL/Tk libraries are more up-to-date than the Perl/Tk implementations.)</p>
<p>So, that is in broad strokes my case for PERL. But there&#8217;s more.</p>
<p>Perhaps the best supported PERL package is that provided by ActiveState. Although hardcore PERL mongers may consider this limiting I suggest (especially to new PERL users) using ActiveState&#8217;s installation and limiting yourself to using the packages provided through there PERL Package Manager from their repository.</p>
<p>Although ActiveState provide only a subset of available packages it is a substantial subset and, more importantly, they work across all the platforms supported by the main ActiveState distribution. This in turn means that the write once, use anywhere philosophy is easier to maintain.</p>
<p>Added to this common support facility the ActiveState PERL Developer Kit (PDK) provides a cross platform packaging facility that means applications developed on one platform can be wrapped into executable packages suitable for multiple target environments. So, if you develop your PERL on Mac OS X you can provide packages targeted for Windows, Solaris, Linux and AIX platforms without ever leaving your OS X environment. And that has to be a good thing.</p>
<p>As if this were not enough, the PDK also provides the means to package your PERL as a Windows service, a dll, a System Tray utility, or a .NET library (making your PERL libraries available to your .NET developers).</p>
<p>As with any broad statement, claims of PERLs utility must be accompanied by a cautionary note. The path to PERL Nirvana is not an easy one. Not all PERL modules are of a high quality. Not all PERL applications will easily package using the PDK. And not all PERL code will work on all platforms. Just as with any programming language you, the programmer, must be aware of platform differences and ensure your script will handle them gracefully.</p>
<p>All this said, with a little forethought and care PERL provides a powerful platform for glue software and more.</p>
<div class="footnote">
<hr />
<p><a name="fn1">1.</a> Okay, PHP was officially announced about six months or so before <span class="code">mod_perl</span>, but PERL was already established as the predominant CGI language by then and <span class="code">mod_perl</span> instantly made embedded PERL a success while PHP has <a href="http://en.wikipedia.org/wiki/PHP">some time to go</a> before being mature enough to use seriously.
</div>
<br />Posted in CMCrossroads, Glue Software, PERL, Plain Old Blog, Tools &#039;n&#039; Tips  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/506/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/506/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/506/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=506&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/01/25/glue-software/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>
	</item>
		<item>
		<title>Holographic Configuration Management</title>
		<link>http://blog.principia-it.co.uk/2010/01/14/holographic-configuration-management/</link>
		<comments>http://blog.principia-it.co.uk/2010/01/14/holographic-configuration-management/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 23:15:01 +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[design]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://blog.principia-it.co.uk/?p=394</guid>
		<description><![CDATA[The advent of the &#8216;cloud&#8217; and the idea of massively distributed systems (think grid computing and SaaS) is the latest technology swing with the potential to impact configuration management practice. I say &#8216;potential&#8217; because a properly designed and implemented configuration management system will be able to copy without too much difficulty. The main impact will be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=394&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>The advent of the &#8216;cloud&#8217; and the idea of massively distributed systems (think grid computing and SaaS) is the latest technology swing with the potential to impact configuration management practice. I say &#8216;potential&#8217; because a properly designed and implemented configuration management system will be able to copy without too much difficulty. The main impact will be procedural and technical, the underlying configuration management process will remain unchanged.</p>
<p>A properly designed CM system will be able to handle any IT system environment. Problems only occur when you are married to the idea that centralised control of CM data and centralised change control are necessary for CM, or that a specific development process is integral to CM for it to function correctly.<span id="more-394"></span></p>
<p>It is an all too common mistake to design your CM system as a part of another process. For example, adopting a  particular software development process and then designing your CM system into this development process will result in a CM system that is inextricably linked to the development process.</p>
<p>At this point some of you may be protesting that this is not a bad thing. Wrong. It is unnecessary, bad practice and lousy system design.</p>
<p>The irony is that many people who design their CM systems as integral parts of their development process are the same people who would be appalled if they saw such poor design in their software systems. They are effectively designing their CM system as a tightly coupled aggregate to their development process when it should be quite separate.</p>
<p>A CM system should be designed with clear interfaces that can be used by any other process. These interfaces should include:</p>
<ul>
<li>Change control &#8211; although change control is identified as a part of configuration management, it is preferable to maintain change control as an independent process that interfaces to the configuration management system.</li>
<li>Query and reporting &#8211; getting information out or the configuration management system must be performed through a clearly designed interface.</li>
<li>Configuration item references &#8211; a clear and unique method of referencing any CI in the configuration management system must be provided.</li>
<li>External references &#8211; the configuration management system must be capable of unambiguously referring to any entity held outside the CM system itself.</li>
</ul>
<p>By maintaining a clear interface like this the configuration management processes are insulated from any change to other processes in your IT development and operation.</p>
<p>Maintaining a consistent set of well defined interfaces also allow you to create a configuration management system that can be easily replicated across your organisation. The same configuration management process can be given to each of our organisation&#8217;s development projects for example. Providing the configuration management processes have been well designed with clean interfaces they should all freely inter-operate and, from the organisation level, will look like one coherent sytem.</p>
<p>When you need to extend your configuration management system beyond the boundaries of your organisation (for example, when interfacing with a service supplier or third party developer) all you need do is ensure that their configuration system presents your internal organisation with your interface. This can be achieved by either agreeing with the external agency that they will use your process or by creating a facade that will take present your interface internally but communicate with their systems externally.</p>
<p>Although his might appear complex it is not and it pays dividends by ensuring your configuration management system is easily to extend and will interface with all your existing processes.</p>
<br />Posted in CMCrossroads, Configuration Management, Plain Old Blog Tagged: design, process <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/394/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/394/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/394/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=394&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/01/14/holographic-configuration-management/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>
	</item>
		<item>
		<title>The virtue of indolence</title>
		<link>http://blog.principia-it.co.uk/2010/01/12/the-virtue-of-indolence/</link>
		<comments>http://blog.principia-it.co.uk/2010/01/12/the-virtue-of-indolence/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 01:35:56 +0000</pubDate>
		<dc:creator>Mark Bools</dc:creator>
				<category><![CDATA[CMCrossroads]]></category>
		<category><![CDATA[Plain Old Blog]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://principiait.wordpress.com/?p=473</guid>
		<description><![CDATA[It has long appeared to me that people see virtue in making work. I see virtue in laziness. Or rather, I see virtue in eliminating work.
As a freelancers I see part if my role on an contract as eliminating as much of the purpose for my presence as possible. This means optimizing away my role, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=473&subd=principiait&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>It has long appeared to me that people see virtue in making work. I see virtue in laziness. Or rather, I see virtue in eliminating work.</p>
<p>As a freelancers I see part if my role on an contract as eliminating as much of the purpose for my presence as possible. This means optimizing away my role, generally through process efficiency (ensuring there are no extraneous operations in the process), automating as much as possible, and ensuring that my role is not performing tasks that can be performed by others.<span id="more-473"></span></p>
<h3>Process efficiency</h3>
<p>Examine you product lifecycle and eliminate all unnecessary steps in the process. If a step is not essential, remove it. If a step can be optional, make it optional. If you can reduce the number tasks in a process step, then do so. Bear in mind that a good design is not arrived at by adding features but by removing features until you have the least possible without compromising the objective of the design.</p>
<h3>Automation</h3>
<p>Automate everything you can. If you repeatedly create certain reports then create a scheduled job to run any scripts required to generate them. Make reports availble on a website if they are for general consumption, or e-mail them to controlled list if they are for a restricted audience.</p>
<p>Automate all builds and make sure you automate all deployment and testing. Any output from testing (including things like test results, coverage data and performance statistics should be collected and published on a website).</p>
<p>Automate baseline promotion if at all possible.</p>
<p>Make baselines that pass each test cycle available for automated deployment into the next test environment. Make this a &#8216;one button&#8217; demand from the target test environment manager.</p>
<h3>Task reassignment</h3>
<p>Closely related to process efficiency, task reassignment is ensuring that your role is not performing inappropriate tasks that distract from work that you are needed for. Often a role, especially a role such as configuration, change or build management accumulates tasks by default. Make sure that all tasks in the processes are assigned to the appropriate owner.</p>
<p>For example, these roles are often tasked to produce <i>ad hoc</i> reports. It is better to make it easy for others to create their own reports as they need them. In this way you eliminate the need to burden yourself preparing reports that people can produce themselves. The cost may be a small amount of time training people to prepare their own reports, but this is more than offset by the time gained in not preparing every <i>ad hoc</i> report required by users.</p>
<br />Posted in CMCrossroads, Plain Old Blog Tagged: design, process <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/principiait.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/principiait.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/principiait.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/principiait.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/principiait.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/principiait.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/principiait.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/principiait.wordpress.com/473/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/principiait.wordpress.com/473/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/principiait.wordpress.com/473/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.principia-it.co.uk&blog=8032610&post=473&subd=principiait&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://blog.principia-it.co.uk/2010/01/12/the-virtue-of-indolence/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>