<?xml version="1.0" encoding="iso-8859-1" ?>
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"
                     "http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="0.91">
<channel>
  <title>Robert Cowham's Weblog</title>
  <link>http://robertcowham.com/blog</link>
  <description>RubLog
  </description>
  <language>en-us</language>
  <item>
    <title>Review of BCS Agile SCM Event on 24 November 2008</title>
    <link>http://robertcowham.com/blog/scm/cmsg_agile_scm.html</link>
    <description>&lt;html xmlns:v=&quot;urn:schemas-microsoft-com:vml&quot; xmlns:o=&quot;urn:schemas-microsoft-com:office:office&quot;&gt;





&lt;font size=&quot;3&quot;&gt;
&lt;p&gt;This is a brief review of the
&lt;a href=&quot;http://www.bcs-cmsg.org.uk/events/e20081124.shtml&quot;&gt;BCS CMSG Agile SCM
&lt;/a&gt;event on 24th November 2008.&lt;/p&gt;
&lt;p&gt;Please note that the presentations are on line from the link above. Below are 
some extra notes to go with the presentations.&lt;/p&gt;
&lt;p&gt;All in all a very good and informative day!&lt;/p&gt;
&lt;h2&gt;Michael Azoff (The Butler Group) - The Agile Difference
&lt;/h2&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-azoff.pdf&quot;&gt;
Presentation here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Michael did a good job of setting the scene and introducing various terms 
around agile etc.&lt;/p&gt;
&lt;p&gt;He talked about the wider context - and how people need to stay engaged in 
projects. Quoted an example of a US Healthcare provider where management did not 
get sufficiently involved in the new billing system because it was not &quot;exciting enough&quot;. The company had 
sufficient problems that it lost 2/3 of its value, and ended up having to pay 
out $200m to clients etc.&lt;/p&gt;
&lt;p&gt;Such things promote the need for a dashboard - simple 
summary of project status with the ability to drill down. Data is always 
available.&lt;/p&gt;
&lt;p&gt;Regarding SCM he noted nothing in the indexes of various books on Agile 
methods that relates to SCM - an oversight!&lt;/p&gt;
&lt;p&gt;However, came up with a couple of useful links:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Henrik Kniberg's
	&lt;a href=&quot;http://www.infoq.com/articles/agile-version-control&quot;&gt;Version 
	Control for Multiple Agile Teams&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Also his &lt;a href=&quot;http://www.infoq.com/news/2007/06/scrum-xp-book&quot;&gt;Scrum 
	and XP from the Trenches &lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://blog.crisp.se/henrikkniberg/&quot;&gt;Henrik's Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Richard Erwin (Microsoft) - SCM and Agile Practices within Microsoft 
Developer Division&lt;/h2&gt;
&lt;p&gt;&lt;font size=&quot;3&quot;&gt;
&lt;a href=&quot;http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-erwin.pdf&quot;&gt;
Presentation here&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Another excellent talk and the slides well worth reading. Interesting to see 
Microsoft's &amp;quot;dog fooding&amp;quot; of their own product and the benefits and improvements 
of their process between Visual Studio 2005, 2008 and 2010 (already out in 
previews).&lt;/p&gt;
&lt;p&gt;Some points:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Most companies using adhoc processes, and having problems getting a 
	handle on all the information that is coming in. Showed off some of the 
	dashboards and similar feedback options within VSTS.&lt;/li&gt;
	&lt;li&gt;Within Microsoft there are 4 major divisions:&lt;ul&gt;
		&lt;li&gt;Windows&lt;/li&gt;
		&lt;li&gt;Office&lt;/li&gt;
		&lt;li&gt;Developer Tools&lt;/li&gt;
		&lt;li&gt;SQL Server&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;Their largest instance is 17m source files, 500k items, 3 Tb data&lt;/li&gt;
	&lt;li&gt;VSTS 2010 has been &amp;quot;dog fooding&amp;quot; since 2007. Problems don't go unnoticed 
	as a result - he mentioned the great summer '08 outage!&lt;/li&gt;
	&lt;li&gt;There is a slide showing usage of VSTS within the various divisions. 
	Developer Tools is completely VSTS. However Windows and Office are still 
	using SourceDepot for version control (although using VSTS being used for 
	Planning and Bug Tracking). Richard responded to one question that the internal 
	tools (SourceDepot) were &amp;quot;not available&amp;quot; outside Microsoft. On 
	further prompting, he admitted that SourceDepot was 
	a rebadged version of Perforce - based on the source code that Microsoft 
	bought in 1999 - one of those &amp;quot;industry secrets&amp;quot; that has leaked out over 
	the years!&lt;/li&gt;
	&lt;li&gt;A successful import from the Office division is the concept of &amp;quot;Feature 
	Crews&amp;quot;&lt;/li&gt;
	&lt;li&gt;Concept of Bug Debt - carry no debt in feature model. One of the slides shows the burn down chart from 25,000(!) bugs for VS 2005 – they did get it close to zero for release, but life was 
