<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Robby on Rails: Tag driven</title>
    <link>http://www.robbyonrails.com/articles/tag/driven</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>thoughts.sort_by{|t| t[:topic]}.collect </description>
    <item>
      <title>Spec Your Views</title>
      <description>&lt;p&gt;I meant to work on this post&amp;#8230; oh about 7 months ago.&lt;/p&gt;


	&lt;p&gt;Way back in January (7 months ago), Jamis Buck posted an article titled, &lt;a href="http://weblog.jamisbuck.org/2007/1/29/testing-your-views"&gt;Testing your views&lt;/a&gt;, which gave a few tips on using Test::Unit to, as the title suggests, test your views.&lt;/p&gt;


	&lt;p&gt;While, I&amp;#8217;m not going to rewrite everything that Jamis wrote, I&amp;#8217;d like to show you how to test these views with RSpec. (you might take a moment to quickly read his post&amp;#8230;)&lt;/p&gt;


	&lt;p&gt;In this example, I&amp;#8217;m going to show you how we&amp;#8217;re able to write specs for the following &lt;span class="caps"&gt;RHTML&lt;/span&gt;, which  you&amp;#8217;ll notice matches the code that he wrote tests for.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  &amp;lt;% if @user.administrator? %&amp;gt;
    Hi &amp;lt;%= @user.name %&amp;gt;! You appear to be an administrator.
    &amp;lt;%= link_to "Click here", admin_url, :id =&amp;gt; "admin_link" %&amp;gt;
    to see the admin stuff!
  &amp;lt;% end %&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Jamis writes, &lt;em&gt;&amp;#8220;The only really significant thing you ought to be testing here is that the admin link only shows up for administrators. &amp;#8220;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;So, let&amp;#8217;s do just that, but with RSpec.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not sure how Jamis is handling his view tests, but we&amp;#8217;re going to approach our view specs, much like we approach our controller specs, with the use of mocks and stubs, because we really don&amp;#8217;t need to spec any of our models at this level in the application.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Write specifications for your models&amp;#8230; in your model specs &lt;strong&gt;not&lt;/strong&gt; in your controller or view specs.&lt;/p&gt;


	&lt;p&gt;The first thing that we&amp;#8217;re going to do is setup a custom spec helper, because for something like an mocked user, will probably get reused in other areas of the user interface. Spec helpers are essentially modules that you can include in your RSpec descriptions (the block that starts with &lt;code&gt;describe&lt;/code&gt;) and reuse.&lt;/p&gt;


	&lt;p&gt;In this spec helper, I&amp;#8217;m going to include two methods, to mock the User model and stub out any of the methods that are necessary for spec&amp;#8217;n this view.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
module MockUserHelper
  def mock_normal_user
    user = mock(User)
    user.stub!(:administrator?).and_return(false)   # &amp;lt;--- NOT an admin
    user.stub!(:name).and_return('David Chelimsky')
    return user
  end

  def mock_admin_user
    user = mock(User)
    user.stub!(:administrator?).and_return(true)    # &amp;lt;--- IS an admin
    user.stub!(:name).and_return('Aslak Hellesoy')
    return user
  end
end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;In the &lt;code&gt;mock_normal_user&lt;/code&gt; method, we&amp;#8217;re constructing a mock object and stubbing out the methods that we see are being called in the &lt;span class="caps"&gt;RHTML&lt;/span&gt; code. In &lt;code&gt;mock_admin_user&lt;/code&gt;, we&amp;#8217;re basically doing the same thing, but just stubbing the &lt;code&gt;administrator?&lt;/code&gt; method to return &lt;code&gt;true&lt;/code&gt; for this mock user.&lt;/p&gt;


	&lt;p&gt;By stubbing these methods, we&amp;#8217;ll be able to send a non-ActiveRecord object to the view and have it render without knowing the difference. For example, the &lt;code&gt;if @user.administrator?&lt;/code&gt; condition will return true or false, depending on how we stubbed it.&lt;/p&gt;


	&lt;p&gt;For more information on mocks and stubs, &lt;a href="http://rspec.rubyforge.org/documentation/mocks/index.html"&gt;read here&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Now that we have our spec helper, let&amp;#8217;s go ahead and dive into a few specifications for the view.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
