<?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>Ardent Dev &#187; Development</title>
	<atom:link href="http://ardentdev.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://ardentdev.com</link>
	<description>For the Love of Code</description>
	<lastBuildDate>Thu, 15 Dec 2011 03:15:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Building Software is Like Buying a Puppy</title>
		<link>http://ardentdev.com/building-software-is-like-buying-a-puppy/</link>
		<comments>http://ardentdev.com/building-software-is-like-buying-a-puppy/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 03:15:39 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/?p=267</guid>
		<description><![CDATA[Scott McNealy and Scott Hanselman have both said that open source software is free like a puppy, but a lot of open source software is free like a mature housebroken dog you get from a friendly neighbour. Building software, on the other hand, is like buying a puppy. A really young puppy that&#8217;s not housebroken. [...]]]></description>
			<content:encoded><![CDATA[<p>
Scott McNealy and Scott Hanselman have both said that open source software is free like a puppy, but a lot of open source software is free like a mature housebroken dog you get from a friendly neighbour. Building software, on the other hand, is like buying a puppy. A really young puppy that&#8217;s not housebroken. With its tail held on with tape and wire. And it probably started out as a dire wolf or a cat or a gerbil.
</p>
<div style="float: right; margin-left: 10px;">
<a href="http://ardentdev.com/wp-content/uploads/2011/12/image01.jpg"><img src="http://ardentdev.com/wp-content/uploads/2011/12/image01-300x199.jpg" alt="" title="puppy" width="300" height="199" class="aligncenter size-medium wp-image-268" /></a>
</div>
<p>
It&#8217;s exciting to buy a new puppy. You envision a blissful future with walks in the park and playing fetch at the lake. You aren&#8217;t thinking of the late night walks in the blistering cold or trips to the vet. We build software thinking of all the ecstatic users who will flock to our creation. Our euphoria causes us to minimize in our minds the pain of the support calls, the server maintenance, the bug fixes, the security patches, the Cyber Monday web site failures, and the never ending list of nice-to-have features that won&#8217;t make it into the first release.
</p>
<p>
When an enticing software project is staring at you with those big puppy dog eyes, try to remember the following points.
</p>
<h3>Puppies Need Attention</h3>
<p>
I can think of two software projects I worked on in my career that reached a stable feature set and remained in active daily use without intervention for months or years at a time. Most software needs some level of care and feeding whether it&#8217;s bug fixes or investigating run-time errors or replacing a failing hardware component or renewing a license. Anything nontrivial that you throw up on a server or give out to users is going to generate work for you in the future if people start using it.
</p>
<p>
More than a decade ago I took over a small software product. If I recall correctly, a license was $150 and an annual support contract was $80. I stopped selling licenses and support for that product 5 or 6 years ago yet 2011 was the first year I didn&#8217;t receive at least one request for help from someone.
</p>
<h3>Puppies Have Ongoing Costs</h3>
<p>
Software is never truly free of cost. Delivery of software costs something even if it&#8217;s trivial at low volume. If you host software as a service, you have server and bandwidth costs along with storage for backups, web site hosting, and domain name registration. Even some little open source utility you release on a whim requires some bandwidth for downloads. In some cases you can offload those costs to someone else (e.g., put projects on GitHub) but the costs still exist.
</p>
<p>
And remember that software requires attention. Unless you personally are doing all the work out of the goodness of your heart, someone is getting paid to pay attention to your little puppy.
</p>
<h3>Puppies Can Be Sickly</h3>
<p>
Somewhere right now someone is releasing software with bugs in it. &ldquo;Known Issues&rdquo; is a whitewash of a phrase that tries desperately to make it sound like the team behind a software release is really on top of things, but it is really an admission that a release is flawed or incomplete or imperfect by someone&#8217;s standard. Known issues lists are a well-established tradition in the ritual of releasing software and I&#8217;m OK with that as much as I cringe to ever see a Known Issues list.
</p>
<p>
The more problematic yet equally well-established tradition is releasing software rife with <em>unknown</em> issues. There are plenty of best practices for increasing your confidence in the quality of your software before releasing, but bugs still make it into software that was considered ready for prime time. People who take seemingly healthy pups home from the SPCA aren&#8217;t expecting emergency visits to the vet the next night. Or for the puppy to refuse to eat. Or for the puppy to violently attack the cat. But it happens sometimes. When you unleash your puppy unto the world, be prepared to deal with an emergency if one arises.
</p>
<h3>Puppies Can Invite Over Some Unsavoury Friends</h3>
<p>
I&#8217;ve always been a little weirded out by those little pet doors. A door that lets your pet come and go freely can just as easily let other animals come and go freely. Every piece of software you deploy is potentially a little door into your database, your network, or your file system.
</p>
<p>
Your software can be up and running for months or years and then one morning you get a frantic 5am phone call from your database administrator saying your database records are gone except for one row full of profanities.
</p>
<p>
Crap.
</p>
<p>
Before you roll out a piece of software, ask yourself what you will do if a critical security vulnerability is discovered. This is especially important if you are outsourcing development work as the original dev team members may not be readily available to address a critical issue quickly and an attack can happen anytime. You are never truly safe. It might be years before someone discovers you have a vulnerability or an operating system update might open your systems up to a zero-day exploit.
</p>
<h3>Puppies Can Grow Up To Be Big Dogs</h3>
<div style="float: left; margin-right: 10px;">
<a href="http://ardentdev.com/wp-content/uploads/2011/12/image00.jpg"><img src="http://ardentdev.com/wp-content/uploads/2011/12/image00.jpg" alt="" title="dog" width="170" height="240" class="aligncenter size-full wp-image-269" /></a>
</div>
<p>
Have you ever visited a relative with a little yappy lap dog that comes tearing down the hallway barking at you like you are evil incarnate come to enslave the household he so valiantly defends? No big deal, just a little dog. But if a 95 pound German Shepherd is running at you full tilt with a crazed look in his eye, that&#8217;s a different story. You&#8217;re going to pay close attention to his every move as your life flashes before your eyes.
</p>
<p>
When you are building software, you hopefully have a general sense of the scope of the project and the target audience. You should know within an order of magnitude how many users you will allow on the system and whether you expect the user base to stay relatively constant or grow significantly over time.
</p>
<p>
And then things change. Oprah recommends your wedding planning app. Your sales team signs its first large enterprise customer. Your DIY clothing design software is featured in a syndicated fashion column. Or user adoption grows 5 or 10 or 1000 times faster than projected because your software simply kicks butt.
</p>
<p>
Whatever the reason, if your software is successful, you will have to deal with it. And while that can be a great problem to have, dealing with fast growth and scalability can be very challenging. Suppose you started out with a little side project on a shared hosting server. Demand hits hard so you have to move to a dedicated server, then two, then three. Then demand spikes and you can&#8217;t get servers fast enough to keep up. Performance lags and key customers start calling to complain. Although you don&#8217;t have a firm SLA, big clients start asking for refunds and your project is suddenly in the red and tarnishing your reputation with your customers.
</p>
<p>
The Twitter &#8220;fail whale&#8221; is a perfect example of how painful scaling can be (<a  href="http://en.wikipedia.org/wiki/Twitter#Outages">http://en.wikipedia.org/wiki/Twitter#Outages</a>). </p>
<p>Make sure you know what you&#8217;ll do if your little puppy grows into a 300 lb Mastiff.
</p>
<h3><a href="http://translate.google.com/#la%7Cen%7Ccaveat+structor" style="text-decoration: underline;">Caveat Structor</a> (Builder Beware)</h3>
<p>
The ongoing costs and commitments associated with creating and running software are frequently overlooked or underestimated by stakeholders. As software builders, we need to consider the long term implications of our decisions to build and release a piece of software. Failure to think about the costs, commitments, and risks in advance can leave you wishing you had never decided to adopt that puppy.
</p>
<p style="font-size: 0.85em; margin-top: 20px;">
Photo credits: <a  href="http://www.flickr.com/photos/klearchos/5462179225/sizes/m/in/photostream/">klearchos</a>, <a  href="http://www.flickr.com/photos/chrisk4u/4642239663/sizes/s/in/photostream/">chrisk4u</a></p>
<p><br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/building-software-is-like-buying-a-puppy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Vitriol</title>
		<link>http://ardentdev.com/microsoft-vitriol/</link>
		<comments>http://ardentdev.com/microsoft-vitriol/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 04:00:33 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://ardentdev.com/microsoft-vitriol/</guid>
		<description><![CDATA[For much of the last decade I have received varying amounts of grief from colleagues for being so invested in Microsoft development technologies. For a professional demographic that prides itself on a mastery of logic, developer attitudes toward Microsoft can be downright bizarre. They are regularly inconsistent and frequently irrational. Developers can be almost religiously [...]]]></description>
			<content:encoded><![CDATA[<p>For much of the last decade I have received varying amounts of grief from colleagues for being so invested in Microsoft development technologies. For a professional demographic that prides itself on a mastery of logic, developer attitudes toward Microsoft can be downright bizarre. They are regularly inconsistent and frequently irrational. Developers can be almost religiously pitted against Microsoft technologies with little grounding for their vitriol.</p>
<p>I have always tried to be pragmatic with technology. I have lived on DOS, Windows, a few flavours of UNIX, Linux, MacOS, and OS X. I have coded in C, C++, Java, VB3-6, VB.NET, C#, Perl, PHP, Ruby, Python, various SQL variants, JavaScript, and a few other languages. So I feel like I have a fairly balanced perspective from at least the last 15 years of mainstream OSes and languages (except for general purpose functional languages). Every platform and development stack has its share of warts. No platform and/or language is inherently nor universally superior to everything else. Certainly every mainstream platform has merit. Even PHP, I must begrudgingly admit, has a long list of positive qualities.</p>
<p>I will admit that at times I have jumped to the Microsoft stack for a project without giving serious thought to alternatives for the sake of expediency or practicality. If you have a Windows Server running IIS and SQL Server on hand already, it just makes more sense to build an ASP.NET app than a LAMP app. If you want to build a large natural language processing cluster, it probably makes more sense to use C++ or Java on Linux boxes. If you want to write a native iOS app, use Objective-C.</p>
<p>What repeatedly surprises me is how quickly developers will embrace an open source project with barely a thought to whether it&#8217;s been thoroughly tested, the license attached to it, or the future plans of the project founder/coordinator. But anything that comes from Microsoft is dismissed out of hand or viewed with a great degree of skepticism regardless of the substantial resources Microsoft has thrown into product planning, development, and testing.</p>
<p>The anti ____, pro ____, no ____, only ____ mentality has become exceedingly tiresome. Imagine how much more collaboration we would foster if we respected the preferences and choices of our colleagues instead of treating them like misinformed degenerates who don&#8217;t deserve our full professional respect. It is time we get down off our high horses, bandwagons, and soap boxes to interact with our peers in the trenches where good work is getting done with many different tools and approaches.</p>
<h3>Microsoft Values</h3>
<p>In response to this, my friend Dirk at IBM says his problem is primarily with the values represented by Microsoft as a software company and &quot;behaviour that go[es] beyond the &#8216;they need to please their shareholders&#8217; arguments people often use to defend corporate ethical lapses.&quot; And indeed he brought up some murky situations including Netscape, WordPerfect, the SCO trial, and the Microsoft JVM.</p>
<p>I do agree that Microsoft has had its share of corporate ethical lapses, although my original email to the Ardent Dev list was about developer vitriol toward the Microsoft technology stack rather than the behaviour of the corporation. To avoid technologies based on questionable corporate behaviour would be to discard most mainstream technologies including those from Microsoft, Apple, Google, IBM, Adobe, Oracle, and other large software companies. But Dirk had an important follow-up:</p>
<blockquote><p><em>I don&#8217;t think MS is unique in getting crapped on by sectors of the development community. I see plenty of stuff that&#8217;s anti-Apple (platform lock-in &#8211; flash), anti-google (privacy), anti-IBM (patent whoring and before the PC era &#8211; anti-competitive behaviour), etc, etc.. MS has been a focal point of a lot of hate &#8212; more than the other companies you listed for sure &#8212; but I don&#8217;t think it&#8217;s irrational. I think it&#8217;s very good for developers to be thinking critically about the stakeholders behind the technologies they&#8217;re forced to use. I don&#8217;t think it makes much of a difference in investment decisions, but maybe it provokes discussion internally in the companies being criticized.</em></p>
</blockquote>
<p>If a developer wants to criticize or boycott Microsoft for ethical reasons, I can respect that. What I cannot respect are the asinine statements like &quot;IIS is garbage&quot; or &quot;C# and .NET suck.&quot; Those kinds of statements alienate developers from each other instead of fostering positive interactions and collaboration.</p>
<h3>On a More Personal Note&#8230;</h3>
<p>The past year or so has seen a steady decline in my use of the Microsoft development stack. The past 12 months has been more Python, PHP, and Java. I&#8217;ve also been using MongoDB and MySQL.</p>
<p>I was not renewed as a Microsoft MVP for 2011 because I was no longer actively participating in public discussions around .NET development. I also resigned from the Microsoft Regional Director program and from the INETA Membership Mentor program. Those decisions have a lot to do with some changes this past year in my professional trajectory and not any disenchantment with the Microsoft platform. I will share a few details if you&#8217;re interested (I won&#8217;t be offended if you stop reading here since the rest is pretty self-focused).</p>
<p>In 2002 I dropped out of graduate school and started a software company. The idea was to bootstrap product development with consulting revenue. But as has happened to countless other bootstrapped companies, we got addicted to the consulting revenue stream and the product development side of the shop floundered. We did release a product and it still has a loyal customer base but it didn&#8217;t grow the way we hoped.</p>
<p>Fast forward to the spring of 2010. I was still doing consulting work and managing the same software product. After 8 years I was tired of the recurring cycle of consulting engagements and too many nickel-and-diming clients. I was ready for a change. Through a fortuitously timed conversation, I found myself agreeing to become an employee of Radian6 and working on a technology stack other than the Microsoft platform that had been my bread and butter for 80% of a decade. (I also sold my house and moved my family to a new city so it was also a significant life change.)</p>
<p>I joined Radian6 in large part because of the cool web-scale challenges it tackles. Out here on the east coast of Canada there aren&#8217;t too many choices if you want to work on world-class web-scale technology. And conveniently I had a few friends and acquaintances already working there.</p>
<p>If the name Radian6 sounds familiar to you, it might be because <a href="http://salesforce.com/">salesforce.com</a> just <a href="http://techcrunch.com/2011/03/30/salesforce-buys-social-media-monitoring-company-radian6-for-326-million/">acquired the company</a> for several hundred million dollars.</p>
<p>So why am I posting this here? Well, in part because I want to share my change of professional trajectory with you. But mostly I want to declare a few things:</p>
<ol>
<li>Ardent Dev continues to be my meager catalyst for conversation with fellow developers, architects, and IT professionals. The views expressed are mine alone. This entire experiment / evolution of blogging will remain fully independent. </li>
<li>I won&#8217;t shill for Radian6 or <a href="http://salesforce.com/">salesforce.com</a> here. If there is something amazing happening for developers at large, I may share it at my personal discretion but that&#8217;s it. </li>
<li>My technology portfolio has expanded and while I continue to be a big fan of the Microsoft development stack, I spend far less time with it these days. I am more excited about the coolness of the technology I am building than the coolness of the technology I build it with. </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/microsoft-vitriol/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>When is software done?</title>
		<link>http://ardentdev.com/when-is-software-done/</link>
		<comments>http://ardentdev.com/when-is-software-done/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 03:03:25 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/?p=259</guid>
		<description><![CDATA[Are you done yet? Such a simple question&#8230; Earlier in my career I worked on a project that went into production with what I would consider a less than optimal set of internal admin tools. We deployed it and handed it over to the client&#8217;s internal team where it stayed live but untouched. After a [...]]]></description>
			<content:encoded><![CDATA[<p>Are you done yet?  Such a simple question&#8230;</p>
<p>Earlier in my career I worked on a project that went into production with what I would consider a less than optimal set of internal admin tools.  We deployed it and handed it over to the client&#8217;s internal team where it stayed live but untouched.  After a year in prod, I got an email from the client asking how to cancel a subscription.  Apparently someone had signed up and wanted out but was unwilling or unable to use the self-serve features.</p>
<p>The building of software is a funny thing.  You can be busy in most professions. You can have more work to do than you can possibly get done.  You can have unrealistic deadlines. But you can achieve an outcome, mark it complete, and move on.  Software is strange because there are different definitions of done and even when you think it&#8217;s done, it probably isn&#8217;t.  Software components run for months or years with bugs, inconsistencies, performance problems, and security vulnerabilities.</p>
<p>Software developers are accustomed to being asked &#8220;when will you be done?&#8221;  But the question presupposes a shared understanding of what &#8220;done&#8221; means.  Different definitions of done can lead stakeholders to be disappointed in the progress and predictability of software teams.  Managers recently promoted from the technical ranks may not have learned to factor in time for tasks beyond the initial code-and-test cycles.</p>
<p>We&#8217;ve all seen developers declare a piece of work complete because it compiles or because it ran once with some sample data without crashing.  Computer science courses even encourage that behaviour with a constant barrage of coding assignments that are immediately discarded.  Eventually professional developers learn the difference between code that runs and code that&#8217;s done.</p>
<p>Let&#8217;s explode that word done into some more granular stages:</p>
<p>1. The code is written</p>
<p>2. The code is tested</p>
<p>3. The functionality is documented</p>
<p>4. The code is secure, scalable, fault tolerant, and reliable</p>
<p>5. The code is ready to deploy</p>
<p>6. The code is in production</p>
<p>7. The code is no longer being updated (enhancements and/or bug fixes)</p>
<p>8. The code is no longer supported</p>
<p>9. The code is no longer being used</p>
<p>So, are you done yet?</p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/when-is-software-done/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Shameful Legacy of 20th Century Software</title>
		<link>http://ardentdev.com/the-shameful-legacy-of-20th-century-software/</link>
		<comments>http://ardentdev.com/the-shameful-legacy-of-20th-century-software/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 11:30:00 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/the-shameful-legacy-of-20th-century-software/</guid>
		<description><![CDATA[Last week I got to spend an evening reinstalling my wife&#8217;s laptop because she picked up some malware.&#160; She received an email from a friend with a link to a YouTube video that prompted her to install a new codec. Except the codec wasn&#8217;t really a codec. The link wasn&#8217;t really to YouTube. The email [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I got to spend an evening reinstalling my wife&#8217;s laptop because she picked up some malware.&#160; She received an email from a friend with a link to a YouTube video that prompted her to install a new codec.</p>
<p>Except the codec wasn&#8217;t really a codec.</p>
<p>The link wasn&#8217;t really to YouTube.</p>
<p>The email wasn&#8217;t really from her friend.</p>
<p>Here we are in 2010, 65 years after the advent of &quot;program instructions as data&quot; (von Neumann architecture) and the brilliant innovations that propelled computing forward now haunt us.&#160; The power and complexity of computing is amplified by the connectivity of the Internet, creating an ecosystem ripe for exploitation through clever social engineering combined with some technical trickery.</p>
<p>And it&#8217;s not fair.&#160; It&#8217;s not fair to the users who suffer, who lose data, whose systems are held hostage.&#160; It&#8217;s not fair and the blame for calamities cannot be laid at the feet of careless or naive users.&#160; Daily computing tasks should not require constant vigilance, let alone deep technical knowledge.</p>
<p>Many of us schooled in the last century hold on to notions of software that are simply unsafe for many of our users.&#160; We insist on building software that must run in environments that are not inherently safe.&#160; But there are trends afoot: the closed ecosystem of the iPhone and the iPad, the coming Windows Phone 7 closed ecosystem, and the increasing ubiquity of Internet applications.&#160; Slowly but surely we are moving toward paradigms in which the average user will have much less to worry about because software is vetted and sandboxed.</p>
<p>As a developer I don&#8217;t want to be sandboxed in every situation.&#160; I want to be able to make educated decisions about software and run it on my devices, but the default should be safe and secure.&#160; It&#8217;s shameful that things are still so treacherous.</p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/the-shameful-legacy-of-20th-century-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Dirty Secret of Computer Science</title>
		<link>http://ardentdev.com/the-dirty-secret-of-computer-science/</link>
		<comments>http://ardentdev.com/the-dirty-secret-of-computer-science/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 13:37:25 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/the-dirty-secret-of-computer-science/</guid>
		<description><![CDATA[The term &#34;computer science&#34; is a laughable misnomer.&#160; Outside of universities and operating system development, there isn&#8217;t a lot of computer science involved in the daily grind of computer programming.&#160; There&#8217;s some, of course, but not enough that I would call myself a computer scientist.&#160; Not by a long shot. I&#8217;ve long thought that Donald [...]]]></description>
			<content:encoded><![CDATA[<p>The term &quot;computer science&quot; is a laughable misnomer.&#160; Outside of universities and operating system development, there isn&#8217;t a lot of computer science involved in the daily grind of computer programming.&#160; There&#8217;s some, of course, but not enough that I would call myself a computer scientist.&#160; Not by a long shot.</p>
<p>I&#8217;ve long thought that Donald Knuth had it right when he titled his books <a href="http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419" target="_blank">The Art of Computer Programming</a>.</p>
<p>Creating software bears some resemblance to art as in the work of an artist.&#160; It bears an even stronger resemblance to art as in the work of an artisan.&#160; Software artisans use the tools and techniques of modern software development to create the wide variety of software that entertains us and runs our businesses.</p>
<p>Eric Sink had it right when he put <a href="http://www.ericsink.com/about_author.html" target="_blank">Software Craftsman on his business card</a>.</p>
<p>Sadly some of the most enthusiastic artisans in our field are disregarded out of hand as geeks and nerds when in fact they have creative and curious minds more commonly associated with artists like poets and sculptors.</p>
<p>I love the way Kate describes the art of software:</p>
<blockquote><p>The number one response by my aunts/uncles/friends parents etc was “you’re programming? But you were always so creative as a child…” – people need to be told that this is a very creative field. I make business solutions out of ones and zeroes. I change people’s working lives, the entire 8 hours they spend at the office every working day, forever &#8211; using nothing but the skin on my fingertips.</p>
<p align="right">- <a href="http://www.gregcons.com/kateblog/" target="_blank">Kate Gregory</a></p>
</blockquote>
<p>I worry that software development as a discipline is stunted by its false reputation of being science-y when in fact it appeals to people who are creative and innovative.&#160; I&#8217;ve noticed that a disproportionate number of my colleagues in software development are musicians and/or fans or even creators of comic books, science fiction, fantasy fiction, and role-playing games.&#160; Those types of pastimes are qualitatively different than watching reality TV or playing sports. *</p>
<p>The dirty secret of comp sci is that most us who trained as &quot;computer scientists&quot; do precious little that could ever be considered true computer science and certainly not science at all by many definitions of science.&#160; We are artisans abiding by the platforms and boundaries defined by computer science to create truly amazing and useful things.&#160; We are the glassmakers, sculptors, and blacksmiths of our time.</p>
<p>&#8212;-</p>
<p>Recommended reading: <a href="http://www.paulgraham.com/knuth.html" target="_blank">Knuth: Computer Programming as an Art</a></p>
<p><em><font size="2">* Relax, I&#8217;m generalizing. Lots of programmers watch reality TV (though I judge them for that) and/or play sports.&#160; Lots of programmers are not musicians (like, say, me). The set of all RPG players (A) overlaps the set of all computer programmers (B).&#160; </font></em><a href="http://en.wikipedia.org/wiki/Naive_set_theory#Subsets" target="_blank"><em><font size="2">B is not a subset of A</font></em></a><em><font size="2">.</font></em></p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/the-dirty-secret-of-computer-science/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Your Moral Obligation to Future Coder</title>
		<link>http://ardentdev.com/your-moral-obligation-to-future-coder/</link>
		<comments>http://ardentdev.com/your-moral-obligation-to-future-coder/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 22:51:40 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/your-moral-obligation-to-future-coder/</guid>
		<description><![CDATA[Think back to some nontrivial piece of code you wrote.&#160; Now mentally crumple it up into a ball, douse it with gasoline, and light that sucker on fire.&#160; That is what some future coder is going to want to do to your code. (Take a moment to let it sink in that Future Coder might [...]]]></description>
			<content:encoded><![CDATA[<p>Think back to some nontrivial piece of code you wrote.&#160; Now mentally crumple it up into a ball, douse it with gasoline, and light that sucker on fire.&#160; That is what some future coder is going to want to do to your code.</p>
<p>(Take a moment to let it sink in that Future Coder might very well be Future You.)</p>
<p>OK, take a deep breath and exhale slowly.&#160; Future Coder can&#8217;t hurt you unless your code is still in use after someone invents time travel.&#160; And if Future Coder comes back to stop you from writing that code, Future Coder won&#8217;t have a job fixing your code in the future&#8230; (ah, the <a href="http://www.nsi-canada.ca/the_grandfather_paradox.aspx" target="_blank">paradoxes of time travel</a>).</p>
<p>Code has a past <strong><em>and</em></strong> a future.&#160; When you inherit code or parachute into a project, you must embrace the legacy of the code.&#160; Before you mentally skewer the coders who came before you, remember that you probably lack insight into the context in which previous coding decisions were made.&#160; It is, of course, quite possible that the programmer before you was a complete idiot.&#160; More likely, though, that programmer was working under some constraints that drove him/her toward the solution you now curse.</p>
<p>Although it is conceivable that you are the last ever maintainer of said code, you will likely pass on the responsibility to someone else eventually.&#160; You have a moral obligation to your fellow developers to leave behind something maintainable.&#160; Consistency and predictability in your code is a major part of maintainability.&#160; That means if 30 data entry forms use strongly typed DataSet objects but you prefer NHibernate, you write the 31st data entry form using a strongly typed DataSet.&#160; It is irresponsible to create Frankencode systems.&#160; Your personal whims do not trump your responsibility to your fellow developer.</p>
<p>Maintenance developers do not get enough credit.&#160; It is frustrating and often thankless work trying to wrap your brain around systems that have been tweaked by countless programmers to adapt to changing business needs.</p>
<p>The next time you curse someone else&#8217;s code, remember that somewhere out there another developer is cursing something you once coded.</p>
<p>&lt;endRant /&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/your-moral-obligation-to-future-coder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Yuck, I Got Data on my Hands</title>
		<link>http://ardentdev.com/yuck-i-got-data-on-my-hands/</link>
		<comments>http://ardentdev.com/yuck-i-got-data-on-my-hands/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 12:45:00 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/yuck-i-got-data-on-my-hands/</guid>
		<description><![CDATA[Once upon a time I wrote a computer program that did not require data.&#160; It was called helloworld.exe and it was awesome.&#160; It was also a wee bit useless.&#160; The essence of useful software is taking input, doing something with it, and spitting something out. There is lots of data out there.&#160; My first professional [...]]]></description>
			<content:encoded><![CDATA[<p>Once upon a time I wrote a computer program that did not require data.&#160; It was called helloworld.exe and it was awesome.&#160; It was also a wee bit useless.&#160; The essence of useful software is taking input, doing something with it, and spitting something out.</p>
<p>There is lots of data out there.&#160; My first professional gig after university was consuming text files dumped out by a COBOL app.&#160; (They were delicious.)&#160; You can parse XML, munge HTML, manipulate images, or decipher networking protocols.&#160; But despite the variety of possible data sources, we end up sticking a lot of our data in relational database systems.</p>
<p>And then we write a lot of code for moving data in and out of the database.&#160; And <em>then</em> we complain about how much data access code we have to write and maintain.&#160; In <a href="http://ardentdev.com/survival-skills-for-developers/" target="_blank">Survival Skills for Developers</a>, the first item for your basic survival pack is a data access toolkit (homegrown or open source or commercial).&#160; The reason is not to be trendy or to sound up-to-date at developer conferences.&#160; The point is to make better use of your time by relying on frameworks and libraries to do some of the heavy lifting for you.</p>
<h3>Do Not Be Afraid</h3>
<p>In the .NET programming world, ADO.NET is the underlying data access technology.&#160; Many data access patterns and frameworks have been built on top of ADO.NET and yet scores of developers still write ADO.NET data access code the way they learned nearly a decade ago.&#160; What a waste.</p>
<p>There is no reason to be afraid of modern data access techniques.&#160; You do not have to rewrite your existing codebase.&#160; .NET programmers can still use classic ADO.NET when it&#8217;s expedient.&#160; You can mix and match tools and frameworks.&#160; I have a small project that I&#8217;m transitioning from SubSonic (used during prototyping) to NHibernate.&#160; Currently the code features a mix of SubSonic and NHibernate as I transition and it works just fine.</p>
<p>Frankly I think developers who refuse to explore alternatives are being irresponsible.&#160; I&#8217;m not holding up any specific frameworks, toolkits, or approaches as best.&#160; I&#8217;m simply saying that a failure to be well informed about options is intellectual laziness and we cheat our employers, clients, and stakeholders when we insist on writing everything by hand every time we need a record from the database.&#160; We would question the judgment of a house builder relying on all manual tools, yet we mindlessly churn out the same data access code over and over and over again.</p>
<h3>Stop Freaking Out About Inconsequential Performance</h3>
<p>A mental roadblock for many folks is a worry about performance going down the toilet by relying on something like an ORM (object-relational mapping) tool.&#160; If there is one serious mental shortcoming amongst programmers, it is our obsessive need to prematurely optimize everything even when there are ample computing resources to deal with our less-than-completely-efficient code.</p>
<p>Stop freaking out.</p>
<p>The JVM and the .NET runtime have proven that letting the computer handle some tedious work is totally worth it even if it&#8217;s less efficient than what you could (theoretically) write by hand.</p>
<p>CPU time is cheap.&#160; Programmer time ain&#8217;t.&#160; Spend time optimizing code only when it becomes necessary.</p>
<h3>Do You Really Need a Database?</h3>
<p>Simple lists of objects can be similar to tables of records.&#160; The relationships between objects can be similar to the relationships between tables.&#160; Nevertheless, there is a mismatch between object oriented programming and relational data (perhaps you&#8217;ve heard of the <strong><em>object-relational impedance mismatch</em></strong>).&#160; Depending on your situation, you might not really need a relational database.&#160; Check out some of the technologies in the <a href="http://en.wikipedia.org/wiki/NoSQL" target="_blank">NoSQL</a> side of the world for alternatives to relational database storage engines.</p>
<h3>What&#8217;s Available?</h3>
<p>There are a lot of options out there for working with relational data.&#160; Check out <a href="http://devshaped.com/2009/05/all-i-wanted-was-my-data/" target="_blank">Barry Gervin&#8217;s article <em><strong>All I Wanted was My Data</strong></em></a> for some options.</p>
<p>What are your suggestions?&#160; Drop them in the comment box.</p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/yuck-i-got-data-on-my-hands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain Distortion</title>
		<link>http://ardentdev.com/domain-distortion/</link>
		<comments>http://ardentdev.com/domain-distortion/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 12:45:00 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/domain-distortion/</guid>
		<description><![CDATA[Remember the game Telephone?&#160; You whisper something in your neighbour&#8217;s ear, he whispers to his neighbour, she whispers to her neighbour, and so on all the way down the line.&#160; The last person announces the message she heard and everyone laughs when they discover how mangled the final message is from the original. An eerily [...]]]></description>
			<content:encoded><![CDATA[<p><img style="border-right-width: 0px; margin: 0px 11px 11px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="50216300_6c80682292_m" border="0" alt="50216300_6c80682292_m" align="left" src="http://ardentdev.com/wp-content/uploads/2010/02/50216300_6c80682292_m.jpg" width="184" height="244" /> Remember the game Telephone?&#160; You whisper something in your neighbour&#8217;s ear, he whispers to his neighbour, she whispers to her neighbour, and so on all the way down the line.&#160; The last person announces the message she heard and everyone laughs when they discover how mangled the final message is from the original.</p>
<p>An eerily similar phenomenon occurs in software development as requirements flow from domain experts to business analysts to system designers (architects) to developers.&#160; Each communication channel in the process introduces new opportunities for information to be distorted.</p>
<p>I was digging through some old papers this week and found a sketch I made nearly a decade ago on the back of a Dilbert comic.&#160; I&#8217;ve prettied it up here as a reminder to all of us to always be watchful for potential distortions as requirements flow from users and stakeholders to the people who build and test the software:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="distortions" border="0" alt="distortions" src="http://ardentdev.com/wp-content/uploads/2010/02/distortions.png" width="462" height="381" /></p>
<p>The importance of good communication in the software development process cannot be overstated.</p>
<p>If you are passionate about building software and want to thrive in your career, hone your communication skills.&#160; Ask questions.&#160; Write things down.&#160; Repeat back what you&#8217;ve heard to validate it.&#160; Ask more questions if things don&#8217;t make sense.&#160; Communicate, communicate, communicate.</p>
<p>In 2009 I had lunch with an executive with a lot of experience managing developers.&#160; When I asked for his biggest piece of advice for professional developers outside of learning technology, his answer was to <strong>learn to communicate effectively</strong>.</p>
<p>&#160;</p>
<p><em><font size="1">(Image credits: </font></em><a href="http://www.flickr.com/photos/malias/50216300/" target="_blank"><em><font size="1">malias</font></em></a>, <a href="http://www.freedigitalphotos.net"><em><font size="1">freedigitalphotos.net</font></em></a><em><font size="1">, </font></em><a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=659"><em><font size="1">Salvatore Vuono</font></em></a><em><font size="1">, </font></em><a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=851"><em><font size="1">Danilo Rizzuti</font></em></a><em><font size="1">, </font></em><a href="http://www.freedigitalphotos.net/images/view_photog.php?photogid=172"><em><font size="1">Maggie Smith</font></em></a><em><font size="1">)</font></em></p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/domain-distortion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Survival Skills for Developers</title>
		<link>http://ardentdev.com/survival-skills-for-developers/</link>
		<comments>http://ardentdev.com/survival-skills-for-developers/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 12:15:00 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/survival-skills-for-developers/</guid>
		<description><![CDATA[Let&#8217;s suspend reality for a moment and pretend you&#8217;re heading out into the woods this weekend. Set aside the fact that you are a software developer and have no business tromping around out in the wilderness.&#160; You&#8217;re going to want to take along a few basics:&#160; maybe some matches, a tent or shelter of some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ardentdev.com/wp-content/uploads/2010/02/3822866409_c113336eb3_m.jpg" rel="lightbox"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 11px 11px; display: inline; border-top: 0px; border-right: 0px" title="3822866409_c113336eb3_m" border="0" alt="3822866409_c113336eb3_m" align="right" src="http://ardentdev.com/wp-content/uploads/2010/02/3822866409_c113336eb3_m_thumb.jpg" width="201" height="240" /></a> Let&#8217;s suspend reality for a moment and pretend you&#8217;re heading out into the woods this weekend. Set aside the fact that you are a software developer and have no business tromping around out in the wilderness.&#160; You&#8217;re going to want to take along a few basics:&#160; maybe some matches, a tent or shelter of some sort, a bit of food, and some dry clothes.&#160; To survive you need the right tools / supplies <strong><em>and</em></strong> the skills to use them.</p>
<p>(I bet you see where I&#8217;m going with this.)</p>
<p>Back at the office, where your mouse and keyboard fret over your safe return, there awaits an entirely different survival scenario:</p>
<p align="center"><em>Survivor: Cubicle.&#160; Outcode.&#160; Outbuild.&#160; Outlast.</em></p>
<p>Surviving as a software developer is more than stringing together some lines of code that read and write from a database.&#160; Sure, those are basic skills.&#160; To survive in the woods you obviously need to walk and breathe, but you also need to start a fire and build a shelter.</p>
<p>The following 8 items form a basic survival pack that can get you through most modern software development forests:</p>
<h3>1. Data access toolkit (homegrown or open source or commercial) </h3>
<p>If reading and writing from a database is a basic skill like walking, then a good data access framework is your walking stick.&#160; I&#8217;m a .NET guy so I&#8217;ve worked with NHibernate, SubSonic, Entity Framework, and a couple homegrown solutions.&#160; An ORM tool is not necessary.&#160; Use the core ADO.NET classes directly if that works for you.&#160; What you absolutely should avoid is writing all your data access code from scratch every time you need to work with data.</p>
<p>Personally I recommend you learn the basics of several modern data access toolkits and learn about some of the code generation solutions available on the market so you can make informed choices in your projects.</p>
<h3>2. Regex</h3>
<p>OK, let&#8217;s crank the controversy meter up one notch.&#160; Regular expressions are like waterproof matches.&#160; Sure you don&#8217;t need them, but they can make things a heck of a lot easier in some circumstances.&#160; When it comes to text processing, there are lots of approaches that can work, but a regular expression can turn an arduous coding exercise into a single line of code.</p>
<p>If you use Visual Studio, I highly recommend you explore the regular expression syntax available for the Find dialog box.&#160; It is amazingly useful once you learn the wonky syntax.</p>
<h3>3. Unit testing</h3>
<p>Let&#8217;s try one more notch higher on the controversy meter.&#160; You must be able to write and execute unit tests for the language and platform you are developing on.&#160; Unit testing is like a compass.&#160; You don&#8217;t always need it and you won&#8217;t need it constantly, but it can be priceless in many situations.</p>
<p>Unit testing has its fair share of zealous proponents and vehement haters.&#160; I like to think I have a nice moderate middle-of-the-road perspective.&#160; Unit testing is incredibly important in some circumstances.&#160; I am not an adherent to the Church of Test Driven Development.&#160; I do not usually attempt to achieve complete code coverage in unit tests.&#160; But without the ability to write and execute unit tests, you risk wasting precious time walking in circles as you test the same things over and over again manually.</p>
<h3>4. Basic printing, reporting, and charting</h3>
<p>Not every system has to print or produce charts and reports, but lots do.&#160; Even web site developers have to consider how their pages will look when printed and perhaps generate PDF documents for printing.&#160; Regardless of whether you write desktop apps, web apps, or middleware, you should be able to print and generate some basic reports.</p>
<p>If you are a .NET developer like me, check out some of the vendor solutions like Telerik Reporting, ActiveReports, LogiReport, and XtraReports.</p>
<p>Printing, reporting, and charting are about user needs.&#160; Users need to print invoices and put charts of projected vs. actuals into the shareholder report.&#160; Sometimes you need paper to get your business done.</p>
<h3>5. Internet: sending email and downloading HTTP content</h3>
<p>Back in the last century, we invented this thing called the Internet.&#160; It&#8217;s nice.&#160; It lets software programs on different systems communicate with each other.&#160; And the Internet has this way of creating new opportunities so you never know when your software will have to become Internet-aware.</p>
<p>Sending email and accessing HTTP content are pretty easy tasks to accomplish in most languages given the plethora of libraries available (e.g., classes built into the .NET framework).&#160; And even if your current coding project does not require Internet access, you might see new opportunities once you&#8217;ve learned how easy it is.&#160; For example, you might decide to automatically email crash reports to your help desk.</p>
<p>If you pass other hikers in the woods, you might not need to talk to them, but then again, maybe you will.&#160; Better to be prepared.</p>
<h3>6. HTML and basic CSS</h3>
<p>Regardless of the type of software you build, I firmly believe you should know a little bit about HTML, XHTML, and CSS (and some XML would be good, too).&#160; If you don&#8217;t build web applications, you don&#8217;t need to master these technologies, but a grasp on the basics will come in handy.&#160; Examples:</p>
<ul>
<li>creating HTML formatted emails to send to users</li>
<li>updating a development team web site</li>
<li>customizing a product wiki</li>
<li>writing end user documentation</li>
<li>updating the company web site (happens in small companies)</li>
<li>setting up a blog for the marketing department</li>
</ul>
<p>(X)HTML + CSS is the lingua franca of the web so just learn it already – no fancy survival metaphor required.</p>
<h3>7. Scripting or command line development</h3>
<p>Many software components need to work with standard input / output streams or simply do not require a graphical user interface.&#160; If you only know how to build Windows or web applications, you are severely limiting your ability to efficiently handle the many small tasks that often accompanying development work like parsing a file or deploying software updates.</p>
<p>If you work in Windows, learn to use the command line along with some basic VBScript and batch (.bat) file &quot;programming.&quot;</p>
<p>If you work in a Linux / UNIX environment, you probably already know the things you need to learn.&#160; In case you don&#8217;t, I suggest digging into some shell scripting, sed, awk, and grep after you&#8217;ve mastered the command line fundamentals.</p>
<p>If you work in an OS X environment, you just need Photoshop.&#160; No, I&#8217;m kidding.&#160; Learn the UNIX utilities.</p>
<p>Decent command line and scripting skills are your <a href="http://en.wikipedia.org/wiki/Ferrocerium" target="_blank">ferrocerium</a> – more hardcore than a match and much more durable.</p>
<h3>8. Services, daemons, and cron</h3>
<p>Sometimes software just needs to run on its own.&#160; If you&#8217;re a Windows developer, learn how to build a Windows Service and how to run programs with the Task Scheduler.&#160; If you&#8217;re in a Linux or UNIX environment, learn how to write a daemon and schedule cron jobs.&#160; Even if you don&#8217;t specifically need a Windows Service or a daemon process in the foreseeable future, understanding the concepts will make you a better programmer.&#160; Unlike desktop apps that can be easily restarted or web apps in which code executes in short bursts, daemons and services are long-running processes that require careful creation.</p>
<p>Thinking about responsible resource management in a long-running process will make you a better programmer, just like building a campfire in the wilderness from collected wood will make you that much better at building your next campground sing-along-and-make-some-s&#8217;mores campfire.</p>
<p>Mmmm&#8230;&#160; s&#8217;mores&#8230;</p>
<h3>Let the Comments Flow</h3>
<p>Agree?&#160; Disagree?&#160; Think I missed something?&#160; Leave a comment and let&#8217;s discuss.</p>
<p>&#160;</p>
<p><em><font size="1">(photo credits: </font></em><a href="http://www.flickr.com/photos/72213316@N00/3822866409/" target="_blank"><em><font size="1">Alaskan Dude</font></em></a><em><font size="1">)</font></em></p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/survival-skills-for-developers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Blogging Refocus and Page Size</title>
		<link>http://ardentdev.com/blogging-refocus-and-page-size/</link>
		<comments>http://ardentdev.com/blogging-refocus-and-page-size/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 11:00:00 +0000</pubDate>
		<dc:creator>derek</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://ardentdev.com/blogging-refocus-and-page-size/</guid>
		<description><![CDATA[As part of my planning for 2010, I decided to write new vision statements for some of my web sites and put myself back on a content creation schedule. This site (ardentdev.com) will now be updated every Wednesday, so stay tuned via the RSS feed or subscribe by email. New Design I decided to simplify [...]]]></description>
			<content:encoded><![CDATA[<p>As part of my planning for 2010, I decided to write new vision statements for some of my web sites and put myself back on a content creation schedule.</p>
<p>This site (ardentdev.com) will now be updated every Wednesday, so stay tuned via the RSS feed or <a title="Subscribe to Ardent Dev Blog by Email" href="http://feedburner.google.com/fb/a/mailverify?uri=ArdentBlog" rel="nofollow" target="_blank">subscribe by email</a>.</p>
<h3>New Design</h3>
<p>I decided to simplify the design, opting for a clean white background, more whitespace, and less colour.&#160; Hope you find it easier to read.</p>
<p><a href="http://ardentdev.com/wp-content/uploads/2010/02/ardent2010.jpg" rel="lightbox"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ardent2010" border="0" alt="ardent2010" src="http://ardentdev.com/wp-content/uploads/2010/02/ardent2010_thumb.jpg" width="600" height="277" /></a> </p>
<h3>Page Size Optimization</h3>
<p>One of my goals in redesigning the site was to reduce the page size a bit.&#160; I like to include images in my posts so going overboard on optimization wasn&#8217;t going to make total load time much better, but small improvements are always welcome.</p>
<h3>Thanks, YSlow</h3>
<p>To measure my optimization progress, I used <a href="http://developer.yahoo.com/yslow/" rel="nofollow" target="_blank">YSlow</a>.&#160; YSlow is a Firefox add-on that integrates with Firebug.&#160; <a href="http://getfirebug.com/" rel="nofollow" target="_blank">Firebug</a> is a web development add-on for Firefox.&#160; I highly recommend you hook yourself up with the <em>Firefox + Firebug + YSlow triad of awesome</em> if you do any web development.</p>
<p>My quest for page size reduction began with cleaning out the old WordPress theme.&#160; For example, by removing Recent Posts and Recent Comments from the footer, I reduced the amount of HTML and gained the happy side effect of reducing the number of database hits required to build a page.</p>
<p>ArdentDev.com serves its HTML content compressed.&#160; At the time of the design switch, the old theme was sending down 13.7K of compressed HTML for the home page.&#160; The theme changes reduced that to 12.4K.&#160; Dropping the number of posts shown on the home page from 10 to 5 brought things down to 7.7K.&#160; That&#8217;s <strong>6K less</strong> than the original (not including images from posts no longer visible on the home page).</p>
<p>I did a clean up of the CSS files for the site as well.&#160; The site has a CSS file for web browsers and a CSS file for printing.&#160; With some editing and some whitespace removal, the CSS files went from 4.6K down to 3.2K.&#160; It was not a super thorough scrub of the CSS, but I <strong>trimmed another 1.4K</strong>.</p>
<p>The previous theme referenced nine images via the CSS file.&#160; I dumped all those extraneous little images, which knocked&#160; 29.8K off the page size.&#160; I then introduced a new logo that added back 2K.&#160; That left a <strong>27.8K reduction</strong>, not to mention 8 fewer HTTP requests.</p>
<p>I also dropped a banner ad that <strong>removed 0.4K</strong> of JavaScript and an additional HTTP request (plus another subsequent HTTP request to download the ad itself).</p>
<h3>Net Gain (Well, Net Loss <em>Really</em>…)</h3>
<p><strong>The total reduction in page size came out to 35.6K</strong> as well as 9 fewer HTTP requests (not counting the request for the banner ad).&#160; For a broadband Internet user, the optimizations should make the home page load 1/10 to 1/4 of a second faster than before.&#160; Not a massive savings but a rewarding exercise as I searched for ways to reduce the bulk of the home page.</p>
<p>Everyone&#8217;s mileage will vary but please leave a comment about your own page optimization experiences.</p>
<h3>Previous YSlow Stats</h3>
<p><a href="http://ardentdev.com/wp-content/uploads/2010/02/yslowprev.jpg" rel="lightbox"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="yslow-prev" border="0" alt="yslow-prev" src="http://ardentdev.com/wp-content/uploads/2010/02/yslowprev_thumb.jpg" width="435" height="208" /></a>&#160; </p>
<h3>New YSlow Stats</h3>
<p><a href="http://ardentdev.com/wp-content/uploads/2010/02/yslownewest.jpg" rel="lightbox"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="yslow-newest" border="0" alt="yslow-newest" src="http://ardentdev.com/wp-content/uploads/2010/02/yslownewest_thumb.jpg" width="433" height="210" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ardentdev.com/blogging-refocus-and-page-size/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

