<?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 process</title>
    <link>http://www.robbyonrails.com/articles/tag/process</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>thoughts.sort_by{|t| t[:topic]}.collect </description>
    <item>
      <title>What was that idea again?</title>
      <description>&lt;p&gt;While engaging in another one of our deep philosophical conversations in &lt;code&gt;#caboose&lt;/code&gt;, the topic of remembering that &lt;strong&gt;great idea&lt;/strong&gt; that we had before we fell asleep or at any point during the evening.&lt;/p&gt;


	&lt;p&gt;Manfred Stienstra writes, &amp;#8220;I always think of stuff right before I fall asleep and can&amp;#8217;t remember them when I wake up.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;This happens to me as well, just not as much as it used to. I keep a small moleskin notebook and a pen on my bed side table and try to get everything in there as it comes up. When I open it, I see notes that don&amp;#8217;t make any sense, which were probably after waking up from some bizarre dream. There are many business and development ideas that come up, but it&amp;#8217;s often hard to record everything.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m sure that there are others who&amp;#8217;ve faced this problem. Have you come up with a working solution? If so, would you mind sharing it?&lt;/p&gt;
</description>
      <pubDate>Thu, 02 Aug 2007 08:50:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5ec6ca2a-c419-43cd-976e-dcee70fe1f88</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2007/08/02/what-was-that-idea-again</link>
      <category>memories</category>
      <category>dreams</category>
      <category>process</category>
      <category>notes</category>
      <category>ideas</category>
    </item>
    <item>
      <title>Designers, Developers, and the x_ Factor</title>
      <description>&lt;p&gt;Our team is lucky enough to be in a position where we have both designers &lt;span class="caps"&gt;AND&lt;/span&gt; developers working on the same code base in parallel.&lt;/p&gt;


	&lt;p&gt;Since Ruby on Rails adopts the Model-View-Control pattern for separating business logic from the presentation layer, we&amp;#8217;re able to give our designers a lot of breathing room to to design the interface, whether it&amp;#8217;s for interaction or aesthetic reasons. However, sometimes this breathing room has resulted in small bugs slipping into the application interface. In general, nothing disastrous, but each bug that slips into the queue, slows down the project and we want to avoid as much of that as possible.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;d like to share a few issues that we&amp;#8217;ve seen occur on various occasions, and then show you what we&amp;#8217;ve done to avoid them happening again.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Scenario #1:&lt;/strong&gt; The case of the changed &lt;code&gt;div&lt;/code&gt; id, (victim: designer)&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Designer adds a few &lt;span class="caps"&gt;HTML&lt;/span&gt; elements to the page, defines an &lt;code&gt;id&lt;/code&gt; on a &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag and styles it with &lt;span class="caps"&gt;CSS&lt;/span&gt;.&lt;/li&gt;
		&lt;li&gt;A few days later, a developer needs to make some changes, tests it in their favorite browser and commits.&lt;/li&gt;
		&lt;li&gt;Later, the designer doesn&amp;#8217;t understand why the styling is all messed up. &amp;#8220;It &lt;em&gt;was&lt;/em&gt; working fine.&amp;#8221; &lt;/li&gt;
		&lt;li&gt;...minutes, hours&amp;#8230; go by where the designer tries to track down the issue. &amp;#8220;Oh! Someone renamed the &lt;code&gt;id&lt;/code&gt; in this &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag. Sigh.&amp;#8221; &lt;/li&gt;
		&lt;li&gt;Developer apologies, but explains that he needed to do it because he needed to make it work with his new &lt;span class="caps"&gt;RJS&lt;/span&gt; code.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;&lt;strong&gt;Scenario #2:&lt;/strong&gt; The case of the changed &lt;code&gt;div&lt;/code&gt; id, (victim: developer)&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Developer is implementing this cool new Ajax feature into the web application
	&lt;ul&gt;
	&lt;li&gt;The code relies on there being one or many &lt;span class="caps"&gt;HTML&lt;/span&gt; elements in the &lt;span class="caps"&gt;DOM&lt;/span&gt; with specific &lt;code&gt;id&lt;/code&gt; values defined.&lt;/li&gt;
	&lt;/ul&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Example: &lt;code&gt;&amp;lt;div id="notification_message"&amp;gt;&lt;/code&gt;&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;A few days later, a designer is making some changes to the layout and needs to restyle some of the view that this &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tag is defined. Designer decides to change the id to a different value for any variety of reasons. (or perhaps they changed it to use a class instead of styling it by the id). Often times, we don&amp;#8217;t know who set the id or class&amp;#8230; and many times the developers aren&amp;#8217;t savvy enough with &lt;span class="caps"&gt;HTML&lt;/span&gt; and designers end up cleaning things up a bit. &lt;/li&gt;
		&lt;li&gt;Later, code is checked in and designer didn&amp;#8217;t notice that the Ajax was now breaking as they weren&amp;#8217;t focusing on just the layout.&lt;/li&gt;
		&lt;li&gt;Day or two later, developer sees bug, &amp;#8220;Feature X isn&amp;#8217;t working, throwing JavaScript error&amp;#8230;&amp;#8221; &lt;/li&gt;
		&lt;li&gt;Developer is confused, &amp;#8220;Hey, that was working! What happened?&amp;#8221; &lt;/li&gt;
		&lt;li&gt;Developer tracks down the problem, discusses with designer, they figure out a solution. Problem solved.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;I could outline a few other examples, but I really wanted to highlight these two types of situations, as our team has seen this happen on several occasions. Luckily, we&amp;#8217;ve learned through these experiences and have taken some measures to try and avoid them in the future.&lt;/p&gt;


	&lt;h2&gt;Moving forward (together)&lt;/h2&gt;


	&lt;p&gt;Both of the examples above, were essentially the same problem, but resulted in problems for a different role in the design and development cycle. While, I&amp;#8217;ve definitely been the victim of #2 several times myself, I know that I&amp;#8217;ve also been the guilty of #1. So, what can we do as designers and developers to work with each other without causing these little problems from occurring? (remember: many little problems can add up to a lot of wasted time spent resolving them)&lt;/p&gt;


	&lt;p&gt;Several months ago, I had a meeting with &lt;a href="http://chriszgriffin.com/"&gt;Chris&lt;/a&gt; (User Interface Designer) and &lt;a href="http://blog.imperialdune.com/"&gt;Graeme&lt;/a&gt; (Lead Architect/Developer) to discuss this very problem. At the time, we were implementing a lot of Ajax into an application and were occasionally running into Scenario #2. We discussed a few possible ways of communicating that, &amp;#8220;yes, this div id should &lt;span class="caps"&gt;NOT&lt;/span&gt; be changed (without talking to a developer first)!&amp;#8221;&lt;/p&gt;


	&lt;h3&gt;Idea 1: Comment our &amp;#8220;special&amp;#8221; &lt;span class="caps"&gt;HTML&lt;/span&gt; elements&lt;/h3&gt;


	&lt;p&gt;We discussed using ERb comments in our views to do something like the following.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  &amp;lt;% # no seriously, please don't change this id, it's needed for some Ajax stuff %&amp;gt;
  &amp;lt;div id="notification_message"&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;We all agreed that, while effective, it was going to clutter up our &lt;span class="caps"&gt;RHTML&lt;/span&gt; code more than any of us desired.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Team Response:&lt;/strong&gt; &lt;em&gt;Meh.&lt;/em&gt;&lt;/p&gt;


	&lt;h3&gt;Idea 2: Reserve id&amp;#8217;s for developers&lt;/h3&gt;


	&lt;p&gt;Another idea that came up, was to ask that designers only use classes and ids wold be used by the developers when they needed it.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  &amp;lt;div id="developer_terriroty" class="designer_territory"&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Chris pointed out that this wasn&amp;#8217;t an ideal solution as there is a distinct case for when to use ids versus classes.. and he is very strict about adhering to the &lt;span class="caps"&gt;HTML&lt;/span&gt;/CSS standards.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Team Response&lt;/strong&gt;: &lt;em&gt;Not hot about it&amp;#8230;&lt;/em&gt;&lt;/p&gt;


	&lt;h3&gt;Idea 3: Naming convention for Ajax-dependent elements&lt;/h3&gt;


	&lt;p&gt;The third idea that was discussed, was specifying a naming convention for any elements that were needed by our Ajax code. We played around on the whiteboard with some ideas and settled on the idea that we&amp;#8217;d prefix our id&amp;#8217;s with something easy to remember for both designers and developers.&lt;/p&gt;


	&lt;p&gt;We agreed on&amp;#8230; &lt;code&gt;x_&lt;/code&gt; (x underscore), which would make an element id look something like this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  &amp;lt;div id="x_notification_message"&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;&lt;strong&gt;x == ajax&lt;/strong&gt;... get it?&lt;/p&gt;


	&lt;p&gt;While this adds the strain of typing two more characters to much of our &lt;span class="caps"&gt;RJS&lt;/span&gt; code, we don&amp;#8217;t run into Scenario #2 very often anymore.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  render :update do |page|
    page[:x_notification_message] = 'Something exciting happened... and this is your notification!'
    page[:x_notification_message].visual_effect :highlight
  end
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;or in client-side JavaScript (where we also use this)...&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  $('x_notification_message').do_something
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I find that this helps our team keep a clear distinction between what can and shouldn&amp;#8217;t be changed in the views by our designers. Sometimes they have a good reason to do so, but they know that if there is &lt;code&gt;x_&lt;/code&gt;, then they should ask one of the developers on the team for assistance in renaming it without causing any problems in the application. It also allows our designers to add classes to these elements, or style the id that we&amp;#8217;ve defined.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Team Response&lt;/strong&gt;: &lt;em&gt;Wow, was that all we needed to agree on? Hooray!&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;This leads me to some other problems that have/may come up, but I&amp;#8217;ll discuss that in my next post on this topic, when I&amp;#8217;ll show you how we can use RSpec to avoid these sorts of designer versus developer problems.&lt;/p&gt;


	&lt;p&gt;If you&amp;#8217;re working in a similar environment, how are your designers and developers working, together, in perfect harmony?&lt;/p&gt;


	&lt;p&gt;Until next time, remember to &lt;a href="http://www.robbyonrails.com/articles/2007/05/23/hug-your-designer-day-part-2"&gt;hug your designer&lt;/a&gt;. ...and if you&amp;#8217;re still having developer &lt;em&gt;design&lt;/em&gt; your applications, consider hiring a designer. ;-)&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;&lt;span class="caps"&gt;UPDATE&lt;/span&gt;:&lt;/strong&gt; changed examples after a few comments about using div_for as another solution. (see comments for details)&lt;/p&gt;