describe "index page" do
  include MockUserHelper

  it "should render an admin link for an admin user" do
    assigns[:user] = mock_admin_user
    render 'index'
    response.should have_tag('a#admin_link')
  end

  it "should not render an admin link for a normal, non-admin user" do
    assigns[:user] = mock_normal_user
    render 'index'
    response.should_not have_tag('a#admin_link')
  end
end  
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;Please note:&lt;/strong&gt; This code example is only longer than the one shown by Jamis because he didn&amp;#8217;t include how he setup all his user sessions/objects. ;-)&lt;/p&gt;


	&lt;p&gt;When these specs are run, we can see the following results.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg" alt="" /&gt;&lt;br /&gt;&lt;small&gt;Pretty output courtesy of RSpec + TextMate bundle&lt;/small&gt;&lt;/p&gt;


	&lt;p&gt;Great, we&amp;#8217;ve been able to write specifications for our Rails views without a lot of pain. Stay tuned for more posts on this topic as I continue writing about how Designers and Developers can work together, in harmony. (&lt;a href="http://www.robbyonrails.com/articles/2007/08/01/designers-developers-and-the-x_-factor"&gt;see my last post on this topic&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;For more information on adopting RSpec, please visit the &lt;a href="http://rspec.rubyforge.org"&gt;RSpec project homepage&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Thu, 02 Aug 2007 02:00:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c21e25cf-1a4a-4b9f-a628-89fc00945829</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2007/08/02/spec-your-views</link>
      <category>Ruby on Rails</category>
      <category>Ruby</category>
      <category>Programming</category>
      <category>rails</category>
      <category>rubyonrails</category>
      <category>testing</category>
      <category>driven</category>
      <category>bdd</category>
      <category>rspec</category>
      <category>behavior</category>
      <category>mocks</category>
      <category>designers</category>
      <category>rhtml</category>
      <category>html</category>
      <category>specs</category>
    </item>
    <item>
      <title>BDD is still kinky</title>
      <description>&lt;p&gt;&lt;a href="http://flickr.com/photos/planetargon/447627473"&gt;&lt;img src="http://farm1.static.flickr.com/214/447627473_36d5614c82.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;I still believe that &lt;a href="http://www.robbyonrails.com/articles/2007/02/08/is-bdd-kinkier-than-tdd"&gt;Behavior-Driven Development is kinkier than Test-Driven Development&lt;/a&gt;...&lt;/p&gt;
</description>
      <pubDate>Tue, 10 Apr 2007 16:51:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:936e15de-98f3-41da-8ef2-895c8c6dbb0d</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2007/04/10/bdd-is-still-kinky</link>
      <category>Programming</category>
      <category>bdd</category>
      <category>tdd</category>
      <category>behavior</category>
      <category>driven</category>
      <category>agile</category>
      <category>development</category>
      <category>kinky</category>
      <category>rspec</category>
    </item>
    <item>
      <title>Is BDD kinkier than TDD?</title>
      <description>&lt;p&gt;If you&amp;#8217;re in need of a compelling reason to switch from Test-Driven Development to &lt;a href="http://www.behavior-driven.org/"&gt;Behavior-Driven Development&lt;/a&gt;... consider this.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&lt;em&gt;&amp;#8220;BDD sounds kinkier.&amp;#8221;&lt;/em&gt;  -Michael K. Loukides, Book Editor for O&amp;#8217;Reilly&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;...on that &lt;em&gt;bombshell&lt;/em&gt;... I am going to suggest that this be used as the official &lt;span class="caps"&gt;BDD&lt;/span&gt; logo.&lt;/p&gt;


	&lt;p&gt;&lt;img src="http://www.robbyonrails.com/files/kinkier_than_tdd.jpg" alt="" /&gt;&lt;/p&gt;


	&lt;p&gt;There you have it. Deep down&amp;#8230; the biggest reason that I switched from Test::Unit to &lt;a href="http://rspec.rubyforge.org"&gt;RSpec&lt;/a&gt;... was the sex appeal. ;-)&lt;/p&gt;


	&lt;p&gt;What was your reason?&lt;/p&gt;
