<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.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>Object Mentor Blog: An Open Letter to Joel Spolsky and Jeff Atwood</title>
    <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>An Open Letter to Joel Spolsky and Jeff Atwood</title>
      <description>&lt;p&gt;Joel, Jeff,&lt;/p&gt;


	&lt;p&gt;Here is an open letter to the two of you that I hope we can use in our upcoming StackOverflow #40 podcast.  I won&amp;#8217;t post it on my blog until we&amp;#8217;ve been able to iterate it a bit.  I&amp;#8217;ve spent several hours on this trying to balance the tone.  It used to be a lot longer &amp;lt;grin&amp;gt;.&lt;/p&gt;


	&lt;p&gt;Dear Joel and Jeff&lt;/p&gt;


	&lt;p&gt;In the Stack Overflow Podcast #38 you said: &amp;#8220;Last week I was listening to a podcast on Hanselminutes, with Robert Martin talking about the &lt;span class="caps"&gt;SOLID&lt;/span&gt; principles &amp;#8230; they all sounded to me like extremely bureaucratic programming that came from the mind of somebody that has not written a lot of code, frankly.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;And again later: &amp;#8221;...it seems to me like a lot of the Object Oriented Design principles you&amp;#8217;re hearing lately from people like Robert Martin and Kent Beck and so forth have gone off the deep end into architecture for architecture&amp;#8217;s sake.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;And yet again: &amp;#8220;People that say things like this have just never written a heck of a lot of code.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;And still again: &amp;#8220;One of the &lt;span class="caps"&gt;SOLID&lt;/span&gt; principles, (a butchering of the Single Responsibility Principle) and it&amp;#8217;s just&amp;#8230; idiotic! You can&amp;#8217;t build software that way!&amp;#8221;&lt;/p&gt;


	&lt;p&gt;I hope you&amp;#8217;ve had time to perform a little due diligence since then, and that you now realize that your statements were unfair, harmful, and were pretty much crap.&lt;/p&gt;


	&lt;p&gt;I understand that you were trying to make a valid point and that the words just got away from you a bit. I quite agree that a dogmatic or religious application of the &lt;span class="caps"&gt;SOLID&lt;/span&gt; principles is neither realistic nor beneficial.  If you had read through any of the articles and/or books I&amp;#8217;ve written on these principles over the last 15 years, you&amp;#8217;d have found that I don&amp;#8217;t recommend the religious or dogmatic approach you blamed me for. In short, you jumped to a erroneous conclusion about me, and about the principles, because you weren&amp;#8217;t familiar with the material.&lt;/p&gt;


	&lt;p&gt;I understand that this was a podcast, and that you were both just jawing.  However, your podcasts are a &lt;strong&gt;product&lt;/strong&gt; that you ship to everyone in the world.  The content of that product can do great good; but it can also do great and permanent harm.  One would think that you&amp;#8217;d want to be careful with such a product.  Yet in the intensity of the moment you got a bit careless and spewed some crap instead.  That&amp;#8217;s fine, everybody makes mistakes.  But then you &lt;strong&gt;shipped&lt;/strong&gt; it!  You shipped a product that had a huge bug in it.  You should have had tests!&lt;/p&gt;


	&lt;p&gt;Could it be that when you said &amp;#8221;...quality just doesn&amp;#8217;t matter that much&amp;#8230;&amp;#8221; you were being serious.  Clearly the quality of podcast #38 didn&amp;#8217;t matter much to you, since you shipped it without verifying that your information was accurate.  As a result, you did unjust harm to me.  Were I a more litigious person, we might be having this discussion in court.&lt;/p&gt;


	&lt;p&gt;Now I&amp;#8217;m quite certain that you don&amp;#8217;t want to ship bad product.  I just think that you&amp;#8217;ve been careless with your production process.  You haven&amp;#8217;t put in place a mechanism that will stop you from shipping crap.  So I suggest that you practice Test Driven Development with your podcast.  Write down the acceptance criteria beforehand (I suggest lawsuit avoidance would be a high priority), and then review the product against those criteria afterwards.  Yes, this will take some time, and there will be a cost.  However, it will pay back handsomely because your product will be far better, and you will avoid embarrassments like this one (or worse).  And, after all, products deserve and require this kind of care.  So do your listeners.  This is just simple professionalism.  Don&amp;#8217;t ship shit.