</description>
      <pubDate>Wed, 01 Aug 2007 00:39:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bcf3fb50-6b05-48cd-830f-43144d80c243</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2007/08/01/designers-developers-and-the-x_-factor</link>
      <category>Ruby on Rails</category>
      <category>Programming</category>
      <category>PLANET ARGON</category>
      <category>rails</category>
      <category>ajax</category>
      <category>development</category>
      <category>rubyonrails</category>
      <category>agile</category>
      <category>design</category>
      <category>process</category>
      <category>views</category>
      <category>designers</category>
      <category>developers</category>
      <category>rhtml</category>
      <category>erb</category>
      <category>conventions</category>
      <category>bugs</category>
    </item>
    <item>
      <title>Dialogue versus Debate</title>
      <description>&lt;p&gt;How many times have you participated in a conversation with someone and realized that you really didn&amp;#8217;t understand what they had said. Or&amp;#8230; perhaps you&amp;#8217;ve been talking and even though the other person is nodding, you&amp;#8217;re not confident that they&amp;#8217;ve really heard what you&amp;#8217;ve been saying. Yet, you might find yourself nodding in agreement when they speak&amp;#8230; and walk away&amp;#8230; totally clueless about what you just talked about.&lt;/p&gt;


	&lt;p&gt;Were you really listening? Were they speaking over your head? Were you speaking over their head? Perhaps you were distracted? Whatever the reason&amp;#8230; it&amp;#8217;s probably worth thinking about. We all do it from time to time.&lt;/p&gt;


	&lt;p&gt;Even worse, you were only thinking about how they were wrong and you had the right answer already in your head&amp;#8230;&lt;/p&gt;


	&lt;p&gt;In Dialogue, there are rules for participation, which we&amp;#8217;ll explore in future writings.&lt;/p&gt;


	&lt;p&gt;One might wonder if we&amp;#8217;ve been trained to work this way. In school, we had classes that taught us to debate one another&amp;#8230; further cultivating a society focused on &lt;strong&gt;you versus I&lt;/strong&gt;. But, what about the community? What about the team? &lt;strong&gt;What about us?&lt;/strong&gt; Sadly, most of the teamwork that we saw encouraged was in the form of sports. To be fair&amp;#8230; we did have debate teams&amp;#8230; but the purpose was to argue for one side of an argument&amp;#8230; not to find a way for both sides to work together. One might wonder our society would be like if we encouraged Dialogue in the same way.&lt;/p&gt;


	&lt;p&gt;Perhaps we need Dialogue teams. ;-)&lt;/p&gt;


	&lt;p&gt;Dialogue allows teams of people to work together. It&amp;#8217;s a process that cultivates learning and discovery. Dialogue is not a process that encourages the passing of judgement or pushing for specific outcomes&amp;#8230; the aim is to share understanding. Through empathetic listening and questioning, the seeds of trust are planted.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.dialogue-driven.org"&gt;Dialogue-Driven Development&lt;/a&gt; is about building trust.&lt;/p&gt;


	&lt;p&gt;I came across &lt;a href="http://www.ullerymanagement.com/art_of_dialogue.htm"&gt;this great table&lt;/a&gt;, which contrasts Dialogue and Debate. It&amp;#8217;s worth taking a few moments to review.&lt;/p&gt;


	&lt;p&gt;Here are a few that caught my attention&amp;#8230;&lt;/p&gt;


	&lt;table&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;strong&gt;Dialogue&lt;/strong&gt;&lt;/td&gt;
			&lt;td&gt;&lt;strong&gt;Debate&lt;/strong&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Dialogue is collaborative: the sides work together.&lt;/td&gt;
			&lt;td&gt;Debate is a type of fight: two sides oppose each other to prove each other wrong.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;In a dialogue the goals are finding common ideas and new ideas.&lt;/td&gt;
			&lt;td&gt;In a debate the goals is winning with your own ideas.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;In a dialogue you contribute your best ideas to be improved upon.&lt;/td&gt;
			&lt;td&gt;In a debate you contribute your ideas and defend them against challenges.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;In a dialogue you listen to each other to understand and build agreement.&lt;/td&gt;
			&lt;td&gt;In a debate you listen to each other to find flaws and disagree.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;In a dialogue you may consider new ideas and even change your mind completely.  &lt;/td&gt;
			&lt;td&gt;In a debate you do not admit you are considering new ideas and you must not change your mind, or you lose.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Dialogue encourages you to evaluate yourself. &lt;/td&gt;
			&lt;td&gt;Debate encourages you to criticize others.&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Dialogue promotes open-mindedness, including an openness to being wrong. &lt;/td&gt;
			&lt;td&gt;Debate creates a close-minded attitude, a determination to be right.&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;




	&lt;p&gt;There is something to be said about &lt;a href="http://www.ullerymanagement.com/art_of_dialogue.htm"&gt;the art of Dialogue&lt;/a&gt;, which is why we&amp;#8217;re so excited about &lt;a href="http://www.dialogue-driven.org"&gt;the d3 project&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Tue, 10 Oct 2006 00:40:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:1a051e4e-a476-4491-85c6-ae9f76e2d1fa</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/10/10/dialogue-versus-debate</link>
      <category>d3</category>
      <category>agile</category>
      <category>development</category>
      <category>d3</category>
      <category>dialogue</category>
      <category>debate</category>
      <category>process</category>
      <category>teamwork</category>
      <category>education</category>
    </item>
    <item>
      <title>Project Enlightenment with d3</title>
      <description>&lt;p&gt;What do we mean exactly when we say that we want to participate in thoughtful dialogue in a project? What is our intention with this? When I recently came across some essays by &lt;a href="http://www.gurteen.com/"&gt;David Gurteen&lt;/a&gt; and read his definition of dialogue as being &lt;em&gt;&amp;#8220;a disciplined form of conversation&amp;#8221;&lt;/em&gt; it got me thinking about how we often forget that like all skills, practice makes perfect. What make our conversations discilplined in the first place? Based on my experience, dialogue (disciplined conversation) manifests when all participants in a conversation are practicing mindfulness. I don&amp;#8217;t believe that most people learn or behave well by being beaten into submission, so we must come to an understanding while we actively involve ourselves in dialogue. Most of us are civil towards one another, which does wonders for allowing us to tolerate each other, but I still can&amp;#8217;t help but feel that we&amp;#8217;re still missing the mark when it comes to having consistent and thoughtful dialogue.&lt;/p&gt;


	&lt;p&gt;Over the past several months, our team has been spending quite a bit of time and energy analyzing these problems. What we really starting to uncover is that the real problem seems to exist somewhere outside of our development methodologies. Working under the Agile umbrella &lt;a href="http://www.butunclebob.com/ArticleS.UncleBob.AgilePeopleStillDontGetIt"&gt;provides no silver bullet&lt;/a&gt;. The real issues seem to exist much deeper in our human nature.&lt;/p&gt;


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


	&lt;p&gt;&lt;strong&gt;We&amp;#8217;re not all that great at communicating&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Humans are not perfect&amp;#8230; therefore&amp;#8230; our ideas are probably far from perfect as well. Our thoughts aren&amp;#8217;t perfect. Our interactions aren&amp;#8217;t perfect. We&amp;#8217;re consistently inconsistent (heh) and while we can rely on averages to some extent to calculate probabilities, we can&amp;#8217;t always explain why somethings still go horribly wrong. The principles outlines in the &lt;a href="http://www.agilemanifesto.org/"&gt;Agile manifesto&lt;/a&gt; stress the importance of focusing on people not processes and responding to change. If we are to put a heavy focus on the people involved in projects, we must acknowledge our strengths and weaknesses and find innovative ways to improve our communication skills.&lt;/p&gt;


	&lt;p&gt;On a daily basis, we&amp;#8217;re faced with complex problems. Hopefully, we&amp;#8217;re using a lot of our prior experience to aid us in making rational decisions about how we respond to them. There is a lot that goes through each decision that we make. We can&amp;#8217;t automate this process (yet), but we can definitely share our lessons with one another. Our intentions need to be thoughtful and empathetic to the needs of all parties affected by each decision. As humans, we have the opportunity to really listen to the concerns of others and use not only our logical intelligence&amp;#8230; but also our emotional intelligence.&lt;/p&gt;


	&lt;p&gt;Much of this comes down to each of us learning to understand how we make decisions and interact with people. It&amp;#8217;s our goal with Dialogue-Driven Development that with your help, we&amp;#8217;ll be able to outline &lt;a href="http://blog.brightredglow.com/articles/2006/08/22/patterns-of-dialogue"&gt;patterns of dialogue&lt;/a&gt;, which we hope will be of great value to the community. Our team has been analyzing our interaction with clients and discussing what has worked well and what hasn&amp;#8217;t. How did our clients respond to approach X versus Y? It&amp;#8217;s important that we capture this information and have conversations about the results.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;&amp;#8220;The meaning is what holds it [dialogue] together. ..Meaning is not static – it is flowing. And if we have the meaning being shared, then it is flowing among us; it holds the group together&amp;#8230;in that way we can talk together coherently and think together.&amp;#8221; &amp;#8211; &lt;a href="http://www.david-bohm.net/dialogue/"&gt;David Bohm&lt;/a&gt;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;Doesn&amp;#8217;t that sound beautiful? Who wouldn&amp;#8217;t want to reach such levels of project enlightenment?&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;d3 aims to be to communication what &lt;span class="caps"&gt;BDD&lt;/span&gt; is to specification&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;While at &lt;a href="http://europe.railsconf.org/"&gt;RailsConf Europe&lt;/a&gt;, I had the privilege to speak with several Rail developers&amp;#8230; several of which are doing contract development for several clients, just like our team. We discussed d3 for a while and I walked away feeling really excited about the whole concept. When I explained that our team didn&amp;#8217;t see d3 as a &lt;em&gt;replacement&lt;/em&gt; for Agile methodologies like Scrum, XP, etc&amp;#8230; but as another tool in our tool belt. Dialogue between developers, clients, and users should be agnostic about particular methodologies. We&amp;#8217;re really excited about &lt;a href="http://www.behavior-driven.org"&gt;Behavior-Driven Development&lt;/a&gt; as a best practice in our development process and we&amp;#8217;re seeing Dialogue-Driven Development as another best practice that we start using from the initial point of contact with a potential client to long after we deliver the working product that we were contracted to develop.&lt;/p&gt;


	&lt;p&gt;We&amp;#8217;ll be posting some fun announcements about the d3 project in the coming week(s). Stay tuned&amp;#8230;&lt;/p&gt;
