<?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>ArghWebWorks &#187; Webmastering</title>
	<atom:link href="http://www.arghwebworks.com/category/webmastering/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.arghwebworks.com</link>
	<description>True happiness comes from the joy of deeds well done, the zest of creating things new --- Antoine de Saint-Exupery</description>
	<lastBuildDate>Fri, 16 Apr 2010 20:48:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Is Quality Fractal?</title>
		<link>http://www.arghwebworks.com/2010/02/05/is-quality-fractal/</link>
		<comments>http://www.arghwebworks.com/2010/02/05/is-quality-fractal/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 18:30:52 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=141</guid>
		<description><![CDATA[When Des Traynor says &#8220;Quality is Fractal he means that by examining one piece of a whole, one can pass a judgement on the whole.  In his example of a steak, it doesn&#8217;t matter if the steak is terrific, if the gravy is served cold or the waiter is ugly and smells of cigarettes. [...]]]></description>
			<content:encoded><![CDATA[<p>When Des Traynor says &#8220;<a href="http://www.contrast.ie/blog/the-thickness-of-napkins/">Quality is Fractal</a> he means that by examining one piece of a whole, one can pass a judgement on the whole.  In his example of a steak, it doesn&#8217;t matter if the steak is terrific, if the gravy is served cold or the waiter is ugly and smells of cigarettes. </p>
<p>I&#8217;m not convinced.  And this could be because I&#8217;m working on my overall consistency. I think this idea requires a consistency that may not be present in the end product.  For instance, I might write a glorious function for part of a website but put it together with the rest of the framework and my implementation is less than glorious. You could examine the function and make a judgment that the whole is terrific &#8212; but the whole is flawed and weak.</p>
<p>I won&#8217;t argue that if one piece is great and another is not so great, that the lower &#8220;average&#8221; between the two drags the overall quality down. That&#8217;s true too; I think that inconsistency is a flaw in a product.  ( That&#8217;s why I&#8217;m working on it myself. )  That&#8217;s not what I&#8217;m saying; what I&#8217;m saying is that it&#8217;s hard to judge the whole effectively when there&#8217;s different levels of greatness.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2010/02/05/is-quality-fractal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Web Page Speed</title>
		<link>http://www.arghwebworks.com/2009/12/17/web-page-speed/</link>
		<comments>http://www.arghwebworks.com/2009/12/17/web-page-speed/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 21:32:15 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=134</guid>
		<description><![CDATA[With chatter today about website speed, here&#8217;s a quick test to see how long a webpage takes to download.
Keep in mind that this should be run at some interval with an average taken. Server load and speed should be taken into effect.
$ time wget &#8211;quiet &#8211;delete-after &#8211;page-requisites http://www.gmail.com
An example output is:
real	0m0.421s
user	0m0.000s
sys	0m0.012s
&#8220;time&#8221; gives you how much [...]]]></description>
			<content:encoded><![CDATA[<p>With chatter today about website speed, here&#8217;s a quick test to see how long a webpage takes to download.</p>
<p>Keep in mind that this should be run at some interval with an average taken. Server load and speed should be taken into effect.</p>
<p>$ time wget &#8211;quiet &#8211;delete-after &#8211;page-requisites http://www.gmail.com</p>
<p>An example output is:<br />
real	0m0.421s<br />
user	0m0.000s<br />
sys	0m0.012s</p>
<p>&#8220;time&#8221; gives you how much time something took; the command after the time command. You want the &#8220;real&#8221; number.<br />
&#8220;wget&#8221; is a great tool for downloading stuff from the web. The &#8211;page-requisites flag gets the <abbr class="uttInitialism" title="Cascading Style Sheets">CSS</abbr>(<a class="ubernym" href="http://www.w3.org/Style/CSS/">link</a>) (Cascading Style Sheets), JS, images and other things necessary for the page to be displayed. The other options (quiet, delete after) are just there to clean up the output.</p>
<p>This also doesn&#8217;t take into account how much time a browser might take arranging the pieces into a pie. A bunch of nested tables will cause the client to slow down.  Not specifying image height and width will cause browsers to slow down. A slow computer &#8230; well, you get the idea. Run this and take an average of the REAL value and you should have a pretty good idea of how slow your site is.</p>
<blockquote><p>
<em>Note</em><br />
If you&#8217;re plugging this into a <a href="http://www.php.net" class="ubernym uttInitialism"><abbr class="uttInitialism" title="PHP: Hypertext Preprocessor">php</abbr></a> script, keep in mind that &#8220;time&#8221; is outputting that into the STDERR stream.
</p></blockquote>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2009/12/17/web-page-speed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying Git</title>
		<link>http://www.arghwebworks.com/2009/12/15/trying-git/</link>
		<comments>http://www.arghwebworks.com/2009/12/15/trying-git/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 06:14:26 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[system administration]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=128</guid>
		<description><![CDATA[The ominously named &#8220;git&#8221; is a rather dull knife in my toolbox. I&#8217;m used to subversion (svn). I use svn routinely for my own work, as a backup. So I modify some files, do a svn commit and then push my files to where ever they need to go.
Git&#8217;s another beast. Because it&#8217;s an distributed [...]]]></description>
			<content:encoded><![CDATA[<p>The ominously named &#8220;git&#8221; is a rather dull knife in my toolbox. I&#8217;m used to subversion (svn). I use svn routinely for my own work, as a backup. So I modify some files, do a svn commit and then push my files to where ever they need to go.</p>
<p>Git&#8217;s another beast. Because it&#8217;s an <em>distributed</em> system, doing a &#8220;git commit&#8221; doesn&#8217;t send my files to the backup. I have to do a &#8220;git commit;git push&#8221; for that.  I&#8217;m liking the .gitignore file (compared to svn propedit syntaxes). And I&#8217;m liking the easiness of branching. I&#8217;ve got a couple of projects that are pretty much duplicates of one another with different filling. Like making a pie, but this one is apple, that one is cherry.  With subversion, it feels a lot more like those projects are full of stuff. But git feels leaner. Which is good, right?</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2009/12/15/trying-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Quick Eye on the Referrers</title>
		<link>http://www.arghwebworks.com/2009/05/05/a-quick-eye-on-the-referrers/</link>
		<comments>http://www.arghwebworks.com/2009/05/05/a-quick-eye-on-the-referrers/#comments</comments>
		<pubDate>Tue, 05 May 2009 18:27:39 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Search Engines]]></category>
		<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[system admin]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=115</guid>
		<description><![CDATA[One of my clients has an extremely busy website. And it&#8217;s a popular place for people to show his images and offer a cracked version of his product for sale. We can see them in the apache logs- the referrer shows their domain name. One thing I like to do in order to keep an [...]]]></description>
			<content:encoded><![CDATA[<p>One of my clients has an extremely busy website. And it&#8217;s a popular place for people to show his images and offer a cracked version of his product for sale. We can see them in the apache logs- the referrer shows their domain name. One thing I like to do in order to keep an eye on this is to tail his apache logs and pull out the refer data. I&#8217;m using this:</p>
<p>[code]<br />
tail -f access.log | cut -d\  -f9,11 | grep -v (domain name)<br />
[/code]</p>
<p>That&#8217;s two spaces after the -d\; the backslash is escaping the space used as the delimiter. You may need different field numbers (9 and 11 are the ones for his combined logs that show the <abbr class="uttInitialism" title="HyperText Transfer Protocol">HTTP</abbr> status code and the referrer).  And of course I need to grep out the domain name of his site because it&#8217;s all over those lines.</p>
<p>Hope that helps ya.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2009/05/05/a-quick-eye-on-the-referrers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fouled up, foul mood</title>
		<link>http://www.arghwebworks.com/2008/11/08/fouled-up-foul-mood/</link>
		<comments>http://www.arghwebworks.com/2008/11/08/fouled-up-foul-mood/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 19:04:50 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[hammer]]></category>
		<category><![CDATA[head]]></category>
		<category><![CDATA[nail]]></category>
		<category><![CDATA[practice]]></category>
		<category><![CDATA[seth godin]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=111</guid>
		<description><![CDATA[Seth Godin could not have posted this at a more appropriate time for me.  
Not that I was doing 4% less, but it did totally suck.  Here&#8217;s the situation. I have a site I&#8217;ve built for a client. I do regular maintenance on the site and I keep it in a subversion repository. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sethgodin.typepad.com/seths_blog/2008/11/the-sad-lie-of.html">Seth</a> Godin could not have posted this at a more appropriate time for me.  </p>
<p>Not that I was doing 4% less, but it did totally suck.  Here&#8217;s the situation. I have a site I&#8217;ve built for a client. I do regular maintenance on the site and I keep it in a subversion repository. I also do development for this site. I have a development site set up for it where only I can see the results. </p>
<p>Early last month, I was asked to develop a feature for it. It was actually similar to many other parts of the site but to implement it right, I needed to rewrite a fairly major portion of the navigation pages. Then I had to duplicate it for a different category of navigation, and since it&#8217;s either working one way through a standard link (product.php?id=4) and through a javascript update of elements, I had to do a lot of testing.</p>
<p>I did a lot, a lot of testing of it and was really proud of how it worked. I developed it in Linux / Firefox and tested it with Windows Firefox 3 and IE 7. I don&#8217;t really have to support IE6 at the moment. I tested all of the static link possibilities and then I tested all of the javascript possibilities. It was set, and I committed it to the repository. The client wasn&#8217;t ready for it yet, and since we&#8217;ve had problems where I&#8217;ve made something live where either he or I weren&#8217;t around to make sure it was right (thus the emphasis on testing ), I was waiting for him to say to make it live.</p>
<p>Before he did, however, he had some smaller things to change.  So I changed them and made those changes live. I had typos, however, on the copies I committed to the repository. I changed his code live for these smaller things, so these weren&#8217;t tested.  This was a problem- I wasn&#8217;t ready to roll out the bigger changes to &#8220;live&#8221; but I did need to roll out some later newer changes.</p>
<p>So when he was ready for these bigger changes, I rolled them out. And then this happened over IM:</p>
<pre>
<strong>client</strong>: dont you test this shit before you go live
<strong>client</strong>: just forget it
<strong>client</strong>: i'll do it differently
<strong>client</strong>: less chance of you destroying my site that way
<strong>client</strong>: revert back to before you broke it
<em>me</em>: i'll brb. off to shoot myself.
<strong>client</strong>: how about before you do that you get my frikking page to load in IE?
<strong>client</strong>: you're making us look bad
... ( client asks if I can handle the other way without taking down his site) ...
<em>me</em>: If I can't handle it, I'll subcontract some eight year old in india to do it for me.
<strong>client</strong>: or a 3 year old in china
<strong>client</strong>: do you practice being inept in front of a mirror or is it just a natural state
<strong>client</strong>: does it just come naturally?
<strong>client</strong>: a gift?
</pre>
<p>I had to take over 200 dollars off the invoice from last month ( for the changes that didn&#8217;t work ) and my entire day was put into a blender and frappiccinnoed. Nice, huh? And all because I made his smaller, newer changes live and didn&#8217;t properly test them with the revisions that I <em>had</em> tested</p>
<p>Here&#8217;s a couple of things I should have done. First, made the changes to my development area and tested them before I did them to the live site. Second, made use of the &#8220;branch&#8221; and &#8220;tagging&#8221; features and branched the code when he needed the smaller changes made, then merged it afterwards (and tested).  Really, it&#8217;s the testing that&#8217;s the problem.  Even in my &#8220;full time gig,&#8221; my testing could use some work.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2008/11/08/fouled-up-foul-mood/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Timing Page Loads</title>
		<link>http://www.arghwebworks.com/2008/04/03/timing-page-loads/</link>
		<comments>http://www.arghwebworks.com/2008/04/03/timing-page-loads/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 14:18:23 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Webmastering]]></category>
		<category><![CDATA[system admin]]></category>
		<category><![CDATA[system administration]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/2008/04/03/timing-page-loads/</guid>
		<description><![CDATA[Every morning, I had a client calling me and asking &#8220;Is our server abnormally unresponsive?&#8221;  They were browsing their website and it seemed to them that the pages were taking longer than usual to render.  Once I figured out why they were asking and what they were measuring with, I realized I could [...]]]></description>
			<content:encoded><![CDATA[<p>Every morning, I had a client calling me and asking &#8220;Is our server abnormally unresponsive?&#8221;  They were browsing their website and it seemed to them that the pages were taking longer than usual to render.  Once I figured out why they were asking and what they were measuring with, I realized I could graph this amount of time, the important thing was figuring out how to get this information.</p>
<p>Here&#8217;s what I came up with: I was already running mrtg-rrd to do much of their graphing, so I wanted to create a MRTG Target line to correspond to &#8220;how long does our page take to render.&#8221;  I wrote a script to run &#8220;/path/towget &#8211;delete-after -pq (page) -O /tmp/garbage&#8221; and display the amount of time it took.  I wrote it in <a href="http://www.php.net" class="ubernym uttInitialism"><abbr class="uttInitialism" title="PHP: Hypertext Preprocessor">php</abbr></a> because it was easiest.</p>
<p><code><br />
$wget="/usr/bin/wget -pq --delete-after -O /tmp/garbage";<br />
$toget = "$site";<br />
$start=microtime(true);<br />
exec( "$wget $toget", $out, $e );<br />
$end=microtime(true);<br />
$dur=round( $end-$start, 3 );<br />
print "$dur\n";<br />
</code></p>
<p>The problem with this is that I was running it on their gateway; their gateway is also the monitor and grapher.   It was taking less than a second to render the page ( because of local network speeds ). Instead, I wanted it to more closely correspond to what the client would be seeing. Their development server is at their office; so I put the script there and wrote the MRTG target to point at a local ( on the gateway ) script that got the value from the development server, printed it twice, printed the date and the name of the site. It looks like this:<br />
<code><br />
$user='foo';<br />
$password='bar';<br />
$sitename='example.com';<br />
exec("/usr/bin/lynx -auth=$user:$password --dump http://developmentserver.com/scriptname.php ", $out, $e );<br />
$time=0;<br />
while ( ($time==0) &#038;&#038; (count( $out ) > 0 ) ) {<br />
        $time=(float) array_shift( $out );<br />
}<br />
print "$time\n";<br />
print "$time\n";<br />
print date("r\n");<br />
print "$sitename\n";<br />
</code></p>
<p>A couple of important caveats. The day after I started running this ( it averages around 4.6 seconds, btw, much too long imho ), the displayed time doubled.  It could have been a change to the page we&#8217;re looking for, but it turned out to be a DNS issue on the development server. So DNS is important. This doesn&#8217;t take into account the amount of time a browser takes to render a page; it&#8217;s just the time to download all the pieces. So processor intensive stuff, like super heavy javascript or super heavy tables, won&#8217;t show up here.  However, if you keep in mind what the value is- how long to resolve and download all the pieces of a web page, this is a useful metric.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2008/04/03/timing-page-loads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Profiteering</title>
		<link>http://www.arghwebworks.com/2007/10/15/internet-profiteering/</link>
		<comments>http://www.arghwebworks.com/2007/10/15/internet-profiteering/#comments</comments>
		<pubDate>Mon, 15 Oct 2007 22:18:26 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=89</guid>
		<description><![CDATA[Not really. Because Profiteering is like pirating. Sort of.
But I am trying to make some internet profits happen. Over at A Buck A Night I&#8217;m exploring internet passive income streams. I&#8217;ll let you know how it goes; so far it&#8217;s kind of depressing.]]></description>
			<content:encoded><![CDATA[<p>Not really. Because Profiteering is like pirating. Sort of.</p>
<p>But I am trying to make some internet profits happen. Over at <a href='http://www.abuckanight.com/'>A Buck A Night</a> I&#8217;m exploring internet passive income streams. I&#8217;ll let you know how it goes; so far it&#8217;s kind of depressing.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2007/10/15/internet-profiteering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Open for Release</title>
		<link>http://www.arghwebworks.com/2007/07/27/open-for-release/</link>
		<comments>http://www.arghwebworks.com/2007/07/27/open-for-release/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 22:00:54 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=77</guid>
		<description><![CDATA[I made this theraputic purchase, and followed it up with a fair bit of work.   When I asked, after I bought the domain, about some of the more &#8220;automagic&#8221; portions of the site, ones that I would expect; the seller laughed.  
Anyway, I bought a Pagerank Checker service, and have put together [...]]]></description>
			<content:encoded><![CDATA[<p>I made <a href='http://www.arghwebworks.com/?p=74'>this theraputic purchase</a>, and followed it up with a fair bit of work.   When I asked, after I bought the domain, about some of the more &#8220;automagic&#8221; portions of the site, ones that I would expect; the seller laughed.  </p>
<p>Anyway, I bought a <a href='http://www.pgrnk.com/'>Pagerank Checker</a> service, and have put together some other changes. I have a few more things to put together, but for now, it&#8217;s working as I want it to.  </p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2007/07/27/open-for-release/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IMified</title>
		<link>http://www.arghwebworks.com/2007/05/17/imified/</link>
		<comments>http://www.arghwebworks.com/2007/05/17/imified/#comments</comments>
		<pubDate>Thu, 17 May 2007 21:59:42 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=69</guid>
		<description><![CDATA[I want to like IMified. I think it&#8217;s a terrific idea; a way to combine AJAX (Asynchronous Javascript And XML) and IMs; that&#8217;s what it is, really, a structured way to proces REST requests through your IM client.  
Unfortunately, even with the plugins, it&#8217;s not very helpful to me. The most helpful ones would [...]]]></description>
			<content:encoded><![CDATA[<p>I want to like <a href='http://www.imified.com'>IMified</a>. I think it&#8217;s a terrific idea; a way to combine <acronym class="uttAcronym" title="Asynchronous Javascript And XML">AJAX</acronym> (Asynchronous Javascript And <a href="http://www.w3.org/XML/" class="ubernym uttInitialism"><abbr class="uttInitialism" title="eXtensible Markup Language">XML</abbr></a>) and IMs; that&#8217;s what it is, really, a structured way to proces REST requests through your IM client.  </p>
<p>Unfortunately, even with the plugins, it&#8217;s not very helpful to me. The most helpful ones would either be the network tools (ping, traceroute, etc)  or the Basecamp tool- but unfortunately both of those require that I &#8220;push&#8221; the data to them. And honestly, I&#8217;d just as soon open a terminal window and use traceroute there. Or just go log into my basecamp account.</p>
<p>What would really help would be a <abbr class="uttInitialism" title="Really Simple Syndication">rss</abbr> feed tool, or some way for a service to send me an alert; I can <em>totally</em> see a place for Nagios to alert me via IM when a machine is down, and if it&#8217;s easier than the nagios plugin to configure, that&#8217;d be awesome. </p>
<p>IMified; keep an eye on it.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2007/05/17/imified/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Top Five Essential Practices When Developing Software</title>
		<link>http://www.arghwebworks.com/2007/05/16/top-five-essential-practices-when-developing-software/</link>
		<comments>http://www.arghwebworks.com/2007/05/16/top-five-essential-practices-when-developing-software/#comments</comments>
		<pubDate>Thu, 17 May 2007 01:27:06 +0000</pubDate>
		<dc:creator>Russ</dc:creator>
				<category><![CDATA[Webmastering]]></category>

		<guid isPermaLink="false">http://www.arghwebworks.com/?p=67</guid>
		<description><![CDATA[Basil Vandegriend has written about five crucial practices when you&#8217;re developing software. Let&#8217;s take a look at what he has to say.

Automated Tests
Version Control
Refactoring
Repeatable Build and Deploy
Communication

Obviously he&#8217;s coming from an Agile mindset. Agile methodologies are essentially to rewrite the specs in terms of &#8220;tests&#8221; and write those tests as scripts, break the code up [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software'>Basil Vandegriend</a> has written about five crucial practices when you&#8217;re developing software. Let&#8217;s take a look at what he has to say.</p>
<ol>
<li><a href="http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software#test">Automated Tests</a></li>
<li><a href="http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software#versioncontrol">Version Control</a></li>
<li><a href="http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software#refactoring">Refactoring</a></li>
<li><a href="http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software#builddeploy">Repeatable Build and Deploy</a></li>
<li><a href="http://www.basilv.com/psd/blog/2007/top-five-essential-practices-for-developing-software#communication">Communication</a></li>
</ol>
<p>Obviously he&#8217;s coming from an Agile mindset. Agile methodologies are essentially to rewrite the specs in terms of &#8220;tests&#8221; and write those tests as scripts, break the code up into small pieces to match the tests, code quickly, and code in order to successfully pass those tests.  And then go back over the code and refactor, tighten and clean up. Pretty straightforward.</p>
<p>That&#8217;s why he has the two items &#8220;Automated Tests&#8221; and &#8220;Refactoring;&#8221; they&#8217;re pretty much straight from the Agile handbook. And if you&#8217;re coding quickly, it&#8217;s important to run your tests frequently. And if you&#8217;re running your tests frequently, you might as well automate them.  That way you can just happily burble along, coding up your test-hurdle-jumping scripts and just watch your email for the broken alerts.  In fact, I think &#8220;Repeatable Build and Deploy&#8221; is right there along the automated tests- building and deploying should be as straightforward as typing &#8220;make&#8221; or &#8220;svn export (<abbr class="uttInitialism" title="Uniform Resource Locator">url</abbr>);&#8221;  the fewer different buttons you have to push, the more likely you are to push those buttons. </p>
<p>Don&#8217;t get me wrong; I totally agree with him about &#8220;automated tests,&#8221; &#8220;refactoring,&#8221; and &#8220;repeatable build and deploy.&#8221; However, his background and mindset pushes these items into his top five list. I agree for &#8220;automated tests,&#8221; and for &#8220;build and deploy&#8221; but I&#8217;m not so sure about &#8220;refactoring.&#8221; Because I tend to plan more in advance and try to figure out the functions and classes I will be needing, I don&#8217;t think refactoring is as high on my list. </p>
<p>&#8220;Version control&#8221; is an excellent suggestion; I really like subversion. I tend to forget stuff, so if I can figure out from the logs what I checked in on a particular day and what the log was (as well as any file changes), then I can figure out where I&#8217;m going a lot easier. Especially if you, like me, tend to work on projects and then drop them off, and then work on them after a while.  And it makes &#8220;rolling back&#8221; a change very simple, in those rare (heh) cases where the client changes their mind.</p>
<p>Basil closes with his strongest topic; communication. I think this is hands down the most important essential practice when developing; whether it&#8217;s communication with the client or communication with other team members.  If you don&#8217;t communicate with your clients, you won&#8217;t be needing those unit tests or the rapid deployment. If you don&#8217;t communicate with your teammembers, you won&#8217;t be able to pass your tests regularly.   Communication really is the glue that holds the project together.</p>
<p>I think Basil did a good job with these five practices. While I don&#8217;t think I could come up with a better list, I&#8217;m not sure about his ordering, which, honestly, could be a solid oratory practice.</p>]]></content:encoded>
			<wfw:commentRss>http://www.arghwebworks.com/2007/05/16/top-five-essential-practices-when-developing-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.347 seconds -->