&lt;del&gt;&amp;#8212;&lt;/del&gt;-&lt;del&gt;&amp;#8212;&lt;/del&gt;&amp;#8212;-&lt;/p&gt;


	&lt;p&gt;Some of the other points we could talk about in the podcast:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;TDD&lt;/span&gt; for real this time.  You guys can just throw your complaints at me and I&amp;#8217;ll address them.
 * For example, I&amp;#8217;d like to explain how one would test Joel&amp;#8217;s JPeg compression feature.&lt;/li&gt;
		&lt;li&gt;&lt;span class="caps"&gt;ISP&lt;/span&gt; and &lt;span class="caps"&gt;SRP&lt;/span&gt;, the two principles that Joel butchered.&lt;/li&gt;
		&lt;li&gt;Mike Connie&amp;#8217;s observation (in #39) about interfaces.&lt;/li&gt;
		&lt;li&gt;How, when, and why to apply Principles and Patterns.&lt;/li&gt;
		&lt;li&gt;From Stack Overflow:
 * Large Switch statements: Bad &lt;span class="caps"&gt;OOP&lt;/span&gt;?
 * &lt;span class="caps"&gt;JSON&lt;/span&gt; is used only for JavaScript? (Rant on &lt;span class="caps"&gt;XML&lt;/span&gt;)
 * &lt;span class="caps"&gt;ASP&lt;/span&gt;.Net &amp;#8211; How to effectively use design patterns without over-engineering!&lt;/li&gt;
	&lt;/ul&gt;</description>
      <pubDate>Fri, 06 Feb 2009 20:53:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:3607f47d-8998-4ffa-925f-65c600fd4bb6</guid>
      <author>Uncle Bob</author>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood</link>
      <category>Uncle Bob's Blatherings</category>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Olivea Copper</title>
      <description>&lt;p&gt;A biker was riding along a California beach when suddenly the sky clouded above his head and, in a booming voice, the Lord said, &amp;#8220;Because you have TRIED to be faithful to me in all ways, I will grant you one wish.&amp;#8221; The biker pulled over and said, &amp;#8220;Build a bridge to Hawaii so I can ride over anytime I want.&amp;#8221;&lt;/p&gt;</description>
      <pubDate>Thu, 08 Jul 2010 05:58:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:bd46ba61-f8d7-4572-af4e-a8204c168e72</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-15911</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by FLV extractor</title>
      <description>&lt;p&gt;just have a  try 
ab ha&lt;/p&gt;</description>
      <pubDate>Thu, 08 Apr 2010 01:22:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5f9aaed4-f524-4907-a2fd-5e4f78cbfeec</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-9349</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by moncler clearance</title>
      <description>&lt;p&gt;Very quietly I take my leave.To seek a dream
in &lt;a href="http://www.edhardy-buy.com/" rel="nofollow"&gt;http://www.edhardy-buy.com/&lt;/a&gt; starlight.&lt;/p&gt;</description>
      <pubDate>Wed, 31 Mar 2010 23:23:20 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a202831b-9e65-40b9-b908-dc50fc1d01b9</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-8945</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Kooba Handbags   </title>
      <description>&lt;p&gt;Living without an aim is like sailing without a compass.