</description>
      <pubDate>Wed, 27 Sep 2006 02:38:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fd10cc10-5b36-4de4-ac83-33e59f93ce83</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/09/27/project-enlightenment-with-d3</link>
      <category>d3</category>
      <category>d3</category>
      <category>agile</category>
      <category>development</category>
      <category>clients</category>
      <category>interadction</category>
      <category>communication</category>
      <category>dialogue</category>
      <category>bohm</category>
      <category>process</category>
    </item>
    <item>
      <title>Borat finds a new stakeholder</title>
      <description>&lt;p&gt;Picking up on my last Borat post, &lt;a href="http://www.robbyonrails.com/articles/2006/06/07/prototypes-are-your-friends"&gt;Prototypes Are Your Friends&lt;/a&gt;, I would like to direct you over to the next post in the series, &lt;a href="http://blog.brightredglow.com/articles/2006/06/09/gday-project-borat"&gt;G&amp;#8217;day Project Borat&lt;/a&gt; where &lt;a href="http://blog.brightredglow.com/"&gt;Brian Ford&lt;/a&gt; jumps into the game&amp;#8230;&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&amp;#8220;When we, as developers, began focusing on user-centric design and usability, it was a recognition that users deserved respect and need not be rescued, if you will, by our bright ideas. In a big way, we needed to keep our bright ideas out of the user’s way.&amp;#8221;&lt;/em&gt;&lt;/blockquote&gt;

	&lt;p&gt;&lt;a href="http://blog.brightredglow.com/articles/2006/06/09/gday-project-borat"&gt;Read more&lt;/a&gt;...&lt;/p&gt;