</description>
      <pubDate>Thu, 08 Feb 2007 13:20:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:95d594a2-43ce-4682-b024-2a01af278078</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2007/02/08/is-bdd-kinkier-than-tdd</link>
      <category>Ruby on Rails</category>
      <category>Ruby</category>
      <category>Programming</category>
      <category>bdd</category>
      <category>tdd</category>
      <category>behavior</category>
      <category>driven</category>
      <category>agile</category>
      <category>development</category>
      <category>kinky</category>
      <category>sex</category>
      <category>handcuffs</category>
      <category>rspec</category>
    </item>
    <item>
      <title>class Goal; has_many :sub_goals; end</title>
      <description>&lt;p&gt;I was up late last night reading, &lt;a href="http://www.amazon.com/gp/product/B0006D8J40/002-7427698-8489658"&gt;The New Utopians: A study of system design and social change&lt;/a&gt; and came across the following quote.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;&amp;#8220;Problem solving proceeds by erecting goals, detecting differences between present situation and goal, finding in memory or by search tools or processes that are relevant to reducing differences of these particular kinds, and applying these tools or processes. Each problem generates subproblems until we find a subproblem we can solve-&lt;del&gt;for which we already have a program stored in memory. We proceed until, by successive solution of such problems, we eventually achieve our over-all goal&lt;/del&gt;-or give up.&amp;#8221;&lt;/em&gt;[1]&lt;/p&gt;


	&lt;p&gt;This caught my attention because this presents a very systematic process for achieving goals, but doesn&amp;#8217;t clarify how you &lt;em&gt;erect&lt;/em&gt; these initial goals in the first place. Our team is putting a lot energy into rethinking how we are requesting information from our clients. Brian Ford has written an article titled, &lt;a href="http://blog.brightredglow.com/articles/2006/08/16/ethical-software-needs-dialogue"&gt;Ethical Software Needs Dialogue&lt;/a&gt;, which discusses some of our current approaches to outlining the project goals.&lt;/p&gt;


	&lt;p&gt;Brian writes, &lt;em&gt;&amp;#8220;One approach that we are trying is dialoguing with the client about goals without talking at all about the web site. In other words, for that exploration, the web site doesn’t even exist. Talk about thinking outside the tubes.&amp;#8221;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;If you have a few minutes&amp;#8230; you might read &lt;a href="http://blog.brightredglow.com/articles/2006/08/16/ethical-software-needs-dialogue"&gt;his insightful article&lt;/a&gt;.&lt;/p&gt;


	&lt;p id="fn1"&gt;&lt;sup&gt;1&lt;/sup&gt; H.A. Simon, &lt;em&gt;The New Science of Management Decision&lt;/em&gt; (New York: Harper &amp;#38; Row, Publishers, Inc., 1960), p. 27.&lt;/p&gt;
</description>
      <pubDate>Wed, 16 Aug 2006 12:26:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fba6ff99-9fab-4cd6-96b4-d1425eb7a306</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/08/16/class-goal-has_many-sub_goals-end</link>
      <category>agile</category>
      <category>d3</category>
      <category>goals</category>
      <category>dialogue</category>
      <category>driven</category>
      <category>development</category>
      <category>brixen</category>
      <category>tubes</category>
    </item>
    <item>
      <title>d3 not DDD</title>
      <description>&lt;p&gt;First, a quick update from our sponsors&amp;#8230;&lt;/p&gt;


	&lt;p&gt;Brian and I talked yesterday and agreed to stop referring to Dialogue-Driven Development as &lt;span class="caps"&gt;DDD&lt;/span&gt;. We&amp;#8217;ll leave that for the Domain-Driven Design fans. From now one, the short version for Dialogue-Driven Development will be &lt;strong&gt;d3&lt;/strong&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;span class="caps"&gt;MSM&lt;/span&gt; posted &lt;a href="http://groups.yahoo.com/group/scrumdevelopment/message/15257"&gt;an email&lt;/a&gt; in regards to d3 on a Scrum development mailing list. He writes, &lt;em&gt;&amp;#8220;While I believe there&amp;#8217;s room for plenty of Agile methodologies in the world and wouldn&amp;#8217;t want to discourage the development of &lt;span class="caps"&gt;DDD&lt;/span&gt; if it helps them get their software written, I would hate to see Scrum described inaccurately, especially in a well-oiled meme propagation machine like the Rails community.&amp;#8221;&lt;/em&gt; (&lt;a href="http://groups.yahoo.com/group/scrumdevelopment/message/15257"&gt;link&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://groups.yahoo.com/group/scrumdevelopment/message/15279"&gt;Michael D. Ivey responded with&lt;/a&gt;, &lt;em&gt;&amp;#8220;That being said&amp;#8230;as someone who has gotten 100% into Rails development, I find myself using Scrum less. At least, on the surface, official Scrum. Rails makes me&lt;sup&gt;W^W&lt;/sup&gt;Wlets me be so productive that we are basically having 1 day sprints.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;What&amp;#8217;s interesting here is that we have a someone who is working with Ruby on Rails and finds himself using Scrum less because the environment is much different. This is &lt;em&gt;exactly&lt;/em&gt; why Brian and I started seeking out something even more lightweight. We&amp;#8217;re not aiming to replace other methodologies, but to structure our own that focuses on &lt;em&gt;dialogue&lt;/em&gt;. With Rails, we&amp;#8217;re finding that the amount of collaboration and dialogue with clients has both increased and improved tremendously.&lt;/p&gt;


	&lt;p&gt;Ivey also goes on to say, &lt;em&gt;&amp;#8220;I believe, having done Scrum well, and having done the &amp;#8221;&amp;#8221;Rails experience,&amp;#8221;&amp;#8221; that what Robby and &amp;#8230;. the other guy &amp;#8230;. are describing with &amp;#8221;&amp;#8221;Dialogue Driven Development&amp;#8221;&amp;#8221; is exactly what happens when you start with Scrum or something Scrummy, add a hyper-productive programming language and framework, mixin a very active and interactive customer, and then just start running at a comfortable pace and see when you get somewhere cool.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;Perhaps Michael is right&amp;#8230; and of course, this is open for discussion. :-)&lt;/p&gt;


	&lt;p&gt;Brian and I are spending a good deal of time thinking and talking about this stuff. We want to outline a new pattern that changes how requirements are &lt;em&gt;gathered&lt;/em&gt; and &lt;em&gt;documented&lt;/em&gt; through dialogue. It&amp;#8217;s apparent that as we read different peoples comments on our articles that the general consensus is to interpret the Product Backlog pattern described in the books on Scrum in a way that works best for your team. The approach outlined in &lt;a href="http://www.powells.com/biblio?isbn=0130676349"&gt;Agile Software Development with Scrum&lt;/a&gt; doesn&amp;#8217;t work for us.&lt;/p&gt;


	&lt;p&gt;What&amp;#8217;s your pattern? Share your story&amp;#8230;&lt;/p&gt;
</description>
      <pubDate>Tue, 08 Aug 2006 12:15:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:659a51ea-4ee9-4995-bd4c-c6000949c138</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/08/08/d3-not-ddd</link>
      <category>Ruby on Rails</category>
      <category>Programming</category>
      <category>rails</category>
      <category>development</category>
      <category>agile</category>
      <category>scrum</category>
      <category>dialogue</category>
      <category>driven</category>
      <category>collaboration</category>
      <category>software</category>
      <category>backlog</category>
      <category>patterns</category>
      <category>d3</category>
    </item>
    <item>
      <title>Clients Deserve Simplicity</title>
      <description>&lt;p&gt;A few months ago, I posted an article titled, &lt;a href="http://www.robbyonrails.com/articles/2006/06/08/trawling-for-requirements"&gt;Trawling for Requirements&lt;/a&gt;, which was just before &lt;a href="http://www.theargonexpress.com"&gt;the Argon Express&lt;/a&gt; left for our trip to Chicago for &lt;a href="http://www.railsconf.org"&gt;RailsConf 2006&lt;/a&gt;. I&amp;#8217;ve been kicking around some ideas with Brian ever since that afternoon on how there just seemed to be a big void in software development arena. It&amp;#8217;s always felt that so many of the software development methodologies are designed to get developers to find a better way to work for and with clients. It&amp;#8217;s our goal to outline a pattern that simplifies this process, not just for ourselves, but also our clients.&lt;/p&gt;


	&lt;p&gt;With each new project that our team starts, we are given an opportunity to improve on our evolving pattern for communicating with clients to better understand their goals. If there is one thing that we&amp;#8217;ve seen help this process, it is consistent dialogue. When good collaboration exists through meaningful dialogue, confidence increases in not only the client. As developers, we are able to be confident that we understand their goals. This should generate better results.&lt;/p&gt;


&lt;blockquote&gt;
  &amp;#8220;You are not writing requirements to serve as a contract with your client. Rather, you are writing them to ensure that both of you share the same and demonstrably correct, understanding of what is needed. Do not ask the client to sign off on the requirements; instead, ask the client to &lt;em&gt;sign on&lt;/em&gt; to them and make them a collaborative effort.&amp;#8221; 
  &lt;br /&gt;&lt;br /&gt;
 &amp;#8212;Suzanne and James Robertson, &lt;a href="http://www.powells.com/biblio/71-0321419499-0"&gt;Mastering the Requirements Process, 2nd Ed&lt;/a&gt;.
&lt;/blockquote&gt;

	&lt;p&gt;In &lt;a href="http://www.powells.com/biblio/71-0321419499-0"&gt;Mastering the Requirements Process&lt;/a&gt;, the authors list the following as being key to identifying the project goal.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;em&gt;Purpose&lt;/em&gt;: What should the project do?&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Advantage&lt;/em&gt;: What business advantage does it provide?&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Measurement&lt;/em&gt;: How do you measure the advantage?&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Reasonable&lt;/em&gt;: Given what you understand about the constraints, is it possible for the product to achieve the business advantage?&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Feasible&lt;/em&gt;: Given what you have learned from the blastoff, is it possible to build a product to achieve the measure?&lt;/li&gt;
		&lt;li&gt;&lt;em&gt;Achievable&lt;/em&gt;: Does the organization have (or can it acquire) the skills to build the product and operate it once built?&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;At first glance, I would agree that these are good questions to find answers for with your client.&lt;/p&gt;


	&lt;h2&gt;Requirements, Not Solutions&lt;/h2&gt;


	&lt;p&gt;Many clients come to us with a list of solutions (features) that describe implementation. This has been one of our &lt;a href="http://blog.brightredglow.com/articles/2006/08/06/one-cuckoo-flew-over-the-nest"&gt;concerns with the Product Backlog&lt;/a&gt; as it doesn&amp;#8217;t discourage feature lists. Take a moment to read &lt;a href="http://www.sprez.com/news200111.htm"&gt;Goal Oriented Requirements&lt;/a&gt;, which gives you a few bullets to think about when interacting with your client when extracting requirements.&lt;/p&gt;


	&lt;p&gt;Take a moment to read Brian&amp;#8217;s thoughts on &lt;a href="http://blog.brightredglow.com/articles/2006/08/06/one-cuckoo-flew-over-the-nest"&gt;the product backlog&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;In &lt;a href="http://www.powells.com/biblio/71-0321419499-0"&gt;Mastering the Requirements Process&lt;/a&gt;, the authors give two examples to show the &lt;strong&gt;difference between a solution and a requirement&lt;/strong&gt;.&lt;/p&gt;


	&lt;h3&gt;A Solution&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;The product shall display pictures of goods for the customer to click on.&lt;/em&gt;&lt;/p&gt;


	&lt;h3&gt;A Requirement&lt;/h3&gt;


	&lt;p&gt;&lt;em&gt;The product shall enable the customer to select the goods he wishes to order.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;When requirements are defined in this form, it allows for further dialogue about multiple implementations.&lt;/p&gt;


	&lt;p&gt;For example, we&amp;#8217;re working on a project where the product shall enable the users to send messages to a central system. We&amp;#8217;ve defined a few specific implementations (email, text message, web form) and know that as new technologies emerge, the same requirement will still apply. It&amp;#8217;s important to remember that &lt;strong&gt;we are gathering requirements not solutions&lt;/strong&gt; and from there&amp;#8230; we can collaborate &lt;em&gt;with the client&lt;/em&gt; to design a solution that fits the requirements. Before we attempt to do solve the problem, we must ask that the requirement is aligned with the project goal.&lt;/p&gt;


	&lt;p&gt;We want our clients to assimilate our development methodologies quickly and naturally, which is what Dialogue-Driven Development aims to help achieve&amp;#8212;namely through communication, something we humans do rather well. By lowering the learning curve and accelerating the integration of clients into our process, we can focus a greater sum of our collective energy on the needs of the client, the purpose of the project, and the goals of it&amp;#8217;s users.&lt;/p&gt;


	&lt;p&gt;Although, perhaps we have it all wrong when trying to make software and the development process simpler as &lt;a href="http://money.cnn.com/magazines/business2/business2_archive/2006/04/01/8372803/index.htm"&gt;Paul Kedrosky suggested&lt;/a&gt;.  ;-)&lt;/p&gt;


	&lt;p&gt;Our clients don&amp;#8217;t just want simplicity. They deserve it!&lt;/p&gt;
