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

<channel>
	<title>Conceptric &#187; processes</title>
	<atom:link href="http://www.conceptric.co.uk/tag/processes/feed" rel="self" type="application/rss+xml" />
	<link>http://www.conceptric.co.uk</link>
	<description>Ideas and Applications</description>
	<lastBuildDate>Fri, 12 Aug 2011 13:00:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How does behaviour drive development?</title>
		<link>http://www.conceptric.co.uk/how-does-behaviour-drive-development.htm</link>
		<comments>http://www.conceptric.co.uk/how-does-behaviour-drive-development.htm#comments</comments>
		<pubDate>Thu, 12 Nov 2009 13:25:23 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
				<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[processes]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=310</guid>
		<description><![CDATA[Behaviour Driven Development (BDD) is an adaptation of earlier Test Driven practices (TDD) that's growing on me, but it's raised an interesting problem: the order in which to describe desired behaviour so that it actually drives development.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve only recently started dabbling in <abbr title="Behaviour Driven Development">BDD</abbr> using <a href="http://railscasts.com/episodes/155-beginning-with-cucumber">Cucumber and RSpec in Rails</a> applications. It feels quite different to the <abbr title="Test Driven Development">TDD</abbr> practices I&#8217;ve adopted before in Java, PHP or Ruby.</p>

<p>It feels like I&#8217;m starting from the top of the software stack and working down from broad specifications, creating code as I go, rather than up from fine grained models based on specific unit tests. Is this a reductionist approach?</p>

<p>When writing my features and scenarios I&#8217;ve noticed a tendency to follow the <abbr title="Create Read Update Delete">CRUD</abbr> acronym common in data access layers: Create Read Update and Delete. The order of these processes is significant and my reasoning goes something like this&#8230;&#8230;</p>

<p>I can&#8217;t really expect to read the contents of an entity before I&#8217;ve generated the code to create it. Now I&#8217;ve created it, I&#8217;m not going to try to edit this same entity unless I can actually read it. I can read what I&#8217;ve got, but I might want to edit those contents, and delete comes last&#8230;&#8230; because it just does, I guess the order of &#8220;UD&#8221; is negotiable, but this way it&#8217;s easier to pronounce.</p>

<p>You get the general picture, but this is just the approach I&#8217;ve adopted through trial and lots of error. It&#8217;s far from perfect, so how do you use behaviour to lead the code?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/how-does-behaviour-drive-development.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working with Git and Subversion</title>
		<link>http://www.conceptric.co.uk/working-with-git-and-subversion.htm</link>
		<comments>http://www.conceptric.co.uk/working-with-git-and-subversion.htm#comments</comments>
		<pubDate>Wed, 10 Jun 2009 11:58:35 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[processes]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=191</guid>
		<description><![CDATA[I've got a local copy of the Subversion repository under Git, so I thought I should talk about my workflow.]]></description>
			<content:encoded><![CDATA[<p>Last time I <a href="http://www.conceptric.co.uk/importing-a-remote-subversion-repository-with-git.htm">created a local Git repository</a>, in which I could have several <code>svn/</code> prefixed branches and one <code>master</code> which is linked to the remote <code>trunk</code>.</p>

<h3>The Git work environment.</h3>

<p>Working with Git is quite different to using Subversion. The actual contents of the project directory change to reflect the currently active branch: the directory contains a whole repository, not a checked out copy. Don&#8217;t get alarmed when files start disappearing only to reappear again when you switch branch.</p>

<p>I also noticed that I interacted with the version control less frequently when editing, delete, and create files. The interaction is saved until you&#8217;re ready to commit, making the process feel more seamless. I occasionally used to get into trouble by deleting files via the <abbr title="Operating System">OS</abbr>, rather that using the Subversion command.</p>

<p>For the majority of the time, I&#8217;ll use the <a href="http://www.kernel.org/pub/software/scm/git/docs/">Git commands</a>, as I&#8217;m working in a Git repository. The <code>git svn</code> functionality is only needed as a Git interface with Subversion.</p>

<h3>Getting ready to work.</h3>

<p>I like the <code>master</code> branch to always reflects the current <code>trunk</code> until I choose to update it, so all my commits are made from other working branches.</p>

<p>I start by checking out a branch based on <code>master</code> to use as a base from which to work. I&#8217;ve imaginatively called it <code>basework</code> in this example, and as a branch of <code>master</code> it is linked to the same remote branch: <code>trunk</code>.</p>

<p><code class="terminal oddlines">git branch -a</code></p>

<p>should display all your branches in the repository.</p>

<p><samp class="stdout">jkw@mac> git branch -a
* basework
  master
  svn/trunk
jkw@mac>
</samp></p>

<p>I work in increments based on stories, that&#8217;s another post, so I actually create a story branch from <code>basework</code>, that can be merge back into this parent upon completing the story. This helps cope with changes in the remote codebase.</p>

<h3>Creating my working branches.</h3>

<p>It&#8217;s a good idea to check that <code>basework</code> is up to date with the remote Subversion <code>trunk</code> before branching:</p>

<p><code class="terminal oddlines">git svn rebase</code></p>

<p>This will either update the local repository with the remote changes, or tell you that the current branch is already up to date.</p>

<p>I&#8217;m now in a position to create my story branch:</p>

<p><code class="terminal oddlines">git checkout -b inwork</code></p>

<p>The <code>-b</code> option is used to create a new branch and then switch to it. Without this option the same command is used to move between branches.</p>

<p>This same process was used to create <code>basework</code>.</p>

<p>I have my working repository structure, and I&#8217;m currently working on my story branch, see the asterisk.</p>

<p><samp class="stdout">jkw@mac> git branch -a
  basework
* inwork
  master
  svn/trunk
jkw@mac>
</samp></p>

<h3>The local commit.</h3>

<p>You can see details of the changes to the local working branch using the <code>git status</code> command:</p>

<p><samp class="stdout">jkw@mac> git status</p>

<h1>On branch inwork</h1>

<p>nothing to commit (working directory clean)
james@cybermac1> git st</p>

<h1>On branch inwork</h1>

<h1>Changed but not updated:</h1>

<h1>(use &#8220;git add/rm <file>&#8230;&#8221; to update what will be committed)</h1>

<h1>(use &#8220;git checkout &#8212; <file>&#8230;&#8221; to discard changes in working directory)</h1>

<p>#</p>

<h1>modified:   footer.php</h1>

<h1>deleted:    images/feed-icon-64.png</h1>

<h1>modified:   style.css</h1>

<p>#</p>

<h1>Untracked files:</h1>

<h1>(use &#8220;git add <file>&#8230;&#8221; to include in what will be committed)</h1>

<p>#</p>

<h1>includes/category-1.inc.php</h1>

<p>no changes added to commit (use &#8220;git add&#8221; and/or &#8220;git commit -a&#8221;)
jkw@mac> 
</samp></p>

<p>To add the new file show in the example to those being tracked:</p>

<p><code class="terminal oddlines">git add includes/category-1.inc.php</code></p>

<p>If I wanted to add all of the untracked files, I could use the <code>-A</code> option instead of individually naming them.</p>

<p>Now all the files are staged, the time comes to commit them to the local Git repository:</p>

<p><code class="terminal oddlines">git commit -a <em>-m "A message to describe the changes."</em></code></p>

<p>Leaving the <code>-m</code> option off will cause Git to request comments using whichever editor is defined in your configuration files.</p>

<p>I now the story is complete, and all the changes committed to the <code>inwork</code> branch, it&#8217;s time to commit them to Subversion.</p>

<h3>The remote commit.</h3>

<p>I start the remote commit process by switching to the <code>basework</code> branch:</p>

<p><code class="terminal oddlines">git checkout basework</code></p>

<p>Next I check that the remote codebase hasn&#8217;t changed, or update the changes:</p>

<p><code class="terminal oddlines">git svn rebase</code></p>

<p>I&#8217;ll merge <code>inwork</code> into <code>basework</code>:</p>

<p><code class="terminal oddlines">git merge inwork</code></p>

<p>I use my text editor to manually fix conflicts that arise. Git tells you where to find them by marking up the code. This is followed by another local commit, at which point the merge is complete.</p>

<p>Now I can try a dry run of the remote commit:</p>

<p><code class="terminal oddlines">git svn dcommit -n</code></p>

<p>It&#8217;s the <code>-n</code> option that makes this a dry run: nothing has been committed yet. It shows you the local versions to be bulk committed if you choose to go ahead. To actually perform the commit, remove the <code>-n</code>, and re-run the command, it may take a while if you&#8217;ve been busy.</p>

<h3>Verifying the remote commit.</h3>

<p>This is where leaving the <code>master</code> branch untouched pays off. <code>basework</code> has been committed to the remote <code>trunk</code>, whilst <code>master</code> still reflects the pre-commit <code>trunk</code>.</p>

<p>I switch to <code>master</code>, which should contain none of my new work, and update it from the remote <code>trunk</code>:</p>

<p><code class="terminal oddlines">git svn rebase</code></p>

<p>It should have changed to match <code>basework</code>, and if so the previous commit worked.</p>

<h3>Cleaning up.</h3>

<p>I&#8217;ve verified the commit: I have <code>master</code> and <code>basework</code> branches that are identical, so <code>inwork</code> is no longer needed, I&#8217;ll delete it:</p>

<p><code class="terminal oddlines">git branch -d inwork</code></p>

<p>Deleting a child branch of a different parent is a little dangerous, so if you&#8217;re not in <code>basework</code> you&#8217;ll get a warning. Either switch to <code>basework</code> and try again, or re-running the command with the <code>-D</code> option.</p>

<p>If I&#8217;ve finished work on this project, I&#8217;d delete the <code>basework</code> branch too, but if I&#8217;m going to continue, I&#8217;d use it to create another working branch, and I&#8217;ve gone full circle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/working-with-git-and-subversion.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paper2.0</title>
		<link>http://www.conceptric.co.uk/paper20.htm</link>
		<comments>http://www.conceptric.co.uk/paper20.htm#comments</comments>
		<pubDate>Sat, 25 Apr 2009 20:47:05 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Personal Perspectives]]></category>
		<category><![CDATA[Posts]]></category>
		<category><![CDATA[moleskine]]></category>
		<category><![CDATA[processes]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=175</guid>
		<description><![CDATA[A spate of recent blog posts on Lifehack appear to be pushing paper as a new media for organise our lives. Could this remixing of an ancient media be the beginning of Paper2.0?]]></description>
			<content:encoded><![CDATA[<p>It was a recent feature <a href="http://www.lifehack.org/articles/productivity/10-reasons-paper-is-the-most-flexible-productivity-platform.html">extolling the virtues of paper</a> as an alternative to common digital media that caught my attention.</p>

<p>Personally, I&#8217;ve long been a fan of a hybrid system comprising a paper notebook; currently an A5 Red and Black, and a selection of applications on my MacBook.</p>

<p>My notebook goes most places with me, I could buy a smart-phone, but they are neither as rugged nor flexible as a paper notebook. Paper doesn&#8217;t impose a working structure upon me; I can sketch, write, draw up tables or whatever the occasion requires.</p>

<p>Combined with the camera on my phone; to rapidly capture complex information,  I have everything I need to collect data for later processing. This usually takes place on my laptop where I can tag, search, and sync lists and calendars back to my phone.</p>

<p>A number of tips on how to <a href="http://www.lifehack.org/articles/productivity/10-great-moleskine-hacks.html">customise your Moleskine notebook</a>, remind me of features found in applications like Firefox.</p>

<ul>
<li><q cite="http://www.lifehack.org/articles/productivity/10-great-moleskine-hacks.html">Divide sections with tabs</q> could be interpreted as the now ubiquitous tabbed browsing feature.</li> 
<li><q cite="http://www.lifehack.org/articles/productivity/10-great-moleskine-hacks.html">Number the pages</q> reminds me of the practice of bookmarking.</li>
<li><q cite="http://www.lifehack.org/articles/productivity/10-great-moleskine-hacks.html">Mount photos &#8211; or a business card</q> on the moleskine is one tip for customisation suggesting to me that maybe &#8216;bCard&#038;trade&#8217; is the new paper version of the common <a href="http://en.wikipedia.org/wiki/VCard">vCard</a> format. </li>
</ul>

<p><a href="http://www.lifehack.org/">Lifehack</a> is a great advocate of the <a href="http://www.mojolondon.co.uk/stationery/moleskine/">Moleskine</a>, and I too aspire to one for no obvious reason, but features like these tell me we&#8217;re on the verge of a revolution in paper technology&#8230; <em>Paper2.0</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/paper20.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Purposeful technology</title>
		<link>http://www.conceptric.co.uk/purposeful-technology.htm</link>
		<comments>http://www.conceptric.co.uk/purposeful-technology.htm#comments</comments>
		<pubDate>Thu, 30 Oct 2008 14:51:21 +0000</pubDate>
		<dc:creator>James Whinfrey</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Everything]]></category>
		<category><![CDATA[Posts]]></category>
		<category><![CDATA[enterprise systems]]></category>
		<category><![CDATA[processes]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://www.conceptric.co.uk/?p=97</guid>
		<description><![CDATA[Information technology projects frequently catch the headlines, but usually due to spectacular failures. The problem usually results from not asking whether the system is needed at all.]]></description>
			<content:encoded><![CDATA[<p>The point to keep in mind is that the business process comes first. After all, businesses were here long before the <abbr title="Information Technology">IT</abbr> department was born. How do you expect to add technology into the equation without understanding you own business domain?</p>

<h3>Define your business.</h3>

<p>When developing business processes try to keep everything as simple as possible. Simple processes are likely to be followed: complex ones won&#8217;t. This is definitely true of written procedures, but human employees have the ability to sift through the junk and ignore it; you may not like that but it&#8217;s true.</p>

<p>Computers on the other hand don&#8217;t share this aptitude. Your software developers may try to ensure the software follows your monolithic procedures, but the conflicts ignored by human employees will have to be resolved; a long and expensive process.</p>

<p>A systematic approach to this analysis can help, especially with the inevitable documentation, take a look at <a href="http://en.wikipedia.org/wiki/Business_Process_Modeling">business process modeling</a> and the <a href="http://www.bpmn.org/"><abbr title="Object Management Group">OMG</abbr> notation</a>.</p>

<p>Well implemented processes will be familiar to your staff and any software based on them equally so, saving a fortune on training.</p>

<h3>What is success?</h3>

<p>Now you&#8217;ve got a minimalist set of effective processes, you&#8217;re in a position to consider how the application of software and hardware systems might improve or expand your business, and bear in mind that it might not.</p>

<p>What will success would look like? It too needs to be defined as simply as possible if you&#8217;re going to recognise it. Frequently at the start of projects everyone is so excited that this step is lost. It is either overlooked or results in a requirements document so complex nobody can be bothered to read it.</p>

<p>Ask yourself how many other business purchases you would make without actually considering what you&#8217;re expecting to have delivered. Would you be happy if you were hoping for a photocopier and ended up with a filing cabinet?</p>

<h3>Get involved.</h3>

<p>Most organisations expect their involvement to end once they&#8217;ve specified their requirements. The developer will go away, build the software, and deliver it perfect and on schedule. OK, maybe that&#8217;s an exaggeration, but placing your staff in the development team is not an optional extra.</p>

<p>They&#8217;re likely to spend substantial time working closely with the developers, it&#8217;ll be worth it, you&#8217;re likely to get a better system. Most will be involved in user testing, but the customer representative is a key role representing the business interests within the team. Customers are not project managers, they are focused on the benefits to the business and its operational goals.</p>

<p>Primarily involve people that actually undertake the work this system is meant to enhance, and those that will continue to use it. There&#8217;s a huge temptation for senior management to attempt to fulfil this role, but they usually know next to nothing about the processes in question, so resist it. There is a vital role for senior sponsorship, but it&#8217;s not in the development team.</p>

<p>Resulting software will be intuitive, and the <a href="http://www.conceptric.co.uk/what-is-computer-literacy.htm">computer literate</a> will be able to understand it based on their knowledge of their current job, and of course your procedures.</p>

<h3>The pay back.</h3>

<p>Get the basics right &#8212; develop good business processes, define success, and build an effective team &#8212; and your project has a much better chance of delivering satisfaction, on time, and to budget.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.conceptric.co.uk/purposeful-technology.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