</description>
      <pubDate>Fri, 09 Jun 2006 08:23:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0b3f5c94-3275-49e1-90d0-6e46b3507bbd</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/06/09/borat-finds-a-new-stakeholder</link>
      <category>project_borat</category>
      <category>planetargon</category>
      <category>process</category>
      <category>agile</category>
    </item>
    <item>
      <title>Code Complete</title>
      <description>&lt;p&gt;I came across a review of &lt;a href="http://www.powells.com/biblio/4-0735619670-1"&gt;Code Complete, 2nd Ed&lt;/a&gt;. last night&amp;#8230; and saw the following quotes.&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&amp;#8221;&amp;#8221;People have already made all the mistakes that you&amp;#8217;re making now, and unless you&amp;#8217;re a glutton for punishment, you&amp;#8217;ll prefer reading their books and avoiding their mistakes to inventing new versions of old problems.&amp;#8221; &amp;#8220;&lt;/em&gt;&lt;/blockquote&gt;

	&lt;p&gt;...and&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&amp;#8221;&amp;#8221;Once a programmer realizes that programming principles transcend the syntax of any specific language, the doors swing open to knowledge that truly makes a difference in quality and productivity.&amp;#8221;&amp;#8220;&lt;/em&gt;&lt;/blockquote&gt;

	&lt;p&gt;I&amp;#8217;m sold and with 900+ pages&amp;#8230; I&amp;#8217;m sure I have a few things to learn. I&amp;#8217;m going to go pick it up shortly at &lt;a href="http://www.powells.com/technicalbooks"&gt;Powell&amp;#8217;s Technical&lt;/a&gt;.  :-)&lt;/p&gt;
