<?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>Peter Williams &#187; Perforce</title>
	<atom:link href="http://barelyenough.org/blog/tag/perforce/feed/" rel="self" type="application/rss+xml" />
	<link>http://barelyenough.org</link>
	<description>… and there is much to be learned</description>
	<lastBuildDate>Tue, 31 Aug 2010 15:57:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Megalomania in Revision Control Systems</title>
		<link>http://barelyenough.org/blog/2006/08/megalomania-in-revision-control-systems/</link>
		<comments>http://barelyenough.org/blog/2006/08/megalomania-in-revision-control-systems/#comments</comments>
		<pubDate>Tue, 22 Aug 2006 17:22:17 +0000</pubDate>
		<dc:creator>Peter Williams</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Perforce]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://pezra.barelyenough.org/blog/2006/08/megalomania-in-revision-control-systems/</guid>
		<description><![CDATA[The more I work with Perforce the more annoyed I get with it&#8217;s belief that it is the center of the software development process. Not that Perforce is not unique in believing this. In fact, many commercial revision control systems have this same megalomania. So, commercial revision control vendors, let me clue you in. Revision [...]]]></description>
			<content:encoded><![CDATA[<p>The more I work with Perforce the more annoyed I get with it&#8217;s belief
that it is the center of the software development process.  Not that
Perforce is not unique in believing this.  In fact, many commercial
revision control systems have this same megalomania.</p>

<p>So, commercial revision control vendors, let me clue you in.  Revision
control systems are <em>not</em> the center of the software development
universe, the file system on the developer&#8217;s machine is.  Period.  The
primary job of a revision control system is to figure out what the
developer did, after the developer has already done it, and to save that
so that it can be applied to the other developers local file systems.</p>

<p>I am complaining about this because out of the box Perforce does not
include a way to examine your working directories and get a list of
what has changed since the last time you synchronized with the depot
(Perforce&#8217;s word for a repository).  This means that you must declare
any changes you make to the source code tree before, or at the same
time as, you make them.  If you do not declare the changes up front it
is almost certain that some required changes will be forgotten and
will not get checked in.</p>

<p>The main problem with this approach is that it compels you to <a href="http://www.joelonsoftware.com/articles/fog0000000022.html">break
your flow</a>.
You might not think that just having to execute one additional command
would really be that bad.  After all, executing a command could
probably be incorporated into your personal process and thereby have
little or on impact on your flow.  In practice, however, it really
does break the flow.</p>

<p>The true cost of declaring that a new file will exist with a
particular name is not in the act of declaration.  Rather, it is in
the thought and commitment that such a declaration requires.  Every
day, I created new classes only to notice a couple of minutes later
that it has morphed in to something quite different than what I
originally intended.  Declaring the name of a new file to the revision
control system before I have even created it dramatically raises the
cost of such emerging behaviors.  To name a file well I need to
understand it&#8217;s purpose and to do that I usually need to create it and
put some code in it to see how it turns out.</p>

<p>Having to declare the name of the file first requires a significant
amount of thought and, worse of all, it prematurely solidifies the
design.  This premature solidification of design is costly both in
terms of the time it takes and the quality risks it introduces.  Paul
Graham makes a compelling case for a fluid approach to software design
in <a href="http://www.paulgraham.com/hp.html">Hackers and Painters</a>.  Forcing
stability on an immature design merely locks in its deficiencies and
that is exactly the result of requiring the declaration a file before
it is created.</p>

<p>The need to declare modifications and deletions up-front is less
onerous.  Deletions are easier because, generally, it is easy to
understand the consequences of deleting a file because there is only
one.  Modifications are easier because marking a file at &#8220;to be
edited&#8221; is quite forgiving.  Even if you failed to actually modify the
file checking it in will have no functional impact.  None the less,
having to declare you intentions up-front is still annoying, and
wasteful since they could be determined after the fact.</p>

<p>If you are a commercial revision control system vendor please take
note.  You are not, nor will you ever be, the center of the software
development universe.  Pretending that you are just costs your users
time and effort that could be better spent solving real problems.</p>
]]></content:encoded>
			<wfw:commentRss>http://barelyenough.org/blog/2006/08/megalomania-in-revision-control-systems/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
