<?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>Arrange Act Assert &#187; Agile</title> <atom:link href="http://www.arrangeactassert.com/category/agile/feed/" rel="self" type="application/rss+xml" /><link>http://www.arrangeactassert.com</link> <description>Jag Reehal on Agile Development, ASP.NET MVC and all manner of good stuff</description> <lastBuildDate>Thu, 24 Nov 2011 00:01:20 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" /> <item><title>Selling executable specifications to stakeholders, testers and developers</title><link>http://www.arrangeactassert.com/selling-executable-specifications-to-stakeholders-testers-and-developers/</link> <comments>http://www.arrangeactassert.com/selling-executable-specifications-to-stakeholders-testers-and-developers/#comments</comments> <pubDate>Thu, 24 Nov 2011 00:01:20 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category> <category><![CDATA[BDD]]></category> <category><![CDATA[Specflow]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=2009</guid> <description><![CDATA[In this post I want to share how we made a breakthrough in using executable specifications in our latest project. Executable specifications are scenarios created by developers, testers and stakeholders working in collaboration that check the behaviour of a system every time code is committed. For more information and a podcast about Executable specifications check [...]]]></description> <content:encoded><![CDATA[<p>In this post I want to share how we made a breakthrough in using executable specifications in our latest project.</p><p><img
src="http://www.arrangeactassert.com/wp-content/uploads/2011/11/172.png" style="margin-right:20px" alt="Executable specifications" title="Executable specifications" width="60" height="90" class="alignleft size-full wp-image-2025" />Executable specifications are scenarios created by developers, testers and stakeholders working in collaboration that check the behaviour of a system every time code is committed.  For more information and a podcast about Executable specifications check out this <a
href="http://www.hanselman.com/blog/HanselminutesPodcast248ExecutableSpecificationsWithGojkoAdzicJonasBandiAndAslakHellesoy.aspx" title="Hanselminutes" target="_blank">Hanselminutes episode &#8216;Executable Specifications with Gojko Adzic, Jonas Bandi and Aslak Hellesoy&#8217;</a>.</p><h3 class="subheading">The need for change</h3><p>A few months ago after joining the team, there was a lot confusion how a previous project worked.</p><p>Stakeholders weren’t sure what functionality had been implemented, testers weren&#8217;t sure if everything had been tested and developers didn&#8217;t want to go anywhere near the code.</p><p>While there was a wiki no one was sure if was 100% accurate which meant it could do more harm than good because it could lead to false assumptions.</p><p>As a result of this the relationships between the groups had suffered.</p><p>Inspired by <a
href="http://skillsmatter.com/podcast/agile-testing/how-to-sell-bdd-to-the-business" title="Dan North talk" target="_blank">Dan North&#8217;s talk &#8216;How to sell BDD to the business&#8217;</a> I suggested using BDD (behavior driven development) and executable specifications to help prevent this happening in the future.</p><p>Testers and business owners were open to the idea but were skeptical to how valuable it would be.</p><p>So we decided to try it out on a small part of the project.</p><blockquote><p> And it worked!</p></blockquote><p>Working collaboratively we found relationships started to improve and there was a lot more trust between the groups.</p><p><a
href="http://www.arrangeactassert.com/wp-content/uploads/2011/11/58.png"><img
src="http://www.arrangeactassert.com/wp-content/uploads/2011/11/58.png" alt="Tick" title="It worked" width="69" height="60" style="margin-right:20px" class="alignleft size-full wp-image-2030" /></a>At the end of the project stake holders, testers and developers agreed executable specifications were an excellent way to develop software and keen to adopt the approach for other projects.</p><h3 class="subheading">So what sold executable specifications to the stakeholders, testers and developers?</h3><ul><li> Scenarios that matched the business problems the stakeholders wanted to solve.</p><p>This gave stakeholders confidence and lowered fear and resistance to change.</li><li> Easy to read scenarios that matched the domain language the stakeholders were using.</p><p>Stakeholders could relate to scenarios and therefore felt involved.</li><li> Using scenarios to fill out the blanks.</p><p>When the test team or developers found new scenarios they communicated using with stakeholders leaving out what should happen (the then step) for them to fill in.</li><li> The use of tables.</p><p>Tables allow the reader to visualise the data, reduce reputation and mean you don&#8217;t have to cram in lots of words.</p><p>For example instead of having</p><pre class="brush: xml; gutter: false; title: ; toolbar: false; notranslate">
Scenario: Submitting form with invalid password displays error
  Given I am on the registration page
  When enter the password 'a'
  And submit the form
  Then I should see the message 'Passwords must be 8 to 16 characters long and include at least one capital letter, one lower case letter, and one number'
