<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Mark Hoffman's Blog</title>
	<atom:link href="http://ardev.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ardev.wordpress.com</link>
	<description>Thoughts from some guy building a great software company</description>
	<lastBuildDate>Thu, 26 Aug 2010 02:08:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ardev.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Mark Hoffman's Blog</title>
		<link>http://ardev.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ardev.wordpress.com/osd.xml" title="Mark Hoffman&#039;s Blog" />
	<atom:link rel='hub' href='http://ardev.wordpress.com/?pushpress=hub'/>
		<item>
		<title>A Programmer Looks at 40</title>
		<link>http://ardev.wordpress.com/2010/08/25/a-programmer-looks-at-40-2/</link>
		<comments>http://ardev.wordpress.com/2010/08/25/a-programmer-looks-at-40-2/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 02:08:30 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=83</guid>
		<description><![CDATA[An old dude reminiscences about his early days with computers and writing software <a href="http://ardev.wordpress.com/2010/08/25/a-programmer-looks-at-40-2/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=83&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Maybe it&#8217;s because I turned 40 for this year; maybe it&#8217;s because I&#8217;ve realized I&#8217;ve spent nearly 30 years with computers being a central part of my life. But for whatever reasons, I&#8217;m feeling particularly nostalgic and my mind is drifting back to my early days of computers and software development. I&#8217;ve seen a lot of changes since that first day when I walked into a Radio Shack and was immediately drawn to the Model 3 computer on display there. So for no other reason than I&#8217;m feeling sentimental, I&#8217;m going to take a walk down memory lane.</p>
<p>When I was a kid in the early 80&#8242;s, &#8220;home computers&#8221; were becoming more popular and I was chomping at the bit to own one of these incredible machines. I begged my parents for one and my persistence was finally rewarded with a TRS-80 Color Computer. But one computer wasn&#8217;t enough. I had to play with every computer I could get my hands on. I&#8217;ve used and/or written code on every Tandy machine made since the most awesome Model 3&#8242;s; Vic-20, Commodore 64, TI-99/4A, Atari 400 &amp; 800XL, Amiga 500 &amp; 1000, Timex Sinclair, Apple II, IIe and IIc.</p>
<p>Not long after getting my first computer, I learned that I could connect with computers around the world through this neat little device that people were calling a &#8220;modem&#8221;. I had to have one of those too and my parents finally relented. After hogging the household phone line and nearly deafening my siblings with the modem&#8217;s screeching sounds, my parents gave in and bought me my own phone line. I was now free to explore the world through my computer.</p>
<p>- I ran a BBS. With a 300 baud modem. I recall how awesome it was to upgrade it with my sweet JCAT 1200 baud modem.</p>
<p>- I  wrote my own BBS software that at least a few other sites in Dallas used.</p>
<p>- I recall how important &#8220;Hayes compatible&#8221; was. I took pride in knowing the entire AT Command set.</p>
<p>- I remember XModem, YModem and ZModem protocols. I wrote my first XModem implementation in 6809 Assember.</p>
<p>- I had a subscription to CompuServe. Or Compu$erve as everyone referred to it.</p>
<p>- I remember when FidoNet was the coolest thing around.</p>
<p>- I remember writing war dialers.</p>
<p>- I remember phreaking. I also remember that when the Computer Crime and Abuse Act was passed in 1986 it scared me enough to stop my practice of using software I wrote to find and steal MCI long distance codes to fund my  long distance BBS habit.</p>
<p>The early-mid 80&#8242;s were a great time to be a kid with a computer. Most of society still looked at these funny machines with skepticism, but we started to see our weird culture start going mainstream. Magazines, TV shows and even movies began to focus on our little world.</p>
<p>- I remember typing in programs that were published in magazines like Byte and K Power.</p>
<p>- I never missed an episode of &#8220;Whiz Kids&#8221;. I wanted my computer to talk to me the way RALF talked to Ritchie.</p>
<p>- I still remember where I was when I saw the commercial for the movie War Games. I begged my mom to take me until she did.</p>
<p>- I remember seeing the Apple 1984 Superbowl commercial live and thinking &#8220;Whoa! I gotta play on that!&#8221;</p>
<p>- I remember going to the mall and seeing Dillards (of all places) selling the first generation Macintosh. The employees would shoo me away when I would plant myself in front of it for hours.</p>
<p>- I owned a light pen and remember thinking how cool it was.</p>
<p>- I remember using an IBM PC Jr and that awful, awful keyboard.</p>
<p>Like any kid at the time, I was into video games. I learned how to control the rudimentary graphics on my various computers to write some really awful games. But nothing compared to some of the cool games available back then.</p>
<p>- I spent hours playing Bard&#8217;s Tale on a C-64.</p>
<p>- I played text-only adventure games from Infocom such as Zork and Planetfall.</p>
<p>- I wrote my own adventure games in BASIC. It saved your progress to cassette. High tech stuff.</p>
<p>Not surprisingly, my early 20&#8242;s found me making a living as a developer. No fancy GUIs back then. The mainframe still ruled and MS-DOS was the lingua franca of the PC world. My first job gave me the opportunity to work with everything from ancient systems to new fangled operating systems like Windows and OS/2.</p>
<p>- I wrote code to run on IBM 360, AS/400, VAX/VMS, Unisys A-Series and even toyed with a UNIVAC 2200.</p>
<p>- I was paid to write production code in Assembler, Algol, Cobol, C &amp; C++, every flavor of Visual Basic including VB DOS, Access, dBase, FoxPro, Clipper, GW-Basic&amp; QBasic</p>
<p>- I wrote TSR programs in Assembler for DOS.</p>
<p>- I wrote printer device drivers for some of the first version of Windows and OS/2.</p>
<p>- I worked on mainframes that still used 3340 Winchester drives.</p>
<p>- I used 8 inch floppy disks. In the 90&#8242;s.</p>
<p>- MASM 6.0 was my tool of choice for many years.</p>
<p>- I remember having to be concerned with extended and expanded memory under DOS.</p>
<p>- I learned entirely too much about Netware and worked towards gaining my CNE.</p>
<p>As Windows gained adoption, I took it upon myself to learn this new OS from the inside out.</p>
<p>- I bought several books on the Windows API and taught myself how to write a Windows app in C with just the API.</p>
<p>- I remember getting the HUGE box that contained Borland C++ 4.0.  I learned OWL and Turbovision.</p>
<p>- MFC came along and I began a long, sad journey of using MS development tools.</p>
<p>- I wrote VBXs and OCXs using Visual C++.</p>
<p>- For kicks and giggles, I wrote a fully functioning Windows app in Assembler just to prove I could do it. It was the last major Assembler code I&#8217;ve written.</p>
<p>After spending years working with Microsoft technologies, time has moved on and today finds me writing Ruby on my Mac and re-discovering Linux which has re-kindled much of the hacker mentality I had when I was a kid pushing buttons to see what it would do. I&#8217;ve seen a lot and I&#8217;ve learned a lot over the years. I&#8217;ve seen countless technologies and fads come, and I&#8217;ve seen &#8216;em go just as fast. But one thing that has never changed is the excitement I still get when I figure out something new; when I get the computer to do what I want to do. 30 years later, it&#8217;s still the same feeling.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/83/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/83/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/83/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=83&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2010/08/25/a-programmer-looks-at-40-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Three Indispensable Tools for Distributed Teams</title>
		<link>http://ardev.wordpress.com/2010/07/03/three-indispensable-tools-for-distributed-teams/</link>
		<comments>http://ardev.wordpress.com/2010/07/03/three-indispensable-tools-for-distributed-teams/#comments</comments>
		<pubDate>Sat, 03 Jul 2010 20:02:44 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Business Stuff]]></category>
		<category><![CDATA[Tech Stuff]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=73</guid>
		<description><![CDATA[Three indispensable tools we use at AutoRevo for our distributed development team are GitHub, Pivotal Tracker and Campfire. <a href="http://ardev.wordpress.com/2010/07/03/three-indispensable-tools-for-distributed-teams/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=73&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve made a lot of changes at AutoRevo over the past few years, but one of the changes that I&#8217;m the happiest with is giving our developers the option to work from home. I&#8217;ve always felt that developers are the most creative and productive when they are comfortable in their environment. While our offices are certainly comfy, there is no place like home.</p>
<p>There are some challenges in having a distributed team, but we&#8217;ve found the following tools to be indispensable:</p>
<p><a href="http://www.github.com" target="_blank"><strong>GitHub</strong></a> – A distributed version control system is a must for distributed teams and I know of no better tool than GitHub. Although we are moving to Rails, we have quite a bit of legacy C# code and we&#8217;ve had the incredible misfortune of using Microsoft&#8217;s TFS in the past. Only SourceSafe would eclipse TFS in terms of pain and suffering in it&#8217;s daily use, so GitHub has been a breath of fresh air for us. Beyond the fact it is ridiculously cheap for us to host private repos, it is fast, doesn&#8217;t get in our way and has great tools that let us view source, make comments, view commit history, manage our branches, etc.<br />
<a href="http://www.pivotaltracker.com" target="_blank"><strong><br />
Pivotal Tracker</strong></a> – If you aren&#8217;t already using Pivotal Tracker, you owe it to yourself to check it out. It&#8217;s a “Free, lightweight Agile project management &amp; team collaboration” tool from Pivotal Labs. We can quickly and easily manage all of our stories in a single interface. It&#8217;s power is in it&#8217;s simplicity. We&#8217;ve tried many Agile tools such as Version One and Mingle (and paid tidy sums for them), but Pivotal Tracker is by far the best even without considering it&#8217;s free. I&#8217;d gladly pay for it. It&#8217;s that good.</p>
<p><a href="http://campfirenow.com/" target="_blank"><strong>Campfire</strong></a> – Distributed teams still need a way to communicate and email and instant messenger aren&#8217;t always the best platforms for that. With Campfire, we have a private chat-room for our devs where we can easily communicate back and forth, post links, the occasional screenshot and the usual daily dose of pointless banter and jokes which is always healthy for a team. All of the discussions are archived and searchable so it&#8217;s easy to go back and find information that has been posted in the past. I&#8217;ve been surprised at how useful Campfire has become for us. There are a number of great Campfire clients out there, but the best one that I recommend is Propane. (Although it is Mac only)</p>
<p>These tools would be great in and of themselves, but the fact that they are all integrated is even more powerful. Whenever a commit is pushed to GitHub, the commit notes are pushed into Campfire for everyone to see. Whenever someone adds or updates a story in Pivotal Tracker, everyone sees that in Campfire. There is no need for status updates, time tracking or other management nonsense. It&#8217;s clear what everyone is working on.</p>
<p>What tools do you use for your distributed teams?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=73&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2010/07/03/three-indispensable-tools-for-distributed-teams/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Comment Perjury</title>
		<link>http://ardev.wordpress.com/2009/01/29/comment-perjury/</link>
		<comments>http://ardev.wordpress.com/2009/01/29/comment-perjury/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 15:39:17 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Comments]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://theramblingdev.com/?p=66</guid>
		<description><![CDATA[Are your code comments lying to you? Ours were. <a href="http://ardev.wordpress.com/2009/01/29/comment-perjury/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=66&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, I was re-factoring some code with our lead developer and we were looking into how a particular method worked. My first step was to read the comments I had oh-so-carefully placed in there years before when I originally wrote the code.  Armed with the knowledge I left there years before, we set out to add some new functionality.</p>
<p>How many of you already know how this is going to end? Well, for those they don’t already know, it didn’t end well. The code behaved nothing like what the comments said.  Over the years, the code had changed. But the comments had not. So I ended up wasting time trying to unlearn my preconceived notions about how the code worked. </p>
<p>Our lead developer, Sean Scally, is not a proponent of comments and has been on a mission for years to curb the practice of “undocumentation”. He feels that the code itself should be clear enough for the developer to understand what the code is doing. If it isn’t clear, then refactor it until it is.  After we got turned the wrong way because of my out of date comments, he smugly joked about my “comment perjury”. But he was right. My comments were lying to us.  They were well intentioned when they were written, but most developers, myself included, rarely go back and update the code comments.  </p>
<p>So now, every time I feel the urge to drop some comments to explain what the code is doing, I take a look to see what I can do to make the code a bit clearer.  One of the best things I’ve found is to use the <a title="Extract Method" href="http://www.refactoring.com/catalog/extractMethod.html">Extract Method</a> to pull a code fragment into its own method, where the name readily explains what the code fragment is doing.  Unit tests are another way to document your code without comments. In our business, the business rules can be fairly complex and change frequently. Trying to write comments that explain this logic is fraught with peril. (As I’ve learned) It’s much safer to have unit tests that readily demonstrate what the business rules are. As the rules change, you update your tests then update your code. No need to remember to update that big block of comments that nobody bothered to read anyway. And you get the added benefit of having your code under test coverage.</p>
<p>As in all things in life, moderation is key. I still hold that a properly placed comment can make a world of difference in understanding the code. But they should be used carefully and judiciously and only after other ways of documenting the code have been exhausted.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/66/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/66/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/66/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=66&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2009/01/29/comment-perjury/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>TDD for Fun and Profit!</title>
		<link>http://ardev.wordpress.com/2008/11/07/ymmv/</link>
		<comments>http://ardev.wordpress.com/2008/11/07/ymmv/#comments</comments>
		<pubDate>Sat, 08 Nov 2008 02:25:37 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=60</guid>
		<description><![CDATA[There was interesting discussion on Joel On Software regarding the usefulness of Test Driven Development. There were some interesting comments posted such as:  - “Test Driven Development is a huge scam”  - TDD “vastly increases the amount of time to &#8230; <a href="http://ardev.wordpress.com/2008/11/07/ymmv/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=60&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There was interesting <a href="http://discuss.joelonsoftware.com/default.asp?joel.3.695964.18">discussion </a>on Joel On Software regarding the usefulness of Test Driven Development. There were some interesting comments posted such as:</p>
<p> - “<em>Test Driven Development is a huge scam</em>”</p>
<p> - TDD “<em>v</em><em>astly increases the amount of time to program anything without any benefit.</em>” </p>
<p> - Having developers produce unit tests that cover “<em>even 50% of their code is ridiculous and wasteful.</em>” </p>
<p> - Asking developers to provide large amounts of test coverage is “<em>like asking the fox to watch the hen house</em>”</p>
<p> - Unit tests should be &#8220;<em>written by professional QA Engineers</em>”</p>
<p>My first reaction to TDD was “<em>More ivory tower academia from people who spend more time thinking about software than actually writing it</em>” and I dismissed it. But I kept hearing about it and noticed that people that I respected were discussing it a lot more. I finally took a deeper look into it and though confused at first, I began to see the benefits. After a few TDD sessions, I became a believer when I saw the quality of the code that was produced. Today, I still consider myself a TDD newb, but I definitely understand the value.</p>
<p>The reason that I see the value is that it solves a business problem for me. I’m not some techno wunderkind who salivates over the latest flavor of the month. I love developing software, but I’m pragmatic: I want to make money. (See: <a href="http://en.wikipedia.org/wiki/Capitalism">Capitalism</a>) I take a serious look at anything that can help us produce better, more maintainable software faster. Although our software has always been pretty stable, we had plenty of incidents where having decent tests would have saved my bacon. I quickly found that writing unit tests on existing code was often tricky because the code itself was inherently un-testable. This was a problem. I couldn’t easily write automated tests so my choices were lengthy manual test procedures or just rolling the dice and hoping the code didn’t break.</p>
<p>So for me, TDD was a step towards solving that problem.  Today, our new development reaps the benefit of TDD and I’m quite happy with the result. It works for me. YMMV. If TDD isn’t working for you, what type of testing is?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=60&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/11/07/ymmv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Incremental Improvements</title>
		<link>http://ardev.wordpress.com/2008/10/15/incremental-improvements/</link>
		<comments>http://ardev.wordpress.com/2008/10/15/incremental-improvements/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 13:19:29 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[CruiseControl.NET]]></category>
		<category><![CDATA[Migratordotnet]]></category>
		<category><![CDATA[TreeSurgeon]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=53</guid>
		<description><![CDATA[There are quite a few things that I want to do differently here at AutoRevo. However, I can&#8217;t just stop all development while I build the environment that I want. That would be a profit-limiting move&#8230;So we make incremental improvements &#8230; <a href="http://ardev.wordpress.com/2008/10/15/incremental-improvements/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=53&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There are quite a few things that I want to do differently here at <a title="AutoRevo" href="http://www.autorevo.com">AutoRevo</a>. However, I can&#8217;t just stop all development while I build the environment that I want. That would be a profit-limiting move&#8230;So we make incremental improvements in key areas as we go. This month, we&#8217;ve made two key improvements: We&#8217;ve implemented <a title="CruiseControl.Net" href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET">CruiseControl.NET</a> and <a title="migratordotnet" href="http://code.google.com/p/migratordotnet/">migratordotnet</a>. I&#8217;ll have more to say about migratordotnet soon, but I wanted to talk a bit about CruiseControl.</p>
<p>I&#8217;ve been wanting to implement CruiseControl for years now. But there was always something else to be done so it go pushed to the back burner. Bad idea. I wished I had implemented this when we started. Beyond it&#8217;s stated purpose of making sure everything will build, implementing CC.NET provides other benefits. For example, one project that I added had about a hundred unit tests, but several of these tests were failing. <strong>And nobody knew</strong>. Everyone ran their individual tests during development but nobody was running all of the tests. Granted, that shouldn&#8217;t have been allowed to happen. But now with CC.NET, those tests are all run automatically upon a check-in. And now everyone sees that the tests are failing. No need to depend on a human process to check the tests.</p>
<p>Another benefit of installing CC.NET was to make us think of a better way of handling our project directory structures. A few months ago in preparation for getting CC.NET installed, <a href="http://anydiem.com/">Sean Scally</a> took some time to research various ways of improving our directory and source control structure. He came across <a title="TreeSurgeon" href="http://www.codeplex.com/treesurgeon">TreeSurgeon </a>and we&#8217;ve been very pleased with it. If you haven&#8217;t looked at TreeSurgeon yet, I highly recommend it. It&#8217;s a great tool that will create a project directory structure, a solution that contains your domain DLL, NUnit test project and a NAnt build script. Best of all, you can download the source and change it to your heart&#8217;s content.</p>
<p>What type of things are you doing in your shop to make incremental improvements? I&#8217;d like to hear about your experiences!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=53&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/10/15/incremental-improvements/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate Learnings: Part I</title>
		<link>http://ardev.wordpress.com/2008/10/03/nhibernate-learnings-part-i/</link>
		<comments>http://ardev.wordpress.com/2008/10/03/nhibernate-learnings-part-i/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 15:43:59 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=49</guid>
		<description><![CDATA[So we deployed an updated version of our app Wednesday night, and part of that rollout included some NHibernate bits. Rollout went smooth, everything worked just fine. Or so we thought. Thursday morning I was demo&#8217;ing some portions of the &#8230; <a href="http://ardev.wordpress.com/2008/10/03/nhibernate-learnings-part-i/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=49&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So we deployed an updated version of our app Wednesday night, and part of that rollout included some NHibernate bits. Rollout went smooth, everything worked just fine. Or so we thought.</p>
<p>Thursday morning I was demo&#8217;ing some portions of the app to our Support staff when the application became unresponsive. Within a minute, it was clear that IIS was no longer responding. Ack! A quick look at the server showed that the IIS worker process had in fact died. A quick, but very inconvenient, IISReset command and everything was working again.</p>
<p>I meant to look into the cause of the crash, but got busy doing other things. Then, later in the day it happened again. At this point, it was clear that something with our rollout was causing a problem because IIS had never experienced crashes like this before. Our lead developer looked into it and found that IIS was slowly leaking memory and eventually crashed when it ran out.</p>
<p>A few Google searches later and we found the source of our problem: Our use of the NHibernate session factory. What we were doing was creating a new session factory each time we needed a session. As we quickly learned, this is very much frowned upon and will cause memory to disappear faster than your shares of <a title="Buh Bye, 401k" href="http://www.bizjournals.com/seattle/stories/2008/09/29/daily14.html?jst=b_ln_hl" target="_blank">WaMu stock</a>. </p>
<p>The solution was simple: Wrap the session factory in a singleton and keep that sucker around. Lesson learned!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=49&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/10/03/nhibernate-learnings-part-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>AutoRevo is hiring additional developers</title>
		<link>http://ardev.wordpress.com/2008/09/25/autorevo-is-hiring-additional-developers/</link>
		<comments>http://ardev.wordpress.com/2008/09/25/autorevo-is-hiring-additional-developers/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 18:16:25 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Business Stuff]]></category>
		<category><![CDATA[Hiring]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=47</guid>
		<description><![CDATA[We&#8217;re looking for additional developers here at AutoRevo. We&#8217;re a small company (around 20 employees) based in Dallas. We offer a casual and sane environment and take pride in our dedication to continuous improvement.  What we&#8217;re looking for is a &#8230; <a href="http://ardev.wordpress.com/2008/09/25/autorevo-is-hiring-additional-developers/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=47&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re looking for additional developers here at AutoRevo. We&#8217;re a small company (around 20 employees) based in Dallas. We offer a casual and sane environment and take pride in our dedication to continuous improvement. </p>
<p>What we&#8217;re looking for is a developer who takes pride in their work, is dedicated to learning and improving themself and can work well on a team. Some of the things that we value are test driven development, pair programming when necessary, domain driven design and building solid, testable code in a reproduceable way. No death marches, no mandatory overtime, no insane schedules.</p>
<p>If you also value these things and have a solid background in C# and ASP.NET and are in the Dallas area, then we&#8217;d love to hear from you. I can be reached at hoffman@autorevo.com</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/47/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/47/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/47/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=47&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/09/25/autorevo-is-hiring-additional-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Agile in Action</title>
		<link>http://ardev.wordpress.com/2008/09/23/agile-in-action/</link>
		<comments>http://ardev.wordpress.com/2008/09/23/agile-in-action/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 18:47:05 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Pair Programming]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=45</guid>
		<description><![CDATA[We’ve been slowly adopting Agile practices over the past year or so and have witnessed solid improvements in code quality and productivity. However, some of the tougher parts of Agile for us have been test driven development and pairing. TDD &#8230; <a href="http://ardev.wordpress.com/2008/09/23/agile-in-action/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=45&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>We’ve been slowly adopting Agile practices over the past year or so and have witnessed solid improvements in code quality and productivity. However, some of the tougher parts of Agile for us have been test driven development and pairing. TDD and pairing just doesn&#8217;t feel natural at first and it’s taken us a while to get a better feel for it.</p>
<p>However, yesterday was one of those days were everything just clicked. Two of our developers started off in the dev conference room outlining some initial class designs and thinking through some initial code. They hit a few sticking points and asked me to come in for another opinion. We talked about their initial design for a bit and I suggested that they had enough of a design to start writing some tests. There was the usual “<em>what about this?</em>” and “<em>we don’t know how this will work yet</em>” comments, but there was agreement that they were getting diminishing returns on talking about it and it was time to write some code.</p>
<p>So after lunch they paired up and wrote their first test. The code they wrote to pass the test was done in the most basic and simplest way possible. They then refactored. And wrote more tests.  And refactored some more. By the end of the day, I checked in with them and they showed me some pretty impressive code that had a solid design and great test coverage.</p>
<p>The code that was written was cleaner and more elegant than the code that any of us had originally discussed during our brief design meeting. In our design meeting, we had thought of doing it one way but the final version was completely different. <strong>And better</strong>. That’s one of the huge advantages of TDD: We let the tests drive us to a better design. Rather than trying to force fit our preconceived notions into the design, we allow the tests to become the basis of the design. Many people a lot smarter than me have written extensively on this topic, so I won’t bother to repeat it all here. But suffice to say, TDD is something worth exploring if you want to improve the quality and testability of your code.</p>
<p>Pairing also paid dividends. Both of the developers agreed that the code that was written was better than what either of them would have written independently. It’s an example of the whole being greater than the sum. </p>
<div>So with little more than a half day’s work each, two developers built quite a bit of solid, testable code that neither of them could have written by themselves in a day, and probably not even in two days.  That’s the kind of results that make dev managers, such as myself, glad that they invested the time, effort and discipline into continuous improvement in their development environments.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=45&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/09/23/agile-in-action/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Adventures in packaging..but not that kind of package</title>
		<link>http://ardev.wordpress.com/2008/09/13/adventures-in-packagingbut-not-that-kind-of-package/</link>
		<comments>http://ardev.wordpress.com/2008/09/13/adventures-in-packagingbut-not-that-kind-of-package/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 19:15:25 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Tech Stuff]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=41</guid>
		<description><![CDATA[A few years ago, if you had asked me about software packaging or package design, I would have just assumed that you were referring to the little cardboard box that software ships in. (Or maybe even that hideous package design &#8230; <a href="http://ardev.wordpress.com/2008/09/13/adventures-in-packagingbut-not-that-kind-of-package/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=41&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A few years ago, if you had asked me about software packaging or package design, I would have just assumed that you were referring to the little cardboard box that software ships in. (Or maybe even that hideous package design that Microsoft inflicted upon users of Vista and Office) I never really considered that packaging can also mean how we logically separate our software into modules and assemblies.</p>
<p>I know now. Largely due to the fact that my ignorance of packaging in the early days of AutoRevo caused a lot of headaches for us down the road. In the beginning, it was easy. Our software was simple and didn&#8217;t do too much. We had a web application in one assembly and we had our business objects in another assembly. The business objects, which I cleverly named AutoRevo Business Objects or <strong>ABO</strong>, contained classes for things like Account, Inventory and some stuff for dealing with eBay.</p>
<p>Even my less astute readers will already see the problem. But I didn&#8217;t. Even on that poor foundation, I kept adding stuff to ABO. Much like building a <a title="New Orleans" href="http://en.wikipedia.org/wiki/New_Orleans">city </a>next to a massive river, an ocean and a large lake, something <a title="What could go wrong?" href="http://en.wikipedia.org/wiki/Tropical_cyclone">really, really bad</a> is bound to happen someday. Before long, ABO contained virtually all of our business logic for dealing with accounts, inventory, authentication. dealer websites and a bunch of other things. It also knew everything about launching and revising listings to eBay. It was all knowing and all powerful. A good thing for a deity, but not so much for a single software component.</p>
<p>Unit testing was something that we only paid lip service to at the time and the tests that we did have weren&#8217;t very good so the predictable result is that anytime we had to roll ABO, we risked breaking, well, the entire application. And we were forced to roll out the entire AutoRevo Business Objects DLL no matter how simple the change was since it contained <em>everything</em>. eBay changed a rule about revising an auction? Roll out ABO. Wanted to change a minor setting regarding an account? Roll out ABO. My original design decisions were bearing fruit and it wasn&#8217;t too tasty.</p>
<p>I wished I could say that all of this was behind us now and that all of our code is a shining example of proper dependency management. But it&#8217;s not. We&#8217;re still working to break up those dependencies. We&#8217;ve gotten a lot smarter and do things a lot differently today, but legacy code is something that always has to be dealt with.</p>
<p>So this week I&#8217;m going to be writing about some things that I&#8217;ve learned along the way, some metrics that are useful for gauging the health of your packaging and discuss a <a title="NDepend" href="http://www.ndepend.com/">really cool tool</a> that can be used to help you understand your software dependencies. Hopefully, you can be spared some of the same mistakes that I made.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ardev.wordpress.com/41/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ardev.wordpress.com/41/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/41/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/41/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/41/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=41&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/09/13/adventures-in-packagingbut-not-that-kind-of-package/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>
	</item>
		<item>
		<title>Make it work the way I think it should</title>
		<link>http://ardev.wordpress.com/2008/09/05/make-it-work-the-way-i-think-it-should/</link>
		<comments>http://ardev.wordpress.com/2008/09/05/make-it-work-the-way-i-think-it-should/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 15:29:40 +0000</pubDate>
		<dc:creator>Mark Hoffman</dc:creator>
				<category><![CDATA[Business Stuff]]></category>
		<category><![CDATA[Tech Stuff]]></category>

		<guid isPermaLink="false">http://ardev.wordpress.com/?p=34</guid>
		<description><![CDATA[A bit of rant here…..When building your software, help your users by making the initial configuration choices for them. It doesn’t matter how slick or powerful your configuration system is. Your users won’t care initially. Your users want to first &#8230; <a href="http://ardev.wordpress.com/2008/09/05/make-it-work-the-way-i-think-it-should/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=34&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A bit of rant here…..When building your software, help your users by making the initial configuration choices for them. It doesn’t matter how slick or powerful your configuration system is. Your users won’t care initially. Your users want to first use the software and then configure it to meet their specific needs. That&#8217;s why we have default configurations.</p>
<p>We recently purchased Version One’s <a title="Version One" href="http://www.versionone.com/">Agile Enterprise</a>. It’s a great piece of software and we love it. I’ll have more to say on it later, but overall, it is working quite well for us. However, one annoyance is their lack of default configurations for each user.</p>
<p>Case in point: Their software has a nice feature so that a little mail icon appears on the screen when a user receives a message or alert.</p>
<div id="attachment_37" class="wp-caption alignnone" style="width: 470px"><a href="http://ardev.files.wordpress.com/2008/09/v1-1.jpg"><img class="size-full wp-image-37" title="Version One Notifications" src="http://ardev.files.wordpress.com/2008/09/v1-1.jpg?w=640" alt="Version One Notifications"   /></a><p class="wp-caption-text">Version One Notifications</p></div>
<p>Cool. “That’ll come in handy”, I thought to myself.  While we’re working on a story, we’ll frequently need clarification from our Product Manager. So we add a task to the story and assign it over to him. My clever plan was that we just assign the task and he would see the notification thingy so that we wouldn’t have to bug him for an answer. Developers could move on for the time being and the Product Manager could work un-interrupted until he has the time to get to the task. Efficiency is at hand!</p>
<p>Except it didn’t work that way. The developers dutifully created the tasks, but after a while it became clear that our Product Manager wasn’t seeing the notification. After a bit of digging, we figured out that each user has to subscribe to the notifications that they want to receive. So if you want to know that someone has assigned you a task, then you have to create the appropriate subscription. Bah!</p>
<p>Their subscription / notification system is pretty slick and very configurable. But if fails in one simple aspect: It makes me think about it before I can effectively use the software. I just expect that when a task is assigned to me that I would receive a notification. I would expect that to be the default behavior. I do not expect that I will have to go figure out that I have to create some subscription thing for it.</p>
<p>Frequently developers get overly excited about how configurable and customizable their creations are. They brag about the endless configurations and options. How a user can make it do whatever they want.  But they forget that most users really don’t care and just want the product to work out of the box without having to think too hard about it.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/ardev.wordpress.com/34/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/ardev.wordpress.com/34/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ardev.wordpress.com/34/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ardev.wordpress.com/34/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ardev.wordpress.com/34/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ardev.wordpress.com&amp;blog=4652333&amp;post=34&amp;subd=ardev&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ardev.wordpress.com/2008/09/05/make-it-work-the-way-i-think-it-should/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7c478d7c4f4c2c9c657624b8197882ab?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Mark Hoffman</media:title>
		</media:content>

		<media:content url="http://ardev.files.wordpress.com/2008/09/v1-1.jpg" medium="image">
			<media:title type="html">Version One Notifications</media:title>
		</media:content>
	</item>
	</channel>
</rss>