hellish! The comparable chart for VSTS 2008 is much flatter.&lt;/li&gt;
	&lt;li&gt;Not surprisingly the cost of hotfixes or sevice packs is massive - its a 
	major incentive to avoid those - hence major quality gates when teams push 
	code back to the mainline.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Branching Model&lt;/h3&gt;
&lt;p&gt;It's a fairly standard Mainline model with large team branches. There's a 
huge amount of automated testing. Teams take it in turns to &amp;quot;publish&amp;quot; to the 
Mainline, and have to pass very significant quality gates to do so.&lt;/p&gt;
&lt;h2&gt;Andrew Tunnicliffe (London Underground) - Towards Visualizations of 
Configuration Management&lt;/h2&gt;
&lt;p&gt;&lt;font size=&quot;3&quot;&gt;
&lt;a href=&quot;http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-tunnicliffe.pdf&quot;&gt;Presentation here&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Andrew wanted to leave us with the message - &amp;quot;Configuration Management isn’t 
just for Christmas!&amp;quot;&lt;/p&gt;
&lt;p&gt;Some notes:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;His presentation was a little different in that it looked at the 
	complexities of managing what according to the Royal College of Engineers is 
	the most complex system in the UK. &lt;/li&gt;
	&lt;li&gt;Software is very much only one element - in addition to hardware, staff/people are vital. This 
	includes training needs etc - you can't introduce new stuff without it.

&lt;font size=&quot;3&quot;&gt;
	Takes 2 years to train 100 drivers. How do you manage change in that 
	time?&lt;/font&gt;&lt;/li&gt;
	&lt;li&gt;In one morning they went from 4 trains to 5 trains per period – this is 
	a step change of 25% in one go - you can't introduce 10% of a new train :)&lt;/li&gt;
	&lt;li&gt;S/w control and signalling all changing.&lt;/li&gt;
	&lt;li&gt;He called it saftety critical agile.&lt;/li&gt;
	&lt;li&gt;Of course in a public project of this size, there are huge political pressures to deliver.&lt;/li&gt;
	&lt;li&gt;A lot of the value in visualisation is for people at the edges rather 
	than those in the trenches. Train driver just needs to know that &lt;strong&gt;something&lt;/strong&gt; has 
	changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The examples he showed us are a tool based around MS Project with various 
extra attributes, and a Network diagram tool. It can also publish to the web. &lt;/p&gt;
&lt;p&gt;Interesting to see how something relatively simple and straight forward could 
make a significant difference to acceptance by people - the CM information is 
much more easily visible.&lt;/p&gt;
&lt;h2&gt;Finbarr Joy (Upco) - All Things to All Men: Keeping it simple? &lt;/h2&gt;
&lt;p&gt;
&lt;a href=&quot;http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-upco.pdf&quot;&gt;Presentation here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finbarr wanted to avoid any perception of giving a &amp;quot;sales pitch&amp;quot;, inspite of 
Upco's sponsorship of the event - paid for a nice lunch! &lt;/p&gt;
&lt;p&gt;The main focus of his talk was around build and deployment frameworks - 
making it easy to setup, customize and manage.&lt;/p&gt;
&lt;p&gt;He mentioned the experience of Upco in doing development for their clients 
and wanting to scratch their own itch and improve their processes. The only 
drawback for me was the lack of specifics in the talk - it would have been 
useful to see some before and after figures showing how this approach has worked 
in practice. A couple of useful nuggets:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Is your change management really change prevention – or perceived as 
	that? &lt;/li&gt;
	&lt;li&gt;Projects change a standard pattern many times which leads to 
	incompatible processes and much rework. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He finished by pointing at the &lt;a href=&quot;https://kundo.dev.java.net/&quot;&gt;open 
source project Kundo&lt;/a&gt; which is well worth checking out:&lt;/p&gt;
&lt;p class=&quot;style1&quot;&gt;Kundo provides a structured, convention based approach for 
Java builds. Kundo has a pluggable, extensible architecture; it harnesses the 
power and flexibility of Groovy and Ant to provide a highly configurable Java 
build framework. &lt;/p&gt;
&lt;p class=&quot;style1&quot;&gt;Kundo achieves this flexibility with a plug-in architecture 
that attaches behaviours (provided by Kundo plug-ins) to build lifecycle phases. 
Kundo consists of a kernel and a set of foundation plug-ins. The kernel is 
responsible for the orchestration of the multiple collaborators within the build 
system. &lt;/p&gt;
&lt;p class=&quot;style1&quot;&gt;Conceptually similar to the approach taken by the Apache Maven 
project, the Kundo implementation is simpler (the kernel library jar file is ~ 
60Kb) and, in our humble opinion, offers greater flexibility; if you want to 
simply wire an Ant into a buildfile and use it, you can. Build lifecycles are 
defined within a build 'recipe'. A recipe declares the plug-ins required to 
perform a build. Each Kundo plug-in, much like a Maven plug-in, encapsulates a 
discreet set of build management (or deployment, release management etc etc) 
logic and has its own versioning/release cycle. &lt;/p&gt;