</pre><p>and then repeating this for every permutation of invalid passwords, you can do this</p><pre class="brush: xml; gutter: false; title: ; toolbar: false; notranslate">
Scenario: Entering an invalid password displays error
  Given I am on the registration page
  When enter the password
    | a						|
	| aaaaaaaa				|
    | AAAAAAAA				|
	| aaaaAAAA				|
	| 12345678				|
	| 1234567A				|
	| 1234567a				|
	| 12345678aaaaaaaaA		|
  And submit the form
  Then I should see the message 'Passwords must be 8 to 16 characters long and include at least one capital letter, one lower case letter, and one number'
</pre><p>We found this gave us valuable input from stakeholders and testers who were able to come up with scenarios much faster than before.</li><li> Living documentation.</p><p>Running tests to ensure the scenarios still reflected the behaviour of the system after every code change meant documentation was reliable and accurate.</li></ul><h3 class="subheading">The future</h3><p>I’m pleased stakeholders, testers and developers have recognised the value of using BDD, scenarios and executable specifications.</p><p>By taking small steps, inspecting and adapting along the way, I hope that more projects I work on can adopt this approach.</p><style>li{line-height:1.4em}</style>]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/selling-executable-specifications-to-stakeholders-testers-and-developers/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Agile Retrospectives &#8211; A picture is worth a thousand words</title><link>http://www.arrangeactassert.com/agile-retrospectives-a-picture-is-worth-a-thousand-words/</link> <comments>http://www.arrangeactassert.com/agile-retrospectives-a-picture-is-worth-a-thousand-words/#comments</comments> <pubDate>Sun, 02 Oct 2011 23:30:19 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=1999</guid> <description><![CDATA[A while back I went to Rachel Davies excellent &#8216;Inspect &#038; Adapt with Agile Retrospectives&#8216; talk about agile retrospectives at a Software East. One thing that has stuck in my head ever since has been her tip about getting people to draw a picture to represent how the sprint went. The fact that it&#8217;s simple [...]]]></description> <content:encoded><![CDATA[<p>A while back I went to Rachel Davies excellent &#8216;<a
href="http://softwareast.ning.com/events/inspect-adapt-with-agile" title="inspect adapt with agile" target="_blank">Inspect &#038; Adapt with Agile Retrospectives</a>&#8216; talk about agile retrospectives at a Software East.</p><p>One thing that has stuck in my head ever since has been her tip about getting people to draw a picture to represent how the sprint went.</p><p>The fact that it&#8217;s simple and easy to do is what makes it&#8217;s great.</p><p>She gave two examples, one was a group of people climbing half way up a very steep mountain and the other was a stretched limousine packed full of people without a driver.</p><p>This is definitely worth trying out in your retrospectives becuase it&#8217;s an excellent way to lighten the mood and get people contributing.</p><p>Whether you decide to keep it anonymous or not is up to you.</p><p>Here&#8217;s a drawing I&#8217;ve shown in a retrospective.</p><p><a
href="http://www.arrangeactassert.com/wp-content/uploads/2011/10/leveloftechnicaldebt.png"><img
src="http://www.arrangeactassert.com/wp-content/uploads/2011/10/leveloftechnicaldebt.png" alt="" title="level of technical debt" width="620" height="351" class="aligncenter size-full wp-image-2000" /></a></p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/agile-retrospectives-a-picture-is-worth-a-thousand-words/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Agile Parenting</title><link>http://www.arrangeactassert.com/agile-parenting/</link> <comments>http://www.arrangeactassert.com/agile-parenting/#comments</comments> <pubDate>Tue, 20 Sep 2011 06:18:43 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=1988</guid> <description><![CDATA[Earlier this year my wife gave birth to our first child, as shown below Since that day I&#8217;ve noticed that parenting shares many similarities with agile development. I say this becuase from the moment a baby enters the world it&#8217;s all about inspect and adapt. You&#8217;re forever analysing what they&#8217;re doing, checking they&#8217;re alright and [...]]]></description> <content:encoded><![CDATA[<p>Earlier this year my wife gave birth to our first child, as shown below <img
src='http://www.arrangeactassert.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p><p><img
src="http://www.arrangeactassert.com/wp-content/uploads/2011/09/family.png" alt="" title="Family" width="259" height="104" class="aligncenter size-full wp-image-1990" /></p><p>Since that day I&#8217;ve noticed that parenting shares many similarities with agile development.</p><p>I say this becuase from the moment a baby enters the world it&#8217;s all about inspect and adapt.</p><p>You&#8217;re forever analysing what they&#8217;re doing, checking they&#8217;re alright and planning and pirotising what to do next.</p><p>And while friends, parents and books give sound advice you have to look at your own context, every baby is different and so not every tip will work.</p><p>And this is when you&#8217;ll start doing mini retrospecives as parents.  Every so often you&#8217;ll sit down with your partner discuss what went well, what didn&#8217;t and what to try next.</p><p>Using short feedback cycles you&#8217;ll soon work out what works best with the aim of developing sort form of structure.</p><p>You can&#8217;t do this waterfall becuase babies are unpredicatble and constantly changing.</p><p>As soon as you think you sussed it and plan too far ahead, the baby will go thru a growth spurt or learn something new and you&#8217;re back to square one before you know it.</p><p>It&#8217;s like a game of snakes and ladders, you&#8217;ll look at your partner and say this didn&#8217;t happen yesterday.</p><p>We&#8217;re four months in by working together and constantly sharing throughts and ideas we&#8217;re developing a routine which can cope with changes and&#8230; getting more sleep as each week passes!</p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/agile-parenting/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Delivering business value should always be your priority</title><link>http://www.arrangeactassert.com/delivering-business-value-should-always-be-your-priority/</link> <comments>http://www.arrangeactassert.com/delivering-business-value-should-always-be-your-priority/#comments</comments> <pubDate>Thu, 03 Mar 2011 09:26:39 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=1700</guid> <description><![CDATA[Recently I took on some work for a company to do some work on an ASP.NET web site. As with any first project for a client I wanted to make a good impression and produce quality work and deliver on time. Getting Started When I started work on the project I noticed the previous developers [...]]]></description> <content:encoded><![CDATA[<p>Recently I took on some work for a company to do some work on an ASP.NET web site.</p><p>As with any first project for a client I wanted to make a good impression and produce quality work and deliver on time.</p><h3 class="subheading">Getting Started</h3><p>When I started work on the project I noticed the previous developers had created a web site project rather than a web project.</p><p>Seeing this as a long term project, I converted the website solution into a web project. It was easy and took no time at all.</p><p>Then I noticed business logic and data access code was embedded into the ASPX files, which in my opinion  is a code smell.</p><p>So I started cleaning up the solution by moving the code into code behind files.</p><h3 class="subheading">A bridge too far</h3><p>After a couple of hours refactoring I realised this was going to take days not hours. So I stopped and asked myself the question: How much value is there for my client in what I’m doing?</p><p>What if at the end of day one the client asked how I had got on?  By showing them a mock up, prototype or anything else which showed progress I would be able to give them confidence they had picked the<br
/> right man for the job.</p><p>If I started talking down the previous developers, and how I’d spent the budget on moving code around on a site that was working I might shatter their confidence in me.</p><p>So I was stuck between working with a painful solution and providing value to the client.</p><h3 class="subheading">You can still be a Software Craftsman</h3><p>I decided only to clean up pages that I actually had to modify.  This limits the upfront cost in sorting out the whole solution and delivers value to the client sooner.</p><p>I believe the ability to bite your tongue, hold back one&#8217;s reservations and make the best out of a bad situation is a required skill for a good developer. This doesn’t mean selling your soul but simply that you understand that delivering value is the most important thing for your client.</p><p>By being a good boy scout and making small incremental changes, one day you will have a code base you’re happy with. And from day one your client can feel confidence in you through the value they can see being delivered.</p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/delivering-business-value-should-always-be-your-priority/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>How To Refactor And Build Better Microsoft Silverlight Applications</title><link>http://www.arrangeactassert.com/how-to-refactor-and-build-better-microsoft-silverlight-applications/</link> <comments>http://www.arrangeactassert.com/how-to-refactor-and-build-better-microsoft-silverlight-applications/#comments</comments> <pubDate>Wed, 09 Jun 2010 23:24:44 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category> <category><![CDATA[Silverlight]]></category> <category><![CDATA[WPF]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=729</guid> <description><![CDATA[As with all development technologies if you asked two developers how to solve a problem it’s unlikely both would come up with the same solution. It’s no surprise then the same solution to a problem using Silverlight and WPF applications can be implemented in a number of ways. In a series of posts I want [...]]]></description> <content:encoded><![CDATA[<p>As with all development technologies if you asked two developers how to solve a problem it’s unlikely both would come up with the same solution.</p><p>It’s no surprise then the same solution to a problem using Silverlight and WPF applications can be implemented in a number of ways.</p><p>In a series of posts I want to show how we can refactor a Silverlight application which “works” to be a lot cleaner, easier to maintain and adheres to good development practices.</p><p>Although I’m using Silverlight many of the changes and suggestions would also apply to a WPF application.</p><h3 class="subheading">So what’s the application?</h3><p>The application adds two numbers together.</p><p><img
src="http://www.arrangeactassert.com/wp-content/themes/resources/images/SilverlightCalculator.png" alt="Silverlight Calculator" /></p><p>Yes that’s it. <a
href="http://www.arrangeactassert.com/wp-content/themes/resources/SilverlightDemos/CalculatorDemo/CalculatorDemo.html">Click here to see a live demo of the calclator</a>.</p><p>Using a simple example (as opposed to a huge complex monster) allows us to focus on refactoring and making improvements rather than trying to understand what the application is doing and wading through hundreds of lines of code.</p><h3 class="subheading">So what’s wrong with it?</h3><p>The XAML is shown below</p><pre class="brush: xml; gutter: false; title: ; toolbar: true; notranslate">
    &lt;Grid x:Name=&quot;LayoutRoot&quot; Background=&quot;White&quot; Height=&quot;100&quot; Width=&quot;350&quot;&gt;
        &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition/&gt;
            &lt;ColumnDefinition/&gt;
            &lt;ColumnDefinition/&gt;
            &lt;ColumnDefinition/&gt;
            &lt;ColumnDefinition/&gt;
        &lt;/Grid.ColumnDefinitions&gt;
        &lt;Grid.RowDefinitions&gt;
            &lt;RowDefinition/&gt;
            &lt;RowDefinition/&gt;
        &lt;/Grid.RowDefinitions&gt;
        &lt;TextBox Grid.Column=&quot;0&quot; Text=&quot;0&quot; Height=&quot;25&quot; TextAlignment=&quot;Right&quot; x:Name=&quot;tbFirstValue&quot;/&gt;
        &lt;TextBlock Grid.Column=&quot;1&quot; Text=&quot;+&quot; Height=&quot;25&quot; TextAlignment=&quot;Center&quot;/&gt;
        &lt;TextBox Grid.Column=&quot;2&quot; Text=&quot;0&quot; Height=&quot;25&quot; TextAlignment=&quot;Right&quot; x:Name=&quot;tbSecondValue&quot;/&gt;
        &lt;TextBlock Grid.Column=&quot;3&quot; Text=&quot;=&quot; Height=&quot;25&quot; TextAlignment=&quot;Center&quot;/&gt;
        &lt;TextBlock Grid.Column=&quot;4&quot; Text=&quot;0&quot; Height=&quot;25&quot; TextAlignment=&quot;Left&quot; x:Name=&quot;tbResult&quot;/&gt;
        &lt;Button Grid.Row=&quot;1&quot; Grid.ColumnSpan=&quot;5&quot; Margin=&quot;0,5,0,0&quot; Content=&quot;Calculate&quot; x:Name=&quot;btnCalculate&quot; Click=&quot;btnCalculate_Click&quot; /&gt;
    &lt;/Grid&gt;
