<?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>Test Obsessed &#187; Lessons Learned</title>
	<atom:link href="http://testobsessed.com/category/rumination/lessons-learned/feed/" rel="self" type="application/rss+xml" />
	<link>http://testobsessed.com</link>
	<description>Elisabeth Hendrickson&#039;s thoughts on Agile, Testing, and Agile Testing.</description>
	<lastBuildDate>Wed, 08 Sep 2010 21:12:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Virtual Training Experiment Report: Lessons Learned</title>
		<link>http://testobsessed.com/2007/11/30/virtual-training-experiment-report-lessons-learned/</link>
		<comments>http://testobsessed.com/2007/11/30/virtual-training-experiment-report-lessons-learned/#comments</comments>
		<pubDate>Sat, 01 Dec 2007 01:43:13 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>
		<category><![CDATA[Virtual Training]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/11/30/virtual-training-experiment-report-lessons-learned/</guid>
		<description><![CDATA[<p>Back in August, I called for volunteers to help me experiment with online training.  Many folks expressed interest in what I&#8217;m trying to do.  So I thought I&#8217;d write a little status report.</p>
<p>First, let me summarize what I&#8217;m trying to accomplish.</p>
<p>Over the years I have received several inquiries asking if I have online versions <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/11/30/virtual-training-experiment-report-lessons-learned/">Virtual Training Experiment Report: Lessons Learned</a></span>]]></description>
			<content:encoded><![CDATA[<p>Back in August, I <a href="/2007/08/20/its-like-virtually-being-there/">called for volunteers to help me experiment with online training</a>.  Many folks expressed interest in what I&#8217;m trying to do.  So I thought I&#8217;d write a little status report.</p>
<p>First, let me summarize what I&#8217;m trying to accomplish.</p>
<p>Over the years I have received several inquiries asking if I have online versions of my instructor-led testing classes available.  I always say &#8220;no.&#8221;  That&#8217;s because my classes are interactive, collaborative, and experiential.  Participants don&#8217;t just do exercises.  They take on roles in simulations, play with toys, work in small groups on realistic testing problems, and generate ideas in big group brainstorms.  A typical webinar structure doesn&#8217;t even come close to supporting that style of training.</p>
<p>But these days virtual collaboration solutions do much more than just let a presenter display slides and talk.  So I began to wonder&#8230;maybe the technology is finally ready to support the kind of training I do?</p>
<p>I started by defining what I would really need in a virtual classroom, given that I want my online classes to feel as interactive and spontaneous as in real-space.  And that means the following:</p>
<ul>
<li>Supports at least 6 and preferably 10 or more people connecting from around the world.</li>
<li>Supports Firefox and Mac seamlessly.  (IE-only solutions need not apply.)</li>
<li>Has integrated VoIP so there&#8217;s no phone line needed, and no need to make international phone calls.</li>
<li>Has integrated video that allows participants to see each other, all at once, in realtime.</li>
<li>Allows for multiple simultaneous speakers so the conversation can flow at least as smoothly as on a telephone call (no &#8220;pass the microphone&#8221; metaphor).</li>
<li>Allows participants to drive a shared browser so they can collaborate on web-based exercises, such as testing a web app.</li>
<li>Allows participants to capture their individual insights and contribute ideas in a shared workspace, visible to all, in text and drawings.</li>
</ul>
<p>And of course the performance and reliability has to be at an acceptable level.  I don&#8217;t know how to quantify what constitutes &#8220;acceptable.&#8221;  But I do know that every time I have to say &#8220;I&#8217;m sorry, I didn&#8217;t catch that.  The sound dropped out.  Could you repeat what you said?&#8221; I&#8217;m going to get progressively grumpier.  Ultimately my intent would be to offer commercial public classes online, and I can&#8217;t ask people to pay for classes when they can only hear 50% of the conversation.</p>
<p>So to figure out if the technology was ready for prime time, I held a series experiments.  Many were small, involving just me and one other person.  Two were larger experiments with six and five people respectively (including me).</p>
<p>The results were mixed.  I&#8217;m still cautiously optimistic, but not completely convinced the technology is ready for this kind of usage.</p>
<p>In each of the two big experiments &#8211; held on two different virtual meeting solutions &#8211; the sequence of events was remarkably similar:</p>
<ol>
<li>Got everyone connected.  That involved a lot of rounds of &#8220;Can you hear me now?&#8221; and &#8220;I can&#8217;t see you!&#8221; and &#8220;How do I&#8230;?&#8221;</li>
<li>Discovered that the VoIP audio was flaking out, and took steps to throttle back on the video bandwidth in an attempt to correct the problem.</li>
<li>Did a round of introductions.</li>
<li>Did an online version of a short exercise that I use in real classroom settings.</li>
<li>Debriefed the exercise.</li>
<li>Debriefed the overall experience.</li>
</ol>
<p>So far, the lessons I&#8217;ve learned include&#8230;</p>
<p><b>Have Two Machines</b><br />
As the meeting leader, I find it incredibly useful to be logged into the meeting twice, once as Host, and once as a normal participant.  This ensures that I see what the participants see.  And it gives me a safety net so that if one machine is experiencing technical difficulties, I have another way to connect with participants.</p>
<p><b>The Webcams Are Important</b><br />
When I started this process, I wondered if webcams were actually necessary or if they were gold-plating.  I discovered that the webcams are essential to create the kind of collaborative atmosphere I want to create.  As one of the participants in the first experiment put it: being able to see the other people created a bond.  Amazing how a 1&#8243;x1&#8243; 1-frame-per-second-stop-motion-animation of a person contributes so much to forging a connection.</p>
<p><b>Let Participants Type</b><br />
In the first experiment I ran with other people, I did the same things I do in a classroom setting.  So when I shared the web page with the exercise we were going to work through together as a group, I drove, just as I would if I were projecting the exercise onto a screen at the front of the room.  And when we debriefed the exercise, I typed.  Finally one of the participants said, &#8220;Wait a minute&#8230;we all have keyboards, so why are you the only one typing?&#8221;  Doh!  Of course!  That&#8217;s why the whiteboard is a shared resource: so everyone can contribute insights without having me act as a scribe.  It&#8217;s why I wanted a shared collaborative space to begin with.  Silly me!  I was too accustomed to the physical constraints of laptops and projectors and pens and flipcharts.</p>
<p>So I made the participants type more in the second experiment, and I think the results were better.  (Not perfect, but better.)  I will continue to find ways to ensure all participants have the opportunity to drive and type.  I think that this is actually one way in which a virtual venue could be MORE effective than a real classroom.</p>
<p><b>Watch the Momentum</b><br />
In the real world when I run extended exercises, the participants tend to have a fair amount of momentum.  My problem usually isn&#8217;t keeping the participants engaged in the work, but getting them to stop.  In a virtual context, I have observed that the discussion seems to grind to a halt much more easily.  I&#8217;m not sure why yet.  But it&#8217;s something I need to watch and find ways to address.</p>
<p><b>Keep the Group Small</b><br />
Initially I thought I might be able to handle groups of up to a dozen people in a virtual setting.  Now I&#8217;m thinking eight.  It takes more effort and attention than I&#8217;d originally imagined to ensure that everyone is participating and engaged, to keep track of who&#8217;s saying what, and to monitor the technology to make sure all is well.  Also, I think there are still issues with scaling the number of participants, and even eight might push the limits of the technology too much.  Maybe six is the right number.</p>
<p>Moving forward, I need to:</p>
<ul>
<li>Make the whole experience smoother.  That means I need to become much more familiar with all the options and controls so everything is second nature (no more &#8220;Now where was that menu option&#8230;?&#8221;).  I think that some of the awkwardness the group felt in the sessions had more to do with my blunders than with real limitations in the technology.  So I need to spend more time rehearsing.</li>
<li>Hold a separate one-on-one session with each participant to check their audio and visual and practice the mechanics of using the technology in advance of the actual session.  And that means developing a set of good and preferably relevant-to-the-topic Getting Started one-on-one exercises.</li>
<li>Experiment with different exercise structures to see if some are better for keeping the momentum going than others.  Also experiment with overall course structures.  My in-person classes have a blend of individual, small group, and big group work, but emphasize working in groups.  I suspect the optimal balance for online training is different.  So I plan to experiment with incorporating more self-paced individual work done in preparation for the interactive online sessions.</li>
</ul>
<p>But before I get too far ahead of myself, I have to decide how much (more) time and money I want to invest in this endeavor.  To do that, I need two vital pieces of information:</p>
<ol>
<li><b>Can the technology really and truly do what I need it to do?</b>  My experiments to date have been promising but inconclusive.  So in the next few weeks I&#8217;ll be running one more big experiment to test performance and audio/video quality with more people.  If you&#8217;re interested in participating, watch this space for details&#8230;</li>
<li><b>Will anyone pay money for it if I can make it work?</b>  So far I&#8217;ve been much more focused on the question &#8220;Is it possible?&#8221; than on the question &#8220;Does anyone want it?&#8221;  But I need to assess interest.  And you can help.  If you would be interested in seeing my company offer online experiential training as a for-pay service, drop a note in the comments or <a href="mailto:info@qualitytree.com">send me an email</a>.  (No obligation.  No sales person will call.  I will not add you to my mail list unless you ask me to.  Your feedback just helps me decide if there&#8217;s enough public interest to pursue this.)
</li>
</ol>
<p>Oh, and if you have additional questions or comments, feel free to drop a note in the comments about those too!</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/11/30/virtual-training-experiment-report-lessons-learned/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New Look (Beta)</title>
		<link>http://testobsessed.com/2007/11/28/new-look-beta/</link>
		<comments>http://testobsessed.com/2007/11/28/new-look-beta/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 05:35:49 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/11/28/new-look-beta/</guid>
		<description><![CDATA[<p>I spoke too soon.  Last night, I wrote:</p>
<p>I think I&#8217;ve tested it.  I think I&#8217;ve fixed all the (sufficiently important) bugs.  But that&#8217;s just me wearing my developer hat saying &#8220;It works on my machine.&#8221;  If you happen to notice any problems with the new WordPress theme, I&#8217;d be most grateful if <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/11/28/new-look-beta/">New Look (Beta)</a></span>]]></description>
			<content:encoded><![CDATA[<p>I spoke too soon.  Last night, I wrote:</p>
<blockquote><p>I think I&#8217;ve tested it.  I think I&#8217;ve fixed all the (sufficiently important) bugs.  But that&#8217;s just me wearing my developer hat saying &#8220;It works on my machine.&#8221;  If you happen to notice any problems with the new WordPress theme, I&#8217;d be most grateful if you could let me know.  Oh, and you can let me know if you like it too.  Thanks!</p></blockquote>
<p>Within minutes of posting that, I realized that the graphics were jaggy and ugly on a PC.  Hmph.  So I pulled down the new look and the &#8220;New Look&#8221; post, and went to bed grumbling about ugly PCs vs. beautiful Macs.</p>
<p>Depending on your perspective, I either pulled it down too fast, or not fast enough.  By the time I pulled it, Google had already indexed it, and feed readers all over had already gotten the new post via RSS.  But when folks went to the site, they got the old look, and no sign of the &#8220;New Look (Beta)&#8221; post.  Confusing to say the least.</p>
<p>But if I&#8217;d done things differently, I wouldn&#8217;t have gotten Zach&#8217;s hilarious email this morning chronicling his adventures trying to find the mysterious &#8220;New Look&#8221; post.</p>
<p>Anyway&#8230;</p>
<p>What I suspect (um, hope) you all don&#8217;t know is that I spent a fair amount of time last night fixing functional problems with the site through the tried-and-true, but oh-so-cowboy, process of take-it-live, find-the-fatal-error, take-it-down, fix, and repeat.  So by the time I posted the &#8220;New Look (Beta)&#8221; message I had already solved numerous very real problems and just wanted to be done.</p>
<p>Bugs showing up in production that didn&#8217;t show up in the development and test configuration?    How could that be?</p>
<p>In trying to create a development and test environment on my local network, I downloaded WordPress and installed it on my Mac.  And I then used the Default theme as a starting place.  You see, I don&#8217;t actually know PHP, and am relatively unskilled at WordPress theme creation.  So starting with something that works well, then tweaking it until I got the look I wanted, seemed like a good way to go.  (Some of you may be thinking, &#8220;Wow, this site looks nothing like the default.&#8221;  Behold the power of CSS.  That, and I learned an awful lot over the last couple of days about how WordPress works.  But I digress.)</p>
<p>When I took the new theme live for the first time last night, I discovered my fatal error.  The version of WordPress on my local machine is 2.3.1.  The version of WordPress installed by my host, GoDaddy, is 2.0.4.  And the new theme was incompatible with the version 2.0.4 of WordPress.  I got fatal errors all over the place.</p>
<p>So at this point (about 10PM my time), I decided to do something that I would never do if this had been a real software project with real consequences.  I decided the fastest way to get from broken to working would be to:</p>
<ol>
<li>Look at the live site to get the error message.</li>
<li>Change back to the old theme while I worked to fix the bug.</li>
<li>Grep the local files to figure out where the offending code was coming from.</li>
<li>Fix each instance of offending code and test locally.</li>
<li>Upload the fixes.</li>
<li>Change the presentation to the new theme and go back to step 1.  Repeat till done.</li>
</ol>
<p>Cowboy, yes.  But it worked.  Within 15 minutes I&#8217;d fixed all the fatal errors and the site was actually functioning.  Like I said: not recommended for real projects, but this is my blog, not a mission critical web app.  And it would have taken me at least an hour to downgrade my local WordPress instance and do this the proper way.  I didn&#8217;t have an hour.</p>
<p>After all that, I was so proud that it worked, I overconfidently posted the &#8220;New Look (Beta)&#8221; message.  And only then did I finally got around to looking at the new site on a PC.  In retrospect, that was the wrong order to do those things in.  In any case, looking at the new design on a PC was just depressing, and I&#8217;d had enough for one night.</p>
<p>This morning, I figured out that although Macs make scaled-down images look nice in a browser, PCs don&#8217;t.  I&#8217;d taken a shortcut and rather than resizing the images properly as I tweaked the design, I just used the WIDTH and HEIGHT attributes in the IMG tag to change their size.  The result was that the images looked oh-so-1985 jaggy on a PC.</p>
<p>This whole experience underscores the importance of cross-browser and cross-functional testing before taking a site live.  I knew that.  Really I did.  But I ignored it because my local network just isn&#8217;t set up to make this kind of thing easy.  I knew it would be a little bit of a hassle to get a PC to surf to WordPress hosted on my Mac, and I couldn&#8217;t be bothered.  I was overconfident about my ability to create designs that work cross-browser and cross-platform.  And I was willing to take the risk if I was wrong.  Mostly, I was just being impatient.  I wanted to get the new look live before I went to bed, and I was tired and wanted to sleep.</p>
<p>These are all really bad reasons not to test.  But then this is why I develop my own websites instead of outsourcing the effort.  I need these reminders of how easy it is to choose to do the wrong thing for bad &#8211; but legitimate sounding at the time &#8211; reasons.</p>
<p>You see, I hear &#8220;we can&#8217;t do that kind of testing because it&#8217;s too hard&#8221; from my clients on a regular basis.  And it would be too easy for me to become all judgmental and say &#8220;it&#8217;s not that hard; you&#8217;re just lazy.&#8221;  But I can&#8217;t say that because I make the same dang mistakes in my own development.  So instead of grumbling about lazy developers, I say &#8220;I know it&#8217;s hard.  But it&#8217;s important.  So instead of telling me that it can&#8217;t be done, please tell me what it would take to make it more feasible, and we&#8217;ll work on that.&#8221;</p>
<p>Oh, and for the record I&#8217;ve now set up my Mac and PC so I can surf to the test site running on the Mac from the PC easily.  (Mostly that involved adding entries to the hosts file on the PC.)  Still haven&#8217;t downgraded my local WordPress instance, but I will before I do any more serious theme development.  Next time will be different.  But since I tend to do these big site redesigns about once a year, next time is also a long way off.</p>
<p>Unless y&#8217;all absolutely hate the new look.  So tell me what you think&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/11/28/new-look-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh, the irony&#8230;</title>
		<link>http://testobsessed.com/2007/10/16/oh-the-irony/</link>
		<comments>http://testobsessed.com/2007/10/16/oh-the-irony/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 03:20:36 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>
		<category><![CDATA[Running the Business]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/10/16/oh-the-irony/</guid>
		<description><![CDATA[<p>So I&#8217;m working on course materials for a class I&#8217;ll be teaching next week on Acceptance Test Driven Development.</p>
<p>I decided to try using Keynote on my trusty no-longer-all-that-new Mac instead of PowerPoint.  I find PowerPoint on the Mac incredibly annoying.  Whenever I want to edit a presentation on the Mac that I created on <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/10/16/oh-the-irony/">Oh, the irony&#8230;</a></span>]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m working on course materials for a class I&#8217;ll be teaching next week on Acceptance Test Driven Development.</p>
<p>I decided to try using Keynote on my trusty no-longer-all-that-new Mac instead of PowerPoint.  I find PowerPoint on the Mac incredibly annoying.  Whenever I want to edit a presentation on the Mac that I created on the PC (like, all of the presentations I have), I get Converting Metadata messages all over the place.  When editing a 300 slide file, making even the smallest change can take forever.  So, Keynote seemed like a better alternative.</p>
<p>Now I should explain that although most of my slide decks look reasonably simple, I tend to use a lot of animations for certain types of things &#8211; like bringing a workflow to life.</p>
<p>And I also use the presenter notes area as a place to put the meat of the materials for participants so that when I print books with both the slide and the presenter notes, there&#8217;s a good amount of text.  The result are course notes that read kind of like a book with a whole lot of illustrations.So in other words, I am not your typical lightweight presentation software user.  And I&#8217;ve crashed PowerPoint a lot as a result.</p>
<p>But I had high hopes for Keynote.  For starters, it&#8217;s Mac software.  Built for Macs.  None of this ported over from Windows crap.</p>
<p>Alas, I was doomed to disappointment.</p>
<p>First, when I attempted to do some fiddly edits on the text under a page with a ton of animations, Keynote died a horrible death.  It didn&#8217;t exactly freeze entirely, but I could no longer edit the content.  I could attempt to save/export my file, but every time I did &#8211; no matter what format &#8211; it told me that the file was corrupt.  Sadly, I&#8217;ve gotten out of the habit of saving every 30 seconds, so I lost a fair amount of work.</p>
<p>When I finally recovered everything an hour later, I vowed not to make the same mistake again.  I not only started saving rabidly every 30 seconds, but I also checked everything into my subversion repository.  However, when a subsequent commit failed with the message &#8220;Directory &#8230;/.svn containing working copy admin area is missing&#8221; I learned that <a href="http://subversion.tigris.org/issues/show_bug.cgi?id=707">there&#8217;s an interaction bug between Keynote and Subversion</a>.  I used <a href="http://sadilek.blogspot.com/2007/07/restore-svn-in-keynotepages-documents.html">the workaround kindly published by Daniel Sadilek</a> (bless you, dude). And I was back in business.  Annoyed, but back in business.</p>
<p>But here&#8217;s the thing.  I&#8217;m already annoyed, and now I&#8217;m looking at my .key file for a 27 slide file, and it&#8217;s 3.8Mb.  What???  I know I&#8217;m abusive to presentation software.  I understand that my usage is a tad on the abnormal side.  But 3.8Mb for 27 slides?  Slides with graphic drawings and text, no photos, no movies, no sounds?  That&#8217;s nuts.  With a little experimentation I discovered that more than half that is due to two slides that make extensive use of animations.  And I&#8217;m betting that those same animations had something to do with Keynote dying a horrible death when I tweaked the text underneath.  Someday when I have more time I&#8217;ll see if I can reproduce the bug.</p>
<p>Let&#8217;s just say I&#8217;m re-evaluating my decision to use Keynote.  PowerPoint is looking pretty good right now.  Sigh.</p>
<p>And this is also a lesson re-learned about software testing: there&#8217;s nothing like a real user to find real problems.  For Agile projects, that means automated unit and acceptance tests are necessary but not sufficient.  Make sure real humans try the software under real world conditions.  Given the topic of the course materials I was working on, this was a timely reminder&#8230;though a far more painful one than I really wanted.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/10/16/oh-the-irony/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>RubyFIT and Fitnesse</title>
		<link>http://testobsessed.com/2007/10/09/rubyfit-and-fitnesse/</link>
		<comments>http://testobsessed.com/2007/10/09/rubyfit-and-fitnesse/#comments</comments>
		<pubDate>Tue, 09 Oct 2007 23:02:23 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/10/09/rubyfit-and-fitnesse/</guid>
		<description><![CDATA[<p>At the moment, I&#8217;m creating a little Acceptance Test Driven Development (ATDD) demo.  I&#8217;m keen on Ruby these days, so I wanted to do it all in Ruby.  And I wanted to use Fitnesse.  And as it happens, Fitnesse supports RubyFIT.  Or RubyFIT supports Fitnesse.  Something like that.  So I <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/10/09/rubyfit-and-fitnesse/">RubyFIT and Fitnesse</a></span>]]></description>
			<content:encoded><![CDATA[<p>At the moment, I&#8217;m creating a little Acceptance Test Driven Development (ATDD) demo.  I&#8217;m keen on Ruby these days, so I wanted to do it all in Ruby.  And I wanted to use <a href="http://www.fitnesse.org">Fitnesse</a>.  And as it happens, Fitnesse supports <a href="http://fit.rubyforge.org/">RubyFIT</a>.  Or RubyFIT supports Fitnesse.  Something like that.  So I figured this would be a slam dunk.</p>
<p>I was wrong.  It&#8217;s taken me the better part of a day.  Now it could be because I can&#8217;t read directions terribly well.  And that may also explain the odd assortment of leftover hardware I have from various Ikea purchases.  But I did discover at least one gotcha I didn&#8217;t find documented anywhere else, so I thought I&#8217;d share.</p>
<p>First, major thanks to <a href="http://www.cornetdesign.com/2005/12/fitnesse-and-ruby-basic-tutorial.html">Cory Foy for his fabulous little tutorial</a>.  And thanks to maosd, whoever you are, for <a href="http://maonet.wordpress.com/2007/08/02/update-to-fit-with-ruby/">blogging some update notes</a>.  They helped a lot.  And finally thanks to <a href="http://www.xprogramming.com/xpmag/RubyFitnesse.htm">Ron and Chet for blogging about their RubyFIT/Fitnesse adventures</a>.</p>
<p>Now, for the gotchas I ran into that made a 1 hour project into something more like 6 hours.</p>
<ol>
<li>Beware hiding the right side of your browser off-screen.  The &#8220;Errors Occurred&#8221; icon in Fitnesse appears on the right hand side of the browser.  And if it&#8217;s off screen, all you&#8217;ll see is a friendly &#8220;Assertions: 0 right, 0 wrong, 0 ignored, 0 exceptions&#8221; when something goes drastically wrong.  Time wasted: 1 hour.  Yes, I am an idiot.
</li>
<li>By default, mac host names are like <i>host</i>.local.  So my iMac, &#8220;eshmac&#8221;, has a host name of &#8220;eshmac.local&#8221;.  The first problem I ran into was that Fitnesse wanted to refer to the machine as &#8220;eshmac,&#8221; and my machine maintained &#8220;there&#8217;s nobody here by that name.&#8221;  I tried to figure out how to get Fitnesse to let me customize the host name, but to no avail.  So I decided to make &#8220;eshmac&#8221; a legitimate name instead.  Now, I&#8217;m sure there are better ways to do this, but since I didn&#8217;t want to change the host name on the network, I just added a record for &#8220;eshmac&#8221; and pointed it to &#8220;127.0.0.1&#8243; in the /etc/hosts file.  Time wasted: 0.5 hours.
</li>
<li>As maosd indicates, you need to call the FitServer.rb file from the gem location.  Conveniently enough, the path is documented in the README.txt file that comes with the RubyFIT gem.  Inconveniently, that file is placed in the very folder I was looking for.  The answer is that on Macs, gems get installed to /usr/lib/ruby/gems, and you can find the RubyFIT gem at /usr/lib/ruby/gems/1.8/gems/fit-1.1/.  Time wasted: 1 hour.
</li>
<li>In Cory Foy&#8217;s tutorial, where it says, &#8220;You want to go one directory below the directory your class is in,&#8221; it really means one directory below.  I had my !path variable set incorrectly, and could not figure out for the life of me why RubyFIT couldn&#8217;t find the fixture.  Silly me.  Time wasted: 2 hours &#8211; and waaayyy too many &#8220;puts&#8221; statements.
</li>
</ol>
<p>So, as a service to those who happen to be as documentationally challenged as I am, allow me to be excruciatingly precise about the naming thing with RubyFIT and Fitnesse.  It&#8217;s enough of a gotcha that lots of people have already written about it.  But here&#8217;s my attempt at explaining things.</p>
<p>Let&#8217;s say you want to call your test page FooTest.  And you want to create a Division fixture.  And you want to create a directory hierarchy under &#8220;/mine&#8221; to hold your fixture files.</p>
<p>Your Fitnesse page will contain:</p>
<pre>
...other stuff...

!path /mine/
|Footest.Division|

...other stuff...
</pre>
<p>Your fixture code will look like:</p>
<pre>
...
module Footest
	class Division &lt; Fit::ColumnFixture
		# code goes here
	end
end
...
</pre>
<p>And that code will live in the file <b>/mine/footest/division.rb</b></p>
<p>Once again, note that the !path setting in Fitnesse is &#8220;/mine/&#8221;.  For the record, the mistake I made was setting &#8220;!path /mine/footest/&#8221;.  As I said, I&#8217;m documentationally challenged.</p>
<p>Matching capitalization does not seem to be important, but the names of the directories, files, modules, and classes sure are.  And they all have to match up.  So, your test page name must match your module name and that must match the directory name in which the file lives, and does <b>not</b> match the !path variable.</p>
<p>I&#8217;m sure I&#8217;ll run into more gotchas, but I figured I should document these while I&#8217;m thinking about them.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/10/09/rubyfit-and-fitnesse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The &quot;We Reframe&quot;</title>
		<link>http://testobsessed.com/2007/01/08/the-we-reframe/</link>
		<comments>http://testobsessed.com/2007/01/08/the-we-reframe/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 05:44:25 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/01/08/the-we-reframe/</guid>
		<description><![CDATA[<p>A long time ago, when I was employed at a software company, I participated in an all-engineering offsite meeting in which we attempted to figure out what we needed to do to improve.</p>
<p>First exercise: we went around the room, round-robin style, and everyone contributed an idea.</p>
<p>A Tester said the Developers should write better Specifications.</p>
<p>A Developer said <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/01/08/the-we-reframe/">The &#34;We Reframe&#34;</a></span>]]></description>
			<content:encoded><![CDATA[<p>A long time ago, when I was employed at a software company, I participated in an all-engineering offsite meeting in which we attempted to figure out what we needed to do to improve.</p>
<p>First exercise: we went around the room, round-robin style, and everyone contributed an idea.</p>
<p>A Tester said the Developers should write better Specifications.</p>
<p>A Developer said Marketing should give them Better Requirements.</p>
<p>Another Tester said the Developers should be doing More Unit Testing.  (Yes, I was in that group, but it wasn&#8217;t me, I swear&#8230;OK, maybe it was.)</p>
<p>Someone else said the Managers should do Better Planning.</p>
<p>I knew things were really getting silly when someone said that what was really needed was Better Health Coverage and someone else said Bigger Cubicles.  The intent of the meeting was to figure out how we could improve, not to have a two day whine festival.</p>
<p>But what struck me was that no one suggested something that could be accomplished by their own group.  No one ever said, &#8220;I&#8217;d really like to do better at my own work by&#8230;&#8221;  Every single idea was an idea that Someone Else would have to implement.  At the end of two days I felt completely demoralized.  We had a long to do list, much of it Action Items for management, and nothing that seemed likely to actually happen.  Indeed, six months after the meeting, nothing had changed.</p>
<p>Since then, I&#8217;ve had the opportunity to lead similar offsite meetings.  Whenever I lead such a meeting, I remember how creating a long To Do List for Other People didn&#8217;t work well, nor did hosting a Whine Festival.</p>
<p>Fortunately, I&#8217;ve discovered a way to avoid the Other People&#8217;s To Do List trap.</p>
<p>I ask participants to focus on what they can do.  Not what they want someone else to do, but what they, themselves can do.  And then I teach them the We Reframe.</p>
<p>The We Reframe involves transforming &#8220;They&#8221; statements like &#8220;They don&#8217;t give us documentation&#8221; into &#8220;We&#8221; statements like &#8220;We don&#8217;t have the information we need to do our jobs effectively&#8221;.</p>
<p>The transformation is straightforward.  You change the sentence from what someone else isn&#8217;t doing to the effect it has on you.  Some more examples:</p>
<p>&#8220;They aren&#8217;t doing unit testing&#8221; becomes &#8220;We&#8217;re getting software that is not stable enough to test.&#8221;</p>
<p>&#8220;They don&#8217;t give us clear requirements&#8221; becomes &#8220;We don&#8217;t know what we&#8217;re supposed to build.&#8221;</p>
<p>&#8220;They aren&#8217;t planning&#8221; becomes &#8220;We feel pulled in too many directions at once.&#8221;</p>
<p>This seems like a subtle difference.  But reframing the problem in terms of the effect it has on you allows you to own the solution.  It frees you from trying to figure out what someone else should do differently and allows you to focus on how you can adapt to the situation.</p>
<p>If we&#8217;re getting software that isn&#8217;t stable enough to test, what can we do about it?  We could reject it.  We could provide a set of minimum acceptance tests to the developers.  We could integrate our test efforts with the developers&#8217; test efforts, eliminating the handoff that isn&#8217;t working.  There are a number of things we could do.  But if we define the problem as &#8220;They aren&#8217;t doing unit testing,&#8221; there&#8217;s very little we can do.  We can&#8217;t force them to write unit tests.  Even if we could, we can&#8217;t force them to write good ones that prevent the problem we&#8217;re actually experiencing.</p>
<p>The reframe worked well at helping the teams I facilitated come up with an actionable list.  And I discovered another profound result of the We Reframe that I hadn&#8217;t expected.</p>
<p>By focusing on things they can control directly, participants discovered that they have more power to solve their own problems than they originally thought.</p>
<p>The result is more than a list of things they can start doing immediately.  It&#8217;s a general change in attitude.</p>
<p>So the next time you feel frustrated because They aren&#8217;t doing something, try the We Reframe to see how many things you can do without any help at all from Them.</p>
<p>Oh, and by the way: They are likely to notice when you change how you work, and that might lead Them to consider changing too.  It&#8217;s worth a shot.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/01/08/the-we-reframe/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Day Tim Lister Asked Me &quot;Why Are Your Pants on Fire?&quot; and How It Changed My Life</title>
		<link>http://testobsessed.com/2007/01/03/the-day-tim-lister-asked-me-why-are-your-pants-on-fire-and-how-it-changed-my-life/</link>
		<comments>http://testobsessed.com/2007/01/03/the-day-tim-lister-asked-me-why-are-your-pants-on-fire-and-how-it-changed-my-life/#comments</comments>
		<pubDate>Thu, 04 Jan 2007 04:54:11 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2007/01/03/the-day-tim-lister-asked-me-why-are-your-pants-on-fire-and-how-it-changed-my-life/</guid>
		<description><![CDATA[<p>I&#8217;m in the process of migrating a bunch of content from my corporate website over here for reasons which will become apparent when I finally publish the newest version of my corporate website.  But that&#8217;s a topic for another day.</p>
<p>Migrating all this content has me looking at stuff I haven&#8217;t really looked at in a <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2007/01/03/the-day-tim-lister-asked-me-why-are-your-pants-on-fire-and-how-it-changed-my-life/">The Day Tim Lister Asked Me &#34;Why Are Your Pants on Fire?&#34; and How It Changed My Life</a></span>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m in the process of migrating a bunch of content from my <a title="Quality Tree Software, Inc." href="http://www.qualitytree.com">corporate website</a> over here for reasons which will become apparent when I finally publish the newest version of my corporate website.  But that&#8217;s a topic for another day.</p>
<p>Migrating all this content has me looking at stuff I haven&#8217;t really looked at in a while.  And it has me reminiscing.  I figure January is as good a time as any to reminisce about presentations and conferences past.</p>
<p>The last file I uploaded were the slides to <a href="/2002/02/14/why-are-my-pants-on-fire/">&#8220;Why Are My Pants on Fire?&#8221;</a>, a presentation I gave at the SM/ASM 2002 conference.</p>
<p>And that reminded me that I owe Tim Lister a big thank you for the title.  And therein lies a story.</p>
<p>Back in 2000, I was working for a company I shall choose not to name.  But it wouldn&#8217;t matter if I did name it since hardly anyone has heard of it.</p>
<p>While working at this unnamed company, I managed a group whose title was &#8220;Quality Engineering&#8221; but whose function was much more on the testing side of things.</p>
<p>Like most DotComs at the time, we were under constant pressure to bring the software to market faster.</p>
<p>You&#8217;re probably thinking, &#8220;Schedule pressure?  Right.  It&#8217;s software.  What else is new?&#8221;  This was different, as I discovered when management made it clear they&#8217;d spend just about any amount of money if it meant we could ship a week earlier.</p>
<p>The time pressure meant we took some crazy shortcuts.  And that meant I was in crisis mode most of the time.  I spent my days chasing down bugs and having nutty debates about whether or not we could ship software that, under certain circumstances we couldn&#8217;t quite pin down, would cause a Blue Screen of Death.</p>
<p>A year or so into the job, I took some time out to attend a conference.  Talking with others about DotCom insanity gave me a much needed sense of perspective.  And it felt rather cathartic.</p>
<p>That&#8217;s when I found myself sitting at a table with Tim Lister, Jim Highsmith, and some other luminaries I can&#8217;t recall just at this moment.  I was, quite frankly, more than a little starstruck.  Tom DeMarco and Tim Lister&#8217;s book <a href="http://www.amazon.com/exec/obidos/ASIN/0932633439/qualitreesoft-20">Peopleware</a> changed my life, or at least my career, and this was the first time I met Tim Lister in person.</p>
<p>You&#8217;d think being a bit starstruck would keep me quiet.  But no.  Remember I was feeling cathartic.  I talked about my job.  A lot.  Too much.  And much of what I said probably sounded like whining.  Let&#8217;s be honest.  I really was whining.  Tim listened for a while, then stopped me.</p>
<p>&#8220;Let me get this straight,&#8221; he began.  &#8220;You have a greenfield project with no legacy users to support, right?&#8221;</p>
<p>I nodded.</p>
<p>&#8220;The code is written in a modern programming language, you still have the original source code, and it&#8217;s even kept in version control?&#8221;</p>
<p>I nodded again.</p>
<p>&#8220;You have no legacy data you&#8217;re supposed to import into the system?&#8221;</p>
<p>I nodded again.</p>
<p>&#8220;SO WHY ARE YOUR PANTS ON FIRE?!?&#8221; he demanded.<img align="right" src="/wp-content/uploads/2007/01/pof-aiiieee.jpg" /></p>
<p>Why indeed.  His question had the desired effect: I stopped whining.</p>
<p>I pondered that question over the next year.  I considered Tim&#8217;s words each time we had yet another crisis, whenever customers complained about devastating bugs, and every time a DOA build was delivered into test.</p>
<p>Then I left the company.  I got tired of the smell of singed pants.  I got tired of the crises.  And I realized that I couldn&#8217;t do anything more to help.  I&#8217;d done everything I knew how to do, it hadn&#8217;t worked, and I was done.</p>
<p>Turns out I had great timing.  I didn&#8217;t know it at the time, but things were about to go from chaotic to dismal.  A couple months after I left they laid off half the staff.  A month later, they laid off another big chunk of folks.  And a month after that they closed their doors.</p>
<p>That was 2001, the year Silicon Valley turned into a ghost town.  You could tell no one in Silicon Valley was working by the shocking lack of traffic on the major freeways: commute times dropped precipitously for the lucky few still employed.</p>
<p>By then, I was back into consulting and training, and my commute involved airports.  Lots of airports.  And with each new client I visited, I kept pondering Tim&#8217;s question.</p>
<p>When you think about a question for that long, eventually answers emerge.  About two years after Tim asked me that fateful question, I turned my answers into the &#8220;Why Are My Pants on Fire?&#8221; presentation.  Now it&#8217;s one of my most frequently requested talks.</p>
<p>So, that&#8217;s the story of how Tim Lister inspired me to transform my miserable whining into useful answers that became a well-received and oft-requested presentation.  I&#8217;m grateful to Tim for the title and for his wisdom, but most of all, I&#8217;m grateful to him for making me see I was at least partly responsible for igniting my own trousers.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2007/01/03/the-day-tim-lister-asked-me-why-are-your-pants-on-fire-and-how-it-changed-my-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Easily Distracted</title>
		<link>http://testobsessed.com/2006/12/28/easily-distracted/</link>
		<comments>http://testobsessed.com/2006/12/28/easily-distracted/#comments</comments>
		<pubDate>Thu, 28 Dec 2006 17:43:31 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://www.testobsessed.com/2006/12/28/easily-distracted/</guid>
		<description><![CDATA[<p>Jan Chong is a doctoral candidate at Stanford, studying Organizational Behavior.  Jan has two CS degrees, so it&#8217;s natural that she would combines her interest in software development and organizational behavior by studying XP teams.  She presented some of her preliminary findings at Agile 2005.</p>
<p>One of the things that Jan observed while doing her <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2006/12/28/easily-distracted/">Easily Distracted</a></span>]]></description>
			<content:encoded><![CDATA[<p><a title="Jan Chong" href="http://www.stanford.edu/~jchong/">Jan Chong</a> is a doctoral candidate at Stanford, studying Organizational Behavior.  Jan has two CS degrees, so it&#8217;s natural that she would combines her interest in software development and organizational behavior by studying XP teams.  She presented some of her <a title="Social Behaviors on XP and non-XP Teams: A Comparative Study" href="http://www.stanford.edu/~jchong/research/agile2005-social.pdf">preliminary findings</a> at <a title="Agile 2005" href="http://www.agile2005.org">Agile 2005</a>.</p>
<p>One of the things that Jan observed while doing her research is that programmers working in pairs are interrupted regularly.  That makes sense.  The highly collaborative nature of XP increases work-related interruptions.  Moreover, pairing means there&#8217;s twice the probability of being interrupted.  Fortunately, working in pairs also makes it easier to refocus.</p>
<p>But the big surprise for me in Jan&#8217;s report was the observation that programmers working alone created interruptions for themselves.  Here&#8217;s how Jan described one non-XP, non-pairing programmer:</p>
<blockquote><p><em>&#8220;&#8230;Ian has few external interruptions, which gives him the opportunity to devote long stretches of uninterrupted attention to his primary work task. Instead, however, we find that Ian’s session is filled with points at which he turns his attention away from his primary work task without any external impetus. Ian’s session alternates between engagement in periods of focused work and sustained periods of social conversation or other activities unrelated to work.&#8221;</em></p></blockquote>
<p>Be honest.  Do you ever create distractions for yourself?  I do.  All the time.  And apparently I&#8217;m not alone.</p>
<p>My distractions are usually work-related.  &#8220;I should check my mail,&#8221; I think.  Or &#8220;I&#8217;d better look up how to&#8230;,&#8221;  But these short diversions often devolve into, well, goofing off.  The next thing I know one quick query on Google has turned into two hours of romping through interesting technology-related articles that have nothing to do with the problem at hand.</p>
<p>Reflecting on Jan&#8217;s observation helped me recognize a pattern: I&#8217;m particularly prone to these self-generated distractions when working on large, complex tasks.  And Jan&#8217;s observations of Ian increases my suspicion that creating distractions is a common coping mechanism.  (That would certainly help explain the wild success of <a title="You Tube" href="http://www.youtube.com/">You Tube</a>.)</p>
<p>So if self-generated distractions provide a way of coping with big, boring, or complex tasks, the cure would be to make tasks small, interesting, and straightforward.</p>
<p>Sure enough, I notice that I&#8217;m better at sticking to the task at hand when I take small steps with clear completion criteria.  For example, if working on my website, I&#8217;ll work on one image, text for one page, or one style at a time.  The more I try to do at once, the more tempted I am to create a distraction.  Distractions provide a mental break.  I feel less overwhelmed, and thus less easily distracted, when working in small, well-defined increments.  (You might note a similarity here with TDD, yet another way in which XP supports a high degree of productivity.)</p>
<p>Aha!  That means <em><strong>being easily distracted isn&#8217;t a sign of personal weakness; it&#8217;s an indication that I need to redefine or reorganize my work, take smaller steps, and begin with the end in mind</strong></em>.</p>
<p>I can do that.  Right after I check out what&#8217;s new on <a title="Reddit" href="http://reddit.com/">Reddit.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2006/12/28/easily-distracted/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dig First</title>
		<link>http://testobsessed.com/2006/12/05/dig-first/</link>
		<comments>http://testobsessed.com/2006/12/05/dig-first/#comments</comments>
		<pubDate>Tue, 05 Dec 2006 16:08:59 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://testobsessed.com/wordpress/2006/12/05/dig-first/</guid>
		<description><![CDATA[<p>Late last night, I decided to change my domain record to use a different DNS server.  I had good reasons, reasons that I will explain in a moment.  But the thing about making DNS changes is that they take hours to propagate.  Knowing I wouldn&#8217;t see the effects of my change for several <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2006/12/05/dig-first/">Dig First</a></span>]]></description>
			<content:encoded><![CDATA[<p>Late last night, I decided to change my domain record to use a different DNS server.  I had good reasons, reasons that I will explain in a moment.  But the thing about making DNS changes is that they take hours to propagate.  Knowing I wouldn&#8217;t see the effects of my change for several hours, I made the changes then went to bed.</p>
<p>This morning, cradling a cup of coffee, I thought I&#8217;d do a little blogging.  Imagine my dismay when I discovered that testobsessed.com couldn&#8217;t be found.  &#8220;Oh crud, what did I do?&#8221; I wondered.<span id="more-27"></span></p>
<p>I started with a <a title="whois query" href="http://www.internic.net/whois.html">whois query</a>.   Yup, the change I made last night was there.  So far, so good.  My domain record had the new DNS server as expected.</p>
<p>So was there a problem with the DNS server?  I <a title="an online dig service" href="http://www.kloth.net/services/dig.php">did a dig query</a> to find out what that DNS server had to say.  Aha!  Sure enough, there was a problem.  No A record.  The A record is like a listing in a phone book.  Without an A record, my domain was like an unlisted number.</p>
<p>Since I don&#8217;t run my own DNS server, that meant a call to tech support.  If there&#8217;s anyone I don&#8217;t want to talk to at 6AM while I&#8217;m still on my first cup of coffee, it&#8217;s tech support.  Well, tech support and credit card fraud departments.  And yeah, I&#8217;ve had to talk to credit card fraud departments lately too.  Identity theft sucks.  It&#8217;s been a splendiferous several weeks.  But I digress.</p>
<p>Before I describe my conversation with tech support, I should back up and explain why I wanted to switch to a different DNS server.</p>
<p>The testobsessed.com domain is registered with Network Solutions and hosted on godaddy.  My DNS records had been managed by Network Solutions DNS servers.  But godaddy allows customers to use their DNS servers no matter where your domain is registered, and that lets me take advantage of some of godaddy&#8217;s other spiffy features.  So I decided to manage my DNS records using godaddy&#8217;s DNS servers.</p>
<p>It&#8217;s an easy two step process:</p>
<ol>
<li>On the godaddy site, specify the domain name for godaddy&#8217;s DNS servers to manage.  Godaddy then provides DNS server names.</li>
<li>On the domain registration site, in my case Network Solutions, point the domain record to the DNS servers godaddy provided.</li>
</ol>
<p>See, simple.  What could go wrong?</p>
<p>So I entered &#8220;testobsessed.com&#8221; on godaddy&#8217;s site and got my shiny new DNS server names: MNS1.SECURESERVER.NET and MNS2.SECURESERVER.NET.  I went over to Network Solutions and changed my domain record to point to those DNS server names.  Then I went to bed confident that when I awoke in the morning, my dns records would be safely in the hands of godaddy servers and all would be well with the world.</p>
<p>You know what happened next: I experienced the slow dawning awareness that the &#8220;server not found&#8221; error wasn&#8217;t just a hiccup in the dns propagation, followed by an exclamation of &#8220;Crud,&#8221; and then &#8220;Where&#8217;s that tech support phone number?&#8221;</p>
<p>I got through to tech support quickly.  I have to say, every time I&#8217;ve needed godaddy&#8217;s tech support, I&#8217;ve gotten through fast.  Gotta love it.</p>
<p>Once they confirmed I&#8217;m me, I rattled off my problem: &#8220;I changed my domain registration record to point to the DNS server name your offsite DNS service provided me, but something&#8217;s wrong with my A record.&#8221;  I went on to explain what I&#8217;d learned using Whois and Dig.</p>
<p>I figured tossing around words like &#8220;A record,&#8221; &#8220;Whois,&#8221; and &#8220;Dig&#8221; could only help.  When you&#8217;re talking to tech support folks it&#8217;s important to make sure they understand you have a clue.  Otherwise they tend to give you some silly suggestion to get you off the phone fast, like &#8220;wait a few hours for the DNS change to propagate.&#8221;  Godaddy&#8217;s tech support folks are better than most, but it&#8217;s just a fact of life that tech support people want you off the phone as fast as possible.  It&#8217;s not their fault: they&#8217;re usually measured on stupid things like # calls handled per hour, so getting people off the phone fast is a priority.</p>
<p>Anyway, the guy on the other end listened attentively, then said: &#8220;I see your DNS server is set up as MNS1.SECURESERVER.NET.  That&#8217;s weird.&#8221;  Hmmm.  When tech support people say &#8220;that&#8217;s weird,&#8221; it&#8217;s both good and bad.  Good: they understand there&#8217;s a real problem here and you&#8217;re not just trying to use the mouse as a foot pedal.  Bad: they don&#8217;t know what&#8217;s wrong either.</p>
<p>He kept asking me where I got the &#8220;MNS1.&#8221;  I kept telling him that godaddy&#8217;s software TOLD me to use that server name.  He couldn&#8217;t believe me.</p>
<p>&#8220;I didn&#8217;t make it up,&#8221; I asserted.</p>
<p>&#8220;Didn&#8217;t you enter that name here?&#8221; he asked, incredulously.</p>
<p>&#8220;No, I just entered the domain name.  The form doesn&#8217;t let me enter a DNS server name.  Your software responds with a DNS server name.  Your software did this to me.&#8221;</p>
<p>&#8220;Well, it should be NS1.SECURESERVER.NET,&#8221; he insisted.</p>
<p>I did another dig, this time on NS1.SECURESERVER.NET.  Bingo.  He was right.  I&#8217;m still not sure he believes me about godaddy&#8217;s software giving me the MNS1 server name, but it doesn&#8217;t really matter.  By this time I understood what was wrong and how to fix it.  The minute we hung up I changed my DNS server names on my domain record at Network Solutions.</p>
<p>And even as I write this, I&#8217;m still waiting for the new new DNS server information to propagate.  It will be a few hours yet.  I&#8217;m sure this change will fix it.  No really, this time for sure.  Long feedback cycles.  Ick.</p>
<p>So what should I have done differently?  Before changing my DNS servers, I should have verified the DNS server names that godaddy provided.  It&#8217;s easy to do with dig.</p>
<p>Lesson learned.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2006/12/05/dig-first/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Time to Re-negotiate?</title>
		<link>http://testobsessed.com/2006/12/04/time-to-re-negotiate/</link>
		<comments>http://testobsessed.com/2006/12/04/time-to-re-negotiate/#comments</comments>
		<pubDate>Mon, 04 Dec 2006 17:25:59 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Lessons Learned]]></category>
		<category><![CDATA[Teamwork]]></category>

		<guid isPermaLink="false">http://testobsessed.com/wordpress/2006/12/04/time-to-re-negotiate/</guid>
		<description><![CDATA[<p>On every project, we make commitments based on negotiated agreements, even when we don&#8217;t think we&#8217;re negotiating.  We agree to accomplish certain tasks by a given deadline.  We agree to follow a particular process.  We agree to work late one day so we can leave early another.  Or we agree to work <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2006/12/04/time-to-re-negotiate/">Time to Re-negotiate?</a></span>]]></description>
			<content:encoded><![CDATA[<p>On every project, we make commitments based on negotiated agreements, even when we don&#8217;t think we&#8217;re negotiating.  We agree to accomplish certain tasks by a given deadline.  We agree to follow a particular process.  We agree to work late one day so we can leave early another.  Or we agree to work over a weekend because we want to do whatever it takes to make the project succeed.</p>
<p>But sometimes we discover that the negotiated agreement no longer fits for us for some reason.  We need to revisit the agreement.  We need to re-negotiate.<span id="more-26"></span></p>
<p>In talking about this subject with my friend and colleague <a title="Dave W. Smith's Blog" href="http://www.davewsmith.com/blog/">Dave Smith</a>, he noted, &#8220;I find it interesting that people sometimes don&#8217;t realize they can re-negotiate.&#8221;   I thought that was an interesting observation.  And I thought about how the phrase, &#8220;I stand by my word,&#8221; is a point of honor for many.  What&#8217;s &#8220;re-negotiating&#8221; to one person can be classified as &#8220;weaseling&#8221; by another.</p>
<p>And, indeed, re-negotiating can leave a sour taste in people&#8217;s mouths.</p>
<p>Consider a trainer who had agreed to lead a class for a training company.  The class had been advertised and students had already signed up when the trainer called up the hosting company and informed them that &#8220;he wasn&#8217;t really sure about doing this class&#8230;&#8221;   He gave the training company an ultimatum: raise his fee or he would not show up to do the class.</p>
<p>Now I don&#8217;t know what the circumstances were around the trainer&#8217;s demand for more money.  What I do know is that my contact at that training company who told me this story was seventeen shades of angry.  He felt that the trainer behaved unethically.  He vowed never to do business with that trainer again.  And the trainer lost a great reference.</p>
<p>Did the trainer have a good reason to re-negotiate?  I have no way of knowing.  Maybe he did, or maybe he just got greedy.  Whether or not he had a good reason, his re-negotiation cost him business.</p>
<p>So how do we recognize the point in time when things have changed enough that the existing agreement can no longer hold?  When do the risks in the original agreement outweigh the risks of re-negotiating?</p>
<p>Wishing you&#8217;d made a more advantageous deal isn&#8217;t enough of a reason to re-negotiate.  But it might be time to renegotiate if&#8230;</p>
<p>&#8230;key assumptions turned out to be invalid.  On one project, we assumed that parts of the code that weren&#8217;t changing would not need to be retested.  When we began testing, we discovered that the changes, though small, affected every part of the system.  Our original plan was too risky and we had to revisit the scope of testing.</p>
<p>&#8230;the scope, schedule, or resources for the project have fundamentally changed.  On another project, we had to bring in the deadline to meet the demands of a huge customer.  New date, new project plan.  We re-negotiated, scaling back the scope of testing and setting less rigorous release criteria.</p>
<p>&#8230;something changes for you, personally, that makes it impossible for you to live up to your commitment.  Anyone may discover that they have health issues, family emergencies, or other commitments that conflict with project commitments.</p>
<p>&#8230;others aren&#8217;t living up to their commitments in a way that affects you directly.  When one of my clients stopped paying me, I had to inform them that I couldn&#8217;t continue to do work for them until they paid me for work already accomplished.  My manager at the client site may have felt that I was using strong-arm tactics, but I simply could not afford to ignore the risk that the company might decide to default on their bills altogether.  (Happy ending: they made good on their past-due bills and I finished the project.)</p>
<p>So how do you handle a re-negotiation once you&#8217;ve discovered it&#8217;s necessary?</p>
<p>That&#8217;s a subject for another post.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2006/12/04/time-to-re-negotiate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who Carries the Risk?</title>
		<link>http://testobsessed.com/2006/12/01/who-carries-the-risk/</link>
		<comments>http://testobsessed.com/2006/12/01/who-carries-the-risk/#comments</comments>
		<pubDate>Fri, 01 Dec 2006 23:26:53 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Lessons Learned]]></category>

		<guid isPermaLink="false">http://testobsessed.com/wordpress/2006/12/01/who-carries-the-risk/</guid>
		<description><![CDATA[<p>I attended Ken Schwaber&#8217;s Certified Scrum Master training in June 2005.  Yup, I&#8217;m a Certified Scrum Master.  But I didn&#8217;t do the training for the certification.  I did it for the learning.  And for the chance to meet Ken.</p>
<p>I got more than I bargained for.  I learned a lesson that has <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2006/12/01/who-carries-the-risk/">Who Carries the Risk?</a></span>]]></description>
			<content:encoded><![CDATA[<p>I attended Ken Schwaber&#8217;s Certified Scrum Master training in June 2005.  Yup, I&#8217;m a Certified Scrum Master.  But I didn&#8217;t do the training for the certification.  I did it for the learning.  And for the chance to meet Ken.</p>
<p>I got more than I bargained for.  I learned a lesson that has influenced my actions deeply and that forced me to re-evaluate choices I made in the past.  I learned that for years I&#8217;d been accepting risk that was not mine to accept.<span id="more-25"></span></p>
<p>The lesson started to take root in the middle of an exercise that was supposed to take 90 minutes, with a lunch break in the middle.  I was puzzled that it was a 90 minute exercise.  I thought our team was just about done before the lunch break.  The answers seemed straightforward.  I couldn&#8217;t imagine spending another 45 minutes hashing through a solution.</p>
<p>I found myself standing in the buffet line next to Ken.  &#8220;So Ken,&#8221; I began.  &#8220;Why is this a 90 minute exercise?  The answer seems obvious.&#8221;</p>
<p>Ken just looked at me.  He didn&#8217;t even shake his head.  He just looked at me.  Stared.  I began to fidget uncomfortably.  Finally, he said, &#8220;You made this mistake in a previous exercise too.  Think about it.&#8221;</p>
<p>I did.  And I was baffled.  What did this exercise have in common with any of the previous exercises?</p>
<p>The answer became clear in the debrief.  As we&#8217;re talking through possible solutions, Ken brought up more and more nightmare scenarios we hadn&#8217;t taken into account with our solution.  &#8220;What are you going to do about&#8230;?&#8221; he asked.  Each one of his &#8220;what ifs&#8221; was a clue-by-four smashing its way through my thick skull.</p>
<p>I started having flashbacks to real life projects that resembled the exercise.  I was nearly catatonic with growing horror at the realization of the fundamental mistakes I&#8217;d made.  For years.  And I&#8217;d thought the exercise was easy.  The stark contrast between my overconfidence during the exercise and my sudden awakening during the debrief cemented the lesson.</p>
<p>And I finally saw the connection between the exercises.  Each exercise had a moment when you had to choose a course of action.  You had to decide whether to engage the stakeholder in a deep discussion about risks and constraints or just deliver something, anything, that might come close to what they needed.  The problems to be solved were different.  The format of each exercise was different.  But in each case there came a moment when you had to decide whether to proceed or back off.</p>
<p>In each case, I&#8217;d been in favor of a &#8220;deliver something&#8221; approach.  I&#8217;m a get-it-done kind of person.  I like to deliver value.  I like forward progress.  Given the choice between &#8220;Do&#8221; and &#8220;Talk,&#8221; I&#8217;ll pick &#8220;Do&#8221; almost every time.</p>
<p>I suddenly became aware that my can-do approach was buffering the stakeholders from full awareness of the treacherous terrain ahead.</p>
<p>As a tester, I think I know something about risk.  I know where bugs tend to hide; I know how to spot vulnerabilities in software; and I have a vivid imagination for nightmare scenarios.  I test for risk all the time and communicate what I learn to my stakeholders and the team.  But my belief that I know something about risk created a huge blind spot.  I was unaware that others assume my knowledge of risk means I&#8217;m taking care of the risks for them.  &#8220;Elisabeth has it covered,&#8221; they say to themselves.  &#8220;I don&#8217;t need to worry.&#8221;</p>
<p>&#8220;YES YOU DO!&#8221; I would have shouted, if I had known about that internal conversation.  &#8220;You should ALWAYS worry!  So many things could go wrong, so many things I can&#8217;t control!  I make mistakes.  Big ones.  Frankly, I can be a COMPLETE MORON sometimes.  Please worry.  It&#8217;s safer!&#8221;</p>
<p>But until June 2005, I wasn&#8217;t even really aware how much my stakeholders saw me as their salvation from worry.  I missed the biggest risk of all: the risk that the people with the power to make decisions would ignore the risks.</p>
<p>I could talk until I was blue in the face about the risks, but my actions—helping to move the project forward—would override my words.  &#8220;This is dangerous,&#8221; I could say.  But I would have handed the customer a loaded gun pointed at their feet.  &#8220;Don&#8217;t pull the trigger,&#8221; I could say.  But the customer has the loaded gun in his hand, pointed at his right foot, and he&#8217;s thinking why would I have given it to him if it wasn&#8217;t safe?</p>
<p>If that 90 minute exercise had been a real project, we probably would have ended up in court with the Customer&#8217;s lawyers saying, &#8220;Well, your honor, these software people are the experts, and they failed to advise my client that anything could go wrong.&#8221;  The client wouldn&#8217;t remember the admonitions, warnings, and caveats.  They would remember the fact that we delivered something that failed, and they would feel betrayed.</p>
<p>I began wondering about ways I&#8217;d unconsciously accepted risk in the real world.</p>
<p>The realization hit me: <em><strong>Any time I reduce visibility I am transferring the responsibility for risk from the project decision makers to myself.</strong></em></p>
<p>When I worked countless hours of unpaid, unacknowledged overtime in a desperate attempt to bring a troubled project back under control, I thought I was being a hero.  But I was accepting risk that wasn&#8217;t mine to accept.  The stakeholders had a right to know exactly how troubled that project was, and a responsibility to deal with it.  I wasn&#8217;t being a hero.  I was being a loose cannon.  The fact that a loose cannon sometimes hits the mark doesn&#8217;t change the fact that it&#8217;s dangerous to everyone around it.</p>
<p>When I over-committed and re-prioritized my task stack or let some of my lower priority tasks slide, I thought I was doing the right thing by taking care of the important stuff.  But because I didn&#8217;t discuss the decision to let tasks slide with the team, I shouldered risk I should not have taken on.</p>
<p>When I chose to run only a subset of the tests because we were running out of time, again without discussing my decisions with my stakeholders, I thought I was taking initiative.  But once again, I was denying my stakeholders the opportunity to steer the project.</p>
<p>In hindsight, most of my decisions were right.  I&#8217;m not saying I acted irresponsibly.  But I did exceed my authority.  The fact that I had reasonably good judgement most of the time does not exonerate me.  I had an obligation to push the risk back onto the people with the real responsibility to handle it.</p>
<p>That doesn&#8217;t mean I should have forced non-technical business stakeholders to decide exactly what tests I should run.  There are certainly times when I am in a better position to see which way we should go to increase the likelihood of success on the project.  But it does mean that I should have made the stakeholders more aware of the tradeoffs I was making, at the time I was making them.  And I should have consulted with them about options and consequences before making big changes.</p>
<p>This reminds me of a story that a doctor told me.</p>
<p>Resident doctors work insane hours: 30 or 40 hour shifts are not uncommon.  That&#8217;s hours in a shift, not a week.  40 hours straight.  My doctor friend finds this practice terrifying.  &#8220;Lives are in our hands when we can&#8217;t even stand upright,&#8221; she lamented.  But it&#8217;s standard practice and she had no luck trying to convince the hospital administration to change it.</p>
<p>Her solution?  She created buttons for all the residents in the ER that read: &#8220;It&#8217;s been _____ hours since I&#8217;ve had any sleep.&#8221;  The residents would update the number every hour, and patients would know exactly how little sleep their doctor had had.  The patients could then decide whether or not they really wanted someone who had been awake for 40 hours straight stitching up a wound, doing a spinal tap, or setting a broken bone.</p>
<p>Now that&#8217;s visibility, and it gives the stakeholders the information they need to make a choice.</p>
<p>So how do you bring visibility like that to your projects?<br />
And how do you make sure you don&#8217;t accept risks that aren&#8217;t yours to accept?</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2006/12/01/who-carries-the-risk/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
