<?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>lixo.org &#187; Work</title>
	<atom:link href="http://www.lixo.org/archives/category/general/work/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lixo.org</link>
	<description>letting the problem solve itself</description>
	<lastBuildDate>Tue, 11 May 2010 04:39:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Balances between agile and usability</title>
		<link>http://www.lixo.org/archives/2008/11/27/balances-between-agile-and-usability/</link>
		<comments>http://www.lixo.org/archives/2008/11/27/balances-between-agile-and-usability/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 23:04:58 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2008/11/27/balances-between-agile-and-usability/</guid>
		<description><![CDATA[Jakob Nielsen on the use of Agile methods: Agile&#8217;s biggest threat to system quality stems from the fact that it&#8217;s a method proposed by programmers and mainly addresses the implementation side of system development. As a result, it often overlooks interaction design and usability, which are left to happen as a side effect of the [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/admiller/2761925206/" title="photo sharing"><img src="http://farm4.static.flickr.com/3246/2761925206_f12a3bd2ac_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>Jakob Nielsen on <a href="http://www.useit.com/alertbox/agile-methods.html">the use of Agile methods</a>:</p>
<blockquote><p>Agile&#8217;s biggest threat to system quality stems from the fact that it&#8217;s a method proposed by programmers and mainly addresses the implementation side of system development. As a result, it often overlooks interaction design and usability, which are left to happen as a side effect of the coding.</p>
</blockquote>
<p>In my experience, mostly as a developer, it is really easy to dismiss interaction and usability design for two reasons.</p>
<p>The first comes from the developers themselves, trading prettiness and consistency of user experience for cleaner and sounder domain models whenever they go in opposite directions. Signs this is happening are developers crying <a href="http://c2.com/xp/YouArentGonnaNeedIt.html"><span class="caps">YAGNI</span></a> when the stakeholders ask for a zoomable chart or <a href="http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html"><span class="caps">DTSTTCPW</span></a> when a sortable, paginated data table is required.</p>
<p>Next time you see a system where there are enormous listings of items with no search, pagination or sorting, ask the developers if they have ever watched a typical user at work; chances are they have only thought about the system as they see it: since the testing dataset is usually small, a loop spitting out a bit of <span class="caps">HTML</span> for each element isn&#8217;t such a big deal. They might even say there&#8217;s a story to implement all that lovely stuff later on, but they just get moved over and over to the bottom of the backlog barrel&#8230; until everyone watches a person struggle to find needles in a tabular haystack all day. This is a simple example &#8211; almost too trivial actually, but one I&#8217;ve seen happen way too many times.</p>
<p>Changing the perception that usability is just the icing on the cake draws attention to all that wasted time to the stakeholders, and should enable a much better dialogue: developers get to write an application users will love, stakeholders spend their money wisely on something that will actually increase return on investment (as productivity gains), users feel empowered and less likely to make mistakes. Everybody wins.</p>
<p>The second reason UI design and usability get overlooked, and this is the one <a href="http://blog.franktrindade.com">Frank</a> alludes to in his <a href="http://blog.franktrindade.com/2008/11/25/agile-vs-usability">latest post</a>, is that some agile teams rely a bit too heavily on the stakeholder&#8217;s descriptions of what is wanted. It instantly reminded me of one my favourite quotes from <a href="http://www.imdb.com/title/tt0317219/">Cars</a>:</p>
<blockquote><p><strong>Lightning McQueen:</strong> All right, Luigi, give me the best set of black walls you&#8217;ve got.</p>
<p><strong>Luigi:</strong> No, no, no! You don&#8217;t know what you want! Luigi know what you want. Black-wall tires, they blend into the pavement, but these white-wall tires, they say look at me, here I am, love me.</p>
<p><strong>Lightning McQueen:</strong> All right, you&#8217;re the expert.</p>
</blockquote>
<p>I find it rare for the stakeholders to know exactly what they want, down to what the end-user experience should be like. Thinking about a reasonably-sized application at this level of detail can only be done as a series of small, incremental steps and having someone on the team who is really obsessed about making every single pixel on the screen be in the right place. And if you read the last sentence and thought &#8220;well, that&#8217;s not exactly the role of my stakeholder!&#8221; you get the point: the stakeholders should not have the final word as to what the usability and experience details should be, in the same way they simply delegate to and rely on the expertise of the development team to flesh out the details of a persistence layer.</p>
<p>Have look and feel expertise in your team, and trust it, in the same way you would trust the database or network connectivity expertise.</p>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2008/11/27/balances-between-agile-and-usability/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Networks Are Smart at the Edges</title>
		<link>http://www.lixo.org/archives/2008/07/21/networks-are-smart-at-the-edges/</link>
		<comments>http://www.lixo.org/archives/2008/07/21/networks-are-smart-at-the-edges/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 17:20:42 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2008/07/21/networks-are-smart-at-the-edges/</guid>
		<description><![CDATA[A toothpaste factory had a probem: they sometimes shipped empty boxes, without the tube inside. This was due to the way the production line was set up, and people with experience in designing production lines will tell you how difficult it is to have everything happen with timings so precise that every single unit coming [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/camil_t/1185912575/" title="photo sharing"><img src="http://farm2.static.flickr.com/1316/1185912575_74ae17c666_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>A toothpaste factory had a probem: they sometimes shipped empty boxes, without the tube inside. This was due to the way the production line was set up, and people with experience in designing production lines will tell you how difficult it is to have everything happen with timings so precise that every single unit coming out of it is perfect 100% of the time. Small variations in the environment (which can&#8217;t be controlled in a cost-effective fashion) mean you must have quality assurance checks smartly distributed across the line so that customers all the way down the supermarket don&#8217;t get pissed off and buy someone else&#8217;s product instead.</p>
<p>Understanding how important that was, the CEO of the toothpaste factory got the top people in the company together and they decided to start a new project, in which they would hire an external engineering company to solve their empty boxes problem, as their engineering department was already too stretched to take on any extra effort.</p>
<p>The project followed the usual process: budget and project sponsor allocated, RFP, third-parties selected, and six months (and $8 million) later they had a fantastic solution &#8212; on time, on budget, high quality and everyone in the project had a great time. They solved the problem by using some high-tech precision scales that would sound a bell and flash lights whenever a toothpaste box weighing less than it should. The line would stop, and someone had to walk over and yank the defective box out of it, pressing another button when done.</p>
<p>A while later, the CEO decides to have a look at the ROI of the project: amazing results! No empty boxes ever shipped out of the factory after the scales were put in place. Very few customer complaints, and they were gaining market share. &#8220;That&#8217;s some money well spent!&#8221; &#8211; he says, before looking closely at the other statistics in the report.</p>
<p>It turns out, the number of defects picked up by the scales was 0 after three weeks of production use. It should&#8217;ve been picking up at least a dozen a day, so maybe there was something wrong with the report. He filed a bug against it, and after some investigation, the engineers come back saying the report was actually correct. The scales really weren&#8217;t picking up any defects, because all boxes that got to that point in the conveyor belt were good.</p>
<p>Puzzled, the CEO travels down to the factory, and walks up to the part of the line where the precision scales were installed. A few feet before it, there was a $20 desk fan, blowing the empty boxes out of the belt and into a bin.</p>
<p>&#8220;Oh, that &#8212; one of the guys put it there &#8217;cause he was tired of walking over every time the bell rang&#8221;, says one of the workers.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2008/07/21/networks-are-smart-at-the-edges/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>The Project Game</title>
		<link>http://www.lixo.org/archives/2007/06/13/the-project-game/</link>
		<comments>http://www.lixo.org/archives/2007/06/13/the-project-game/#comments</comments>
		<pubDate>Wed, 13 Jun 2007 20:33:17 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2007/06/13/the-project-game/</guid>
		<description><![CDATA[After reading A Theory Of Fun, I started seeing projects (and many other human activities) modelled as a game. In the book, Raph Koster describes a series of game development rules, and I found that they can be mapped to the software development project domain with some interesting results: A project, just like a game, [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/ahmedzahid/44627552/" title="photo sharing"><img src="http://farm1.static.flickr.com/31/44627552_7239172823_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>After reading <a href="http://www.theoryoffun.com">A Theory Of Fun</a>, I started seeing projects (and many other human activities) modelled as a game. In the book, <a href="http://www.raphkoster.com">Raph Koster</a> describes a series of game development rules, and I found that they can be mapped to the software development project domain with some interesting results:</p>
<ul>
<li>A project, just like a game, has roles. In projects, they&#8217;re specific to each role. These rules define the possible actions for each of them. <em>(This one isn&#8217;t described in the book, but I added it just to contextualise.)</em></li>
<li>Role-specific rules should be unambiguous, intelligible and apply to all people in that role.</li>
<li>No project can be developed without the meaningful interaction of the people in all roles.</li>
<li>The outcome of a project has to be uncertain, otherwise it loses its appeal.</li>
<li>Rules and representation of a project are not independent but interact with each other.</li>
<li>People require clear and immediate feedback to understand the relationship between action and outcome.</li>
<li>People require a clear goal so they can perform meaningful actions within the project world.</li>
<li>Conflict and competition against time, budget and scope are essential for everyone&#8217;s motivation.</li>
<li>The challenges of a project should match the skills of the people involved: neither too easy (boring) nor too difficult (frustrating).</li>
<li>Projects can be developed without the need for even skill sets among the team. Instead the people learn through interaction, and this should be allowed and encouraged to happen.</li>
<li>People perform actions within the project world and observe how these actions change the state of the project.</li>
<li>People form a hypothesis about the meaning of a deliverable or action on the basis of their studies.</li>
<li>People recognise and learn fundamental patterns within the project and can apply these to different situations (and, of course, other projects).</li>
</ul>
<p>The more I look at these, the more this matches the way I see people working in agile projects. I&#8217;m sure there&#8217;s a lesson to be learned here&#8230;</p>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2007/06/13/the-project-game/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tip: get your TODOs out of the comments</title>
		<link>http://www.lixo.org/archives/2007/06/06/tip-get-your-todos-out-of-the-comments/</link>
		<comments>http://www.lixo.org/archives/2007/06/06/tip-get-your-todos-out-of-the-comments/#comments</comments>
		<pubDate>Wed, 06 Jun 2007 13:16:47 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2007/06/06/tip-get-your-todos-out-of-the-comments/</guid>
		<description><![CDATA[Developers in most projects I have seen try to establish some sort of convention around leaving TODOs in the code. The most common seems to be &#8220;if you see something funny, try to fix it immediately, but if it&#8217;d take too long and you&#8217;ve got something else to worry about, leave a comment next to [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/psycrow/268021578/" title="photo sharing"><img src="http://farm1.static.flickr.com/118/268021578_467c1e116a_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>Developers in most projects I have seen try to establish some sort of convention around leaving TODOs in the code. The most common seems to be &#8220;if you see something funny, try to fix it immediately, but if it&#8217;d take too long and you&#8217;ve got something else to worry about, leave a comment next to it starting with TODO, your initials and maybe a date&#8221;.</p>
<p>You know what? Using comments for that is not as cool in Ruby, Python or Java, which has had static imports for a while now. How about creating a TODO method that takes in the initials, date and comment text, or whatever else you might find useful?</p>
<blockquote><pre>
import static my.project.DevelopmentUtils.TODO;

...

public void doStuffThatSmellsFunny() {
   TODO("CV, 21/jan", "Clean this mess up after fixing #3849");
   ...
}
</pre>
</blockquote>
<p>There are some advantages to this: you can actually put some code inside that method to do, say, logging. Another good thing is that now the TODOs can be tracked using the same refactoring tools and features of modern IDEs as just any other code in the project.</p>
<p>It may seem a bit cumbersome, but I&#8217;ve been trying that for a few days now and it feels quite pleasant to use. I got my TODO method to just spit out the message to the console so when I run tests, I can quickly get an idea of what areas of the code touch stinky or incomplete ones.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2007/06/06/tip-get-your-todos-out-of-the-comments/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Thanks, Oracle</title>
		<link>http://www.lixo.org/archives/2007/04/23/thanks-oracle/</link>
		<comments>http://www.lixo.org/archives/2007/04/23/thanks-oracle/#comments</comments>
		<pubDate>Mon, 23 Apr 2007 13:28:17 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2007/04/23/thanks-oracle/</guid>
		<description><![CDATA[We&#8217;re using Oracle at my current project. I wanted to run some reporting scripts on the database to do some nice graphs with Graphviz and yEd. &#8220;Well, that&#8217;s been done before, should be pretty easy to hook up ActiveRecord to Oracle&#8221;, I thought. It turns out that&#8217;s nearly impossible to do on an Intel Mac [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/stuckincustoms/387019269/" title="photo sharing"><img src="http://farm1.static.flickr.com/182/387019269_068fd16670_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>We&#8217;re using Oracle at my current project. I wanted to run some reporting scripts on the database to do some nice graphs with Graphviz and yEd. &#8220;Well, that&#8217;s been done before, should be pretty easy to hook up ActiveRecord to Oracle&#8221;, I thought.</p>
<p>It turns out that&#8217;s nearly impossible to do on an Intel Mac running the x86 version of Ruby, since the Oracle Instant Client SDK only ships with PowerPC binaries so far (hence the title). Unless you recompile your whole Ruby install to PPC, something that to me sits somewhere between unspeakable and atrocious, you can&#8217;t link to its libraries, as far as I can tell.</p>
<p>But you can get SQLPlus to run on Rosetta. And you can get SQLPlus to spit out reasonably parseable HTML. And it&#8217;ll run slow &#8211; but for a quick-n-dirty report that you want to generate once every couple of months or so, it&#8217;s&#8230; ok.</p>
<p><code>
<pre>
def select_all(sql)
  html = `echo "#{sql};" | sqlplus -r 3 -l -s -m "html on entmap on" #{@user}/#{@password}@#{@host}`
  doc = Hpricot(html)
  (doc/'tr').collect do |tr| 
    (tr/'td').collect do |td|
      td.innerText.strip if td.innerText 
    end if (tr/'td').size == (doc/'tr/th').collect do |th|
      th.innerText.strip if th.innerText
    end.uniq.size
  end.compact
end
</pre>
<p></code></p>
<p>Look what you made me do, Oracle. You should be ashamed. As you can see, though, I&#8217;m not that easily embarrassed. Some people wouldn&#8217;t ever show this code to anyone, and deny its existence at all possible cost. I think it&#8217;s worth the shock value, though. <img src='http://www.lixo.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2007/04/23/thanks-oracle/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>How would you improve this page?</title>
		<link>http://www.lixo.org/archives/2007/02/08/how-would-you-improve-this-page/</link>
		<comments>http://www.lixo.org/archives/2007/02/08/how-would-you-improve-this-page/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 00:24:50 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2007/02/08/how-would-you-improve-this-page/</guid>
		<description><![CDATA[On an application I&#8217;ve been working during my spare time, I had the need to ask my loyal friends and guinea pigs to give me some feedback, in order to help me fill in the gaps between what I think they want to do and what they really want to do in this application. A [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/cv/383185999/" title="photo sharing"><img src="http://farm1.static.flickr.com/125/383185999_1e9f1b518b_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>On an application I&#8217;ve been working during my spare time, I had the need to ask my loyal friends and guinea pigs to give me some feedback, in order to help me fill in the gaps between what I think they want to do and what they really want to do in this application.</p>
<p>A quick, cheap and really useful solution I came up with was adding a feedback form right there, on every page the application renders. This can certainly be improved by people more knowledgeable in Rails than myself, as for now it doesn&#8217;t even use AJAX to post the data back (shame, shock and horror!)</p>
<p>After running <code>scaffold_resource Comment body:text uri:string created_by:integer created_at:timestamp</code>, you should be pretty much set to go. Now, on your <code>application.rhtml</code>, you can do something like:</p>
<pre>
&lt;%= render :partial =&gt; "comment", :collection =&gt;<br/>Comment.find_all_by_uri(request.request_uri) %&gt;

&lt;% form_for :comment, Comment.new, :url =&gt; comments_path do |f| %&gt;
  &lt;%= f.hidden_field :uri, :value =&gt; request.request_uri %&gt;
  How would you improve this page?
  &lt;%= f.text_area :body, :rows =&gt; 5 %&gt;
  &lt;%= submit_tag 'Add comment' %&gt;
&lt;% end %&gt;
</pre>
<p>The <code>_comment.rhtml</code> partial is something like this:</p>
<pre>
&lt;%= comment.body %&gt;
Created by &lt;%= if comment.created_by.nil?
    'unknown'
else
    link_to(comment.created_by.name,
      profile_url(comment.created_by.profile))
end %&gt;

&lt;%= time_ago_in_words comment.created_at %&gt; ago

[&lt;%= link_to 'Destroy', comment_path(comment.id), :method =&gt; :delete %&gt;]
</pre>
<p>Customize the Comment controller slightly, and that&#8217;s it &#8212; instant feedback forms everywhere! <img src='http://www.lixo.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2007/02/08/how-would-you-improve-this-page/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t take tests seriously</title>
		<link>http://www.lixo.org/archives/2006/09/16/dont-take-tests-seriously/</link>
		<comments>http://www.lixo.org/archives/2006/09/16/dont-take-tests-seriously/#comments</comments>
		<pubDate>Sat, 16 Sep 2006 12:33:14 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2006/09/16/dont-take-tests-seriously/</guid>
		<description><![CDATA[At my current project, we have a good definition of what the real data in the system will look like, since the first few releases are basically migration with the addition of some new features. But, a couple of weeks ago, something started happening to the test code: instead of creating a place like &#8216;France&#8217; [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px"><a title="photo sharing" href="http://www.flickr.com/photos/beija-flor/148731910/"><img style="border: 2px solid #000000" src="http://static.flickr.com/47/148731910_b826fb5440_m.jpg" /></a></div>
<p>At my current project, we have a good definition of what the real data in the system will look like, since the first few releases are basically migration with the addition of some new features.</p>
<p>But, a couple of weeks ago, something started happening to the test code: instead of creating a place like &#8216;France&#8217; and a non-place word that goes with it, like &#8216;skiing&#8217; &#8211; which is something you&#8217;d be likely to see in the production database, people were choosing their test data based on wacky and unrelated concepts. Places like &#8216;plate&#8217; and non-places like &#8216;cheese&#8217; were popping up left ,right and centre. Converting an object from &#8216;cheese&#8217; to &#8216;pizza&#8217; seemed quite odd when said out loud, but made sense in the code, just as converting a legacy object to the new domain model, after some validation and filtering did. But it&#8217;s a much shorter and visual sentence.</p>
<p>What happens when you do such a thing? Your test code looks like something you&#8217;d never put in production. No production code would have variables like &#8216;cheese&#8217;, &#8216;bacon&#8217; or &#8216;sausages&#8217;. But test code can afford that, as long as it expresses the behaviour you&#8217;re trying to test clearly, and weird variable names or test data don&#8217;t detract from that.</p>
<p>Plus, the hilarity that ensues when you get your customer talking about the stories in half-breakfast, half-business terms is enough to bring the team morale up a bit.</p>
<p>Any experiences on that? I&#8217;d like to hear&#8217;em!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2006/09/16/dont-take-tests-seriously/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SecurID Poker</title>
		<link>http://www.lixo.org/archives/2006/08/12/securid-poker/</link>
		<comments>http://www.lixo.org/archives/2006/08/12/securid-poker/#comments</comments>
		<pubDate>Sat, 12 Aug 2006 12:53:35 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2006/08/12/securid-poker/</guid>
		<description><![CDATA[At ThoughtWorks and many other workplaces all over the world, employees are given SecurID tokens, a tiny and nearly indestructible device with an LCD screen that shows a different sequence of six random numbers every minute. So, what do you do with a sequence of random numbers, apart from logging into your corporate intranet and [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px"><a title="photo sharing" href="http://www.flickr.com/photos/marcgutierrez/111321505/"><img style="border: 2px solid #000000" src="http://static.flickr.com/41/111321505_32d0822d2d_m.jpg" /></a></div>
<p>At <a href="http://thoughtworks.com">ThoughtWorks</a> and many other workplaces all over the world, employees are given <a href="http://en.wikipedia.org/wiki/SecurID">SecurID</a> tokens, a tiny and nearly indestructible device with an LCD screen that shows a different sequence of six random numbers every minute.</p>
<p>So, what do you do with a sequence of random numbers, apart from logging into your corporate intranet and email using secure two-factor authentication? You play Poker, of course!</p>
<p>The rules are pretty much the same as a <a href="http://en.wikipedia.org/wiki/Draw_poker">Draw Poker</a> game, only without any card changes or betting round. Ordering is also different, 0 being the lowest and 9 the highest values. There are no <a href="http://en.wikipedia.org/wiki/Suit_%28cards%29">suits</a>, but the time left to the next sequence change, displayed in bars at the left-hand side of the token, can be used to settle ties. A new round is usually more convenient, though.</p>
<p>As two fobs don’t change sequences at the same time, it makes sense to shout out your hand as soon as you look at it, or see if you can get away stalling everyone until your next hand shows up, if you have nothing. Of course, there’s room for the <a href="http://en.wikipedia.org/wiki/High-low_split">High-Low Split</a> variation, but that could get a bit messy and has been discouraged.</p>
<p>I was introduced to this brilliant little game last night, and it has instantly gained my preference over <a href="http://en.wikipedia.org/wiki/Rock%2C_Paper%2C_Scissors">Rock, Paper and Scissors</a> to settle small arguments such as who’s going to get the next round, fix the build, pay the restaurant bill or drive the rental car.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2006/08/12/securid-poker/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On messing with the Quality variable</title>
		<link>http://www.lixo.org/archives/2006/08/03/on-messing-with-the-quality-variable/</link>
		<comments>http://www.lixo.org/archives/2006/08/03/on-messing-with-the-quality-variable/#comments</comments>
		<pubDate>Thu, 03 Aug 2006 12:53:39 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2006/08/03/on-messing-with-the-quality-variable/</guid>
		<description><![CDATA[Interesting quote from my colleague Obie after my comment that software development projects have five variables (time/duration, budget/price, scope, people/rates and quality) and that we should be able to respond to change in all of them, on this post: (&#8230;) Letting quality slip has never, ever produced good results in my experience. I&#8217;ve been in [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/bitzi/196969738/" title="photo sharing"><img src="http://static.flickr.com/69/196969738_f8fce0b315_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>Interesting quote from my colleague <a href="http://jroller.com/page/obie">Obie</a> after my comment that software development projects have five variables (time/duration, budget/price, scope, people/rates and quality) and that we should be able to respond to change in all of them, on <a href="http://jroller.com/page/obie?entry=serious_about_agile">this post</a>:</p>
<blockquote><p>(&#8230;) Letting quality slip has never, ever produced good results in my experience. I&#8217;ve been in situations where the client was explicitly demanding it, but it was still a bad idea and has all sorts of negative repercussions on the team.</p></blockquote>
<p>Some might argue over the exact definition of those variables and how they play together. I write specifically in the context of consultancies, in what I may have some experience in.</p>
<p>In this context, budget/price equals time/duration of the project times people/rates including the management overhead. It&#8217;s a simple and easy equation which has traditionally left the scope and quality variables out, up for discussion. And those discussions can go on and on until the last pointy hair is yanked in despair.</p>
<p>To us and most people in the Agile world, quality is not even really a variable &#8211; we like to think it&#8217;s a constant, and hopefully fixed way up high close to 100%. To clients, not necessarily so &#8211; while some definitely know the importance of a good QA, some might be willing to take the risk and compromise the quality of the product in order to gain some market advantage by reducing the duration of the project, or to save some money on the short term.</p>
<p>As long as everyone understands what playing with that variable causes to the sustainability and risk of a project, and there is a justifiable reason to do so that the whole team can buy into, I don&#8217;t see a problem. But, you see, that&#8217;s only a theory of mine &#8211; I&#8217;ve never actually seen that compromise being made with a reason I could believe myself.</p>
<p>PS: I need some feedback on this! If you know &#8211; or even better, was involved in &#8211; a project where that happened, please get in touch.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2006/08/03/on-messing-with-the-quality-variable/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>An improved safety check</title>
		<link>http://www.lixo.org/archives/2006/06/03/an-improved-safety-check/</link>
		<comments>http://www.lixo.org/archives/2006/06/03/an-improved-safety-check/#comments</comments>
		<pubDate>Sat, 03 Jun 2006 12:02:08 +0000</pubDate>
		<dc:creator>Carlos Villela</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.lixo.org/archives/2006/06/03/an-improved-safety-check/</guid>
		<description><![CDATA[I think retrospectives are the most informative and fun kind of meeting you can have with a bunch of software developers without involving large amounts of some kind of alcoholic beverage. Okay, maybe seconded by giving them a huge set of Scalextrics. When doing retrospectives, the facilitator often chooses to do what&#8217;s called a &#8216;safety [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
 <a href="http://www.flickr.com/photos/lomokev/62500524/" title="photo sharing"><img src="http://static.flickr.com/33/62500524_d8a43bd371_m.jpg" alt="" style="border: solid 2px #000000;" /></a>
</div>
<p>I think <a href="http://www.google.com/search?q=agile%20retrospective">retrospectives</a> are the most informative and fun kind of meeting you can have with a bunch of software developers without involving large amounts of some kind of alcoholic beverage. Okay, maybe seconded by giving them a huge set of Scalextrics.</p>
<p>When doing retrospectives, the facilitator often chooses to do what&#8217;s called a &#8216;safety check&#8217;. It&#8217;s about trying to get a feel for how much confidence there is in discussing the current topics with everyone else in the room. The facilitator gets everyone to write a number from 1 to 5 on a post-it note, anonimously, and sticks them up in a wall or whiteboard, tallying up the results. Usually, a safety level of 1 means &#8216;I don&#8217;t feel safe here, I&#8217;ll nod and agree to what everyone else says&#8217; while 5 goes something like &#8216;I feel I can talk about anything and anyone in this room freely&#8217;, and that is a very important measure to have as it can completely change the discussion. Sometimes, asking a one or a few team members (project managers, for instance) to step out of the room can improve confidence, and everyone&#8217;s happy.</p>
<p>But what about the other measurements that may affect the effectiveness of a retrospective and work in general? My colleague Tim Mackinnon (get a blog!) brought a very nice idea to one of our monthly meetings this week: using the same mechanism to scale how much fun, productivity and enthusiasm people are having at work. If I had an equivalent of MS Paint on my Mac, I would amaze you all with my drawing skills, but for now, picture this: you draw as many axes you want on a whiteboard, ideally three or five, as choosing an even number can look a bit confusing. Each axis represents some measurement you want &#8211; fun, safety, productivity, effectiveness, collaboration, you name it. And get everyone to tick their level on those, preferrably anonimously.</p>
<p>I&#8217;m still yet to be a facilitator on a retrospective, but I&#8217;ll be definitely trying this out.</p>
<p>Oh, and if you&#8217;re interested in the subject, make sure you&#8217;re subscribed to Pat Kua&#8217;s blog. He has some <a href="http://www.thekua.com/rant/?p=399">very interesting thoughts on timelines</a> and other retrospective tools.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lixo.org/archives/2006/06/03/an-improved-safety-check/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.451 seconds -->
<!-- Cached page served by WP-Cache -->