with a new &lt;a href="http://www.handbags4buy.com/" rel="nofollow"&gt;http://www.handbags4buy.com/&lt;/a&gt; idea is a crank until the idea succeeds.&lt;/p&gt;</description>
      <pubDate>Wed, 31 Mar 2010 23:22:39 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:53887d43-c38d-46c2-a300-cd0b5ced4719</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-8939</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Cheap Slow Pitch Bats</title>
      <description>&lt;p&gt;I would have to agree.&lt;/p&gt;</description>
      <pubDate>Wed, 08 Jul 2009 22:04:26 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:c4b1db97-a72b-4e5b-998d-8d8c7a49969b</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-3696</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Baseball Bats For Sale</title>
      <description>&lt;p&gt;It does seem easy to spot people that have learned most of what they know from books and discussion and not actually doing something. Those types of people tend to extort odd systems that look good on paper but are funstionally flawed.&lt;/p&gt;</description>
      <pubDate>Wed, 08 Jul 2009 22:03:45 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b64530ae-5154-4f39-b536-30a7674afcca</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-3695</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by StoneCypher</title>
      <description>&lt;p&gt;Honestly, anyone worth their salt sees right through what Spolsky says.  Therein lies the rub, though: Spolsky isn&amp;#8217;t worth his salt.  That&amp;#8217;s the underlying fault with your should-be-completely-reasonable plea:&lt;/p&gt;


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


	&lt;p&gt;&amp;#8220;And, after all, products deserve and require this kind of care. So do your listeners. This is just simple professionalism. Don&#8217;t ship shit.&amp;#8221;&lt;/p&gt;


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


	&lt;p&gt;One thing that quality engineers tend to struggle with is their inability to understand what it&amp;#8217;s like for the other 90%.  He can&amp;#8217;t refuse to ship what he can&amp;#8217;t identify.&lt;/p&gt;


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


	&lt;p&gt;He&amp;#8217;s not writing shit because he&amp;#8217;s aware of how full of crap he is.  You cannot request from a man to hold to the standards and the judgement he doesn&amp;#8217;t have.&lt;/p&gt;


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


	&lt;p&gt;And, since all Spolsky does these days is write an overpriced second rate bug tracker and fap about the design decisions in an embedded scripting language that only he remembers as good (the phrase &amp;#8220;it took 35 man-years to build, and two man-years to replace, with a product that was much stabler and adhered to existing APIs&amp;#8221; comes to mind), you&amp;#8217;d better believe he&amp;#8217;s not going to give up his internet pseudo-fame and the adoring throngs of freshman python weenies.&lt;/p&gt;


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


	&lt;p&gt;It&amp;#8217;s all he&amp;#8217;s got, really, and he isn&amp;#8217;t smart enough to understand why he&amp;#8217;s doing damage to his readers.  You can lead an idiot to the smart-or-silence princple, but you can&amp;#8217;t make him think.&lt;/p&gt;


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


	&lt;p&gt;Incidentally, SOLID is in many ways a partial reinvention of PSP/TSP principles.  SOLID&amp;#8217;s got a lot of stuff PSP/TSP doesn&amp;#8217;t (and vice versa), but a lot of the missing stuff on either side of the fence is compatible, and PSP/TSP have the benefit of use in huge teams on huge projects for decades, so it&amp;#8217;s pretty well understood.  Have a look: there may be valuable cross-pollenation of ideas.&lt;/p&gt;</description>
      <pubDate>Tue, 10 Mar 2009 01:27:02 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:cef7efdf-9690-4774-9106-f3c759ee2650</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2898</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Amanjit Gill</title>
      <description>&lt;p&gt;I think there are very few metrics about good OOP programming, and SOLID makes a lot of sense to me. Its really the question: What is good OOP. Its about Craftmanship. But Joel is only about shipping products. Breakneck requirements, shipping in time and nice UI.&lt;/p&gt;


	&lt;p&gt;Therefore I guess Joel&amp;#8217;s software isn&amp;#8217;t the greatest OOP by these standards but still a good product in the customer sense&amp;#8230;.&lt;/p&gt;


	&lt;p&gt;Joel simply isn&amp;#8217;t an object oriented programmer,thats the point. Hes all about memset() ;-)&lt;/p&gt;</description>
      <pubDate>Mon, 02 Mar 2009 15:06:32 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:cda1a278-5e39-424d-9c29-42a42f5c05b5</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2866</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Esko Luontola</title>
      <description>&lt;p&gt;Here is an example of an algorithm that I wrote using TDD: &lt;a href="http://www.orfjackal.net/temp/DiagramOfNinePlaces.zip" rel="nofollow"&gt;http://www.orfjackal.net/temp/DiagramOfNinePlaces.zip&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Some years before writing that, I had written a program for solving the Eight Queens Problem, and I recognized the Diagram of Nine Places to be similar to it. I had in my mind a rough idea of the algorithm which would solve the problem, so I begun writing a class with TDD which would be needed in solving it.&lt;/p&gt;


	&lt;p&gt;The class &amp;#8220;Diagram&amp;#8221; was written fully using TDD and it checks the constraints that are involved in the algorithm. After that was done, I wrote the about dozen lines of code in class &amp;#8220;DiagramOfNinePlaces&amp;#8221; which bind it all together. There was no point in writing a test for that, because I did not know what the expected result was, but I could easily verify the result after seeing it. (If the last lines of code would have been much more than ten lines, then I would have split it into smaller pieces and used TDD.)&lt;/p&gt;


	&lt;p&gt;&amp;#8212;&lt;/p&gt;


	&lt;p&gt;In my opinion, TDD is a design tool, because it helps you to do design. It gives fast feedback about your design, that whether the code works as you meant it to work, and how maintainable the code is (because you modify the code many times before the program is finished, instead of writing it all at once, so basically all the time you are maintaining an existing program instead of writing a new program).&lt;/p&gt;


	&lt;p&gt;TDD is a design &lt;strong&gt;tool&lt;/strong&gt;. TDD is &lt;strong&gt;not&lt;/strong&gt; a &lt;strong&gt;designer&lt;/strong&gt;. &lt;em&gt;You&lt;/em&gt; are the designer, so it&amp;#8217;s your job to &lt;em&gt;think&lt;/em&gt; about the design. TDD does not think about the design for you, but as a tool it &lt;em&gt;helps&lt;/em&gt; you to do your design by giving fast feedback of the design.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 17:04:57 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:dd745fb9-ae95-41fb-8f65-b2ad176346ca</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2745</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Ravi&lt;/p&gt;


	&lt;p&gt;I think Peter Nordvig could have written his program using TDD without any damage for the quality of the outcome.&lt;/p&gt;


	&lt;p&gt;I have the impression that Ron Jeffries had no real interest in solving Sudoku, while Peter Nordvig had a real motivation: &amp;#8220;I wanted to convince [my wife] that the problem had been solved and didn&amp;#8217;t need any more of her time.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;So what? The problems and the individuals matter. Hardly unexpected. TDD or any other approach doesn&amp;#8217;t change that. You can design without TDD. Nothing new either. You can fail with TDD. Hardly a proof that TDD is worthless.&lt;/p&gt;


	&lt;p&gt;I would put things as follows: TDD helps sharpen your designs (be there on paper or in your head). Is it therefore a design tool or not? I&amp;#8217;d tend to say no &amp;#8211; but I&amp;#8217;d understand someone answering yes. But if someone were to tell me that an architecture can emerge from &amp;#8220;pure TDD&amp;#8221; &amp;#8211; only by coding in a TDD manner, without thinking about the big picture of the design (this is hardly possible, but let&amp;#8217;s pretend) &amp;#8211; then I&amp;#8217;d demand hard evidence and real world success stories.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m willing to learn from TDD, Peter Nordvig, Hoare (Quicksort), Robert Martin and many others.&lt;/p&gt;


	&lt;p&gt;Last but not least: thanks for the links.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 16:16:06 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b6bc1003-1c6d-430d-9d0c-d5c2c5b80361</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2744</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Anon: I agree on most points with you &amp;#8211; but I nevertheless have a different view on TDD.&lt;/p&gt;


	&lt;p&gt;Like you, I don&amp;#8217;t believe that TDD replaces a thoughtful design. Even if I heard it a few times, I cannot believe that an overall design/an architecture can spontaneously emerge from a pure TDD approach.&lt;/p&gt;


	&lt;p&gt;But TDD tests the design, TDD allows to get feedback about how the design runs &amp;#8211; and this is invaluable in my eyes. Design on diagrams is just theory.&lt;/p&gt;


	&lt;p&gt;TDD and Agile are about feedback, fast feedback.&lt;/p&gt;


	&lt;p&gt;In the classical design approach I went through earlier in my career feedback took the form of long discussions about the diagrams &amp;#8211; and the result was often that the design wouldn&amp;#8217;t fly. But as it was the result of a long a painful process, you weren&amp;#8217;t allowed question it &amp;#8211; and either you implemented the inappropriate design or you ignored it&amp;#8230; That&amp;#8217;s where I&amp;#8217;m coming from&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 15:17:15 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:4a7c8d88-e7f5-4e37-a56b-33cfd070227f</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2743</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Ravi Venkataraman</title>
      <description>&lt;p&gt;For those of you who feel that TDD is a design tool, here are a couple of links to articles by two people prominent in their field, one well known to the general software world, the other not as well known.&lt;/p&gt;


	&lt;p&gt;The more popular author tried to create a Sudoku solver using TDD, and, I believe had to give up. (&lt;a href="http://www.xprogramming.com/xpmag/OkSudoku.htm" rel="nofollow"&gt;http://www.xprogramming.com/xpmag/OkSudoku.htm&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;The less popular author&amp;#8217;s work is here: &lt;a href="http://www.norvig.com/sudoku.html" rel="nofollow"&gt;http://www.norvig.com/sudoku.html&lt;/a&gt;. 
Notice the clarity of though in Peter Norvig&amp;#8217;s article, and the wonderful explanations and tests that he ran after coding, not before.&lt;/p&gt;


	&lt;p&gt;Ron Jeffries is a reasonably well known author, at least in Agile circles. Yet he makes a mess of this not very complex task when using TDD.&lt;/p&gt;


	&lt;p&gt;Please tell me how you can consider TDD as a design tool in view of this simple example.&lt;/p&gt;


	&lt;p&gt;Norvig, whose writings I love, is a true master of software development. I feel that the other popular folk in the Agile world, like Uncle Bob, Ron Jeffries, Martin Fowler, etc., are simply no match for Norvig, completely out of their league when confronted by such penetrating insight into problems that Norvig shows, such clarity of thought and simplicity of design as seen in his writings.&lt;/p&gt;


	&lt;p&gt;The software world would be a much better place if they took inspiration from Norivg&amp;#8217;s work rather than those of current &amp;#8220;thought leaders&amp;#8221;.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 15:06:18 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:aed7a039-28d9-470e-b905-561516dbd813</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2742</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@Phil: I clearly mentioned earlier that the class design must be there, explicit or implicit. I&amp;#8217;m assuming an OO type development based on Java type languages (Java, C#, C++), not database design (data models).&lt;/p&gt;


	&lt;p&gt;But you are emphasizing my point when you talk about sequence diagrams, activity diagrams, etc. Those, too, are a part of design. Implicitly or explicitly, they are present before coding starts. You can&amp;#8217;t just start writing tests without some idea in mind.&lt;/p&gt;


	&lt;p&gt;When coding, the good programmers do top-down and bottom-up programming simultaneously, keeping several different abstraction layers in mind all at once. TDD focuses on the lowest level of abstraction, the class, to the exclusion of higher level concepts, expecting that the &amp;#8220;design&amp;#8221; will somehow arise out of the tests. Such designs will necessarily be narrowly  focussed on the particular sub-problem at hand, and not on an understanding of larger abstractions that may produce better design. To expect elegant software designs to arise from TDD is wishful thinking.&lt;/p&gt;


	&lt;p&gt;The Pragmatic Programmers advised us never to build an application, but to build a framework. Using many layers of abstractions simultaneously, I end up building frameworks in the same time (or less) as others need to build an application. To me, therefore, TDD is not a design tool. It limits my design choices, it restricts my design, it leads to less flexible software than I could otherwise build.&lt;/p&gt;


	&lt;p&gt;A testing tool, yes, TDD is that indubitably. A design too, no, not for me.&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 08:47:04 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:c16944a5-519f-4aa3-957a-7bccc841197a</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2741</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Philip Schwarz</title>
      <description>&lt;p&gt;@Anon Y Mouse&lt;/p&gt;


	&lt;p&gt;You said:&lt;/p&gt;


&lt;blockquote&gt;
TDD is not a design tool. You can&#8217;t come up with your class diagrams using TDD. 
...
&lt;br /&gt;
&lt;br /&gt;
Class diagrams are design. TDD is after the fact of class diagrams, after the hierarchies and relationships are defined. 
...
&lt;/blockquote&gt;

	&lt;p&gt;You seem to see class diagrams as an essential part of design. 
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;You don&amp;#8217;t &lt;i&gt;have to&lt;/i&gt; draw class diagrams to do design&lt;/b&gt;.
&lt;br /&gt;
&lt;br /&gt;
Also, while you mention class diagrams, you don&amp;#8217;t mention sequence diagrams at all.&lt;/p&gt;


	&lt;p&gt;As Craig Larman says in &lt;a href="http://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0130925691" rel="nofollow"&gt;Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and the Unified Process&lt;/a&gt;:
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
A critical ability in OO development is to skillfully &lt;b&gt;assign responsibilities&lt;/b&gt; to software objects.
...
&lt;br /&gt;
&lt;br /&gt;
Why? Because it is one activity that must be performed &amp;#8211; &lt;b&gt;either while drawing a UML diagram or programming&lt;/b&gt; &amp;#8211; and it strongly influences the robustness, maintainability, and reusability of software components.
&lt;br /&gt;
&lt;br /&gt;
Of course, there are other important skills in OOA/D, but responsibility assignment &amp;#8230; tends to be a challenging skill to master (with many &amp;#8220;degrees of freedom&amp;#8221; or alternatives), and yet is vitally important. On a real project, &lt;b&gt;a developer might not have the opportunity to perform any other modeling activities&lt;/b&gt; &amp;#8211; the &amp;#8220;rush to code&amp;#8221; development process. &lt;b&gt;Yet even in this situation, assigning responsibilities is inevitable.&lt;/b&gt;
...
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Object-oriented design is concerned with defining software objects &amp;#8211; their responsibilities and collaborations.&lt;/b&gt; A common notation to illustrate these collaborations is the &lt;b&gt;sequence diagram&lt;/b&gt; (a kind of UML interaction diagram). It shows the flow of messages between software objects, and thus the invocation of methods. 
...
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;In addition to a dynamic view&lt;/b&gt; of collaborating objects shown in &lt;b&gt;interaction diagrams&lt;/b&gt;, a &lt;b&gt;static view&lt;/b&gt; of the class definitions is &lt;b&gt;usefully shown&lt;/b&gt; with &lt;b&gt;a design class diagram&lt;/b&gt;. This illustrates the attributes and methods of the classes.
...
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;You can think about assigning responsibilities to objects while coding or while modeling&lt;/b&gt;. Within the UML, drawing interaction diagrams becomes the occasion for considering these responsibilities (realized as methods).
&lt;/blockquote&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 26 Feb 2009 00:56:02 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:5d61fd05-2e42-4935-a7e1-9c1c3fba3f0c</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2740</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Anon It&amp;#8217;s simply wrong that TDD is only a testing methodology. You don&amp;#8217;t want to hear what I am saying and I&amp;#8217;m apparently not capable of understanding what you want to tell me.&lt;/p&gt;


	&lt;p&gt;TDD questions my design interactively &amp;#8211; and this helps me, probably far better than some design tools like Rational Rose (and this was part of Brett L. Schuchert&amp;#8217;s  argument), to improve my designs, my understanding of my designs.&lt;/p&gt;


	&lt;p&gt;For some reason I don&amp;#8217;t know, you dislike TDD. That&amp;#8217;s OK with me. I dislike Rational Rose. I had colleagues who were enthusiastic about it &amp;#8211; which I couldn&amp;#8217;t understand considering the pain it was to use.&lt;/p&gt;


	&lt;p&gt;I certainly don&amp;#8217;t care if you&amp;#8217;re better at design software than me or vice-versa and agree that it has nothing to do with the issues we&amp;#8217;re debating here anyway &amp;#8211; I don&amp;#8217;t know what I wrote that made you think I am feeling better than you at anything.&lt;/p&gt;


	&lt;p&gt;Just to repeat it again: I&amp;#8217;m basically saying that I have improved the quality of my designs by growing them interactively using TDD more than by taking additional time to draw design diagrams. You think I&amp;#8217;m wrong. That&amp;#8217;s great. The world of software development remains an interesting place to exchange opposite points of view.&lt;/p&gt;


	&lt;p&gt;But I didn&amp;#8217;t hear a fact from you that gives me reasons to question the positive experience I had with TDD so far or to think that what you have to offer is better: I only heard class diagrams, hierarchies and relationships &amp;#8211; I went through these some years ago and wasn&amp;#8217;t really impressed. And you didn&amp;#8217;t give me any useful hint why you have such an bad opinion of TDD.&lt;/p&gt;


	&lt;p&gt;And all I&amp;#8217;m saying here doesn&amp;#8217;t mean that I think TDD is the solution, the only way to go for software development and that people not sharing my views on this issue are bad developer/designer/professionals. I deeply believe that 1) there is no/will never be one true way, 2) you need to master many different techniques/technologies/methodologies to continue to improve your skills. But I do think TDD is one of the techniques that help you improve.&lt;/p&gt;


	&lt;p&gt;In a different direction: I&amp;#8217;d be interested to hear your opinion about a better testing methodology than TDD &amp;#8211; as I certainly don&amp;#8217;t believe that TDD is the last approach to software development I will ever use.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 21:54:01 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:d2b54990-46fa-416f-9bdb-bf3847e7da1d</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2738</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@Erik: There was a claim made by you in a comment that TDD was a design tool. I&amp;#8217;m disagreeing with that. If you claim that TDD is design, I&amp;#8217;m saying that is wrong.&lt;/p&gt;


	&lt;p&gt;Whether or not it reflects on my design skills is irrelevant, so please stop bringing that into the argument. What makes you think that I couldn&amp;#8217;t run rings around you as far as design is concerned?  I may be able to do that, or not. Either way, it is irrelevant to the discussion.&lt;/p&gt;


	&lt;p&gt;TDD is simply one of many testing methodologies. and not necessarily the best one at that.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 20:20:01 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:0307b7e6-a765-4bf6-a5d3-2c02e30c1bef</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2737</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Anon. I don&amp;#8217;t have the feeling I claimed that TDD is a design tool or a design methodology. I&amp;#8217;m claiming that, based on my experience, TDD allows you to produce sound and testable designs &amp;#8211; and, again in my experience, much better designs than many I&amp;#8217;ve seem born on paper. TDD is a way to discover and explore design if you will. The design is being born in your head and tested &amp;#8211; interactively. Of course if you have no clue about design, nothing&amp;#8217;s going to come out of it &amp;#8211; but neither will from any other design tool or methodology. A fool with a tool etc. (and a fool with a methodology is public danger in my eyes).&lt;/p&gt;


	&lt;p&gt;I do think you need some sound experience with design to use TDD efficiently. I don&amp;#8217;t think that TDD teaches you design &amp;#8211; but it provides you feedback about your design and that&amp;#8217;s make it so appealing to me. I&amp;#8217;m implementing and testing my design &amp;#8211; and I have lots of unit tests that allow me to adapt my design later on. Design on paper doesn&amp;#8217;t care.&lt;/p&gt;


	&lt;p&gt;QuickSort comes from human genius &amp;#8211; not from tools, not from design methodology. TDD would at least have allowed to verify that the algorithm behaves as expected &amp;#8211; and then the mathematical proof would have had to follow&amp;#8230; Class diagrams wouldn&amp;#8217;t have provided more help I think.&lt;/p&gt;


	&lt;p&gt;At least we agree that TDD is not a panacea &amp;#8211; and I still think you misinterpret TDD. But we can both live with that &amp;#8211; and hopefully continue to improve our designs, whichever way :-)&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 15:43:35 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:36acbae5-48dc-47a2-b052-885fdee0097d</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2735</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@Erik: You keep claiming that TDD is a design tool. Yet you show no evidence for it, except by assertion. Show me a design that has come out of TDD that could not arise from pure thinking or by doing research.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;ve shown a simple example, quick sort algorithm, which can&amp;#8217;t arise from TDD. Any non-trivial algorithm is unlikely to be uncovered by TDD. There is no substitute for thinking about the problem. Anybody can use TDD to write average code. For top quality code and design, you need to make use of the tools appropriate for the situation. No single tool or technique will solve all your problems. TDD alone is not a panacea.&lt;/p&gt;


	&lt;p&gt;Knowing TDD&amp;#8217;s limitations, I refuse to call it a design methodology. For testing, yes, TDD is a good option, but one among many. For design, TDD is not my choice and will never be, since I know and understand its limitations. Therefore, I will not call TDD a design tool, and will object when somebody does so.&lt;/p&gt;


	&lt;p&gt;If this means that you think I don&amp;#8217;t know or understand TDD, so be it.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 14:04:56 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:675f7aee-004b-4c66-956a-4068125fc69c</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2734</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Anon: I can&amp;#8217;t see how I could prove you wrong if you don&amp;#8217;t want to believe me that I do design with TDD. I do use my grey cells doing TDD. There is definitely nothing blind about it.&lt;/p&gt;


	&lt;p&gt;The difference is that I do the design and implement it in a fast feedback loop. I don&amp;#8217;t draw nice pictures, project them on the wall with a beamer and discuss about them for days and then throw them over the wall to implementation slaves (I&amp;#8217;m definitely not kidding: there seem to be enough companies where management think this is the way software should be developed!).&lt;/p&gt;


	&lt;p&gt;If you don&amp;#8217;t see that, you simply don&amp;#8217;t understand TDD, I&amp;#8217;m sorry.&lt;/p&gt;


	&lt;p&gt;All I say of course doesn&amp;#8217;t mean that TDD is the only way to go, that drawing UML diagram is bad or obsolete. Or that TDD is a silver bullet.&lt;/p&gt;


	&lt;p&gt;In the end I can only speak for myself: TDD helps me. Doing better design. Yes even better design than at the time where I started with the big upfront design that didn&amp;#8217;t fit after a few hours implementing. And that was obsolete after a few days because hardly anybody cared to keep it current.&lt;/p&gt;


	&lt;p&gt;TDD may not be the way you feel comfortable with &amp;#8211; that&amp;#8217;s OK. Stick to your design tools if it makes you feel more efficient for your purpose.&lt;/p&gt;


	&lt;p&gt;But please avoid bashing TDD with little knowledge about it. There&amp;#8217;s certainly room for informed criticism of TDD. Provide some and I&amp;#8217;d be happy to hear it &amp;#8211; so that I learn about the weaknesses of my current tool of choice&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 07:19:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:1ecc6289-02c7-42d5-a45b-5391006620ab</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2732</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@Erik: The claim was that TDD was a design tool. Show that it is. Yes, class diagrams are a part of design, not the final or sole component, but some sort of design nevertheless. TDD is not design, you can call it what you want, it doesn&amp;#8217;t make it so. Design requires one to use the grey cells, not blindly start with TDD and claim that you are doing design.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 06:52:35 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:33c8b11e-da96-4fd5-8dee-e4d45a730cbe</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2731</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Erik</title>
      <description>&lt;p&gt;@Anon: Use class diagrams to come up with the Quick sort algorithm please.
Who said you should limit yourself to TDD? Don&amp;#8217;t you imply you should limit yourself to class diagrams for design? That only class diagrams are design?
I can&amp;#8217;t help but thinking you really have no clue about TDD when I read your comment.&lt;/p&gt;


	&lt;p&gt;Note: I worked many years with class diagrams (the big design upfront days&amp;#8230;) and now mainly with TDD.&lt;/p&gt;


	&lt;p&gt;I still can start with a high level class diagram to discuss the general design ideas with colleagues &amp;#8211; but I&amp;#8217;m happy to throw it overboard when starting to implement in a TDD manner. And happy to generate them again from the code to give an overview of what I achieved later on.&lt;/p&gt;</description>
      <pubDate>Wed, 25 Feb 2009 04:47:09 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:03c0eb53-91cb-414b-bb0c-e3119b7e0ef7</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2730</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@Brett: Use TDD to come up with the Quick sort algorithm, please. Using TDD only, you limit yourself  by giving up on many possibilities. TDD is no substitute for thinking about a problem.&lt;/p&gt;


	&lt;p&gt;Class diagrams are design. TDD is after the fact of class diagrams, after the hierarchies and relationships are defined. I can&amp;#8217;t test a class that is not part of my design, whether the design is explicit or implicit. This does not mean that the class hierarchies are written in stone;they can, and do, change over the course of development.&lt;/p&gt;


	&lt;p&gt;Rather than accusing me of having limited experience with TDD, or not having done big-oh analysis, please answer the first question I asked above.&lt;/p&gt;</description>
      <pubDate>Mon, 23 Feb 2009 14:14:18 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f303f077-7bb8-4acf-8471-a2c09511df71</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2723</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Brett L. Schuchert</title>
      <description>&lt;p&gt;&lt;b&gt;Anon Y Mouse&lt;/b&gt; wrote:
&lt;blockquote&gt;
@agileconsulting: TDD is not a design tool. You can&#8217;t come up with your class diagrams using TDD. You can&#8217;t come up with sophisticated algorithms with TDD alone. No matter what you say, it is not a design tool.
&lt;/blockquote&gt;&lt;/p&gt;


	&lt;p&gt;Class diagrams are not a goal. They are at best a tool for understanding and communicating. Class diagrams don&amp;#8217;t execute and so they can only indirectly add value.&lt;/p&gt;


	&lt;p&gt;TDD is a design technique and it&amp;#8217;s as much of a tool is as rational rose, albeit in a very different style.&lt;/p&gt;


	&lt;p&gt;As for not being able to come up with sophisticated algorithms, you could not be more wrong. If by sophisticatedly you actually mean unnecessarily complex, then that&amp;#8217;s not a very good goal, is it?&lt;/p&gt;


	&lt;p&gt;If by sophisticated, you mean exactly what a situation calls for and is also able to be changed, then I disagree.&lt;/p&gt;


	&lt;p&gt;You must have very limited experience with TDD. As for algorithm design, have you actually done that? Have you created an algorithm and then actually performed basic analysis on it (e.g., big-O analysis)?&lt;/p&gt;


	&lt;p&gt;I am NOT saying TDD is the only way to create sophisticated algorithms. That&amp;#8217;s demonstrably false (think of quantum computing sorting/search algorithms based on wave collapsing). However, you are clueless about TDD based on your comments.&lt;/p&gt;</description>
      <pubDate>Sun, 22 Feb 2009 18:31:49 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:8a53dbf1-ae3e-4c4e-a5ad-05f3c77d90c5</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2719</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by Anon Y Mouse</title>
      <description>&lt;p&gt;@agileconsulting: TDD is not a design tool. You can&amp;#8217;t come up with your class diagrams using TDD. You can&amp;#8217;t come up with sophisticated algorithms with TDD alone. No matter what you say, it is not a design tool.&lt;/p&gt;


	&lt;p&gt;To want to slap somebody who expresses an opinion different from you is the height of sophistication, I presume.&lt;/p&gt;


	&lt;p&gt;Is that how you treat your colleagues who disagree with you? I am sure that would make you extremely popular.&lt;/p&gt;</description>
      <pubDate>Sat, 21 Feb 2009 04:15:08 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:a2542200-80a8-4fdf-bd7f-4f1b4d441da7</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2714</link>
    </item>
    <item>
      <title>"An Open Letter to Joel Spolsky and Jeff Atwood" by http://agileconsulting.blogspot.com</title>
      <description>&lt;p&gt;it took me years to gradually get into and fully embraced TDD.&lt;/p&gt;


	&lt;p&gt;Saying TDD is a poor design tool is ridiculous&amp;#8230;&lt;/p&gt;


	&lt;p&gt;you will certainly run into challenges the first couple times you try it,&lt;/p&gt;


	&lt;p&gt;This Friday I just gave a demo of how we are using fitness, NUnit, and soap UI to create &amp;#8220;executable requirements&amp;#8221; and he almost cried with excitement&amp;#8230;&lt;/p&gt;


	&lt;p&gt;I could be politically correct about this, but IMHO people who can&amp;#8217;t see the value in this approach could do with a couple of good slaps&amp;#8230;&lt;/p&gt;</description>
      <pubDate>Fri, 20 Feb 2009 18:27:35 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:2717da2b-a7cc-4c79-8652-9adaae20f3e8</guid>
      <link>http://blog.objectmentor.com/articles/2009/02/06/on-open-letter-to-joel-spolsky-and-jeff-atwood#comment-2713</link>
    </item>
  </channel>
</rss>