</description>
      <pubDate>Thu, 08 Jun 2006 11:11:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a749e864-afc3-4826-a55c-95397957614f</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/06/08/code-complete</link>
      <category>books</category>
      <category>development</category>
      <category>process</category>
    </item>
    <item>
      <title>Keeping Prototypes is a Bad Idea</title>
      <description>&lt;p&gt;In a recent article titled, &lt;a href="http://digital-web.com/articles/just_build_it_html_prototyping_and_agile_development/"&gt;Just Build It: &lt;span class="caps"&gt;HTML&lt;/span&gt; Prototyping and Agile Development&lt;/a&gt; on Digital Magazine, Garrett Dimon writes,&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&amp;#8220;You need to temporarily suspend any notions that prototyping is always throwaway work. If you approach it as throwaway work, it will be. However, if you approach it with the intention of keeping it, you can create modular code that can be reused.&amp;#8221;&lt;/em&gt;&lt;/blockquote&gt;

	&lt;p&gt;I disagree. :-)&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m not a &lt;span class="caps"&gt;HTML&lt;/span&gt; web designer, but when building applications, a prototype &lt;strong&gt;should&lt;/strong&gt; be looked at as a process in which you agree that what is built will and should be thrown away.&lt;/p&gt;


	&lt;h3&gt;Why?&lt;/h3&gt;


	&lt;p&gt;When you are in prototyping mode&amp;#8230; you should be very aware of the fact that it is a prototype. This is your chance to &lt;strong&gt;take shortcuts&lt;/strong&gt;, &lt;strong&gt;break the rules&lt;/strong&gt;, &lt;strong&gt;get creative&lt;/strong&gt;, and &lt;strong&gt;express your ideas&lt;/strong&gt; on &lt;a href="http://paperprototyping.com"&gt;a piece of paper&lt;/a&gt;, in plain &lt;span class="caps"&gt;HTML&lt;/span&gt;, or perhaps you may even run &lt;code&gt;./script/generate scaffold&lt;/code&gt; to spit out some code that you know &lt;em&gt;&lt;strong&gt;will not be used&lt;/strong&gt;&lt;/em&gt; in a production application later on. The goal here is to figure out what direction you want to take the project and get the client to sign off on these ideas&amp;#8230; not to build reusable and modular code. If you&amp;#8217;re building a prototype with the goal of reusing it than it&amp;#8217;s likely that you&amp;#8217;re spending too much time doing it.&lt;/p&gt;


	&lt;h3&gt;Just Toss It&lt;/h3&gt;


	&lt;p&gt;While you might not physically &lt;em&gt;toss&lt;/em&gt; your application into a nearby trash can, you should aknowledge and remove any attachments that you may have that suggest that the prototype was a waste of time because no reusable artifacts came out of it. It&amp;#8217;s the ideas that are expressed here that make this time valuable. Perhaps you don&amp;#8217;t need a prototype phase&amp;#8230; this would mean that you know exactly what you are about to develop. If you go the route of prototyping and find it to return nothing useful&amp;#8230; than imagine how you&amp;#8217;d feel if you just started developing and determined that you really missed an important requirement a few weeks later.&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&lt;strong&gt;&amp;#8220;The physicist&amp;#8217;s greatest tool is his wastebasket.&amp;#8221;&lt;/strong&gt;&lt;/em&gt;

	&lt;p&gt;- Albert Einstein&lt;/blockquote&gt;&lt;/p&gt;


	&lt;p&gt;The shortcuts that you &lt;strong&gt;should&lt;/strong&gt; have taken earlier have likely created too  much technical debt in your code. A &lt;em&gt;fresh start&lt;/em&gt; should be the next step. &lt;a href="http://c2.com/cgi/wiki?EarlyPrototyping"&gt;Prototyping&lt;/a&gt; is part of the development process but the moment you allow yourself to think that you should reuse some of the prototype in your application is when you begin to become too attached to the notion that your prototyping phase was a waste of time end energy. Go into the prototype phase knowing that reusable artifacts are not the goal of this phase. Throw it away. ;-)&lt;/p&gt;