&lt;/font&gt;
&lt;h2&gt;Sean Cody (Bank of America) - SCM – the Agile Keystone&lt;/h2&gt;
&lt;p&gt;Sean's talk has unfortunately not yet had the slides approved to be released 
externally. It was an excellent talk and well received.&lt;/p&gt;
&lt;p&gt;He talked about some of the background and issues of both SCM (software 
configuration management) and Agile.&lt;/p&gt;
&lt;p&gt;In particular for agile:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Not always clear what it means&lt;/li&gt;
	&lt;li&gt;Is it a project management approach or just technical practices?&lt;/li&gt;
	&lt;li&gt;Fragilism?!&lt;/li&gt;
	&lt;li&gt;Image problem:&lt;ul&gt;
		&lt;li&gt;Hard to manage and control&lt;/li&gt;
		&lt;li&gt;Too many cowboys&lt;/li&gt;
		&lt;li&gt;An excuse for no documentation&lt;/li&gt;
		&lt;li&gt;&amp;quot;Decline and Fall of Agile&amp;quot;&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He used the metaphor of the keystone which is vital to arches, domes and 
other architectural designs. A lack of good SCM renders Agile ineffective.&lt;/p&gt;
&lt;p&gt;Key components for Bank of America:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Story management server&lt;/li&gt;
	&lt;li&gt;SCM server&lt;/li&gt;
	&lt;li&gt;Continuous Integration server&lt;/li&gt;
	&lt;li&gt;Testing server&lt;/li&gt;
	&lt;li&gt;Wiki for publishing results&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Story management is the most important function for users. The key thing is 
to track the evolution of a story from inception to release. This means the 
following are all tied to stories (with no exceptions):&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;All SCM check-ins&lt;/li&gt;
	&lt;li&gt;Build records&lt;/li&gt;
	&lt;li&gt;Testing records&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The business can see the details of the stories and indeed click through to 
view all aspects of development should they so wish. This visibility allows 
development to prove its value to the business. It also makes for easy 
traceability - audit is not a problem.&lt;/p&gt;
&lt;p&gt;Sean is keen on tools that are easy to integrate, even though customisation 
comes with the cost of maintenance. For the SCM tool the following are 
mandatory:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Atomic check-ins&lt;/li&gt;
	&lt;li&gt;Change history&lt;/li&gt;
	&lt;li&gt;Performance&lt;/li&gt;
	&lt;li&gt;Reliability&lt;/li&gt;
	&lt;li&gt;Simple to use&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These aren't new requirements - but they even more important for Agile 
development. They (together with the framework) help address some of the 
criticisms of Agile:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Lack of structure &lt;/li&gt;
	&lt;li&gt;Lack of documentation &lt;/li&gt;
	&lt;li&gt;Management of scope creep &lt;/li&gt;
	&lt;li&gt;Meeting enterprise change requirements &lt;/li&gt;
	&lt;li&gt;Meeting audit and regulatory requirements &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;He left with a word of warning: cultural change is hard to implement - tools 
can only do so much - your people are important!&lt;/p&gt;




    </description>
  </item>

  <item>
    <title>Custom Perforce GUi Installers (for large sites)</title>
    <link>http://robertcowham.com/blog/scm/p4_custom_installers.html</link>
    <description>&lt;html xmlns:v=&quot;urn:schemas-microsoft-com:vml&quot; xmlns:o=&quot;urn:schemas-microsoft-com:office:office&quot;&gt;





&lt;p&gt;For quite a while there has been an option to create your own
&lt;a href=&quot;http://kb.perforce.com/AdminTasks/InstallAndUpgrade/AutomatedDep..tOfPerforce&quot;&gt;
custom installer for Perforce deployments&lt;/a&gt; (including automation). This can 
be particularly useful for larger sites with lots of new users coming along 
regularly.&lt;/p&gt;
&lt;p class=&quot;style1&quot;&gt;The customizable element of the scripted installer is a 
configuration file named perforce.cfg. The Perforce Administrator edits this 
file, and places it on a shared network drive along with the expanded contents 
of the perforce.zip file. Perforce client programs can then be installed by 
running setup.exe from each desktop. &lt;/p&gt;
&lt;p&gt;One of the annoyances with this approach is that you have to expand the .zip 
file and put things on a network drive. It is not easy to do this sort of thing 
within a single executable for example (which makes it hard to put on your 
intranet and get users to double click).&lt;/p&gt;
&lt;p&gt;Well, having played around with various installers and options, I have 
discovered a fairly simple way of doing this via a self extracting executable 
(SFX), and the open source 7-Zip program.&lt;/p&gt;
&lt;h2&gt;Instructions&lt;/h2&gt;
&lt;p&gt;Create a directory structure:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;some root dir&lt;ul&gt;
		&lt;li&gt;7-zip - contains a batch file, a couple of config files and 
		perforce.cfg - see below for contents.&lt;/li&gt;
		&lt;li&gt;p4winst - contains expanded
		&lt;a href=&quot;http://www.perforce.com/downloads/perforce/r07.2/bin.ntx86/p4winst.zip&quot;&gt;
		p4winst.zip&lt;/a&gt; (without the perforce.cfg)&lt;/li&gt;
		&lt;li&gt;p4vinst - contains expanded 		
		&lt;a href=&quot;http://www.perforce.com/downloads/perforce/r07.2/bin.ntx86/p4vinst.zip&quot;&gt;
		p4vinst.zip&lt;/a&gt; (without the perforce.cfg)&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Currently (as of 2007.2) the perforce.cfg file is the same for both P4Win and 
