<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Osellus Blogs</title>
	
	<link>http://www.osellus.com/blogs</link>
	<description />
	<pubDate>Fri, 03 Jul 2009 16:08:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/OsellusBlogs" type="application/rss+xml" /><feedburner:emailServiceId>OsellusBlogs</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>A Process for iPhone Application Development  Part 1: Introduction</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/vJ5C-JRnTLM/</link>
		<comments>http://www.osellus.com/blogs/2009/07/02/a-process-for-iphone-application-development-part-1-introduction/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 06:06:17 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[Process Modeling]]></category>

		<category><![CDATA[Processes & Methodologies]]></category>

		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=209</guid>
		<description><![CDATA[This is the first post in a series detailing out a process we at Osellus have devised for development of iPhone applications. This process incorporates Apple&#8217;s best practices for iPhone development, as well as, the many relevant lessons learned from the general software development body of knowledge.
This work was initiated by our iPhone development and [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first post in a series detailing out a process we at Osellus have devised for development of iPhone applications. This process incorporates Apple&#8217;s best practices for iPhone development, as well as, the many relevant lessons learned from the general software development body of knowledge.</p>
<p>This work was initiated by our iPhone development and project management teams. As we embarked on various customer projects, the project management office wanted to have better project visibility and the ability to make sure the projects met the customers&#8217; objectives. It  has also helped project managers with staffing of each project with the right skill set. We intend to improve this process based on lessons learned from the completed projects.</p>
<p>In the next post of the series, I will cover the overall business objectives, and the process objectives as they relate to each business objective which thereby form the basis of the process.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=vJ5C-JRnTLM:sQJ7UH3luNQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/vJ5C-JRnTLM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/07/02/a-process-for-iphone-application-development-part-1-introduction/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/07/02/a-process-for-iphone-application-development-part-1-introduction/</feedburner:origLink></item>
		<item>
		<title>Architecture of Process Improvement Systems</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/cQtB2AviXJQ/</link>
		<comments>http://www.osellus.com/blogs/2009/07/02/essential-architecture-of-process-improvement-systems/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 05:05:32 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[Definition]]></category>

		<category><![CDATA[Process Improvement]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=203</guid>
		<description><![CDATA[Architecturally, a process improvement system is an end-to-end enterprise application, as appose to a single-user desktop utility application.
]]></description>
			<content:encoded><![CDATA[<p>Architecturally, a process improvement system is an end-to-end <a href="http://www.osellus.com/blogs/2009/05/12/enterprise-nature-of-process-asset-repository-system/">enterprise</a> application, as appose to a single-user desktop utility application.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=cQtB2AviXJQ:3Mb6H6pfNiw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/cQtB2AviXJQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/07/02/essential-architecture-of-process-improvement-systems/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/07/02/essential-architecture-of-process-improvement-systems/</feedburner:origLink></item>
		<item>
		<title>The Wisdom of Crowds</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/F1cOdREOXf8/</link>
		<comments>http://www.osellus.com/blogs/2009/06/30/the-wisdom-of-crowds/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 02:57:58 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[ALM]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Process Asset Repository]]></category>

		<category><![CDATA[Process Modeling]]></category>

		<category><![CDATA[Processes & Methodologies]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=194</guid>
		<description><![CDATA[
Software development processes capture—in reusable form&#8211;the organization’s best practices and lesson learned, making them sharable across projects. Today, the benefits of process-centric software delivery are well understood. So, why is the industry’s adoption of software development processes so dismal? The lower than expected adoption can be partly explained by a phenomenon called groupthink. For this [...]]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment--></p>
<p class="MsoNormal"><span>Software development processes capture—in reusable form&#8211;the organization’s best practices and lesson learned, making them sharable across projects. Today, the benefits of process-centric software delivery are well understood. So, why is the industry’s adoption of software development processes so dismal? The lower than expected adoption can be partly explained by a phenomenon called <em><a href="http://en.wikipedia.org/wiki/Groupthink">groupthink</a></em>. For this post I will rely on materials from </span><a href="http://en.wikipedia.org/wiki/James_Surowiecki">James Surowiecki</a><span> widely cited book: </span><a href="http://www.amazon.com/Wisdom-Crowds-James-Surowiecki/dp/0385721706/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1246416711&amp;sr=8-1">The Wisdom of Crowds</a><span>. </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>The coinage of the term, groupthink, predates Surowiecki’s work, but he frames it concisely within the larger arena of group decision making, which he shows is more accurate, in most cases, rather than decisions made by subject matter experts. This easy to read book draws from and consolidates various scientific and empirical bodies of work from diverse fields&#8211;such as psychology, statistics, and economics&#8211;making the subject generally accessible. </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>For crowds to produce correct decisions, its members must be diverse, independent, and decentralized, and should have a mechanism to consolidate the individual judgments into collective decision. However, the decision making fails when </span><span>the members of the crowd are too conscious of the opinions of others and begin to emulate each other and conform than think differently.</span><span> <span> </span>This failure is called groupthink. </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>I believe commercial software methodologies have been suffering from groupthink.<span> </span>For over a decade, most efforts have centered around Unified Process with all participants—mainly methodology theorist and consultants-emulating each other and conforming rather than thinking differently. Any new development—such as Eclipse Process Framework or SCRUM—has been forced to fit in a UP mold.<span> </span>The practitioners have found these expertly devised methodologies irrelevant, and, hence, have mostly avoided them. At the same time, new practical ideas that arise during actual development projects are prevented from blossoming. The potential methods devised by diverse projects’ practitioners are likely to be more relevant, as they convey the wisdom of crowds (mobs) and consequently have a better chance of wide adoption. </span></p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>The good news is that with the recent availability of integrated ALM and interactive process asset repository systems, it is now possible to involve practitioners in the end-to-end methodology development effort. I will cover this in more details shortly.</span></p>
<p><!--EndFragment--></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=F1cOdREOXf8:_3Hn-YtNxkk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/F1cOdREOXf8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/30/the-wisdom-of-crowds/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/30/the-wisdom-of-crowds/</feedburner:origLink></item>
		<item>
		<title>Multi-language Development</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/6gNTq596MRo/</link>
		<comments>http://www.osellus.com/blogs/2009/06/26/multi-language-development/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 22:54:07 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[ALM]]></category>

		<category><![CDATA[Multi-language Development]]></category>

		<category><![CDATA[Process Enactment]]></category>

		<category><![CDATA[Processes & Methodologies]]></category>

		<category><![CDATA[The state of the art]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=175</guid>
		<description><![CDATA[
As if the development of software systems was not complex enough. It is about to get even more complex.
In the past few years, there have been much fruitful activities in the area of programming languages resulting in introduction of various languages. Although some of these languages have been around for a number of years, the recent [...]]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment--></p>
<p class="MsoNormal"><span>As if the development of software systems was not complex enough. It is about to get even more complex.</span></p>
<p class="MsoNormal"><span>In the past few years, there have been much fruitful activities in the area of programming languages resulting in introduction of various languages. Although some of these languages have been around for a number of years, the recent availability of their robust, high-performance versions has made their usage in large commercial systems possible. <span>Broadly speaking, these new languages can be grouped into two categories: </span><a href="http://en.wikipedia.org/wiki/Dynamic_language">dynamic languages</a><span> and </span><a href="http://en.wikipedia.org/wiki/Functional_programming">functional languages</a><span>.</span></span></p>
<p><!--StartFragment--><!--EndFragment--></p>
<p class="MsoNormal"><strong><span>Dynamic Languages</span></strong></p>
<p class="MsoNormal"><strong><span><span style="font-weight: normal;">For many developers strong-typed languages are too restrictive, contextually unintuitive, and verbose. <span> </span>Dynamic typed languages, on the other hand, are simple and elegant, ideally suited for rapid prototyping and development. They are specially well suited for time-sensitive development projects where time-to-market is critical. </span></span></strong></p>
<p class="MsoNormal"><strong><span>Functional Languages</span></strong></p>
<p class="MsoNormal"><span>With the advent of universal deployment of multi-core hardware and the eminent availability of cheap massively parallel systems, the need for making concurrent programming mainstream has attracted much attention. The non-imperative aspect of functional programming results in code with no side-effects, well suited for concurrent programming. Functional programming is also very efficient for implementation of certain algorithms resulting in dramatic code reduction.<span> </span></span></p>
<p class="MsoNormal"><strong>Multi-language Platforms</strong></p>
<p class="MsoNormal"><!--StartFragment--><span>Aside from robustness, the new versions of the above languages are design to run on common runtime environments: virtual machines. This allows co-existence of multiple languages in a single software system.</span><!--EndFragment--></p>
<p class="MsoNormal"><span>Imperative type-safe object-oriented languages—such as java and C#&#8211;dynamic languages—such as </span><a href="http://en.wikipedia.org/wiki/Groovy_(programming_language)">Groovy</a><span> and </span><a href="http://en.wikipedia.org/wiki/IronRuby">IronRuby</a><span>—and non-inperative functional languages—such as </span><a href="http://en.wikipedia.org/wiki/Clojure">Clojure</a><span> and F#&#8211;can run seamlessly together on commercially available virtual machines&#8211;such as jvm and .net clr/dlr. Therefore, no technical barriers to development of multi-language systems exist today.</span></p>
<p class="MsoNormal"><strong><span> </span></strong></p>
<p class="MsoNormal"><strong><span>Example: Mobile Application with Cloud-based business logic.</span></strong></p>
<p class="MsoNormal"><span>Imagine a mobile application that provides sophisticated investors with instantaneous alerts based on news on or coverage of a company. Such an application constantly scans large number of online sources for any mention of the company’s name or reference to its competitors or general macro-economic events that can affect it. The system, then, analyzes the raw inputs and provides the user with a single metric indicating the effect of the latest chatter on the company’s stock price (positive or negative). Based on this metric, the investor can take appropriate actions.<span> </span></span></p>
<p class="MsoNormal"><span>Development of this system requires both mobile client and server side development. The client side could be an iPhone application implemented in Objective-C and UIKit.</span></p>
<p class="MsoNormal"><span>The server side is more complex. It requires a concurrent component running on a massively parallel cloud computing platform that constantly monitors and filters large number news feeds, blogs, and possibly social networking sites. The analysis of the filtered information may require specialized algorithms some aspects of which require constant enhancements. These functionalities are best implanted using combination of object-oriented, dynamic and function programming languages</span></p>
<p class="MsoNormal"><strong>Process and Multi-language Development</strong></p>
<p class="MsoNormal"><span>Because of the inherent complexity of multi-language systems, software development processes and integrated application lifecycle management (ALM) systems are critical to development of such systems. Imagine the various categories of practitioners and skills involved. Each with its own unique development, validation and verification approach and tools. <span> </span><span> </span><span> </span></span></p>
<p class="MsoNormal">
<p><!--EndFragment--></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=6gNTq596MRo:ojoB8lv7KYc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/6gNTq596MRo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/26/multi-language-development/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/26/multi-language-development/</feedburner:origLink></item>
		<item>
		<title>Initial Take on IBM’s Measured Capability Improvement Framework</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/Dcv2PDxQGNo/</link>
		<comments>http://www.osellus.com/blogs/2009/06/14/initial-take-on-ibms-measured-capability-improvement-framework/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 23:03:17 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[Process Improvement]]></category>

		<category><![CDATA[Process Modeling]]></category>

		<category><![CDATA[Processes & Methodologies]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=148</guid>
		<description><![CDATA[Earlier this month, IBM Rational announced their Measured Capability Improvement Framework (MCIF) offering, vaguely described in the IBM&#8217;s oficial news release:
Additionally, with IBM&#8217;s new Measured Capability Improvement Framework (MCIF), organizations can also take actions to continuously improve on results by learning from past experiences. Through MCIF, IBM provides organizations with an end-to-end framework that enables them to measure [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this month, IBM Rational announced their <em>Measured Capability Improvement Framework</em> (MCIF) offering, vaguely described in the IBM&#8217;s oficial <a href="http://www.pressebox.de/pressemeldungen/ibm-deutschland-gmbh-4/boxid-267227.html">news release</a>:</p>
<blockquote><p>Additionally, with IBM&#8217;s new Measured Capability Improvement Framework (MCIF), organizations can also take actions to continuously improve on results by learning from past experiences. Through MCIF, IBM provides organizations with an end-to-end framework that enables them to measure results and manage projects so they can incrementally improve their software delivery capability. </p>
<p>&#8220;In today&#8217;s economic climate, businesses are looking for new ways to derive greater value from their investments in software,&#8221; said Dr. Daniel Sabbah, general manager, IBM Rational Software. &#8220;<strong>Up until this point, organizations have been lax in measuring the business value and discipline of the processes</strong> [emphasis added] they use to deliver software assets. Classic metrics in software engineering largely ignore the importance of actual business outcomes. Our clients are now beginning to realize that the software they build or assemble must be treated as a strategic business asset. IBM is committed to helping them make the right decisions and improve the successful outcomes of this newly emerging business process discipline.&#8221; </p>
<p> </p></blockquote>
<p>Measurement driven improvement is central to CMMI and CobiT has a strong emphasis on alignment of IT processes with organization&#8217;s business objectives. If you have read my blogs, you would know that I strongly believe in objective-based process definition. If anything, IBM Rational is playing catch up. But it is still nice to have their confirmation.</p>
<p>I didn&#8217;t attend this years Rational Software Conference, but I have been carefully studying white papers on <a href="http://download.boulder.ibm.com/ibmdl/pub/software/rational/web/whitepapers/KrollCanter_MCIF_whitepaper2.pdf">MCIP</a> and <em><a href="ftp://ftp.software.ibm.com/common/ssi/pm/sp/n/rad14096usen/RAD14096USEN.PDF">Rational Insight</a></em> offerings. I will discuss Rational Insight in a future post.</p>
<p>MCIP white paper is well written and is an enjoyable read. I fully agree with the framing of the differences between business and manufacturing processes and software development processes on pages 3 and 4.</p>
<blockquote><p>Unlike most other business processes, such as supply chain management or manufacturing, SSD needs to deal with a range of risk. SSD also differs from many other business processes in that it entails a diseconomy of scale: that is, individual productivity decreases with the size of the SSD effort. &#8230;</p>
<p>Software delivery differs from many other business processes by dealing with a broad range of innovation. Some software projects, such as maintenance of existing systems, are reasonably predictable, similar to manufacturing processes. Those projects carry limited innovation and drive limited or no business differentiation. Other projects, such as building unprecedented and large software systems, require high degrees of innovation in addressing problems that have never been solved before on a schedule. Committing to delivering innovation requires assuming risk, since the lack of complete knowledge at project inception is inevitable and uncertainty regarding how to proceed is part of the challenge. This risk is manifested in the statistical variance in the estimate of the time or cost to complete. </p>
<p>A commitment to assuming risk entailed by bringing innovation to the enterprise provides the opportunity to improve ROI.  </p>
<p>Another major difference between the business process of software delivery and other business processes is the diseconomy of scale. Typically, manufacturing and service delivery processes offer economy of scale: The cost of a unit of software grows nonlinearly (i.e., yields cost reduction) with the size and complexity of the system. But this is not the norm in software production.</p></blockquote>
<p>On the other hand, some of the insights that have been discovered as part of IBM effort are trivial. For example, on page 15 they say </p>
<blockquote><p>Many organizations mistakenly try to make one process fit all circumstances. In our experience, the above type of analysis is required to enable you to drive the appropriate change to the right project types. </p></blockquote>
<p>I don&#8217;t know of any organization that doesn&#8217;t believe this. In fact, it sounds condescending. </p>
<p>In essence, MCIF is a practice-based approach to software development processes. An approach they first introduced in the last version of EPF (before it became inactive). One can argue that IBM was a later comer to this also., The concept of practice has been widely utilized in CMMI, Microsoft MSF and EssentialUP.  MCIF is a methodology for top-down selection of practices based on the organization&#8217;s business objectives.</p>
<p>Although I like objective-based software development process definition, MCIF, however, is top-down and non-collaborative. It relies on Rational Method Composer (RMC) tool, which is a single-user desktop application&#8211;requiring a configuration management system for basic maintenance of processes. The white paper, also, falls short in addressing the practical issues of mapping business objectives to different aspects of processes and the mechanics of process tailoring. </p>
<p>Finally, from Per&#8217;s <a href="http://www.youtube.com/watch?v=8NBkZ9qFL1M">video</a>, it is apparent that MCIF is not a tool empowering users, rather it is a service that requires engagement of IBM consulting services.</p>
<p>My recommendation: best source for software development capabilities improvement is CMMI body of work. As I said before, CMMI is the result of two decades worth of work by various subject matter experts, not a single vendor&#8217;s commercial methodology.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=Dcv2PDxQGNo:1_0ZwVkdiSk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/Dcv2PDxQGNo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/14/initial-take-on-ibms-measured-capability-improvement-framework/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/14/initial-take-on-ibms-measured-capability-improvement-framework/</feedburner:origLink></item>
		<item>
		<title>ORM Deep Dive</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/aVNeYnMdalk/</link>
		<comments>http://www.osellus.com/blogs/2009/06/05/orm-deep-dive-2/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 20:51:48 +0000</pubDate>
		<dc:creator>Rakesh Kamath</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[The state of the art]]></category>

		<category><![CDATA[.net]]></category>

		<category><![CDATA[ef]]></category>

		<category><![CDATA[ef4]]></category>

		<category><![CDATA[Entity Framework]]></category>

		<category><![CDATA[LINQ]]></category>

		<category><![CDATA[LINQ to SQL]]></category>

		<category><![CDATA[ORM]]></category>

		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/2009/06/05/orm-deep-dive-2/</guid>
		<description><![CDATA[Our design team has been spending some time the last few weeks at taking another look at our architectural practices and also at standardizing on a core Web application architecture that we can then drop into the heart of any web application and then extend/wrap it based on the needs of the particular web application [...]]]></description>
			<content:encoded><![CDATA[<p>Our design team has been spending some time the last few weeks at taking another look at our architectural practices and also at standardizing on a core Web application architecture that we can then drop into the heart of any web application and then extend/wrap it based on the needs of the particular web application we may be working on.</p>
<p>Performance is one of the key factors in determining best practices and for data intensive applications, the database and data access layer performance in particular can make or break an application’s responsiveness more than any other layer in the application.</p>
<p>As we do a lot of ASP.Net/ .Net development, one of our designers <a href="http://www.osellus.com/blogs/author/sanguanchai/">Sanguanchai</a> who is based in our Bangkok office has been trying to break down the use of LINQ to SQL versus using the Entity Framework 4 (currently in beta 1) across key considerations – not just performance - for use in our core architecture.</p>
<p>You can take a look at his findings in the post he published yesterday - <a href="http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/">LINQ to SQL vs Entity Framework</a>. No doubt there are other architects and developers out there trying to get a handle on the same question and we hope you find this useful.</p>
<p>On a slightly related note, if you are the podcast listening type, <a href="http://www.dotnetrocks.com/">.Net Rocks</a> had Dan Simmons, Dev Manager on the EF4 and LINQ to SQL Team as a guest on the <a href="http://www.dotnetrocks.com/default.aspx?showNum=451">latest show</a>. It’s good listen and you get some background on Microsoft’s decisions – including why EF is at version 4 though it is actually the 2nd release. You also get a view into the decisions behind certain features in EF4 and I personally got a better understanding of how best to leverage certain features of EF4 that were opaque to me thus far.</p>
<p>Again, the direct link to Sanguanchai’s post:</p>
<p><a title="http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/" href="http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/">http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/</a></p>
<p>Enjoy!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=aVNeYnMdalk:RWivrFeSmXo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/aVNeYnMdalk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/05/orm-deep-dive-2/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/05/orm-deep-dive-2/</feedburner:origLink></item>
		<item>
		<title>Interesting Work on Process Authoring Tools</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/pygLqYMq8w8/</link>
		<comments>http://www.osellus.com/blogs/2009/06/05/interesting-work-on-process-authoring-tools/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 17:28:23 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[Process Asset Repository]]></category>

		<category><![CDATA[Process Modeling]]></category>

		<category><![CDATA[Processes & Methodologies]]></category>

		<category><![CDATA[SPEM]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=146</guid>
		<description><![CDATA[A colleague forwarded to me an interesting work by Petter Holmström titled &#8220;Ideas for Next Generation Process Authoring Tools&#8221;.  It&#8217;s a long comprehensive document, and I have just started reading it end-to-end. From a quick scan of the table of contents, abstract and conclusions, I mostly agree with his conclusions and recommendations:  
The tool vendors should shift focus and [...]]]></description>
			<content:encoded><![CDATA[<p>A colleague forwarded to me an interesting work by <a href="http://users.abo.fi/peholmst/">Petter Holmström</a> titled <a href="http://users.abo.fi/peholmst/Thesis.pdf">&#8220;Ideas for Next Generation Process Authoring Tools&#8221;</a>.  It&#8217;s a long comprehensive document, and I have just started reading it end-to-end. From a quick scan of the table of contents, abstract and conclusions, I mostly agree with his conclusions and recommendations:  </p>
<blockquote><p>The tool vendors should shift focus and concentrate on making their tools more collaborative, customizable and scalable to different process sizes. In this thesis, some ideas of how this could be achieved have been presented, of which one of the more interesting ones is a wiki-based authoring tool.</p>
<p> </p></blockquote>
<p>As you may have realized from my previous blog postings, I am a strong proponent of collaborative process management tools and the importance of the involvement of developers and other process consumers in the creation of processes&#8211;they consume. The industry players and the user community should democratize process authoring and move on from blindly following methodology pundits.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=pygLqYMq8w8:h4FPY67A2Oc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/pygLqYMq8w8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/05/interesting-work-on-process-authoring-tools/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/05/interesting-work-on-process-authoring-tools/</feedburner:origLink></item>
		<item>
		<title>LINQ to SQL vs Entity Framework</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/76eRGu_Q09o/</link>
		<comments>http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 10:27:37 +0000</pubDate>
		<dc:creator>Sanguanchai</dc:creator>
		
		<category><![CDATA[Architecture]]></category>

		<category><![CDATA[General]]></category>

		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/?p=118</guid>
		<description><![CDATA[Compare features for LINQ to SQL vs Entity Framework



Feature
LINQ to SQL
Entity Framework


Model
domain model
conceptual data model


Databases Supported
SQL server only
variety of databases


Data Sources
tables only
tables, replication, reporting Services, BI and etc


Complexity
simple to use 
complex to use


Development Time
rapid development
slower development but more capabilities


Mapping
class to single table
class to multiple tables


Inheritance
hard to apply
simple to apply


File Types
dbml file only
after compilation generate edmx [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Compare features for LINQ to SQL vs Entity Framework</strong></p>
<table border="1">
<tbody>
<tr>
<td><strong>Feature</strong></td>
<td><strong>LINQ to SQL</strong></td>
<td><strong>Entity Framework</strong></td>
</tr>
<tr>
<td>Model</td>
<td><span style="color: #ff0000;">domain model</span></td>
<td><span style="color: #000080;">conceptual data model</span></td>
</tr>
<tr>
<td>Databases Supported</td>
<td><span style="color: #ff0000;">SQL server only</span></td>
<td><span style="color: #000080;">variety of databases</span></td>
</tr>
<tr>
<td>Data Sources</td>
<td><span style="color: #ff0000;">tables only</span></td>
<td><span style="color: #000080;">tables, replication, reporting Services, BI and etc</span></td>
</tr>
<tr>
<td>Complexity</td>
<td><span style="color: #000080;">simple to use </span></td>
<td><span style="color: #ff0000;">complex to use</span></td>
</tr>
<tr>
<td>Development Time</td>
<td><span style="color: #000080;">rapid development</span></td>
<td><span style="color: #ff0000;">slower development but more capabilities</span></td>
</tr>
<tr>
<td>Mapping</td>
<td><span style="color: #000080;">class to single table</span></td>
<td>class to multiple tables</td>
</tr>
<tr>
<td>Inheritance</td>
<td><span style="color: #000080;">hard to apply</span></td>
<td>simple to apply</td>
</tr>
<tr>
<td>File Types</td>
<td><span style="color: #000080;">dbml file only</span></td>
<td><span style="color: #ff0000;">after compilation generate edmx file with 3 sections to represent the schema: csdl, msl and ssdl</span></td>
</tr>
<tr>
<td>Create complex properties (e.g. Customer type may have Address property that is an Address type with Street, City, Region, Country and Postal code properties)</td>
<td><span style="color: #ff0000;">Not Support</span></td>
<td><span style="color: #000080;">Support in VS2010 Beta 1 but we can manually modify in .edmx file.</span></td>
</tr>
<tr>
<td>Query</td>
<td><span style="color: #ff0000;">1. LINQ to SQL (for select)</span><span style="color: #ff0000;"><br />
2. Data Context (for update, create, delete, store procedure, view)</span></td>
<td><span style="color: #000080;">1. LINQ to Entities (for select)2. Entity SQL (is a derivative of Transact-SQL, it supports inheritance and associations) </p>
<p>3. Object Services (for update, create, delete, store procedure, view)</p>
<p>4. Entity Client (is an ADO.NET managed provider, it is similar to SQLClient, OracleClient, etc. It provides several components like EntityCommand, EntityTransaction)</p>
<p> </p>
<p></span></td>
</tr>
<tr>
<td>Can synchronize with Database if Database Schema is changed</td>
<td><span style="color: #ff0000;">Not Support</span></td>
<td><span style="color: #000080;">Support</span></td>
</tr>
<tr>
<td>Performance</td>
<td><span style="color: #ff0000;">Very slow for the first query</span></td>
<td><span style="color: #000080;">Very slow for the first query. But overall performance is better than LINQ to SQL (Please see the result in the attach file)</span></td>
</tr>
<tr>
<td>Continue to improve features in the future</td>
<td><span style="color: #ff0000;">No</span></td>
<td><span style="color: #000080;">Yes</span></td>
</tr>
<tr>
<td>Generate database from entity model</td>
<td><span style="color: #ff0000;">Not Support</span></td>
<td><span style="color: #000080;">It will support in VS2010 Beta1.</span></td>
</tr>
</tbody>
</table>
<p><strong>Limitation for Entity Framework in VS2008 SP1</strong></p>
<p>1. It will throw error in runtime if we use Contains statement. For example,<br />
from p in context.Yard_Projects<br />
where p_projectIDs.Contains(p.ProjectID)<br />
select p<br />
2. It will not generate method that map to store procedure that are not return as entity type. (We need to Entity Client to execute store procedure.) For example,<br />
Void DeleteProjects(@CSVProjectIDs)<br />
3. We need to map every column of a table in the storage schema. If some columns are not mapped, it will compile error.<br />
4. If we delete a type from diagram, it’s difficult to put it back. We may manually update in .edmx file or delete old one and generate new model.<br />
5. You don’t get a lot of control over the storage schema at all. What you mostly see is the client schema and the mapping to the storage schema.<br />
6. If you want create methods that are map to store procedure that has the result from multiple tables, we need to manually modify section “SSDL” in the .edmx file.</p>
<p><strong>Performance Test</strong></p>
<p>I tried to test on LINQ to SQL and Entity Framework, I found the overall performance Entity Framework is better than LINQ to SQL. I separated test cases into 2 test groups.<br />
1. Test select/create/update/delete for single table. You can see my test result in the “TestForSingleTable” sheet.<br />
2. Test select/create/update/delete for single table with many associations. You can see my test result in te “TestForManyAssociation” sheet.<br />
You can see the performance report in the link, PerformanceReport</p>
<p><strong>Recommendation</strong></p>
<p>I think we should use Entity Framework than LINQ to SQL because many reasons as follows.<br />
1. It is more flexible to mapping entity model to database. You can map one class to multiple tables, using inheritance.<br />
2. It supports many queries, you can use LINQ to Entities, Entity SQL, Object Services and Entity Client.<br />
3. When the database schema is changed, you can synchronize entity model from latest database.<br />
4. It has better overall performance when compare with LINQ to SQL.<br />
5. It will be improved many features in the VS2010. You will create complex data type, generate database from entity model.<br />
6. It supports many database vender other than SQL Server.</p>
<p>But disadvantage of using Entity Framework may be complexity and development time.</p>
<p>Refer to my performance report, if we use Entity Framework to implement in the data layer, we should use the following patterns.testperformancelinqtosql_entityframework<br />
1. Use LINQ to Entity for simple queries.<br />
2. Use Entity Client or Object to execute Store Procedure for complex queries (many joins, groups) or queries that perform delete many entities with contains many associations.<br />
3. Use Object Service to insert, update, delete single/multiple entities.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=76eRGu_Q09o:y_yQqJ9Qv5U:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/76eRGu_Q09o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/06/04/linq-to-sql-vs-entity-framework/</feedburner:origLink></item>
		<item>
		<title>Degree of Repeatability in Business Processes and Software Development Processes</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/irvhOIRzEK8/</link>
		<comments>http://www.osellus.com/blogs/2009/05/16/repeatability-business-processes-vs-software-development-processes/#comments</comments>
		<pubDate>Sat, 16 May 2009 23:39:09 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/2009/05/16/repeatability-business-processes-vs-software-development-processes/</guid>
		<description><![CDATA[Ideally the execution of business processes should have a machine-like predictability and repeatability.  In contrast, Software development processes&#8211;and to a certain extend IT processes&#8211;are inherently knowledge based (performed by knowledge workers with specialized expertise), and although a certain level of repeatability is desired, are not mechanically repeatable.  
]]></description>
			<content:encoded><![CDATA[<p>Ideally the execution of business processes should have a machine-like predictability and repeatability.  In contrast, Software development processes&#8211;and to a certain extend IT processes&#8211;are inherently knowledge based (performed by knowledge workers with specialized expertise), and although a certain level of repeatability is desired, are not mechanically repeatable.  </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=irvhOIRzEK8:2yYPWiIOhhg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/irvhOIRzEK8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/05/16/repeatability-business-processes-vs-software-development-processes/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/05/16/repeatability-business-processes-vs-software-development-processes/</feedburner:origLink></item>
		<item>
		<title>Software: the Main Differantiator for the Car of the Future</title>
		<link>http://feedproxy.google.com/~r/OsellusBlogs/~3/IkOtiHAuEBM/</link>
		<comments>http://www.osellus.com/blogs/2009/05/12/software-the-main-differantiator-of-the-car-of-the-future/#comments</comments>
		<pubDate>Tue, 12 May 2009 06:28:50 +0000</pubDate>
		<dc:creator>Payman Hodaie</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[The state of the art]]></category>

		<guid isPermaLink="false">http://www.osellus.com/blogs/2009/05/12/software-the-main-differantiator-of-the-car-of-the-future/</guid>
		<description><![CDATA[I was reading a very interesting Reuters article about Honda&#8217;s new entry into the hybrid car market. It talks about how Honda has differentiated itself from Toyota (the previous market leader in this area) by incorporating an innovative software in its new hybrid model: Insight.
But pressure to innovate in the hybrid market won’t necessarily be [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading a very interesting Reuters <a href="http://www.reuters.com/article/earthToTech/idUS109758141420090511">article</a> about Honda&#8217;s new entry into the hybrid car market. It talks about how Honda has differentiated itself from Toyota (the previous market leader in this area) by incorporating an innovative software in its new hybrid model: Insight.</p>
<blockquote><p>But pressure to innovate in the hybrid market won’t necessarily be all about the hardware. If hybrids and other cars embedded with electronic controls and more advanced computing power make their way into the mass market, opportunities could also arise for software. The Insight, for example, includes an “Eco-Assist” display on the dashboard that takes a cue from video games to help educate and encourage drivers to accelerate and decelerate for maximum fuel efficiency. As Wagner James Au explained in an Earth2Tech post about the feature earlier this year, “Like a role-playing game, the driver’s behavior is also tallied over time, and displayed symbolically — here, in the form of an ivy-ringed trophy achievement that a driver can gradually unlock with green-friendly driving. It’s sort of like Wii Fit, but for cars.” Depending on how much Honda decides to open that data, it could provide fodder for game developers, application platform providers and other industrious web entrepreneurs.</p></blockquote>
<p>Software as a critical competitive advantage has already been a proven fact in the cell phone industry. Now it&#8217;s the auto industry&#8217;s turn. As software developers, we live in exciting times.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/OsellusBlogs?a=IkOtiHAuEBM:6zkGIODy-HY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/OsellusBlogs?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/OsellusBlogs/~4/IkOtiHAuEBM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.osellus.com/blogs/2009/05/12/software-the-main-differantiator-of-the-car-of-the-future/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.osellus.com/blogs/2009/05/12/software-the-main-differantiator-of-the-car-of-the-future/</feedburner:origLink></item>
	</channel>
</rss>