</description>
      <pubDate>Sun, 06 Aug 2006 22:57:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b524243d-dafb-4522-8a24-389a70fb94fe</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/08/06/clients-deserve-simplicity</link>
      <category>planetargon</category>
      <category>development</category>
      <category>agile</category>
      <category>scrum</category>
      <category>requirements</category>
      <category>dialogue</category>
      <category>driven</category>
      <category>simplicity</category>
      <category>solutions</category>
      <category>collaboration</category>
      <category>d3</category>
    </item>
    <item>
      <title>Dialogue-Driven Development is about rounded corners</title>
      <description>&lt;p&gt;In response to our &lt;a href="http://www.robbyonrails.com/articles/2006/08/02/dialogue-driven-development"&gt;introduction of Dialogue-Driven Development&lt;/a&gt;, mechanismalley.com writes, &lt;em&gt;&amp;#8221;...it seems to be the Rails community’s pattern to take an existing concept — or misconception — put rounded corners on it and deem it something new.&amp;#8221;&lt;/em&gt; (&lt;a href="http://mechanismalley.com/blog/2006/08/04/on-product-backlogs/"&gt;link&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not sure that I can completely agree with this generalization. What I&amp;#8217;ve witnessed as a member of the Rails community, is an attempt to &lt;em&gt;simplify&lt;/em&gt; code, solutions, processes, and as a result&amp;#8230; conversation between developers and clients has become much richer and coherent. Take this with a grain of salt as this has only been my experience. &lt;strong&gt;Complex solutions are complex to explain&lt;/strong&gt; and often too complex to know if they are actually solving &lt;em&gt;the right goal.&lt;/em&gt; On the other hand, &lt;strong&gt;simple solutions make way for better dialogue&lt;/strong&gt;. With &lt;a href="http://www.rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt;, we are provided with a foundation that &lt;em&gt;encourages&lt;/em&gt; and &lt;em&gt;embraces&lt;/em&gt; best practices and simple solutions (rounded corners?), which makes it easier to discuss with the client. This is what fascinates me about Ruby on Rails&amp;#8230; and what Martin Fowler in &lt;a href="http://blog.scribestudio.com/articles/2006/07/03/martin-fowler-railsconf-2006-keynote-address"&gt;his keynote&lt;/a&gt; at &lt;a href="http://www.railsconf.org"&gt;RailsConf&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Perhaps it makes sense that what Brian and I are outlining with our approach to defining patterns for client&amp;lt;-&amp;gt;development team interaction evolved through us working with Ruby on Rails. However, there is nothing that requires Rails in order to follow the patterns that we&amp;#8217;re discussing. In Brian&amp;#8217;s &lt;a href="http://blog.brightredglow.com/articles/2006/08/04/its-all-about-the-dialogue"&gt;first article about d3&lt;/a&gt;, he referenced the following&amp;#8230;&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&amp;#8220;What we are seeing is a drive toward simplicity. Conventional wisdom once was “quick necessarily means dirty”. Ruby challenges that.&lt;/em&gt;
  &lt;br /&gt;
 &amp;#8212;&lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt;