P4V.&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;3&quot;&gt;You need to get a couple of files from&amp;nbsp;&lt;/font&gt;&lt;a title=&quot;http://7-zip.org/download.html&quot; href=&quot;http://7-zip.org/download.html&quot;&gt;&lt;font title=&quot;http://7-zip.org/download.html&quot; color=&quot;blue&quot; size=&quot;3&quot;&gt;&lt;u title=&quot;http://7-zip.org/download.html&quot;&gt;7-zip.org/download.html &lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;font size=&quot;3&quot;&gt;Download&amp;nbsp;
	&lt;a title=&quot;http://downloads.sourceforge.net/sevenzip/7z442.exe&quot; href=&quot;http://downloads.sourceforge.net/sevenzip/7z442.exe&quot;&gt;
	&lt;font title=&quot;http://downloads.sourceforge.net/sevenzip/7z442.exe&quot; color=&quot;blue&quot; size=&quot;3&quot;&gt;
	&lt;u title=&quot;http://downloads.sourceforge.net/sevenzip/7z442.exe&quot;&gt;7-Zip 
	executable&lt;/u&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size=&quot;3&quot;&gt; and install, say in d:\apps\7-Zip 
	(as referenced in batch file) &lt;/font&gt;&lt;/li&gt;
	&lt;li&gt;&lt;font size=&quot;3&quot;&gt;Download 
	&lt;a title=&quot;http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2&quot; href=&quot;http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2&quot;&gt;
	&lt;font title=&quot;http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2&quot; color=&quot;blue&quot; size=&quot;3&quot;&gt;
	&lt;u title=&quot;http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2&quot;&gt;7z 
	Library, SFXs for installers, Plugin for FAR Manager &lt;/u&gt;&lt;/font&gt;&lt;/a&gt;
	&lt;font size=&quot;3&quot;&gt;anand unzip to the 7-Zip install directory mentioned above.&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;font size=&quot;3&quot;&gt;Edit perforce.cfg to customize for your installation.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Create a p4winst.conf and p4v.conf (which must both be UTF-8 - Notepad can save 
this format, as can Notepad++ or other editors) in that directory.&lt;/p&gt;
&lt;p&gt;&lt;font size=&quot;3&quot;&gt;Run make_installers.bat from the command line in the 
appropriate directory and check that the following are created (which you can 
put on an intranet or whatever):&lt;/font&gt;&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;font size=&quot;3&quot;&gt;p4winst.exe&lt;/li&gt;
	&lt;li&gt;&lt;font size=&quot;3&quot;&gt;p4vinst.exe&lt;/font&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can then send your users a single exectuable which unzips itself and 
automatically runs the perforce setup.exe with the included perforce.cfg - QED!&lt;/p&gt;
&lt;h2&gt;make_installers.bat&lt;/h2&gt;
&lt;p&gt;This contains something like the following:&lt;/p&gt;
&lt;pre&gt;:: Batch file to package up P4Win using .zip file and the 7-Zip freely available 
:: Zip program (which can create SFX - Self Extracting Archives). 

@echo off 

:: May need to customize the following 
set ZIP_DIR=&quot;d:\apps\7-zip&quot; 

call :make_install p4winst 
call :make_install p4vinst 
goto :exit 

:make_install 

set INSTALLER=%1 

:: First create new clean versions of the zip files (including current directory version of perforce.cfg in preference) 
if exist %INSTALLER%.7z del %INSTALLER%.7z 
if exist %INSTALLER%.exe del %INSTALLER%.exe 

%ZIP_DIR%\7z a %INSTALLER%.7z ..\%INSTALLER%\* perforce.cfg 
&lt;/pre&gt;
&lt;pre&gt;:: Copy SFX file plus config file plus zipped installer into a single SFX .exe
copy /b %ZIP_DIR%\7zsd.sfx + %INSTALLER%.conf + %INSTALLER%.7z %INSTALLER%.exe 
if not errorlevel 1 goto :EOF 
if exist %INSTALLER%.exe goto :EOF 

echo *** ERROR: failed to create %INSTALLER%.exe 
goto :exit 

:exit 
&lt;/pre&gt;
&lt;h2&gt;p4winst.conf (and p4vinst.conf)&lt;/h2&gt;
&lt;p&gt;These are simple UTF8 format file with contents similar to:&lt;/p&gt;
&lt;pre&gt;;!@Install@!UTF-8!
Title=&amp;quot;P4Win Custom Installer&quot;
BeginPrompt=&quot;Do you want to install P4Win?&quot;
RunProgram=&quot;setup.exe&quot;
;!@InstallEnd@!
&lt;/pre&gt;




    </description>
  </item>

  <item>
    <title>Subconf 2007 - Subversion and the Enterprise</title>
    <link>http://robertcowham.com/blog/scm/subconf_2007.html</link>
    <description>





