<?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; Delivering Value</title>
	<atom:link href="http://sadekdrobi.com/category/delivering-value/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>DCI in Real World: Domain Context and Interaction with Scala in a Real World Project</title>
		<link>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/</link>
		<comments>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 22:40:09 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Coplien]]></category>
		<category><![CDATA[DCI]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Domain-Context-Interaction]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[back-to-oop]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/</guid>
		<description><![CDATA[Those that follow my twitter @sadache , me @infoQ or my blog have certainly already noticed that I am quite interested in Scala on languages&#8217; axis and in Domain Context Interaction DCI pattern on architecture axis. I always search new ways for delivering quality code which is modular and concise. Modularity offers the opportunity to [...]]]></description>
			<content:encoded><![CDATA[<p>Those that follow <a href="http://twitter.com/sadache">my twitter @sadache</a> , <a href="http://www.infoq.com/author/sadek-drobi">me @infoQ</a> or my blog have certainly already noticed that I am quite interested in Scala on languages&#8217; axis and in <a href="http://www.artima.com/articles/dci_vision.html">Domain Context Interaction DCI</a> pattern on architecture axis. I always search new ways for delivering quality code which is modular and concise. Modularity offers the opportunity to think about the problem in parts, which is typical of the way brains work, whereas conciseness makes use of imaginary system (reading code blocks like images). </p>
<p>Recently, I&#8217;ve been working on a Web Api system where, thanks to support of <a href="http://twitter.com/morlhon">@jeanlaurent</a> <a href="http://morlhon.net/blog/">http://morlhon.net/blog/</a>, I used Scala applying DCI architecture in a real world project. This post is about reporting benefits of using this approach. Other posts will follow that will be more focused on the use of Scala and Functional Programming in that project. Code included is a bit simplified and parts of the system that are not of interest are omitted.</p>
<p><span id="more-638"></span>
<p>The concerned part of the system is an API for logging a Web API usage and using it for showing interesting statistics to users and for implementing a Web 2.0 business model authorization.</p>
<p>The story starts with an API key passed as a parameter in the requested URI something like <em>product/1234?api_key=AFFSEFFVFE2344</em></p>
<p>I create an object that represents the API user containing the key: (did I tell I like one liners?)</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb.png" width="260" height="40"></a>&nbsp; </p>
<p>This is a class of an object that holds the apiKey, now I need a method that I will call to log the use of product/123 for user represented by the apiKey AFFSEFFVFE2344. What could be quite convenient and OOP-iesh is to call a <em>record</em> method on the apiKey instance, something like <em>apiUser.record(&#8230;) .</em> The problem with this, as explained in the original DCI article, is that adding these methods to the domain objects adds noise in other contexts for which recording is not relevant such as authorization and statistics, as we will see later. I would rather use here the DCI&#8217;s <em>role</em> concept (or <em>context</em>). Doing so I would say <em>(apiUser in recording role).record(&#8230;) . </em>This pseudo code tends to be very close to mixins implemented in Scala language and will look like following in real world Scala code:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image1.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image2.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb1.png" width="617" height="57"></a>&nbsp; </p>
<p>Here the ApiUser object doesn&#8217;t contain a record method by default and so it can be shared in different contexts. In other words we kept our domain objects pure yet not scarifying OOP convenience. Now the <em>Recorder</em> is a trait that minds only business in the context of recording. The definition looks like the following:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image3.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image4.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb2.png" width="281" height="108"></a>&nbsp; </p>
<p>Another view of the system is the end user&#8217;s statistics. Statistics should be represented in a meaningful way to the user and the user can&#8217;t care less about how the recording is done. So, it is quite desirable not to have the noise of recording when talking about the statistics view context. Here is how the call looks like in our example in Scala:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image5.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb3.png" width="667" height="63"></a> </p>
<p>Again what we are doing here looks merely like saying: I want to use the ApiUser in a statistics context and I choose to call method getRequestsPerMonthForLast12Months. I guess the convenience brought by using this approach is obvious. This is how the Statistics trait looks like:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image6.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb4.png" width="647" height="150"></a> </p>
<p>Note that as in the Recording trait, the <em>ApiUser</em> object is not passed as an explicit parameter but rather as an implicit receiver parameter (something like <em>this</em> for an object). To access it we use <em>Self</em> that refers to it<em>.</em></p>
<p>The third view of the system is what allows us to provide an authorization mechanism based on user&#8217;s activities for a business plan they choose (be it a quota per day, per month or other interesting combinations). It could be quite convenient to have the call looking like <em>apiUser.isAuthorized . </em>We get pretty close with DCI without polluting our domain object with a specific context logic:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image7.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb5.png" width="540" height="66"></a> </p>
<p>Like the previous, the Authorizer trait looks straightforward :</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image8.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb6.png" width="454" height="207"></a> </p>
<p>Now that we looked at the three views of our system introducing three examples of &#8220;<em>Context</em>&#8221; from DCI pattern we can go beyond that to discover how we use nested <em>contexts</em> (or <em>roles</em>). </p>
<p>Looking at the Authorizer trait, the ApiUser referred to by <em>Self,</em> doesn&#8217;t tell us much about<em> </em>how many requests the user did today or this month. And for authorizing user one needs a richer ApiUser that can give the necessary information that live themselves in a file or a database. But once again, we don&#8217;t want to pollute our domain object with Data Access code that varies on a different axis than the domain object itself.&nbsp; Introducing a nested context/role that adds the Data Access logic would pretty convenient here:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image9.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb7.png" width="473" height="56"></a> </p>
<p>Here <em>Self </em>is a richer ApiUser that carries Requests Data Access logic defined in the RequestsDataAccessor trait:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image10.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image11.png"></a><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image12.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb8.png" width="848" height="193"></a>&nbsp;&nbsp; </p>
<p>And the implementation of the Authorizer trait defined in terms of <em>ApiUser with RequestsDataAccessor</em>:</p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image13.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb9.png" width="468" height="373"></a> </p>
<p>In the same way we implement the <em>Statistics</em> and <em>Recorder</em> traits using <em>ApiUser with RequestsDataAccessor:</em></p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image14.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb10.png" width="451" height="148"></a> </p>
<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/06/image15.png"><img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://sadekdrobi.com/wp-content/uploads/2009/06/image-thumb11.png" width="581" height="295"></a> </p>
<p>If you are not familiar with generics ( getRequestsPer[Day] ) you can ignore them since they are not central to the subject of this post and simply use their readability to understand the purpose of the method. The use of generics in this project will be the subject of a future post.</p>
<h3>Encapsulation Test!</h3>
<p>Now in the first version of the system, the ApiKey was passed in clear in the service URI. This is not very secured as it is quite easy to get the key and use it for using the API. We might prefer to encrypt the key in some way. This fortunately changes nothing for any of our traits implementations since the decryption of the key is the responsiblity of the ApiUSer object and all what our traits need is to get the concerned ApiKey from that object which can be easily done with pattern matching. Same thing if we want to replace database logging with file system in RequestsDataAccessor. Modularity and separation of concerns are apparent in this DCI architecture implementation.</p>
<p>&nbsp;</p>
<h3>Conclusion</h3>
<p>This is a refreshing approach to OOP. The <strong>Domain Context Interaction</strong> pattern allowed us to restore interesting properties of real OOP approach yet not sacrificing modularity and separation of concerns. This simple view of &#8220;an object in several contexts&#8221; helps quite much in thinking explicitly about and understanding context boundaries. Note that an object(instance) is not defined by a single class but each instance curries the necessary context. This is essential to OOP which is NOT COP (for Class Oriented Programming ;) )</p>
<p>&nbsp;</p>
<p>Feel free to ask questions and/or comment about this implementation. Refer to original papers for more in-depth explanation of the pattern. </p>
<p>Thanks to JetBrains&#8217; IDEA and the Scala plug-in that helped me programming in Scala.</p>
<p>&nbsp;</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7cedd753-901b-4d50-b76a-a7c30a681f4e" class="wlWriterSmartContent">Mots clés Technorati : <a href="http://technorati.com/tags/DCI" rel="tag">DCI</a>,<a href="http://technorati.com/tags/Coplien" rel="tag">Coplien</a>,<a href="http://technorati.com/tags/OOP" rel="tag">OOP</a>,<a href="http://technorati.com/tags/Scala" rel="tag">Scala</a>,<a href="http://technorati.com/tags/J2EE" rel="tag">J2EE</a>,<a href="http://technorati.com/tags/Domain-Context-Interaction" rel="tag">Domain-Context-Interaction</a>,<a href="http://technorati.com/tags/Architecture" rel="tag">Architecture</a>,<a href="http://technorati.com/tags/Multi-Paradigm-Design" rel="tag">Multi-Paradigm-Design</a></div>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/06/10/dci-in-real-world-domain-context-and-interaction-with-scala-in-a-real-world-project/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>You&#8217;ve got 100 pages to convince me of your shiny language!</title>
		<link>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</link>
		<comments>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 20:42:37 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Multi-Paradigm Design]]></category>
		<category><![CDATA[Multi-languages projects]]></category>
		<category><![CDATA[Paradigm Oriented Programming Language]]></category>
		<category><![CDATA[Polyglot Programming]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/</guid>
		<description><![CDATA[ In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-01501.jpg"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 5px 0px; border-left: 0px; border-bottom: 0px" height="322" alt="DSC_0150-" src="http://sadekdrobi.com/wp-content/uploads/2009/01/dsc-0150-thumb1.jpg" width="470" align="left" border="0"></a> In the rapidly spanning world of programming languages, I find myself buying and reading a lot of books about new and old programming languages. There are a few interesting concepts in each language, and if you think about employing more than one language in your projects then you better know about the existence of these concepts (see <a href="http://www.infoq.com/articles/paradigm-based-polyglot-prog">Paradigm based Polyglot Programming</a>).
<p>One thing that annoys me though about most programming language books is how raw they often are.</p>
<p><span id="more-575"></span></p>
<p>&nbsp; Probably constrained by time, authors and book teams seem to invest less on editorial stuff and teaching methodology and more on explaining details of technical and behind the scenes stuff. This often results in more manual-like books where you have a great wealth of material that you are not able to exploit anyway because of, well, lack of time. I am not sure I can invest time in reading 500+ manual of a new, or at least non mainstream, language that I might decide not to use by the end.&nbsp;
<p>I am not saying here that technical and behind the scene stuff does not matter, quite the opposite. I just think that manual, important it is, should not be the introduction to the programming language. A rather 100 to 200 pages brief book that is carefully edited to introduce paradigm, concepts, and strengths of the programming language is a more attractive choice , accompanied with a wordy but well organized reference book with examples and more in-depth explanation of language features. I guess this is a more pragmatic approach to programming language learning in the presence of WWW and Google search.
<p>PS: I personally find <a href="http://www.amazon.com/Haskell-School-Expression-Functional-Programming/dp/0521644089/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1231187744&amp;sr=8-1">Paul Hudak&#8217;s Haskell book</a> a very good example of an enjoyable, brief, nicely and carefully edited programming language book. Also <a href="http://www.amazon.com/Programming-Lua-Second-Roberto-Ierusalimschy/dp/8590379825/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1231187997&amp;sr=1-1">LUA&#8217;s programming book</a> is nicely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2009/01/05/youve-got-100-pages-to-convince-me-in-your-shiny-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opinions: Measuring Programmers&#8217; Productivity</title>
		<link>http://sadekdrobi.com/2008/10/05/opinions-measuring-programmers-productivity/</link>
		<comments>http://sadekdrobi.com/2008/10/05/opinions-measuring-programmers-productivity/#comments</comments>
		<pubDate>Sun, 05 Oct 2008 18:48:43 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[InfoQ]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/10/05/opinions-measuring-programmers-productivity/</guid>
		<description><![CDATA[In the field of software development, managers need measurable metrics to appreciate the performance of their programmers. Shahar Yair and Steve McConnell discuss common techniques focusing on source lines of code and function points. They highlight the limitations of these approaches and seek to define some principles that could guide the analysis of programmersâ€™ performance.

posted [...]]]></description>
			<content:encoded><![CDATA[<p>In the field of software development, managers need measurable metrics to appreciate the performance of their programmers. Shahar Yair and Steve McConnell discuss common techniques focusing on source lines of code and function points. They highlight the limitations of these approaches and seek to define some principles that could guide the analysis of programmersâ€™ performance.</p>
<p><span id="more-520"></span></p>
<p>posted originally on <a href="http://www.infoq.com/news/2008/10/measure-programmers-productivity">http://www.infoq.com/news/2008/10/measure-programmers-productivity</a>
<p>In the field of software development, just as in any other area, managers need to appreciate performance of their programmers and the progress of their projects. However, defining appropriate metrics to this end appears to be a tricky task.
<p>Measuring source lines of code (SLOC) is one of commonly used approaches that presents however a number of important limitations highlighted recently by <a href="http://www.dev102.com/index.php?s=measure+">Shahar Yair</a> and <a href="http://forums.construx.com/blogs/stevemcc/archive/2008/04/09/measuring-productivity-of-individual-programmers.aspx">Steve McConnell</a>. First of all, the amount of lines of code does not allow effectively measuring the progress of a project because it focuses on activity rather than results. LOC do not have any value as such: the value of the final product depends on its performance and quality, not on the amount of code. Hence, focusing on the latter is actually a very limited approach to productivity.
<p>SLOC doesnâ€™t tell anything about the complexity of the issue at hand or about the quality of the final product in terms of maintainability, flexibility, extensibility, etc. With regard to quality, it can actually be negatively correlated. Refactoring as well as some design patterns result in reducing LOC while improving codeâ€™s quality. Larger code base may mean more noise, more unnecessary complexity, less readability and flexibility.
<p>What is particularly risky about adopting such a reductive view of programmersâ€™ performance is that it creates wrong incentives. Rather than optimizing their work in terms of final product, developers may be encouraged to favor the quantity of code to the detriment of quality and even intentionally write more verbose code. â€œWhat gets measured gets doneâ€, recalls Steve McConnell.
<p>He points out that some of these issues can be solved by using function points as measuring metric. The program size is then determined by the number of inputs, outputs, queries and files. Nevertheless, this approach also has its downsides. McConnell mentions some practical issues like the necessity of having a certified function point counter and the difficulties with mapping each function point back to individual programmers. A certified function point specialist Daniel Yokomizo highlights in his comment other limitations of such approach: lack of tools to measure function pointsâ€™ complexity and to take into consideration things such as code sharing, frameworks, libraries, etc., that affect the time needed to create a feature.
<p>Even though many commentators involved in the discussion about measuring approaches agree on their limitations, they do not necessarily dismiss the need for measuring programmersâ€™ performance. Many insist on the fact that SLOC, for instance, can be used as a baseline for a more complex analysis combining different factors. This goes along the lines of four principles outlined by McConnell that should guide any analysis of programmersâ€™ productivity:<br />
<blockquote>
<p>1. Donâ€™t expect any single dimensional measure of productivity to give you a very good picture of individual productivity [â€¦]
<p>2. Donâ€™t expect any measures [â€¦] to support fine-grain discrimination in productivity among individuals. [They] give you questions to ask but they donâ€™t give you the answers [â€¦]
<p>3. Remember that trends are usually more important than single-point measures [â€¦]
<p>4. Ask why you need to measure individual productivity at all [â€¦]</p>
</blockquote>
<p>In which context measuring programmersâ€™ productivity is actually meaningful? What criteria can be used for it? How can they be combined? Many questions are still open for discussion and if your experience has brought you some answers, donâ€™t hesitate to share.</p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/10/05/opinions-measuring-programmers-productivity/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coplien and Martin Debate TDD, CDD and Professionalism</title>
		<link>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/</link>
		<comments>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 10:41:34 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[JAOO]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/</guid>
		<description><![CDATA[On JAOO 2007 I could, with the help of Floyd, organize a debate between Bob Martin and James Coplien about TDD and DbC. This is the most interesting debate about the subject I&#8217;ve ever heard of. A lot of things I wanted to say have been said here. And I am proud to announce it [...]]]></description>
			<content:encoded><![CDATA[<p>On JAOO 2007 I could, with the help of Floyd, organize a debate between Bob Martin and James Coplien about TDD and DbC. This is the most interesting debate about the subject I&#8217;ve ever heard of. A lot of things I wanted to say have been said here. And I am proud to announce it :)</p>
<p><a title="http://www.infoq.com/interviews/coplien-martin-tdd" href="http://www.infoq.com/interviews/coplien-martin-tdd">http://www.infoq.com/interviews/coplien-martin-tdd</a></p>
<p>Thanks Cope, thanks Bob.</p>
<p><a title="http://www.infoq.com/interviews/coplien-martin-tdd" href="http://www.infoq.com/interviews/coplien-martin-tdd">&#160;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2008/02/18/coplien-and-martin-debate-tdd-cdd-and-professionalism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can architecture create gap between developers and software they build?</title>
		<link>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/</link>
		<comments>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/#comments</comments>
		<pubDate>Sat, 15 Dec 2007 00:17:34 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/</guid>
		<description><![CDATA[Today, many software project management and architecture approaches tend to parcel out&#160; work on a project creating hierarchical layers. This helps to simplify both developers work and management. However, the undelying information shielding among layers can&#160; potentially create a gap between developers and the software they are working on, if developers task are totally taken [...]]]></description>
			<content:encoded><![CDATA[<p>Today, many software project management and architecture approaches tend to parcel out&#160; work on a project creating hierarchical layers. This helps to simplify both developers work and management. However, the undelying information shielding among layers can&#160; potentially create a gap between developers and the software they are working on, if developers task are totally taken out of functional context. </p>
<p><span id="more-440"></span></p>
<p>Many efforts in today&#8217;s software community are targeted at bridging the gap between software professionals and business people. Several blogspace authors look at the issue from a slightly different perspective, highlighting the gap between developers and the software they are building. </p>
<p>According to Jeff Attwood, Amazon&#8217;s experience of regularly <a href="http://www.codinghorror.com/blog/archives/001013.html">involving its developers with costumer service</a> is a valuable means for improving quality and usability of software.&#160; He believes indeed that &#8220;all too often, software developers are merely tourists in their own codebase&#8221; because they lack a basic understanding of software users, their problems and concerns. This is what he has earlier referred to as&#160; &#8220;<a href="http://www.codinghorror.com/blog/archives/000206.html">ivory tower software development</a>&#8221;: </p>
<blockquote><p>In the absence of any other compelling evidence, developers assume everyone else is a developer. [...] The more isolated the developers, the worse the resulting end product. It doesn&#8217;t help that most teams have a layer of business analysts who feel it is their job it to shield developers from users [...] It&#8217;s dangerous to create an environment where developers have no idea who the users are. </p>
</blockquote>
<p>However, today&#8217;s industry is characterized, according to Abhijit Nadgouda, by <a href="http://ifacethoughts.net/2007/12/11/why-we-still-stink-at-software-development/">hierarchy, existence of multiple layers and information shielding among those layers</a>. He highlights that this simplifies management and makes business safer, but has rather negative implications on software quality: </p>
<blockquote><p>We create a hierarchy in our projects, and every level shields the lower levels from some information. How many members of the software development team know value of the software they are working on, or its importance to the client&#8217;s business? How many of them even know about pieces other the one they are working on? </p>
<p>[...] </p>
<p>There seems to be a disconnect between better business and better software development. Which is why, I believe, most of us are doing good business, but we as an industry still stink at software development. </p>
</blockquote>
<p>In his attempt to identify the reasons why &#8220;<a href="http://weblog.raganwald.com/2007/12/somethings-fishy.html">we still stink at software development</a>&#8221;, Reg Braithwaite also raises this issue arguing that it might be wrong to divide up work on a project in a way &#8220;that the people with the least experience are protected from damaging the code&#8221;. </p>
<p>Architecture based on such approach tends to simplify developers work through abstaction. If this is pushed to the extreme, developers tasks are taken out of functional context to become purely technical, which can potentially create a gap between developers and the software they are working on. </p>
<p>What is your opinion? Is such a protectionist architecture an impediment for software usability? Can architecture with developers ignorant of the full picture be effective? Does it deliver sofware and value?&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/12/15/can-architecture-create-gap-between-developers-and-software-they-build/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Religion driven industry: buzzwords and checklists vs. thinking and inspection</title>
		<link>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/</link>
		<comments>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/#comments</comments>
		<pubDate>Thu, 11 Oct 2007 17:23:50 +0000</pubDate>
		<dc:creator>Sadache</dc:creator>
				<category><![CDATA[Agile Programming]]></category>
		<category><![CDATA[Agile in the Enterprise]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Delivering Value]]></category>
		<category><![CDATA[JAOO]]></category>
		<category><![CDATA[Methodologies]]></category>
		<category><![CDATA[Useability]]></category>

		<guid isPermaLink="false">http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/</guid>
		<description><![CDATA[This post has been originally posted on infoQ on Religion driven industry: buzzwords and checklists vs. thinking and inspection
James O. Coplien has recently argued that todayâ€™s industry is based on buzzwords and checklists. The use of some techniques and methodologies, TDD for instance, has become â€œa religious issueâ€. This prevents from inspecting possible tradeoffs and [...]]]></description>
			<content:encoded><![CDATA[<p>This post has been originally posted on infoQ on <a href="http://www.infoq.com/news/2007/10/religous-industry" title="Religous Industry">Religion driven industry: buzzwords and checklists vs. thinking and inspection</a></p>
<p>James O. Coplien has recently argued that todayâ€™s industry is based on buzzwords and checklists. The use of some techniques and methodologies, TDD for instance, has become â€œa religious issueâ€. This prevents from inspecting possible tradeoffs and focusing on finding solutions that would be the most appropriate and the most cost-effectiveÂ .<span id="more-434"></span></p>
<p>â€œFor some reason, we have invented and are following religions [â€¦].â€ This is how <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=216434">James O. Coplien describes todayâ€™s industry</a> which, he believes, is based on buzzwords and checklists rather than on thinking, inspection and efforts to find solutions that would be the most appropriate and the most cost-effective for a given project:</p>
<blockquote><p>How much thought did you put into the tradeoffs of the last technique you brought into your organization: Ajax, TDD, On-Site Customer, or other buzzwords? Did you research its track record? Or did you go to the buzzword yellow pages?</p></blockquote>
<p>James uses the example of the <a href="http://agiletesting.blogspot.com/2007/10/whats-more-important-tdd-or-acceptance.html">debate around TDD which has occurred in the blog space</a> in the wake of Jaoo 2007 conference. When the discussion focuses on what approach to testing is the best (i.e. TDD or acceptance testing), it essentially addresses the wrong question. It obfuscates the real objective which is â€œto deliver what the customer wanted while optimizing qualityâ€ and to create value for the client. Testing is what we have on todayâ€™s checklist for quality but it is far from covering all the issues that actually affect quality:</p>
<blockquote><p>Quality suffers if you misunderstand what the customer wanted, or if the code has internal interactions that are difficult to foresee, or if local code violates array boundaries or uses untethered pointers. It also suffers if the interface makes it possible for the user to commit errors, or if it takes too many keystrokes to enter a small amount of common information.</p></blockquote>
<p>Focusing on quality requires considering every weapon in the arsenal:</p>
<blockquote><p>That means using Use Cases (which are an Agile way of engaging customers [â€¦]) instead of XP-style user stories (so you understand feature interactions up-front), doing pair programming or desk-check code inspections, doing design by contract, driving the process with usability experts and doing good usability testing, and a host of other things.</p></blockquote>
<p>Coplien emphasizes that it is impossible to do everything and that it is â€œa matter of cost effectivenessâ€. But being focused on techniques and driven by buzzwords we get stuck in practices that might not be optimal. The use of some techniques and methodologies, e.g. TDD, has become â€œa religious issueâ€, according to James:</p>
<blockquote><p>We are told that you have to do TDD to be a professional [â€¦] and yet are given no reason to believe this, no substantiation, and no evidence. Just believe.</p></blockquote>
<p>Coplien argues, for instance, that â€œintegration and system testing have long been demonstrated to be the least efficient way of finding bugsâ€, that TDD â€œdeteriorates the architectureâ€, and that â€œacceptance testing is orders of magnitude less efficient than good old-fashioned code inspections, extremely expensive, and comes too late to keep the design clean.â€ But he stresses how difficult it is to engage a challenging discussion on such â€œreligiousâ€ topics because any criticism is met with a lot of emotion.</p>
<blockquote><p>People have tied their Agile success to their introduction of TDD practices into their work. It&#8217;s the one thing they can do as individuals rather than as an enterprise.</p></blockquote>
<p>Coplien advocates for focusing on quality rather than testing and, more generally speaking, on thinking rather than checklists. He highlights however that â€œsorting these things out requires a system viewâ€, which often times lacks in todayâ€™s industry. He believes that â€œNew Age Agile movements consistently move away fromâ€ systems engineering. According to Coplien, â€œone root of the problem lies in modern education, which has increased its focus on technique and reduced its focus on thinking.â€ Todayâ€™s students â€œfewer and fewer understand software historyâ€ and â€œhave stronger memories [â€¦]on exactly when to use <code>--v</code> and when to use <code>v--</code> than they recall anything about logical design.â€</p>
<p>Close links which exist between academia and industry are also a part of the problem. Universities tend to adapt curricula to industryâ€™s needs in order to facilitate studentsâ€™ placement. Hence, it becomes difficult for academics to challenge predominate views, probably â€œas difficult as it was for Newtonâ€ to prevail â€œwith new insights on the working of the universeâ€:</p>
<blockquote><p>In fighting the broad misunderstandings that industry has chosen to adopt from selected interpretations of Agile, SOA, and programming language buzzwords, we face no less a religion, and no less threat to our cozy industry-financed academic positions, than he did.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://sadekdrobi.com/2007/10/11/religion-driven-industry-buzzwords-and-checklists-vs-thinking-and-inspection/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