&lt;/blockquote&gt;

	&lt;p&gt;At the very core of our approach with Dialogue-Driven Development is the &lt;a href="http://www.agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt;. The author of this post is correct, we&amp;#8217;re taking an existing concept and putting rounded corners on it. We&amp;#8217;re trying to &lt;strong&gt;make it simpler&lt;/strong&gt;. We find that Scrum is too process heavy and while we can see it being a good step away from the &lt;a href="http://www.waterfall2006.com/"&gt;Waterfall&lt;/a&gt; approach, it&amp;#8217;s still not giving us that warm and fuzzy feeling. Rails developers know what that warm and fuzzy feeling is&amp;#8230; and we are hoping to find something that gives our clients and us the same feeling when we&amp;#8217;re not coding. We want lightweight methodologies to complement our lightweight frameworks and patterns.&lt;/p&gt;


&lt;blockquote&gt;
  We are uncovering better ways of developing&lt;br /&gt;
  software by doing it and helping others do it. &lt;br /&gt;
  Through this work we have come to value:&lt;br /&gt;
&lt;br /&gt;
  Individuals and interactions over processes and tools &lt;br /&gt;
  Working software over comprehensive documentation &lt;br /&gt;
  Customer collaboration over contract negotiation &lt;br /&gt;
  Responding to change over following a plan &lt;br /&gt;
