<?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>Elegant Code &#187; Source Control</title>
	<atom:link href="http://elegantcode.com/category/source-control/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com</link>
	<description></description>
	<lastBuildDate>Tue, 20 Jul 2010 12:52:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Visual Studio Team System for Small Teams</title>
		<link>http://elegantcode.com/2009/08/24/visual-studio-team-system-for-small-teams/</link>
		<comments>http://elegantcode.com/2009/08/24/visual-studio-team-system-for-small-teams/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 23:27:41 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[ALM]]></category>
		<category><![CDATA[Craftsmanship]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Team System]]></category>
		<category><![CDATA[Tools and Utilities]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2009/08/24/visual-studio-team-system-for-small-teams/</guid>
		<description><![CDATA[There was a recent brouhaha on Twitter and in some blogs about the appropriateness of Team System in small teams. The gist of the discussion was simply that there are a lot of alternatives to TFS and VSTS tooling and many of them come cheaper out of the box. In many cases, free!
Duh.
I have worked [...]]]></description>
			<content:encoded><![CDATA[<p>There was a recent brouhaha on Twitter and in some blogs about the appropriateness of Team System in small teams. The gist of the discussion was simply that there are a lot of alternatives to TFS and VSTS tooling and many of them come cheaper out of the box. In many cases, free!</p>
<p>Duh.</p>
<p>I have worked with Team System quite a bit and with alternatives just as much. With a lot of experience behind me on this, I feel confident I can make a legitimate case for using Team System in a small team.</p>
<p>I consider a small team a development organization of fewer than 10 people.</p>
<h3>Some Context and Disclosure</h3>
<ul>
<li>I am a Team System MVP </li>
<li>I use Team System on a daily basis </li>
<li>I use SVN+Team City on a daily basis </li>
<li>I care more about pragmatism and craftsmanship than tooling, and that means focusing on how to use tools, not just the tools themselves </li>
<li>I have been present on day one of a brand new team </li>
<li>I have been in a team that has grown quickly over a short time </li>
</ul>
<h3>Focus on the Work</h3>
<p>What happens when teams squabble about tools instead of just getting on with it? Lots of churn and wasted energy, is my experience. </p>
<p>I can report having seen small teams succeed and fail. The success or failure in both cases obviously has a lot more to do with leadership and business than developer tools, but I can also say the way companies approach developer tooling can have a lot to do with culture.</p>
<p>Any startup or small team simply <em>must</em> be focused to succeed. This can also be extremely difficult to achieve. A small team simply doesn’t have the capacity or depth to be distracted with issues not pertaining to delivering product. Paradoxically, team members are often wearing several hats. That is, everyone is doing a little of everything. That can quickly trend to entropy, because no one ends focusing on the work at hand.</p>
<p>The last thing I want to do on day 1 of a new team, or very often in a small teams, is visit tooling. Not deliberately making choices about tooling, though, will eventually bite you. Hard. How many of us are in organizations with over 2 brands of source control systems because new ones were added in an ad-hoc manor? I’ve been there. How many unit test frameworks are being used? I have been on a team that used 4 at once. Think that caused some problems?</p>
<p>As team lead, I care far less about optimizations of specific tools, and far more about a cohesive and fluid process enabling flow within the team. I care a great deal that there is a single source of truth for requirements and very little that we are using the coolest new unit test framework.</p>
<p>Often, focusing on work simply means implementing a system of tools and getting past the discussion. Have you ever heard developers purse fight over text editors? Now, there’s a constructive use of energy. The same thing can happen when geeks whip out their favorite source control, merge tools, unit testing frameworks, Visual Studio add-ins, logging library, laptop brand, or bug tracking system. </p>
<p>Point number one is let’s get past the time suck of the my-NAnt-is-better-than-your-MS-Build and just prescribe a toolset so we can get on with the real business of our team. </p>
<h3>Team System is Like a Box of Tools at Sears</h3>
<p>When I go to Sears and browse the Craftsman (or DeWalt) tools, I usually see some interesting little specialty tools. I might buy a funky swivel socket or a single ratchet, but I rarely browse the aisle with the large all-in-one kits. The reason I don’t browse the kit aisle is because my father-in-law bought be a basic Craftsman starter kit almost 20 years ago and my collection of tools has grown over time. </p>
<p>I don’t still have all of the tools in that original kit, but I do still have many of them. Further, my need for hand tools have gotten more specialized over time. Also, I am making a bit more money than I was when I married my wife, so I may spend extra for a special-purpose hammer rather than always relying on the one that came in the original kit.</p>
<p>Without that original kit, though, I would never have been able to even get started. No, it didn’t have every tool I would ever need, but it had almost everything I needed right then.</p>
<p>Team System is much the same. A team can absolutely hit the ground running with the rich toolset VSTS provides. Maybe you’ll augment the toolbox over time. Maybe you’ll even change tools (can anyone say [TestClass]?) but the kit that comes in the box really can provide most of what a small team needs to get going, and do it in a single solution.</p>
<p>That’s huge. </p>
<p>As soon as I start looking around to sub-optimize my hammer or my source control, I am going to start slowing the team down. GIT? SVN? PerForce? There are a ton of options for source control, each with their strengths and weaknesses. It’s freaking source control. Get on with it. I mean, how sexy can a hammer be?</p>
<h3>It May Not Cost What You Think</h3>
<p>You can buy a big toolkit at Sears for far less than it costs to buy all the tools individually. Further, buying the toolkit for the person without tools is a good move because they will have all the basics covered in a single purchase. </p>
<p>Craftsman Toolkits are a favorite gift of mine for graduates and newlyweds for this very reason.</p>
<p>Microsoft has the same insight that Sears had. If a person gets accustomed to Craftsman by selling the kit cheaply, they’ll be a customer for life. This is the exact idea behind the BizSpark program. If you aren’t familiar with it, BizSpark is a Microsoft program that allows free (that’s right, free!) access to all developer tools, operating systems, and other software for startups.</p>
<p>Is your company less than 2 years old? Do you make software? If yes, you qualify, I kid you not.</p>
<h3>Integration Matters</h3>
<p>Even if you are paying full price (which you shouldn’t <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) I believe the value of VSTS is still there. The productivity loss involved in setting up a system of disparate and non-integrated developer tools is tremendous. I have been there and done that.</p>
<p>I know SVN is good. I know Team City is good. I also know that setting up a basic Continuous Integration build in Team System is stupid simple. And the real money shot comes with Work Item management. How many teams out there are using work item management systems or defect tracking systems they hate?</p>
<p>Well, we all are. </p>
<p>So, we may as well have one that works right in the IDE and allows me to tie check ins to work I am performing. The context switching that occurs in non-integrated systems of reporting, SCC, build, and work item management is HUGE. Huge! No really. </p>
<h3>Get On With It</h3>
<p>The people involved in the recent online Team System kerfuffle are folks I would consider in the top 1% of developer talent. Quite frankly, it makes a lot of sense to me that people at that level will have replaced their hammer from the kit with one that has an ergonomic grip.</p>
<p>That said, there are a lot of startups and small teams in entropy out there. For those folks, I firmly believe that standardizing on an integrated toolset for the development team is a bigger savings than “free like a puppy” solutions that can work well, but with more churn.</p>
<p>Now quit fussing about source control and learn how to use a decent ORM, people.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2009/08/24/visual-studio-team-system-for-small-teams/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>SVN Update doesn&#8217;t always get new directories</title>
		<link>http://elegantcode.com/2009/07/27/svn-update-doesnt-always-get-new-directories/</link>
		<comments>http://elegantcode.com/2009/07/27/svn-update-doesnt-always-get-new-directories/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 21:54:55 +0000</pubDate>
		<dc:creator>Tony Rasa</dc:creator>
				<category><![CDATA[Source Control]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2009/07/27/svn-update-doesnt-always-get-new-directories/</guid>
		<description><![CDATA[Problem:&#160; You run “svn update” on a directory where you *know* there are new folders.&#160;&#160; Svn tells you “At revision X” where X = whatever the head revision is (i.e., “everything’s up to date!”) – but that new folder didn’t show up.&#160; 
This is because the default is for svn to update folders down to [...]]]></description>
			<content:encoded><![CDATA[<p>Problem:&#160; You run “svn update” on a directory where you *know* there are new folders.&#160;&#160; Svn tells you “At revision X” where X = whatever the head revision is (i.e., “everything’s up to date!”) – but that new folder didn’t show up.&#160; </p>
<p>This is because the default is for svn to update folders down to the working copy depth: only check for updates in folders that you’ve already got.&#160; New folders beyond that are beyond the depth and won’t be updated.</p>
<p>To get all of those folders, in Tortoise SVN select “SVN Update to Revision”, and change the update depth to “Fully Recursive.”&#160; Or from the command line, “svn update &#8211;depth infinity”</p>
<p>[Note: I may have gotten some or all of this completely wrong, this is just my notes as I’m trying to understand how svn is doing what it’s doing.]</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2009/07/27/svn-update-doesnt-always-get-new-directories/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vault and CruiseControl.NET Error: Working Folder State Problem</title>
		<link>http://elegantcode.com/2009/07/01/vault-and-cruisecontrolnet-error-working-folder-state-problem/</link>
		<comments>http://elegantcode.com/2009/07/01/vault-and-cruisecontrolnet-error-working-folder-state-problem/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:23:54 +0000</pubDate>
		<dc:creator>Tony Rasa</dc:creator>
				<category><![CDATA[Source Control]]></category>
		<category><![CDATA[CruiseControl.NET]]></category>
		<category><![CDATA[Vault]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2009/07/01/vault-and-cruisecontrolnet-error-working-folder-state-problem/</guid>
		<description><![CDATA[This is one of those problems that teaches humility.&#160; I’m posting this here because the solution is a) trivially obvious, any fool could see it and b) I completely overlooked the obvious solution and maybe a google “hint” would have saved me some time.
At Blackfin, we use SourceGear Vault and CruiseControl.net. (We’re moving to Subversion [...]]]></description>
			<content:encoded><![CDATA[<p>This is one of those problems that teaches humility.&#160; I’m posting this here because the solution is a) trivially obvious, any fool could see it and b) I completely overlooked the obvious solution and maybe a google “hint” would have saved me some time.</p>
<p>At <a href="http://www.blackfin.com" target="_blank">Blackfin</a>, we use SourceGear Vault and CruiseControl.net. (We’re moving to Subversion and TeamCity, but that’s a different post.)&#160; One of our projects on one of our CC.NET servers was failing with this exception:</p>
<p><font face="Courier New">“The working folder state information for C:\CruiseControl.NET\Build\MyProject\working is incompatible with this version of Vault.&#160; Please choose a different working folder path.&#160; The specific compatibility exception was: Could not detect the file type in the supplied stream.”</font></p>
<p>Vault likes to litter your system with lots of little state files, and on rare occasion these files get corrupted.&#160; To fix, you just <a href="http://support.sourcegear.com/viewtopic.php?t=6" target="_blank">delete the local cache directories</a>, re-get repositories, and you’re on your way again.&#160; Piece of cake.&#160; </p>
<p>I deleted all the cache files on this server, from C:\Documents and Settings\{username}\Local Settings\Application Data\SourceGear.&#160; To be thorough, I delete all the cache files I can find for all users.&#160; BUT, the exceptions continue.</p>
<p>Thinking to myself, “well obviously I’ve not deleted the right directory” I run a search for all directories named “Vault_1”, which turns up…nothing.</p>
<p>What follows next is a bunch of flailing about, checking for cc.net bugs, and to sum up: grasping at straws.&#160; What *should* have happened is that I re-read the exception and think carefully about what causes it: a corrupted state file that I haven’t deleted yet.</p>
<p>I run CruiseControl.Net as a service, under the local NetworkService account.&#160; Therefore, I [failed to] reason, the cache files must be in C:\Documents and Settings\NetworkService\Local Settings\Application Data\SourceGear.&#160; But I couldn’t find this directory on the system.&#160; Except that the NetworkService directory is marked as a “protected Operating System file”.&#160; Remember that Folder option “Hide protected operating system files (recommended)” that you always switch off and ignore the dialog box that pops up?&#160; It was still checked…</p>
<p>Uncheck that dumb setting, go into the directory, delete the cache, and now the build works again.&#160; </p>
<p>Lesson: sometimes exceptions tell you exactly what’s wrong.&#160; Don’t be so quick to search for exotic solutions when the obvious one is staring you in the face.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2009/07/01/vault-and-cruisecontrolnet-error-working-folder-state-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changing Source Control as a Kaizen Event</title>
		<link>http://elegantcode.com/2008/09/27/changing-source-control-as-a-kaizen-event/</link>
		<comments>http://elegantcode.com/2008/09/27/changing-source-control-as-a-kaizen-event/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 06:23:36 +0000</pubDate>
		<dc:creator>David Starr</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Kaizen]]></category>
		<category><![CDATA[Source Control]]></category>

		<guid isPermaLink="false">http://elegantcode.com/2008/09/27/changing-source-control-as-a-kaizen-event/</guid>
		<description><![CDATA[I often have opportunities to work with organizations in transition to Team Foundation Server for their source control solution. Most large organizations (and many smaller ones) look for a migration route for their source code that allows them to retain history and their current merge/branching model. In heavily regulated environments, this is often a fundamental [...]]]></description>
			<content:encoded><![CDATA[<p>I often have opportunities to work with organizations in transition to Team Foundation Server for their source control solution. Most large organizations (and many smaller ones) look for a migration route for their source code that allows them to retain history and their current merge/branching model. In heavily regulated environments, this is often a fundamental requirement, in fact. Accordingly, there are many packaged conversion tools out there to serve this need. There are Team System SCC conversion utilities for IBM’s Clear Case, VSS, SVN, StarTeam, CVS, Perforce, and others. The mere existence of these tools lets me know that migrating source code in the same structure it previously existed is considered “good” by many.<img style="margin: 5px" height="240" src="http://blogs.itworldcanada.com/shane/files/2008/01/kaizen2.gif" width="136" align="right" /></p>
<p>My default recommendation is to do a clean, fresh, manual import rather than to migrate source code with existing structure. I have several reasons for this including:</p>
<ul>
<li>Code migration is more complicated and it will take longer (cost more). </li>
<li>Tools have flaws. Everything may not turn out the way you think it will when you have been branching and labeling in that old system for 6 years. </li>
<li>The majority of code file comparisons occur at the tail end of source control. Very rarely is a comparison made on a code file in SCC older than 60 days. </li>
<li>The reason you want to retain history is to blame <a href="http://www.dontbetheguy.com/home.html" target="_blank">that guy</a>. </li>
<li>Your branching model was probably over complicated anyway. </li>
<li>History for auditing purposes can be found in the old system, kept online and read-only for a year or two if necessary. </li>
</ul>
<p>But the number one reason I don’t want to bring the source code over in the same model is because this is a golden opportunity to improve.</p>
<p>It amazes me that the structure of a SCC system reflects the nature of the organization that created it. I have learned, however, that it does. Are management decisions hectic? Are releases going out buggy? Look for lots of deep branching structures. Are developers working in separate branches on the same release? Look for lots of cherry pick merges.</p>
<p>It is a fundamentally healthy exercise to pull a large pile of source code out of the old system and bring it into the new one one project at a time, ensuring that each one is self contained. In other words, break the dependencies between projects and all of those weird references to resources outside the boundary of the solution.</p>
<p>It comes down to this, why are you making this tooling change in the first place? Odds are that the tool change is being done because the team wants things to get better. Whether you are moving to Team System, SVN, or something else, you are moving to a new system to make an improvement. Given the desire to improve, take advantage of the opportunity to actually make things better rather than to persist old dysfunctions into a shiny new tool.</p>
<p>As a manager of development teams myself, I found great value in migrating source control every 2 years or so, just to cause such a spring cleaning event.</p>
<p>And the number one thing you can do to make this a true <a href="http://en.wikipedia.org/wiki/Kaizen" target="_blank">Kaizen</a> event? Ensure that each and every project (that is, every *.*proj file) gets build built via a CI build before adding another project to the system.</p>
]]></content:encoded>
			<wfw:commentRss>http://elegantcode.com/2008/09/27/changing-source-control-as-a-kaizen-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