&lt;p&gt;This article is a result of my visit to Subconf in Munich a couple of weeks 
ago.&lt;/p&gt;
&lt;p&gt;The first thing to say is that Subconf was very enjoyable and interesting and 
my compliments to the organisers. There were some excellent speakers and it was 
good to chat to various vendors too. I also had a very good time at the dinner 
that evening - the only slight fly in the ointment was the S-Bahn strike the 
following morning which meant a rather earlier taxi to the airport than I might 
have wished!&lt;/p&gt;
&lt;p&gt;The two keynotes by Brian Behlendorf and Karl Fogel respectively were 
particularly good. Indeed it was good to get them at the conference since both 
guys seem to be scaling down their Subversion involvement - Brian has stepped down as CTO 
at Collabnet and Karl is running QuestionCopyright.org (although remains as 
President of Subversion Corporation.&lt;/p&gt;
&lt;p&gt;Some of the slides are now &lt;a href=&quot;http://subconf.open.collab.net/&quot;&gt;
available online&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Brian's Keynote&lt;/h2&gt;
&lt;p&gt;Brian mentioned his involvement in Apache and some of the lessons learnt 
about creating a community that worked. These lessons were then applied by 
Collab.net to get Subversion going. If you create a high quality community, you 
will create high quality software.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Need to be nice to people to avoid a &amp;quot;fork&amp;quot; - Development leaders 
	exhibit good communication skills, and can bring different ideas together.&lt;/li&gt;
	&lt;li&gt;Conscious effort to bring new developers along the path: from 
	“consumers”, to bug reporters, to patch submitters, to active contributors.&amp;nbsp;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Brian was asked the question in his talk about Linus's somewhat inflammatory 
video about Git where various sideswipes about brain-dead CVS and Subversion 
people are made. Brian had no particular axe to grind about this and said that 
the Subversion camp bore no ill will to the distributed crowd and were rather 
surprised at some of the venom coming back - a very measured and mature 
response.&lt;/p&gt;
&lt;p&gt;Brian mention the difference between a centralised model and a distributed 
model - there is a lot that enterprise like about the control of a centralised 
model. For example, laptops get stolen (he lost his a few weeks ago), and a 
laptop might contain a whole distributed repository. Enterprises prefer more 
control!&lt;/p&gt;
&lt;h2&gt;Martin Doettling's Intro to Karl&lt;/h2&gt;
&lt;p&gt;The
&lt;a href=&quot;http://subconf.open.collab.net/pdf/SubConf07_Karl_Fogel_intro_MDoettling.pdf&quot;&gt;
key points of this&lt;/a&gt; were:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Estimated user base now exceeds 2 million&lt;/li&gt;
	&lt;li&gt;10x growth since 1.4&lt;/li&gt;
	&lt;li&gt;Large numbers of enterprise users&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Karl's Keynote -
&lt;a href=&quot;http://subconf.open.collab.net/pdf/Keynote_Karl_Fogel_how-stuff-happens.pdf&quot;&gt;
How Stuff Happens&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Karl picked up on some of Brian's points about the community, and showed 
various ways in which they have been able to get hackers to create software that 
the enterprise can use!&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;There is a very comprehensive
	&lt;a href=&quot;http://subversion.tigris.org/hacking.html&quot;&gt;guide to how to 
	contribute&lt;/a&gt; - 43 pages of it! This is where people start.&lt;/li&gt;
	&lt;li&gt;Some principles:&lt;ul&gt;
		&lt;li&gt;Make it easy to do things right&lt;/li&gt;
		&lt;li&gt;Make it rewarding to do things right&lt;/li&gt;
		&lt;li&gt;Influence proportional to effort
		&lt;ul&gt;
			&lt;li&gt;Moving from contributor to partial-committer to commiter&lt;/li&gt;
			&lt;li&gt;Tracking no of patches etc by user - all automated with links 
			(see &lt;a href=&quot;http://www.red-bean.com/svnproject/contribulyzer/&quot;&gt;
			Contribulyzer&lt;/a&gt;)&lt;/li&gt;
		&lt;/ul&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Other Notes&lt;/h2&gt;
&lt;p&gt;I couldn't stay for the second day, but some other points of interest:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;There are increasing numbers of tools based around Subversion - Collabnet, Polarion, 
	CodeBeamer etc&lt;/li&gt;
	&lt;li&gt;Subversion command line is increasingly irrelevant as people use it 
	through Tortoise, Eclipse etc.&lt;/li&gt;
	&lt;li&gt;Merge tracking there at long last with 1.5 just around the corner&lt;/li&gt;
	&lt;li&gt;Really being used in the industry&lt;/li&gt;
	&lt;li&gt;SVK provides an interesting distributed method&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also had some chats with Collabnet around the idea of perhaps the BCS CMSG 
working with them to put on an event in London next year - definitely something 
to look into.&lt;/p&gt;
&lt;p&gt;Well worth a visit as a conference.&lt;/p&gt;




    </description>
  </item>

  <item>
    <title>Directing vs. Managing Configurations</title>
    <link>http://robertcowham.com/blog/scm/cm_directing_vs_managing.html</link>
    <description>





&lt;p&gt;In a recent CM Crossroads article on defining Agile SCM I included the quote 
from Charles Handy that I recently picked up on my travels through an airport:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;Go to the theatre and look at the programme. Everyone connected with the 
	performance is listed, no matter how small their contribution. People like 
	to be recognised as individuals. The word &amp;quot;manager&amp;quot; is reserved for those in 
	charge of things, not people, the stage manager and the lighting manager. 
	The people who are in direct communication with the customer, the actors, 
	are directed, not managed, by someone who actually leaves the scene once the 
	project is under way. He or she trusts the cast to go it alone, and as often 
	as not, they improve on the production once the director departs. Trust 
	inspires. One more thing - at the end of each performance they receive an 
	expression of appreciation from their audience, direct feedback from the 
	people who matter. No waiting for the annual performance appraisal.&lt;/p&gt;
	&lt;blockquote&gt;
		&lt;p&gt;Charles Handy, &lt;i&gt;Myself and Other More Important Matters&lt;/i&gt;, Arrow 
		Books, 2007 - ISBN 9780099481881&lt;/p&gt;
	&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;This obviously applies to more than just the directing vs. managing debate 
(e.g. feedback/appreciation), but really hit home for me as an expression of 
what those of us in the Configuration Management arena need to be doing. We 
should be directing our colleagues and developers rather than managing them 
(although we can of course manage actual configurations as before!). We need to 
get out and about amongst our congregation of developers and others, and infect 
them with enthusiasm and skills for the delights and benefits of good CM.&lt;/p&gt;
&lt;p&gt;There is a huge danger, which I come across fairly frequently, of sitting in 
your ivory tower wondering why developers aren't doing what you know is &amp;quot;the 
right thing&amp;quot;. They haven't got the message, they aren't doing what they should, 
and management isn't helping you to beat them up with a big stick to force them 
into doing it. Sometimes it seems we are just on a hiding to nothing...&lt;/p&gt;
&lt;p&gt;In CM we need to aspire to the director (servant-leader) mold - we provide a 
support service for people to get on with their jobs and we help them do it, but 
it is &lt;b&gt;they&lt;/b&gt; that do (most of) it, not us. There is obviously some level at 
which CM is still responsible for certain things - in particular processes and 
systems, and for auditing to ensure things have been done correctly.&lt;/p&gt;
&lt;p&gt;Thus I am more and more convinced that, particularly for Agile teams, CM 
should be the responsibility of everyone not just the CM person(s). This means 
that as CM professionals our job is:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;to sell the ideas, principles and tools of sound CM while supporting 
	people in getting their jobs done and &lt;b&gt;delivering value&lt;/b&gt; to the 
	business (not just ticking CM boxes)&lt;/li&gt;
	&lt;li&gt;to solve people's day-to-day issues through education and 
	tool/automation support&lt;/li&gt;
	&lt;li&gt;to &lt;b&gt;show &lt;/b&gt;how it is easier to do &amp;quot;the right thing&amp;quot; than it is not 
	to do it - a little discipline is worth a ton of lost time due to bugs 
	introduced, or things suddenly not working&lt;/li&gt;
	&lt;li&gt;to get out and about and work with developers, pairing with them and 
	demonstrating good CM practice, discovering those little niggling things 
	that cause lost time and productivity or pain and solving them&lt;/li&gt;
	&lt;li&gt;to ensure that our own working practices are suitable role models (avoid 
	&amp;quot;do as we do not as we say...&amp;quot;)&lt;/li&gt;
	&lt;li&gt;to focus on continuous process improvement - there is almost always 
	something more we can do (but again focus on value)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many challenges, and in an Agile world, it is more about working 
with people to define just enough process to be useful, and not too much to get 
in the way. I was fascinated to hear a vendor representative complaining that 
some of their customer had developers who were downloading and using Subversion 
for their day to day work as opposed to using the corporate tool. I wondered 
what had happened to make the tool or the configured process so unfriendly as to 
force the developers down this path.&lt;/p&gt;




    </description>
  </item>

  <item>
    <title>Perforce Branch Naming and Repository Structure Guidelines</title>
    <link>http://robertcowham.com/blog/scm/p4_branch_depot_structure.html</link>
    <description>





&lt;p&gt;One of the the things that comes up just about every time I go in to do some 
Perforce related consulting for a client is that of repository structure - how 
do you map some particular branching scheme (combination of branching patterns) 
onto the repository?&lt;/p&gt;
&lt;p&gt;This of course necessary since Perforce uses the repository structure to 
represent branches as well as other directory structures. This way of recording 
branches is feature one might occasionally wish were implemented otherwise, but 
it does have its attractions, and is the same model as used in Subversion and 
also Microsoft's new Team Foundation Server product (as an aside, it is perhaps 
not surprising that Microsoft chose this model since it is a not very well kept 
&amp;quot;secret&amp;quot; that their in house SCM tool called SourceDepot, introduced 
during the 
development of Windows 2000, was a re-badged copy of Perforce. Team 
Foundation Server is obviously a total rewrite on top of SQL Server, but they 
seem to be comfortable with the &amp;quot;branch in path space&amp;quot; model).&lt;/p&gt;
&lt;p&gt;Some clients need help working out a good branching scheme, and some have 
relevant experience with other tools so are comfortable with that part, but many 
need help with the mapping. I have covered a little of this in my article
&lt;a href=&quot;http://www.vaccaperna.co.uk/scm/branching.html&quot;&gt;Introduction to 
Perforce Branching&lt;/a&gt;, but this article expands on that.&lt;/p&gt;
&lt;p&gt;For their flexibility, I would generally recommend people use branch specs 
(e.g. created by &amp;quot;p4 branch&amp;quot; command) for branching since you can add view 
mappings to address not propagating renames, and branch extra components. 
However, if you can keep the branch spec to a single view mapping then that is 
great! (Note that the P4V GUI allows integration via drag-and-drop - sometimes 
convenient, but can be somewhat dangerous...).&lt;/p&gt;
&lt;h2&gt;Guidelines&lt;/h2&gt;
&lt;p&gt;A repository branch structure is about creating an appropriate &lt;b&gt;information 
hierarchy&lt;/b&gt; (designing an information architecture). So here are some guidelines 
that I have found useful over the years and seen successfully used in many 
organisations (and I certainly didn't invent any of them!). Maybe in the future 
I can come up with some appropriate pattern like descriptions, but for now, here 
they are:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Standardise naming conventions - make branch directories obvious&lt;/li&gt;
	&lt;li&gt;Keep branch spec mappings and client workspace spec mappings as simple 
	as possible (and permissions)&lt;/li&gt;
	&lt;li&gt;Make it as easy as possible for users (new and experienced) to visualise 
	the branching scheme as they click down through the hierarchy&lt;/li&gt;
	&lt;li&gt;Find the right balance between broad &amp;amp; shallow vs. narrow &amp;amp; deep hierarchies&lt;/li&gt;
	&lt;li&gt;Keep branches of a similar type at similar depths in the structure&lt;/li&gt;
	&lt;li&gt;Make branch directories sort sensibly&lt;/li&gt;
	&lt;li&gt;Plan for the future: 2, 3, 5 years down the line - include things like 
	the year (and optionally month) somewhere in the path to provide a natural 
	sorting.&lt;/li&gt;
	&lt;li&gt;Provide Guidelines and Delegate!&lt;/li&gt;
	&lt;li&gt;Remember - there is no one best solution, but there are many good enough 
	solutions!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some of what comes below is also covered by Laura Wingerd in her recent book 
&amp;quot;Practical Perforce&amp;quot; (O'Reilly) - you really need to get this book if you are 
responsible in any way for Perforce usage at your company! Her quote which sums 
things up nicely is:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;p&gt;&amp;quot;There is no reason that the repository structure &lt;i&gt;should &lt;/i&gt;match the 
	release lineage, but when it doesn’t it causes confusion to new users [and 
	cognitive dissonance to all users].&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now while I agree with the intent of what Laura has written, I find her 
suggested option is perhaps a little too restrictive, and it doesn't take into 
account organisations with many branches at a particular level (and indeed many 
different types of branches).&lt;/p&gt;
&lt;h2&gt;Standardise Naming Conventions - Make Branch Directories Obvious&lt;/h2&gt;
&lt;p&gt;Laura gives a very simple example in her book of naming convention - just use uppercase 
for the branch component. Thus she has:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;//depot/MAIN/...
//depot/REL1/...
//depot/SOME_PROJECT/...
//depot/ANOTHER_PROJECT/...&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is simple and can work very well (although it rather suggests that you 
don't use uppercase for any other paths which might be unnatural in certain 
companies for certain items). Another alternative is to append (or prepend) something to the name indicating that it is a branch directory, e.g. 
&amp;quot;.branch&amp;quot; or or &amp;quot;-branch&amp;quot;, or &amp;quot;.br&amp;quot; for those who don't like typing! Thus the 
above becomes:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;//depot/main.br/...
//depot/rel1.br/...
//depot/some_project.br/...&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am happy to have other suggestions recommended!&lt;/p&gt;
&lt;h2&gt;Sensible Sorting&lt;/h2&gt;
&lt;p&gt;Directory (and thus branch) names should sort sensibly at any point in the 
hierarchy, thus &lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;use leading zeros for numeric components, such as 01 instead of 
1 if you are going to have more than 10, or indeed 4, 5 or 6 leading zeroes 
	where necessary&lt;/li&gt;
&lt;li&gt;reverse the order of dates using yyyy-mm rather than mm-yyyy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;//depot/main.br/...
//depot/rel_01_00.br/...
//depot/rel_02_00.br/...
//depot/rel_02_01.br/...
//depot/rel_02_02.br/...&lt;/pre&gt;
	&lt;pre&gt;//depot/dev/2007_06_some_project.br/...&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Broad &amp;amp; Shallow vs. Narrow &amp;amp; Deep&lt;/h2&gt;
&lt;p&gt;At any one level the number of choices (sub-directories/branches) should be 
appropriate and naturally limiting (note 
that the structure needs to be as useable in several years time as it is now). 
For example, a structure which ends up with thousands of branches in a single 
directory will become unwieldy over time. Divide these branches into 
sub-directories using appropriate naming (and sorting). For example if you wish 
to create lots of branches for individual change requests then the obvious 
structure is very wide and shallow at some point in your repository:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;~/rel 	/CR000001/...
	/CR000002/...
	:
	/CR000099/...
	/CR000100/...
	:
	/CR009100/... 
	:&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Instead of that, try: &lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;~/rel 	/CR0000xx	/01/...
			/02/...
			:
			/99/...
	/CR0001xx	/01/...
			:
	/CR0091xx/	/01/... 
			:&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;This naturally splits things up and also sorts at all levels.&lt;/p&gt;
&lt;p&gt;As a corollary of the above you should split things up even if they don’t 
have a “natural” dividing component. One alternative is to use the date as an 
element of the path (or even a prefix) as YYYY or YYYY-MM to give some sort of 
natural sorting by date. Examples being:&lt;/p&gt;
&lt;blockquote&gt;
	&lt;pre&gt;~/2006-01/some_project/...&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;pre&gt;Or without introducing another level but using a prefix (which is often just a matter of personal preference):&lt;/pre&gt;
&lt;blockquote&gt;
	&lt;pre&gt;~/2006-01-another_project/...&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;In 2 or 5 years time it should be obvious to any user which are the which are 
the “new” ones where they are likely to be spending most of their time, and 
which are the “old” branches which can typically be ignored.&lt;/p&gt;
&lt;h3&gt;Hiding or Retiring Old Branches&lt;/h3&gt;
&lt;p&gt;It is 
possible “hide” old branches by removing read permissions on those repository 
paths (leaving them visible to superusers or perhaps an &amp;quot;archive&amp;quot; user). 
There are some potential performance implications to doing a lot of this (the 
more lines you add to the protections table the more work the server has to do 
for commands).&lt;/p&gt;
&lt;p&gt;Often 
the easiest way is just to make them easily ignored via an appropriate 
hierarchical naming convention as shown above. &lt;/p&gt;
&lt;h2&gt;&lt;font face=&quot;Times New Roman&quot;&gt;Provide Guidelines and Delegate Responsibility&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;Larger organisations may have a number of teams or units each of which is 
responsible for products with sometimes quite different lifecycles and thus 
branching schemes. In these cases it makes sense to set the guidelines and 
principles and delegate to the teams the work of defining the precise 
conventions to be used.&lt;/p&gt;
&lt;h2&gt;&lt;font face=&quot;Times New Roman&quot;&gt;Automation&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;If your repository structure is simple enough and regular enough then it is 
easy for tools or scripts to:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;create them (perhaps with input from a user), including adding a mapping 
	to the current client workspace view&lt;/li&gt;
	&lt;li&gt;have triggers that validate that they 
are being created in the correct place (e.g. don't allow a branch with wrong 
	naming convention to be created in certain directories or levels of the 
	repository). This prevents user error.&lt;/li&gt;
	&lt;li&gt;work out the relationship between branches automatically and thus be 
	able to produce simple reports for things like changes that need to be 
	propagated etc. While this is often done by means of some configuration file 
	(stored in the repository), and indeed this is sometimes necessary anyway, 
	it is easier if it can be automatically deduced from the structure (so that 
	a new branch &amp;quot;popping up&amp;quot; is automatically included into the reporting 
	mechanism).&lt;/li&gt;
	&lt;li&gt;make your protections table easier to maintain&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;There is No One Best Design!&lt;/h2&gt;
&lt;p&gt;And remember that this is always true - there are always many ways that are 
good enough, and the final choice often comes down to personal preference.&lt;/p&gt;
&lt;p&gt;However, every type of branch should have a “home”, so that when a user creates a type 
of branch your CM Plan should have simple guidelines so the user is never at a 
loss as to where to create one. This requires identifying the types of branches 
likely to be used.&lt;/p&gt;
&lt;p&gt;You need to do enough thinking and planning to get at least 80% of it right. 
It is of course possible to re-structure your repository (by branching from old 
name to new name and deleting the old within the same atomic changelist). 
However, this can cause you quite a few problems if the branch you are 
re-structuring has relationships with lots of other branches (e.g. release 
branches being maintained).&lt;/p&gt;
&lt;p&gt;People who are aware of the issues and have experience, can slot in a new 
branch type fairly easily (though they can still end up making sub-optimal 
choices that they regret).&lt;/p&gt;




    </description>
  </item>

</channel>
</rss>