&lt;br /&gt;
  That is, while there is value in the items on &lt;br /&gt;
  the right, we value the items on the left more.&lt;br /&gt;
  &lt;br /&gt;
 &amp;#8212;&lt;a href="http://www.agilemanifesto.org/"&gt;The Agile Manifesto&lt;/a&gt;
&lt;/blockquote&gt;

	&lt;p&gt;It&amp;#8217;s time to start rethinking how we work &lt;em&gt;with&lt;/em&gt; clients. Too often we end up working &lt;em&gt;for&lt;/em&gt; them and while we might build them what they want&amp;#8230; we might not be giving them what they need.&lt;/p&gt;


	&lt;p&gt;So, I must ask&amp;#8230; has working with Ruby on Rails reshaped the way you think about client and developer conversation? If so, for the better or worse?&lt;/p&gt;


	&lt;p&gt;High traces of collaboration and dialogue are usually found in the recipe of any successful project.&lt;/p&gt;


	&lt;h3&gt;Related Articles&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://blog.brightredglow.com/articles/2006/08/06/one-cuckoo-flew-over-the-nest"&gt;One cuckoo flew over the nest&lt;/a&gt;, Brian Ford&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.robbyonrails.com/articles/2006/08/02/dialogue-driven-development"&gt;Dialogue-Driven Development&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://iamrice.org/articles/2006/08/03/dialog-driven-development-is-the-real-agile"&gt;Dialog driven development is the real agile&lt;/a&gt;, Damien Tanner&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://spellcoder.com/blogs/dodyg/archive/2006/08/03/254.aspx"&gt;Dialog driven development&lt;/a&gt;, Lazy Coder&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://blog.brightredglow.com/articles/2006/08/04/its-all-about-the-dialogue"&gt;It&amp;#8217;s all about the dialogue&lt;/a&gt;, Brian Ford&lt;/li&gt;
	&lt;/ul&gt;
</description>
      <pubDate>Sat, 05 Aug 2006 10:49:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:94cb33a8-bd84-4bad-9a20-7b6e2f9cd572</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/08/05/dialogue-driven-development-is-about-rounded-corners</link>
      <category>agile</category>
      <category>dialogue</category>
      <category>driven</category>
      <category>development</category>
      <category>rubyonrails</category>
      <category>clients</category>
      <category>martinfowler</category>
      <category>simplicity</category>
      <category>d3</category>
    </item>
  </channel>
</rss>
