<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sadek Drobi's Blog &#187; Refactoring</title>
	<atom:link href="http://sadekdrobi.com/category/agile-programming/refactoring/feed/" rel="self" type="application/rss+xml" />
	<link>http://sadekdrobi.com</link>
	<description>Sadek Drobi</description>
	<lastBuildDate>Tue, 08 Mar 2011 22:56:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Architecture Life Span:Implications on your Business and how to build more Long-lasting Architecture</title>
		<link>http://sadekdrobi.com/2008/09/12/architecture-life-spanimplications-on-your-business-and-how-to-build-more-long-lasting-architecture/</link>
		<comments>http://sadekdrobi.com/2008/09/12/architecture-life-spanimplications-on-your-business-and-how-to-build-more-long-lasting-architecture/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 21:35:25 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=500</guid>
		<description><![CDATA[Introducing the concept of architectural shelf life, Dan Pritchett defines the average duration of an architectural life span. Stressing that failing to evolve the architecture at the end of its life span may have important business implications, he provides some advices that aim at facilitating architecture update with new technologies and patterns, thus making architectures [...]]]></description>
			<content:encoded><![CDATA[<p>Introducing the concept of architectural shelf life, Dan Pritchett defines the average duration of an architectural life span. Stressing that failing to evolve the architecture at the end of its life span may have important business implications, he provides some advices that aim at facilitating architecture update with new technologies and patterns, thus making architectures last longer.</p>
<p><span id="more-500"></span></p>
<p>originally posted at <a href="http://www.infoq.com/news/2008/09/architecture-life-span">http://www.infoq.com/news/2008/09/architecture-life-span</a></p>
<p>What is the duration of architectural life span? To which extent this should be taken into consideration? And how may it impact your business? To answer these questions, Dan Pritchett introduces the concept of <a href="http://www.addsimplicity.com/adding_simplicity_an_engi/2008/08/architectural-s.html">&#8220;architectural shelf life&#8221;</a> that he defines as &#8220;the duration that a collection of patterns and technology are applicable when starting a new system design&#8221;. He believes that architectural shelf life lasts for around 5 years and after two or three generations of it, any architecture has to be changed at least partially. Otherwise, it becomes obsolete and provokes increased costs when it needs to be adapted to business needs evolution. Based on that, Pritchett suggests that &#8220;architecture typically has a 10, to at most 15 year useful life&#8221;. To support his arguments he provides a series of examples of technology and architecture evolution that have occurred since 1990.</p>
<p>Pritchett argues that failing to update the architecture at the end of its life span may have important implications for business. He acknowledges, though, that making a major architectural shift induces important costs especially when &#8220;you have a well established customer base and a overflow of business features in the pipeline&#8221;. It can be rather disruptive as it was highlighted by several authors in an <a href="http://www.infoq.com/news/2008/05/software-rewrite-4-architecture">opinion exchange about architecture rewrite</a>. However, Pritchett argues that the non-adoption of new patterns and technologies can be ever more costly. They most often help to improve developers&#8217; efficiency and to lower costs of deployment. Renouncing to exploit this potential competitive advantage equals leaving competitors the initiative to do it and this can be fatal for business:</p>
<blockquote><p>What is missed is that the new patterns and platforms can be used to disrupt your business anyway. If you have a successful business, many others want a share. And technology becomes the tool they can use to go after your business. And the disruption they can cause by offering your services at lower cost or with more compelling features is far greater than any disruption that will be incurred for internal architectural shifts.</p>
</blockquote>
<p>In his follow-up to the first article, Pritchett brings some nuances to the inevitability of major architectural shift as new patterns and technologies emerge. Having already said that the life span of architecture depends on its ability to be easily extended to the evolving business needs, he translates it into technical terms as ability &#8220;to be refreshed with new technologies in an incremental fashion.&#8221; This ability can be increased by &#8220;following standard architectural principles of good component design with the loosest possible coupling between components&#8221; so that they can be implemented and evolve independently from each other. Based on common mistakes that he could identify, Pritchett extracts some <a href="http://www.addsimplicity.com/adding_simplicity_an_engi/2008/08/extending-the-a.html">principles to adopt in order to build more long-lasting architecture</a>: </p>
<p>1. Decoupling of interface protocols from an implementation strategy. This increases the &#8220;flexibility for migrating components to alternate implementation technologies&#8221;. As a way to achieve that, Pritchett suggests building text based interfaces between components, such as for instance XML or JSON. </p>
<p>2. Respecting separation of concerns, even if initial size of the two concerns is rather unequal. This allows avoiding situations when a new feature is added to an existing component and as this feature grows bigger, you end up with two components implemented as one, badly coupled, intertwined and extremely difficult to uncouple especially since &#8220;customers have come to expect a behavior that will be hard to maintain if you decouple&#8221;.</p>
<p>3. Avoiding unintentional vendor lock which requires deep understanding of the behavior of vendor&#8217;s products, their impacts on the architecture and its implications. </p>
<p>4. Minimizing persistence binding in order to avoid database lock. Only the primary access path to any entity should be via primary key and all other access paths should be separated in the resource tier so that the alternate paths can be managed in other forms of persistence in the future.</p>
<p>Following these rules to minimize coupling allows building flexible architecture that can rather easily integrate new technologies and patterns, thus reducing the cost of changes and increasing architecture&#8217;s life span. </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/09/12/architecture-life-spanimplications-on-your-business-and-how-to-build-more-long-lasting-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crosswords :: Should Architecture Rewrite be Avoided?</title>
		<link>http://sadekdrobi.com/2008/05/09/crosswords-should-architecture-rewrite-be-avoided/</link>
		<comments>http://sadekdrobi.com/2008/05/09/crosswords-should-architecture-rewrite-be-avoided/#comments</comments>
		<pubDate>Fri, 09 May 2008 19:08:14 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/05/09/crosswords-should-architecture-rewrite-be-avoided/</guid>
		<description><![CDATA[As it gets more and more difficult to adapt software to new demands, the temptation to rebuild it in order to update the architecture grows stronger. For this risky undertaking it is essential to choose the right strategy. Several authors provide insights into advantages and disadvantages of different possible options in terms of cost, technical [...]]]></description>
			<content:encoded><![CDATA[<p>As it gets more and more difficult to adapt software to new demands, the temptation to rebuild it in order to update the architecture grows stronger. For this risky undertaking it is essential to choose the right strategy. Several authors provide insights into advantages and disadvantages of different possible options in terms of cost, technical complexity and potential commercial risk. </p>
<p><span id="more-479"></span></p>
<p><a title="http://www.infoq.com/news/2008/05/software-rewrite-4-architecture" href="http://www.infoq.com/news/2008/05/software-rewrite-4-architecture">http://www.infoq.com/news/2008/05/software-rewrite-4-architecture</a></p>
<p>As it gets more and more difficult to adapt software to new demands and requirements, the temptation to rebuild it in order to update the architecture grows stronger. The undertaking being rather risky, it is crucial to adopt the right tactics. <a href="http://blog.assembla.com/assemblablog/tabid/12618/bid/4996/3-Options-for-Rebuilding-Your-Software-Without-Risking-Death.aspx">Andy Singelton&#8217;s recent blogpost</a> provides some insights into different tradeoffs in terms of cost, technical complexity and potential commercial risk that should be considered while choosing one or another strategy. He identifies three possible approaches and briefly highlights advantages and disadvantages of each of them: </p>
<p>- the &#8220;prototype and expand&#8221; option that refers to writing full new software;   <br />- the &#8220;incremental&#8221; option based on updating some components and refactoring while still using your code base     <br />- and the &#8220;buy&#8221; option that consists in acquiring existing software that meets new requirements. </p>
<p>However, several authors in the blogspace argue that the first option &#8211; rewriting software from scratch &#8211; should be avoided at all prices. <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">Joel Spolsky advocated against such approach back in 2000</a>, in the wake of the announcement of Netscape 6 release. He qualified the decision of Netscape to rewrite the code as &#8220;single worst strategic mistake&#8221; and provided some more illustrations of similar &#8220;mistakes&#8221;: dBase and Quattro Pro of Borland as well as Microsoft&#8217;s Pyramid project. Joel believes that in many cases the perceived need to rewrite software is very subjective and is often related to the inherent difficulty of code reuse. Moreover, he argues that much of what makes code less readable is actually related to the long process of real world testing and bug fixing:</p>
<blockquote><p>The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they&#8217;ve been fixed. [&#8230;] </p>
<p>Back to that two page function. Yes, I know, it&#8217;s just a simple function to display a window, but it has grown little hairs and stuff on it and nobody knows why. Well, I&#8217;ll tell you why: those are bug fixes. [&#8230;]</p>
<p>Each of these bugs took weeks of real-world usage before they were found. [&#8230;]</p>
<p>When you throw away code and start from scratch, you are throwing away all that knowledge. All those collected bug fixes. Years of programming work.</p>
</blockquote>
<p>Joel Spolsky also stresses potential business risks of launching a rewrite project that would undermine the capacity of the team to respond to emerging market needs. Hence, according to him, even if the old code base is really bad in architectural terms, one should go for cleaning up code, refactoring and changing interface rather than launching a full scale rewrite. </p>
<p>One of common arguments for rewriting software is the assumption that with experience that has been gained since the first release, the team would be able to do a better job? However, Joel Spolsky highlights the fact that the developing team would most probably have changed over time. Moreover, as it was stressed by Dharmesh Shah, who more recently <a href="http://onstartups.com/home/tabid/3339/bid/2596/Why-You-Should-Almost-Never-Rewrite-Your-Software.aspx">echoed at Spolsky&#8217;s article</a>, there are great chances that market conditions would be changing too. </p>
<p>Dharmesh Shah lists other common justifications for software rewrite &#8211; e.g. bad code base or wrong initial choice of the platform or the language &#8211; and shows their limitations. He elaborates on reasons why one should resist the temptation of launching a rewrite: the process will inevitably be longer than expected; there is a major risk of not being able to respond to potential market changes and demands from existing costumers, which may undermine the competitive advantage of the software; and there are alternative solutions, e.g. refactoring that is instrumental for cleaning up the code while reducing the previous risks. Dharmesh Shah believes that rewrite is justified in only few cases: if initial technology choice prevents you from commercial success or if there is a huge shift in technology landscape &#8211; e.g. from client-server to web-based computing&#8221; &#8211; and your software cannot adapt to it.</p>
<p>Based on his experience of porting Quattro Pro from Modula-2 compiler to Turbo Pascal, Bob Warfield, <a href="http://smoothspan.wordpress.com/2007/10/29/practical-experiences-with-never-rewriting-software/">who commented on Dharmesh Shah&#8217;s post</a>, believes, however, that it is not worth rewriting software to change languages. He also dds some other insights on the issue, i.e. the importance of human resources especially if the decision for rebuild is taken because of the poor quality of the existing code. He further emphasize the value of refactoring suggesting that it can go beyond code and that the experience gained by the team can be used to refractor, for instance, the user model. </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/05/09/crosswords-should-architecture-rewrite-be-avoided/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obsev:: Mutability is addictive like drugs, Mutation can become a cancer!</title>
		<link>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/</link>
		<comments>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 23:51:46 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Decipline]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Mutability]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/03/08/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/</guid>
		<description><![CDATA[This is really crazy! 
The first time I got introduced to mutation, I had a bad feeling. How can x:=x+1 be logical at all?
It felt so unnatural, scary, or maybe like a hack. Then, because of society constrains, I got to forget the bad feeling about that. Well, my mind started to tolerate with counter-logic [...]]]></description>
			<content:encoded><![CDATA[<p>This is really crazy! </p>
<p>The first time I got introduced to mutation, I had a bad feeling. How can x:=x+1 be logical at all?</p>
<p>It felt so unnatural, scary, or maybe like a hack. Then, because of society constrains, I got to forget the bad feeling about that. Well, my mind started to tolerate with counter-logic logic. And that is how I became an enterprise developer. I am not sure how proud I am with this title anyway. I feel that tolerating and accepting the counter-logic logic is one, and most important one, of the prerequisite to this title.</p>
<p><span id="more-454"></span></p>
<p>Nowadays, I am working on a project that has to process a huge number of data to do calculations on it and produce results that make sense to the user. Performance is a constraint. And I decided this time to do it the right way, the way that I believe is right. The logical way.</p>
<p>I decided to the calculations with no mutable state. I wanted immutability to be my guarantee to safety. Mutability breaks logic, and so produces bugs. But I couldn&#8217;t imagine how hard this choice can be. You tend all the time to feel that it is easier to introduce a mutable object, mutable flags, temporary mutable containers inside loops. Imperative programming is so tempting. Just like drugs. It feels so strange and weird in the first time, but then, it becomes a habit, a bad one, and you can&#8217;t help but to break into it. Mutation and imperative programming is the simplest thing that work in some way.</p>
<p>Today, I am happy I almost finished the whole calculation logic I had to model ( and it is quite a complex one). And I am proud that I could resist introducing mutability in the algorithm. Yet, I did some experiments along the way to introduce just a bit of state, kind of just what I need to introduce faster one kind of calculation. This very small mutation just breaks it all. It just breaks the whole modularity of the algorithm, and just makes the whole calculation much less generic, and more importantly less maintainable and evolutive. Such a small mutation, like introducing a mutable flag, or a global variable, just breaks the whole logic of my calculation, and drives me far away from a good modular calculation, with a good design based on plain old principles of separation of concerns. It just makes impossible to go further with the implementation! It is like a cancer of code&#8230;</p>
<p>Now, after the discipline and the resistance to a mutable state, we are so happy with the resulting code that yet needs polishing, makes it very easy to parameter more calculations and so add more desired functionality to the program. And just for fun, we compared it to the same calculation done with imperative programming. It is much more concise, intention concealing, and as a result, surprisingly we paid no performance cost for a much more declarative code.</p>
<p>I owe a lot to Erik Meijer, Paul Hudak, Linq, and Haskell :)</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/03/09/obsev-mutability-is-addictive-like-drugs-mutation-can-become-a-cancer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scalability: Dynamic and Static Programming Languages</title>
		<link>http://sadekdrobi.com/2008/02/09/scalability-dynamic-and-static-programming-languages/</link>
		<comments>http://sadekdrobi.com/2008/02/09/scalability-dynamic-and-static-programming-languages/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 01:28:02 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/02/09/scalability-dynamic-and-static-programming-languages/</guid>
		<description><![CDATA[In the wake of the demise of Chandler personal information management project, a discussion has occurred on TSS about the scalability potential of dynamic languages. Ted Neward attempted to go beyond language quarrel in order to provide some structured insights on this issue.&#160;&#160; 

http://www.infoq.com/news/2008/02/scalability-dynamic-vs-static
First of all, Neward emphasizes that a language scaling can be understood [...]]]></description>
			<content:encoded><![CDATA[<p>In the wake of the demise of Chandler personal information management project, a discussion has occurred on TSS about the scalability potential of dynamic languages. Ted Neward attempted to go beyond language quarrel in order to <a href="http://blogs.tedneward.com/2008/01/24/Can+Dynamic+Languages+Scale.aspx">provide some structured insights on this issue.</a>&#160;&#160; </p>
<p><span id="more-448"></span></p>
<p><a title="http://www.infoq.com/news/2008/02/scalability-dynamic-vs-static" href="http://www.infoq.com/news/2008/02/scalability-dynamic-vs-static">http://www.infoq.com/news/2008/02/scalability-dynamic-vs-static</a></p>
<p>First of all, Neward emphasizes that a language scaling can be understood in terms of &quot;size of project, as in lines-of-code&quot; or in terms of &quot;capacity handling, as in &quot;it needs to scale to 100,000 requests per second&quot;&quot;. The two need to be delineated because even though both are important, they do not always go hand in hand: assembly languages or C, for instance, are conducive to capacity scalability but not to size scalability. </p>
<p>Neward defines size scalability in terms of &#8220;a language&#8217;s ability to extend or enhance the complexity budget of a project&#8221;. He refers to Mike Clark&#8217;s concept that implies that &#8220;every project has a fixed complexity budget, and the more you spend on infrastructure and tools, the less you have to spend on the actual business logic.&quot; And according to Neward, this point is at the core of the debate about the scalability capacity of static and dynamic languages. </p>
<p>The adherents of static languages argue that type-safety check results in fewer work for the programmer &#8220;as an automated tool now runs through a series of tests that the programmer doesn&#8217;t have to write by hand&#8221;. Moreover IDE support that exists for these languages provides powerful tools for refactoring that are &#8220;widely believed to be impossible on dynamic language platforms.&#8221; Dynamic language proponents, however, put forward the fact that &#8220;the dynamic nature of these languages means less work during the creation and maintenance of the codebase, resulting in a far fewer lines-of-code count [&#8230;] thus implicitly improving the scale of a dynamic language&#8221;.&#160; </p>
<p>According to Ted Neward, it is true that &#8220;dynamic language programmer can typically slam out more work-per-line-of-code than his statically-typed compatriot&#8221;, but he will most probably need to produce more unit tests given that dynamic languages do not use a compiler that, in a way, ensures a certain number of systematic tests.&#160; </p>
<p>As for IDE refactoring, Neward references Dave Thomas who admits that refactoring support of Eclipse, for example, is limited for dynamic language platforms given that type information is missing until runtime. Thomas highlights, however, that &#8220;simple search-and-replace across files, something any non-trivial editor supports, will do many of the same refactorings as Eclipse or IntelliJ provides, since type is no longer an issue.&#8221; And Neward emphasizes that he expects IDE vendors develop tooling specifically designed for dynamic languages: </p>
<blockquote><p> [&#8230; ]it&#8217;s relatively easy to imagine that the IDE could be actively &quot;running&quot; the code as it is being typed, in much the same way that Eclipse is doing constant compiles, tracking type information throughout the editing process.&#160; </p>
</blockquote>
<p>Moreover one should not forget that &#8220;the original refactoring browser was an implementation built for (and into) Smalltalk, one of the world&#8217;s first dynamic languages&#8221;, as it was highlighted in the TSS debate. </p>
<p>With respect to capacity handling scalability, Ted Neward stresses its importance because &#8220;a project that cannot handle the expected user load during peak usage times will have effectively failed just as surely as if the project had never shipped in the first place.&#8221;&#160;&#160; </p>
<p>Dynamic language opponents argue that these languages cannot scale in terms of capacity handling, because they are &#8220;built on top of their own runtimes, which are arguably vastly inferior to the engineering effort that goes into the garbage collection facilities found in the JVM Hotspot or CLR implementations.&#8221; Dynamic language supporters respond that &#8220;there are plenty of web applications and web sites that scale &quot;well enough&quot; on top of the MRV (Matz&#8217;s Ruby VM?) interpreter that comes &quot;out of the box&quot; with Ruby&#8221;.&#160; </p>
<p>Ted Neward, at his turn, points out that &#8220;with the release of JRuby, and the work on projects like IronRuby and Ruby.NET, it&#8217;s entirely reasonable to assume that these dynamic languages can and will now run on top of modern virtual machines like the JVM and the CLR&#8221;: </p>
<blockquote><p>While a dynamic language will usually take some kind of performance and memory hit when running on top of VMs that were designed for statically-typed languages, work on the DLR and the MLVM, as well as enhancements to the underlying platform that will be more beneficial to these dynamic language scenarios, will reduce that.</p>
</blockquote>
<p>Ted Neward seems to believe that there is a window of opportunity for improving scalability of dynamic languages in terms of both project size and capacity handling by adapting tools and optimizing runtime environments to their specificities. More generally speaking, he rather opposes the dichotomy between static and dynamic languages. He highlights the fact that some applications, Excel for instance, successfully combine the two &quot;by creating a core engine and surrounding it with a scripting engine that non-programmers use to exercise the engine in meaningful ways.&#8221; Neward sums up rephrasing Karl Marx: &quot;From each language, according to its abilities, to each project, according to its needs.&quot; </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/02/09/scalability-dynamic-and-static-programming-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It is NOT a Test Driven Design</title>
		<link>http://sadekdrobi.com/2007/05/27/it-is-not-a-test-driven-design/</link>
		<comments>http://sadekdrobi.com/2007/05/27/it-is-not-a-test-driven-design/#comments</comments>
		<pubDate>Sun, 27 May 2007 21:17:49 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/05/27/it-is-not-a-test-driven-design/</guid>
		<description><![CDATA[There is no good design guaranteed with TDD, actually it is a Test Driven Development. It is a good practice for defiling contracts before starting to write code. This assures some decoupling between the contract and the implementation. But don&#8217;t close your eyes and expect it to design for you. You should be careful about [...]]]></description>
			<content:encoded><![CDATA[<p>There is no good design guaranteed with TDD, actually it is a Test Driven Development. It is a good practice for defiling contracts before starting to write code. This assures some decoupling between the contract and the implementation. But don&#8217;t close your eyes and expect it to design for you. You should be careful about not turning your code into functions just wrapped into objects. Because then it is a bit late for refactoring. Jimmy Nilsson [Applying DDD and Patterns] couples TDD with DDD to produce a good design. Because DDD is about design, and TDD is about a programming discipline, a beautiful one, but is not about design&#8230;</p>
<div class="redditbutton"><script type="text/javascript">reddit_url = 'http://sadekdrobi.com/2007/05/27/it-is-not-a-test-driven-design/';</script><script src="http://reddit.com/button.js?t=2" type="text/javascript"></script></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/05/27/it-is-not-a-test-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Live Note :: TDD : James Coplien</title>
		<link>http://sadekdrobi.com/2007/03/16/live-note-tdd-james-coplien/</link>
		<comments>http://sadekdrobi.com/2007/03/16/live-note-tdd-james-coplien/#comments</comments>
		<pubDate>Fri, 16 Mar 2007 14:44:36 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[QCon2007]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=212</guid>
		<description><![CDATA[Â   
]]></description>
			<content:encoded><![CDATA[<p>Â <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-0204000311.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-020400032.jpg" height="240" style="border: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-0205000111.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-020500012.jpg" height="240" style="border: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-0206000211.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterlivenotetddjamescoplien-dd4ddsc-020600022.jpg" height="240" style="border: 0px" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/03/16/live-note-tdd-james-coplien/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refx :: Martin Fowler on MODIFIABILITY (QCon)</title>
		<link>http://sadekdrobi.com/2007/03/14/refx-martin-fowler-on-modifiability-qcon/</link>
		<comments>http://sadekdrobi.com/2007/03/14/refx-martin-fowler-on-modifiability-qcon/#comments</comments>
		<pubDate>Wed, 14 Mar 2007 14:01:18 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Martin Fowler]]></category>
		<category><![CDATA[QCon2007]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=51</guid>
		<description><![CDATA[

In agile development process, the Design task is still important, we just changed the way we do it to evolutionary design rather than un upfront one. Yet, In some cases we cant defer design decision till the end, and we do need to do them in an upfront style.Â 

Do the simplest thing that works ( [...]]]></description>
			<content:encoded><![CDATA[<p><a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-0048004841.jpg"><img border="0" width="457" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00480048-thumb22.jpg" height="304" style="border-width: 0px" /></a></p>
<ul>
<li>In agile development process, the Design task is still important, we just changed the way we do it to evolutionary design rather than un upfront one. Yet, In some cases we cant defer design decision till the end, and we do need to do them in an upfront style.Â </li>
</ul>
<blockquote><p>Do the simplest thing that works ( Kent Beck )</p></blockquote>
<ul>
<li>Kent Beck commented on this that &#8220;The simplest thing is not the most stupid !&#8221;</li>
<li>Software SHOULD have a model, and cant be only tachtical all the time.</li>
<li>In a Lean Software Development we dont make decisions before we really have to, but we have to do them once!Â or otherwise we will be taken as not able toÂ make decisions.</li>
<li>Try different choices on different teams, building different implementations, find that last minute where you can decide.</li>
<li>The key to modifiability is encapsulation and abstraction.</li>
<li>The key question is : Do i have to make the decision yet?</li>
<li>The Domain Model is made! The task is to reflect it well in the software.</li>
<li>Isolate Domain models from technical ones</li>
<li>Preparing a ground for Modifiability</li>
<li>Making a decision of when to make a decision</li>
<li>Discuss well with business people to reflect the model</li>
<li>Html is undoable because there is not a ig investement in doing it</li>
<li>Breaking encapsulation for a decision makes it a bad decision</li>
<li>redability of code</li>
<li>Unit testing to guarantee encapsulation</li>
<li>Software evolves anyway, maintainability IS an issue!</li>
<li>Encapsulation is about keeping secrets.</li>
<li>Pair progamming for teaching design, that will raise team&#8217;s productivity as a whole</li>
<li>Lessons can be learnt better through modifiability than through upfront teaching</li>
<li>Struggle for reversable architecture</li>
</ul>
<p><a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-0046004611.jpg"><img border="0" width="240" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-004600462.jpg" height="160" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-0053005311.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-005300532.jpg" height="240" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00370037-111.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00370037-12.jpg" height="240" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00510051-111.jpg"><img border="0" width="160" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00510051-12.jpg" height="240" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-0052005211.jpg"><img border="0" width="240" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-005200522.jpg" height="160" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00580058-111.jpg"><img border="0" width="240" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00580058-12.jpg" height="160" style="border-width: 0px" /></a> <a atomicselection="true" href="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-14440dsc-006700671.jpg"><img border="0" width="240" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-d2cadsc-00600060-12.jpg" height="160" style="border-width: 0px" /><img border="0" width="240" src="http://sadekdrobi.com/wp-content/uploads/2007/03/windowslivewriterrefxmartinfowleronmodifiabilityqcon-14440dsc-00670067.jpg" height="160" style="border: 0px" /> </a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/03/14/refx-martin-fowler-on-modifiability-qcon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>REFX :: Eric Evans :: Making Implcit Concepts Explicit</title>
		<link>http://sadekdrobi.com/2007/01/22/refx-eric-evans-making-implcit-concepts-explicit/</link>
		<comments>http://sadekdrobi.com/2007/01/22/refx-eric-evans-making-implcit-concepts-explicit/#comments</comments>
		<pubDate>Mon, 22 Jan 2007 20:39:39 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/?p=23</guid>
		<description><![CDATA[&#8220;Listen to the language the domain experts use. Are there terms that succinctly state something complicated? Are they correcting your word choice (perhaps diplomatically)? Do the puzzled looks on their faces go away when you use a particular phrase? These are hints of a concept that might benefit the model.&#8221;Eric Evans, Domain Driven Design / [...]]]></description>
			<content:encoded><![CDATA[<p class="docText"><span class="docEmphStrong"><strong>&#8220;Listen to the language the domain experts use. Are there terms that succinctly state something complicated? Are they correcting your word choice (perhaps diplomatically)? Do the puzzled looks on their faces go away when you use a particular phrase? These are hints of a concept that might benefit the model.&#8221;</strong><em>Eric Evans, Domain Driven Design / Refactoring to deeper insight.</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/01/22/refx-eric-evans-making-implcit-concepts-explicit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