&lt;blockquote&gt;&lt;em&gt;&lt;strong&gt;&amp;#8220;Every act of creation is first of all an act of destruction&amp;#8221;&lt;/strong&gt;&lt;/em&gt;

	&lt;p&gt;- Pablo Picasso&lt;/blockquote&gt;&lt;/p&gt;
&lt;h3&gt;Keep The Lessons and Ideas&lt;/h3&gt;


	&lt;p&gt;You don&amp;#8217;t need to &lt;code&gt;rm -rf the_prototype&lt;/code&gt; but you should be very honest with both yourself and your client that the prototype phase is a way to quickly express an idea or process in a both a technical (and often) visual manner.&lt;/p&gt;


	&lt;h3&gt;Prototyping Generates Confidence&lt;/h3&gt;


	&lt;p&gt;Clients have (many) ideas. I hate to be the one to break it to you, but it&amp;#8217;s almost certain that they are not as confident in you as you would like to believe. Confidence evolves over time and should be nourished on a regular basis. Their ideas are important to them and they are paying you to be part of the execution of those ideas. If you even remotely sense that you are not confident in their ideas&amp;#8230; tell them this. Prototype their ideas. It could save both you and your client a lot of time, money, and resources in the long run&amp;#8230; especially if an idea proves to be too complicated to &lt;a href="http://blog.jasonwatkins.net/articles/2006/01/18/bright-ideas-are-worth-less-than-the-gum-stuck-to-the-bottom-of-my-shoe"&gt;execute&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Ideally, this is when you both agree that this idea is a good idea and that you both understand how it will be executed. This is both a good and healthy process. :-)&lt;/p&gt;


	&lt;p&gt;Document your learnings, the changes presented by both your client and yourself, and then revisit your &lt;a href="http://c2.com/cgi/wiki?UseCase"&gt;Use Cases&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;What you are about to build is that much clearer now. This feeling of clarity is exactly why you created a prototype. Remind yourself of this.&lt;/p&gt;


	&lt;h3&gt;Always Start Fresh&lt;/h3&gt;


	&lt;p&gt;Now that the client and you have come to an agreement about what is to be  developed&amp;#8230; the next phase should begin.&lt;/p&gt;