</pre><p>and this is what the code behind looks like</p><pre class="brush: csharp; gutter: false; title: ; toolbar: true; notranslate">
public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
    }

    private void btnCalculate_Click(object sender, RoutedEventArgs e)
    {
        tbResult.Text = (Convert.ToInt32(tbFirstValue.Text)  + Convert.ToInt32(tbSecondValue.Text)).ToString();
    }
}
</pre><p>As it stands the application:</p><ul><li>Contains code in the code behind file.  OK it&#8217;s not so much of an issue for this example and is down to individual preference, but this can quickly become a nightmare to maintain during the life of an application</li><li>Isn’t unit testable – we can’t test two values can be added together</li><li>Has no separation of concerns – the code behind shouldn’t be responsible for adding the numbers together</li><li>A lot of repetition for the styling of the input boxes – if we wanted to make the input boxes bigger we would have to make multiple changes, ideally changes should only need to be made in one place.</li><li>No validation – if the user enters alphabetical characters into application and hits the calculate button the application crashes</li></ul><h3 class="subheading">So how are we going to improve it?</h3><p>By taking an agile approach the aim at the end of each refactoring is to have a releasable application i.e. be able to add two numbers together.  Therefore each refactoring will involve small incremental changes.</p><p>After each refactoring exercise we will review the application to see what improvements have been made and if any new problems have been introduced&#8230;</p><ul><li> <strong>Step 1:</strong> <a
href="http://www.arrangeactassert.com/how-to-implement-mvvm-inotifychanged-and-icommand-in-a-silverlight-application">Implement the MVVM (Model-View-ViewModel) pattern to reduce the amount of code in the Silverlight code behind file and follow some best practices for Silverlight development</a><br
/> <br/><br
/> <strong>Review:</strong> The code behind file looks much cleaner now, thanks to the use of commands and the INotifyChanged interface, but should the ViewModel be responsible for calculating the two numbers together?</li><p><br/></p><li> <strong>Step 2:</strong> <a
href="http://www.arrangeactassert.com/how-to-apply-the-single-responsibility-principle-to-view-models-in-silverlight-and-wpf">Remove the responsibility and concerns for calculating numbers in the ViewModel</a><br
/> <br/><br
/> <strong>Review:</strong> This refactoring has allowed us to reduce the responsibility of the ViewModel and unit test we can add two numbers together, but we are tightly coupled to the calculator class.</li><p><br/></p><li> <strong>Step 3:</strong> <a
href="http://www.arrangeactassert.com/solid-design-principles-using-mef-in-silverlight-and-wpf/">Using SOLID design principles and MEF to remove tight coupling</a><br
/> <br/><br
/> <strong>Review:</strong> The application is now made up of loosely coupled components which give us a good platform to build upon.  But without any validation of what a user enters for a number the application isn’t very stable.</li><p><br/></p><li> <strong>Step 4:</strong> <a
href="http://www.arrangeactassert.com/validation-in-silverlight-and-wpf-using-validatesonexceptions/">Validating what the user has entered using exceptions</a><br
/> <br/><br
/> <strong>Review:</strong> If the users input is not valid they are now are shown an error message.  This is all very well but the user is still able to click the calculate button even if they have entered invalid values to add together.</li><p><br/></p><li> <strong>Step 5:</strong> <a
href="http://www.arrangeactassert.com/enabling-buttons-in-silverlight-and-wpf-using-mvvm-and-validatesonexceptions/">Validating what the user has entered using exceptions and disabling the calculate button if there are any validation errors</a><br
/> <br/><br
/> <strong>Review:</strong> The user is only able to click the calculate button when there are no validation errors.  Even though throwing exceptions for validation works, some developers aren&#8217;t so keen on doing this so what are the alternatives?</li><p><br/></p><li> <strong>Step 6a:</strong> <a
href="http://www.arrangeactassert.com/using-idataerrorinfo-for-validation-in-mvvm-with-silverlight-and-wpf/">Validating what the user has entered using IDataErrorInfo</a><br
/> <br/><br
/> <strong>Review:</strong> By implementing the IDataErrorInfo  interface we are able to do validation without throwing exceptions.</li><p><br/></p><li> <strong>Step 6b:</strong> <a
href="http://www.arrangeactassert.com/using-inotifydataerrorinfo-for-validation-in-mvvm-with-silverlight/">Validating what the user has entered using INotifyDataErrorInfo<br
/> </a><br
/> <strong>Review:</strong> By implementing the INotifyDataErrorInfo interface we are able to do validation without throwing exceptions.</li></ul></ul> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/how-to-refactor-and-build-better-microsoft-silverlight-applications/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>How to Convert a SketchFlow Prototype into a Production Application&#8230; And why you shouldn’t!</title><link>http://www.arrangeactassert.com/how-to-convert-a-sketchflow-prototype-into-a-production-application/</link> <comments>http://www.arrangeactassert.com/how-to-convert-a-sketchflow-prototype-into-a-production-application/#comments</comments> <pubDate>Wed, 28 Apr 2010 22:35:44 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category> <category><![CDATA[Silverlight]]></category> <category><![CDATA[SketchFlow]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=685</guid> <description><![CDATA[One of the first questions I’m getting asked after my SketchFlow presentation is about converting a SketchFlow prototype to a production application. Now before I answer this question, I know some of you may have arrived here from a search engine, so if you want a solution check out the MSDN article on converting into [...]]]></description> <content:encoded><![CDATA[<p>One of the first questions I’m getting asked after my SketchFlow presentation is about converting a SketchFlow prototype to a production application.</p><p>Now before I answer this question, I know some of you may have arrived here from a search engine, so if you want a solution check out the <a
href="http://msdn.microsoft.com/en-us/library/ee371158%28Expression.30%29.aspx">MSDN article on converting into a production project in 16 steps</a> <strong>but just because you can it doesn’t mean you should!</strong></p><p><img
src="http://www.arrangeactassert.com/wp-content/themes/resources/images/SketchFlowPrototype.png" alt="SketchFlow Prototype showing the text convert or not to convert.  That is the question." /></p><p>One of the problems with prototyping tools like SketchFlow is they can sometimes leave your client with the impression that all the work is done the and product is in some way releasable or production ready.</p><p>Now I’m not saying nothing can be shared between the two solutions (e.g. resources) because that depends on the design and project you are working on.</p><p>What is clear however are the aims and mindsets used to create a SketchFlow prototype are different from how you would go about creating a real world production solution.</p><p>From a design perspective the layout of controls in SketchFlow are done using a single grid and their margin property.  In a real world application you would pay more consideration into the layout of the design and think about things like how the page would scale.</p><p>From a developer perspective a SketchFlow prototype doesn’t easily lend itself to good development practices such as <a
href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29">SOLID design principles</a>, code reusability and testing.</p><p>And in any case would you really deploy files called something like Screen_1.xaml to a production server?</p><p>Even if these things don’t matter to you, I still don&#8217;t recommend using Microsoft’s solution because</p><ul><li>there are still references to the Microsoft.Expression.Protyping libraries in a supposedly production ready solution. Having libraries in your application that you not sure are being used before you launch will only get worse as time goes on.</li><li>Microsoft&#8217;s solution is not 100% successful, lots of people are having problems with navigation not working properly.</li></ul><h3 class="subheading">So what should I do?</h3><ul><li>Focus on creating designs that satisfy the customers’ requirements and not about the final design.  You can think what resources could be reused later in the prototyping cycle.</li><li>Deliver prototypes to your customers early and often.  This will allow your customer to give feedback early so you can inspect and adapt.</li><li> Keep your screen designs simple and lightweight so changes can be done quickly and with the knowledge that you won’t be breaking anything.</li><li>Keep an eye on how many events and behaviors are used on a control or screen.  It’s too easy to get carried away remember it’s only supposed to be a prototype.</li><li>Take advantage of the sample data resources available and not bind to databases or web services.</li><li>Keep code behind to a minimum, ideally having none at all.</li></ul><h3 class="subheading">Jag Reehal’s Final Thought on &#8216;Converting a SketchFlow Prototype into a Production Application&#8217;</h3><p>I can understand why people are looking for a solution where they can use a prototype and a production application interchangeably because like documentation prototypes can easily get out of date and no longer reflect the design used in the production version. Unfortunately the only answer is to adhere to good practices and always start by prototyping and not by retrospectively making your prototype match your production design.</p><p>Prototypes are extremely useful&#8230; as prototypes and nothing more!</p><p>Have fun using SketchFlow I love it, and it’s definitely my prototyping tool of choice.</p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/how-to-convert-a-sketchflow-prototype-into-a-production-application/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Pair Programming Is Not a Silver Bullet</title><link>http://www.arrangeactassert.com/pair-programming-is-not-a-silver-bullet/</link> <comments>http://www.arrangeactassert.com/pair-programming-is-not-a-silver-bullet/#comments</comments> <pubDate>Wed, 09 Dec 2009 08:09:37 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category> <category><![CDATA[Extreme Programming (XP)]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=501</guid> <description><![CDATA[Over the past four weeks I have been working with a new start up company where the owners (who are developers themselves) want to use pair programming to do everything. In this blog post I want to share my experiences and opinions on pair programming. This is not the first time I have done pair [...]]]></description> <content:encoded><![CDATA[<p>Over the past four weeks I have been working with a new start up company where the owners (who are developers themselves) want to use pair programming to do everything.</p><p>In this blog post I want to share my experiences and opinions on pair programming.</p><p>This is not the first time I have done pair programming and it won’t be the last.  I chose the title because when you read about pair programming in extreme programming books, the ideas look great on paper but can be difficult to implement and don’t work in the real word.</p><h3 class="subheading">Two heads are better than one</h3><p>Developers who have had positive pair programming experiences write about</p><ul><li>how much more focused they were</li><li>increased productivity</li><li>better code quality</li><li>shared knowledge/less dependency on a single developer</li><li>how it helps new developers learn the ropes</li><li>quicker investigation and resolution of bugs</li><li>on the job training</li><li>why it’s so much better than doing code reviews</li></ul><p>On that last point Theodore Nguyen-Cao has made an excellent observation in his blog post <a
href="http://www.theodorenguyen-cao.com/2008/10/29/pair-programming-greater-than-code-reviews/">Pair Programming > Code Reviews</a></p><blockquote><p>In code reviews, people sit down to review someone’s code. Everyone has an opinion but not everyone is going to be working with the code on a daily basis. At the time, everyone seems to be involved in the process but there is no vested interest. They are just looking at some code and asking themselves &#8220;does this code look good and is it correct?&#8221;. It’s a very passive standpoint. On the other hand, pair programmers are completely invested (committed?) in the task at hand. They immediately are using the code they are writing together and collaborating their thoughts on design, code layout, etc. Both programmers are taking on an active role and are emotionally invested in the task at hand because they are attacking the same problem together.</p></blockquote><h3 class="subheading">Shared Code Ownership</h3><p>Have you ever been in a situation where a ‘friend’ has become so attached to their code, they find it difficult to accept it doesn’t do what it’s supposed to or is no longer required?</p><p>My best experience of pair programming has been taking over the lead development of a project where the previous developer had been working alone.</p><p>When a colleague and I came to conclusion what had be done did not have anything to do with the problem domain, we decided to delete the code and pair together to ensure the same mistake did not happen again.  We continued to pair until we had a solid foundation to build upon.</p><p>When code is written by a single developer, they will inevitably end up owning it.  No doubt you’ve heard something like “that’s Bobs login controller”.  If there’s a bug or issue with that code the developer can become very defensive.</p><p>When a pair is told the same thing I think it’s a lot easier to deal with because no one person owns the code.  In addition developers working in a pair find it easier to accept the path they had followed has come to a dead end a lot quicker than a developer working alone.</p><h3 class="subheading">Sounds great.  Where do I sign?</h3><p>Hold on comrade not so fast.</p><blockquote><p>Pair programming can be a bit like communism, too good to be true.</p></blockquote><p>One of the most difficult things in pair programming is finding a good pairing partner.  The general consensus is that developers need be at similar skill levels, understand the domain and offer something their partner other can’t.</p><h3 class="subheading">All good relationships are about give and take</h3><p>Unless you’re a total idiot and couldn’t care what your pairing partner thinks, you will be conscious how your partner is feeling.</p><p>If you hog the keyboard too much your partner will become a chicken, involved but not committed.  They will play with their phone, think about what to have for dinner, or even fall asleep.</p><p>If you’re too passive, not wanting to ‘rock the boat’ you will be putting your name against something you don’t necessarily agree with.  This can even be an issue even when you have the keyboard, because all you’re doing is typing what the other is saying.   Lets hope your secretarial skills are up to the job.</p><p>Some of you will be quick to point out the solution to this problem is to swap the driver/observer roles every 30 minutes or by adopting the <a
href="http://en.wikipedia.org/wiki/Pair_programming#Ping_pong_pair_programming">ping pong pair programming pattern</a>.</p><p>However this doesn’t always solve the issue especially if you’re working with a control freak who says something like “why don’t <strong>you</strong> try this?” before taking back the keyboard.</p><p>In addition to changing roles within a pair, the developers in the pair should be rotated.</p><p>In the <a
href="http://www.infoq.com/presentations/turning-on-a-sixpence">Turning on a sixpence &#8211; No excuses: Concept To Cash Every Week</a> video, developers working on a project for a broadcasting company changed pair in morning and afternoons.  This means over a course of two days five different developers would have been involved.</p><p>For example in the morning developer A would be ‘driving’, and developer B would be the ‘observer’.  In the afternoon developer A, would move onto something else, developer B would be ‘driving’ and developer C would be ‘observer’.</p><p>I know this is cynical but I can’t imagine that the first few minutes of a new pair starting aren&#8217;t spent bitching about the developer who has moved on, followed another half an hour taking out what they think is wrong and doing what they wanted to do.</p><h3 class="subheading">Developer Values</h3><p>There’s no doubt a developer has to make sacrifices when pairing.  What if you like doing test driven development, but your partner doesn’t?  You could</p><ul><li>suggest to try it out &#8211; and then try to look pleased when they don’t.</li><li>raise the issue &#8211; because that’s really going to help you build a relationship.</li><li>do nothing &#8211; it’s the easiest thing to do and you simply can’t face another day at work wasting time fighting your corner.<li></ul><p>A good developer in a pair can’t argue with everything they don’t agree with, they have to bite their lip and let things slide. After all how much value is there in arguing if underscores should be used for private member variables.</p><h3 class="subheading">Thanks But No Thanks</h3><p>Many developers have said that pair programming is that it’s not for them.</p><p><a
href="http://www.guardian.co.uk/football/2009/dec/01/lionel-messi-ballon-dor-barcelona">Lionel Messi</a> European and soon to be crowned World footballer of the year is fantastic when he plays for Barcelona.  But when he plays for Argentina things don’t go so well.  The problem is the system he has to fit into.</p><blockquote><p>Why should a developer who is able to write good quality code on time be forced to fit into a process?  After all that isn’t agile about &#8216;Individuals and interactions over processes and tools&#8217;.</p></blockquote><p>And if you believe ‘people work harder when there is someone looking over their<br
/> shoulder’ (see Mendelt Siebenga&#8217;s post <a
href="http://agilesoftwaredevelopment.com/blog/mendelt/dirty-secret-pair-programming">The dirty secret of pair programming</a>), well that fits in with the Tayloristic view that workers are stupid, can&#8217;t be trusted because they don’t care about things and only managers know better.</p><p>When I’m working alone and have to solve a problem I can look on <del
datetime="2009-12-08T22:51:18+00:00">the internet</del> Stack Overflow or ask a colleague.</p><p>Sometimes when you&#8217;re pair programming trying to find a solution is like having a back seat driver on board, you&#8217;re unable to concentrate and have to speed read because your partner wanted to click on a different link or search for something else.    This clip sums up what I mean.</p><p><embed
src="http://www.metacafe.com/fplayer/773285/harry_enfield_television_programme_you_didnt_wanna.swf" width="400" height="345" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" name="Metacafe_773285" align="center"> </embed><br
/><font
size = 1><a
href="http://www.metacafe.com/watch/773285/harry_enfield_television_programme_you_didnt_wanna/">Harry Enfield Television Programme &#8211; You Didn&#8217;t Wanna</a> &#8211; <a
href="http://www.metacafe.com/">A funny movie is a click away</a></font></p><p>On a lighter note some developers have pointed out they don’t like pair programming because to hygiene issues.  Sharing a keyboard and mouse with someone who doesn’t wash their hands, or having to sit in close proximity with someone who smells, is not a pleasant experience.</p><h3 class="subheading">Jag Reehal’s Final Thought on &#8216;Pair Programming Is Not a Silver Bullet&#8217;</h3><p>Should developers do pair programming all of the time? No.</p><blockquote><p>Developers should be trusted and left to their own deceives.  They should pair when they think it’s the right thing to do.</p></blockquote><p>When pair programming works it’s very good, not only for the project but for individuals as well.  The amount of keyboard shortcuts and tips and tricks I’ve picked up when pairing is amazing.  Check out <a
href="http://weblogs.asp.net/rosherove/archive/2007/06/03/train-to-be-a-keyboard-master-with-keyboard-jedi.aspx">Keyboard Jedi</a> when you are pairing, it shows a visual list of shortcuts as they are being typed.</p><p>It’s important that developers are able to read blogs, explore and experiment, which pair programming doesn’t really allow for because your partner has to agree with everything you want to do.  In his <a
href="http://www.hanselman.com/blog/PDC09ASPNETMVC2NinjasStillOnFireBlackBeltTips.aspx">PDC 09 ASP.NET MVC 2: Ninjas Still on Fire Black Belt Tips talk Scott Hanselman</a> said &#8216;you can spot a good dev if their recent project list contains projects where they are just trying out stuff&#8217;.</p><p>For me code reviews come too late in the development process.  Pair programming should seriously be considered if code reviews are of paramount importance to you.</p><p>As for the arguments about productivity and focus etc, yes it can help.  But I also believe developers working alone and using <a
href="http://www.pomodorotechnique.com/">the pomodoro technique</a> could achieve similar results.</p><p>I will never dictate my team have to do pair programming.  But I would be disappointed if they never tried.</p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/pair-programming-is-not-a-silver-bullet/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Excellent FREE resource for learning Domain Driven Design</title><link>http://www.arrangeactassert.com/excellent-free-resource-for-learning-domain-driven-design/</link> <comments>http://www.arrangeactassert.com/excellent-free-resource-for-learning-domain-driven-design/#comments</comments> <pubDate>Mon, 02 Nov 2009 11:09:35 +0000</pubDate> <dc:creator>Jag Reehal</dc:creator> <category><![CDATA[Agile]]></category> <category><![CDATA[Design Patterns]]></category> <category><![CDATA[Extreme Programming (XP)]]></category> <category><![CDATA[Test Driven Development (TDD)]]></category><guid
isPermaLink="false">http://www.arrangeactassert.com/?p=407</guid> <description><![CDATA[If you asked developers what books they should read, most would (or should) include Domain Driven Design by Eric Evans. Why is it important? The patterns and practices outlined in this book will help you develop more successful software solutions. How? Eric Evans shows how you can improve communication with your customer (by doing things [...]]]></description> <content:encoded><![CDATA[<p>If you asked developers what books they should read, most would (or should) include <a
href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215">Domain Driven Design by Eric Evans</a>.</p><p><strong>Why is it important?</strong></p><p>The patterns and practices outlined in this book will help you develop more successful software solutions.</p><p><strong>How?</strong></p><p>Eric Evans shows how you can improve communication with your customer (by doing things like developing a ubiquitous language), implement agile practices and create maintainable solutions which follow good software development principles.</p><p><em>One of common criticisms of the book is that ‘it does go on a bit’.</em></p><p>The good news is that the folks over at <a
href="http://www.infoq.com">InfoQ</a> have come up with ‘<a
href="http://www.infoq.com/minibooks/domain-driven-design-quickly">Domain Driven Design Quickly</a>’ which summarizes what Domain Driven Design is about.</p><p>The even better news is that it’s FREE if you register with <a
href="http://www.infoq.com">InfoQ</a>, which is no bad thing because it&#8217;s a fantastic resource with videos, presentations and some very good articles.</p> ]]></content:encoded> <wfw:commentRss>http://www.arrangeactassert.com/excellent-free-resource-for-learning-domain-driven-design/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Served from: www.arrangeactassert.com @ 2012-02-05 23:18:32 by W3 Total Cache -->