&lt;code&gt;rails the_real_app&lt;/code&gt;

	&lt;p&gt;...and remember&amp;#8230; don&amp;#8217;t be afraid to revisit prototyping again. If an idea is not clearly defined yet, whip up a new prototype and see what comes of it. Just  keep it out of your code base&amp;#8230;. and if it&amp;#8217;s already happened&amp;#8230; please &lt;a href="http://www.refactoring.com/"&gt;Refactor&lt;/a&gt;. ;-)&lt;/p&gt;


	&lt;p&gt;Like I said&amp;#8230; I am not a &lt;span class="caps"&gt;HTML&lt;/span&gt; person&amp;#8230; reusing the colors, graphics, and html artificats that you worked on might be useful&amp;#8230; but modular code shouldn&amp;#8217;t fall out of a prototype.&lt;/p&gt;


	&lt;p&gt;However, prototyping is a good idea and I highly encourage it.&lt;/p&gt;


	&lt;p&gt;Prototyping can also be extremely fun!&lt;/p&gt;


	&lt;p&gt;Similar Post(s): &lt;a href="http://www.robbyonrails.com/articles/2005/10/29/keeping-the-code-organic"&gt;Keeping the Code Organic&lt;/a&gt;, &lt;a href="http://www.robbyonrails.com/articles/2005/09/27/the-bitter-sweet-taste-of-agnostic-database-schemas"&gt;The bitter-sweet taste of agnostic database schemas&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 11 Mar 2006 08:30:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:614c35c4-12de-4dba-a77f-e7932ab7f9ee</guid>
      <author>Robby Russell</author>
      <link>http://www.robbyonrails.com/articles/2006/03/11/keeping-prototypes-is-a-bad-idea</link>
      <category>Programming</category>
      <category>agile</category>
      <category>prototyping</category>
      <category>rails</category>
      <category>development</category>
      <category>prototypes</category>
      <category>art</category>
      <category>process</category>
    </item>
  </channel>
</rss>
