<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-789069160502741520</id><updated>2011-11-07T00:20:24.694-08:00</updated><title type='text'>MyOpenDraft</title><subtitle type='html'>Experiencing Agility, from the knowledge worker to the knowledge economy.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>64</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-8867538752612727564</id><published>2011-11-07T00:20:00.000-08:00</published><updated>2011-11-07T00:20:24.953-08:00</updated><title type='text'>The challenges for Informatics in developing software for modern multikernel computers</title><content type='html'>&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;Abstract&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The purpose of this post is to examine the introduction of &lt;strong&gt;parallel computing and the challenges of software development&lt;/strong&gt; for Parallel execution environment. First I will introduce the idea of parallel computing and up next I will present and evaluate the challenges of parallel computing along with their solutions and finally some conclusion will be drawn.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #990000;"&gt;&lt;strong&gt;Vertical &amp;amp; Horizontal Development in Computing&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The question arise when we are thinking about how the &lt;strong&gt;complex scientific problems&lt;/strong&gt; of the twenty-first century including climate modeling, genomic research and artificial intelligence are testing the limits of the Von Neumann model of sequential processing.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;In the past, computer scientists worked on the new approach to extend the &lt;strong&gt;power of computers in vertical manner&lt;/strong&gt;, this means that they were working on producing huge super computers but with recent advances in technology and reducing cost of resources and arrival of multi kernel processing has helped us to think about new ways to solve huge and complex problem in parallel manners.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;Introduction to parallel computing&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;For the most part, along with a host of new research questions that have arisen in the last decade, there remains a significant challenge today. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;Parallel processing&lt;/strong&gt; offers the promise of providing the computational speed required to solve important large-scale problems. In fact, parallel processing requires a big shift in how we think to solve the problem.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Regardless of new hardware technologies, we should think about the new approach of developing software systems and also the way we think about our problem and presenting our solution. (Design and Analysis of Computer Algorithms).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #990000;"&gt;&lt;strong&gt;Challenges of parallel computing&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;For the sake of applying the power and flexibility of multi-core processors, we should think about a new approach to &lt;strong&gt;breakdown huge problems&lt;/strong&gt; into smaller elements. A better illustration of parallel processing occurs when a divide and conquer model is used to solve a task. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;In this approach the problem is successively partitioned into smaller and smaller parts and sent off to other processors, until each one has only a trivial job to perform. Each processor then completes that trivial operation and returns its result to the processor that sent the task. These processors in turn do a little work and give the results &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;back to the processors that gave them the tasks, and so on, all the way back to the originating processor. In this model there is far more communications between processors.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;In the next step&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;, we should think about how to express our program which can be executable in a parallel computing environment. Functional Programming plays a vital role in this area, since it provide programmer to solve their issue in functional manner rather than sequential processing. There are simple principles in functional programming such as avoiding Mutable states, Lambdas, Closures and more importantly declarative paradigm which help programmers to free their mind about concurrency, synchronization, Race Condition and other multi core computation issues.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Although parallel &lt;strong&gt;functional programming&lt;/strong&gt; helps us to represent our program in declarative manner in order to be applicable for parallel execution, but the problem is remain unsolved without thinking about how we can manage data in parallel computing environment.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="color: #990000;"&gt;Industrial Revolution of Data – Age of Big Data&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;We’re now entering into new age of computing named as “Industrial Revolution of Data”. In fact, the majority of data will be produced automatically by different kinds of machine such as software logs, video cameras, RFID, wireless sensors and so on. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;Due to the considerable decrease in cost of computer resources, storing those data is so cheap, so companies tend to collect and store them in huge data warehouse for future when it can be mined for valuable information. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The &lt;strong&gt;Big Data now comes to play&lt;/strong&gt;, working with such distributed, huge and complex data would be impossible or better to say inefficient with existing software and databases system.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;We should think about other approaches for storing large set of data which is stored in different computers and in the next step effectively mining and executing queries from those sources. Perhaps the biggest game-changer to come along is &lt;strong&gt;MapReduce&lt;/strong&gt;, the parallel programming framework that has gained prominence thanks to its use at web search companies.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;The research in parallel computing has had the most success and influence in parallel databases. In fact, instead of breaking out a large problem into smaller element execute by different threads simultaneously, parallel database help us to store, querying and retrieve data from distributed resources over network effectively.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #990000;"&gt;&lt;strong&gt;MapReduce as Parallel Programming Framework&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;MapReduce&lt;/strong&gt; algorithm is invented by Google to cope with Big Data in their search engine system. In fact, MapReduce is containing two simple primitives function which are available in Lisp and also in other functional languages. The computation include two basic operation, a map operation which execute on input records containing key/value pairs, and then invoking a reduce operation which collect and aggregate all responses from different nodes.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;There are many different Implementations in different programming languages which are exist and used in industry for processing large set of data. In fact, most of &lt;strong&gt;NoSQL databases&lt;/strong&gt; use this algorithm for collecting data from different sources in distributed heterogeneous environment. The biggest advantage of MapReduce is that it allows for distributed processing of map and reduction function. In fact, it allows us, to collect and process distributed data stored in different machine simultaneously.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #990000;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;Parallel computing&lt;/strong&gt; can help us to solve hug complex problem in more efficient way. In order to parallelize our task we should think about different challenges which we cope in developing software for parallel execution environment.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: x-small;"&gt;However, we should bear in mind that parallel computing is useful when we are facing with a big problem which can distributed among different computing agents. In addition, we should deeply think about the &lt;strong&gt;nature of problem&lt;/strong&gt;, &lt;strong&gt;time&lt;/strong&gt; as well as &lt;strong&gt;limits&lt;/strong&gt; and &lt;strong&gt;costs&lt;/strong&gt; of Parallel Programming.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-8867538752612727564?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/8867538752612727564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2011/11/challenges-for-informatics-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8867538752612727564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8867538752612727564'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2011/11/challenges-for-informatics-in.html' title='The challenges for Informatics in developing software for modern multikernel computers'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-5544242797132024617</id><published>2011-02-27T08:24:00.000-08:00</published><updated>2011-03-18T02:25:59.398-07:00</updated><title type='text'>The Management 3.0 - Leading Agile Developers, Developing Agile Leaders</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.management30.com/storage/post-images/cover%20from%20Amazon.jpg?__SQUARESPACE_CACHEVERSION=1291587456851" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://www.management30.com/storage/post-images/cover%20from%20Amazon.jpg?__SQUARESPACE_CACHEVERSION=1291587456851" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;b&gt;For people who get the message, this book may prove to be as valuable as Darwin’s book On the Origin of Species.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;a href="http://www.management30.com/introduction/"&gt;&lt;span style="color: #990000;"&gt;This book&lt;/span&gt;&lt;/a&gt; introduce and evaluate different management theories and it will teach you how to use them in your agile environment. In fact, it is really a scientific book and recommended for everyone who wants to know more about agile philosophy from the scientific perspective.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://www.management30.com/introduction/"&gt;&lt;span style="color: #990000;"&gt;This book&lt;/span&gt;&lt;/a&gt; will discuss about &lt;a href="http://en.wikipedia.org/wiki/Systems_theory"&gt;&lt;span style="color: #990000;"&gt;General System theory&lt;/span&gt;&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Game_theory"&gt;&lt;span style="color: #990000;"&gt;Game&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Chaos_theory"&gt;&lt;span style="color: #990000;"&gt;Chaos theory&lt;/span&gt;&lt;/a&gt; as well as &lt;a href="http://en.wikipedia.org/wiki/Evolution"&gt;&lt;span style="color: #990000;"&gt;Evolution theory&lt;/span&gt;&lt;/a&gt;. In this book, &lt;a href="http://www.management30.com/about-the-author/"&gt;&lt;span style="color: #990000;"&gt;Jurgen&lt;/span&gt;&lt;/a&gt; does a great job of explaining the science behind complexity and how Agile management methods have arisen from the need to manage in complex, dynamic, and unpredictable circumstances&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-5544242797132024617?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/5544242797132024617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2011/02/management-30-leading-agile-developers.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5544242797132024617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5544242797132024617'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2011/02/management-30-leading-agile-developers.html' title='The Management 3.0 - Leading Agile Developers, Developing Agile Leaders'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1513706577042784402</id><published>2010-12-19T07:04:00.000-08:00</published><updated>2011-01-17T00:02:11.858-08:00</updated><title type='text'>Six Thinking Hats</title><content type='html'>&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;While facing with a number of choices, we may find it hard to make a decision, or may always approach problems in the same way. Emotional people, for example, may not consider decisions calmly and rationally. Many successful people think from a very rational, positive viewpoint, and this is one reason for their success. Often, though, they fail to look at a problem from an emotional, intuitive, creative or negative viewpoint. By always using a positive approach, they may underestimate possible difficulties - such as resistance to their plans and be under prepared for dealing with further problems.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;'Six Thinking Hats' is a valuable technique for increasing the effectiveness of decision making.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; Created by Edward de Bono, it makes you consider the decision from a number of perspectives, forcing you to add different ways of thinking to your usual approach. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;This gives you a fuller view of a situation. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;As a result, your decision and plan will be ambitious, creative and sensitive to the needs of others. They will be carried out effectively, and you will be prepared for the unexpected. You can use Six Thinking Hats with other people or on your own. With others, it has benefit of blocking the confrontations that happen when people with different thinking styles discuss the same problem.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Each 'Thinking Hat' is a different style of thinking.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; With the &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;White Thinking Hat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; you focus on the data available. Look at the information you have, and see what you can learn from it. Look for gaps in your knowledge, and either try to fill them or take account of them. This is where you analyze past trends, and try to work out from historical data what might happen in the future. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Wearing the Red Hat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;, you look at problems using intuition, instantaneous reactions, and emotion. Also try to think how other people will react emotionally. Try to understand the responses of people who do not fully know your reasoning.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Using &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Black Hat thinking&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;, look at all the bad points of the decision. Look at it cautiously and defensively. Try to see why it might not work. This is important because it highlights the weak points in a plan. it allows you to eliminate them, alter them, or prepare contingency plans to deal with problems that might arise. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Black Hat thinking helps to make your plans tougher and better able to survive difficulties. It can also help you to spot fatal flaws and risks before you start on a course of action.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The Yellow Hat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; encourages you to think positively. It is the optimistic viewpoint that helps you to see all the benefits of the decision and the value in it. Yellow Hat thinking helps you to keep going when everything looks gloomy and difficult. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The Green Hat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; stands for creativity. This is where you can develop creative solutions to a problem. It is an unstructured way of thinking, in which there is little criticism of ideas. A whole range of creativity tools can help you here.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt;The Blue Hat&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;span style="font-size: small;"&gt; stands for process control. This is the hat worm by people chairing meetings. When running into difficulties because ideas are running dry, they may direct activity into Green Hat thinking. When contingency plans are  needed, they will ask for Black Hat thinking, and so on.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1513706577042784402?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1513706577042784402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/12/six-thinking-hats.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1513706577042784402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1513706577042784402'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/12/six-thinking-hats.html' title='Six Thinking Hats'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-628855073495001848</id><published>2010-10-12T14:17:00.000-07:00</published><updated>2010-10-12T14:31:02.733-07:00</updated><title type='text'>Packt GlassFish Security book contest</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.packtpub.com/sites/default/files/imagecache/productview/9386_MockupCover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://www.packtpub.com/sites/default/files/imagecache/productview/9386_MockupCover.jpg" /&gt;&lt;/a&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;About two weeks ago, I just participate in &lt;a href="http://kalali.me/gsbclw/"&gt;contest&lt;/a&gt; for winning &lt;a href="https://www.packtpub.com/glassfish-security-with-java-ee/book"&gt;Packt GlassFish Security book&lt;/a&gt; by &lt;a href="http://kalali.me/"&gt;Masoud Kalali&lt;/a&gt;, and the great news is that today I received an email which is mentioned that I'm one of the lucky winner of this contest.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;I'm really happy and lucky for winning this prize and I would like to thank Masoud and Packt for this reward.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;If you are interested about this book you can &lt;a href="https://www.packtpub.com/sites/default/files/9386-chapter-3-dsigning-and-developing%20%20.pdf"&gt;download free chapter&lt;/a&gt; "Designing and Developing Secure Java EE Applications" from Packt website. &lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;This book cover most important aspect of security in J2EE Application with &lt;a href="https://glassfish.dev.java.net/"&gt;GlassFish&lt;/a&gt; and additionally it will teach you how you can secure your Enterprise Application by using  &lt;a href="http://www.opends.org/"&gt;OpenDS&lt;/a&gt; and &lt;a href="https://opensso.dev.java.net/"&gt;OpenSSO&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;If you want to develop secure enterprise application with GlassFish, I would recommend to take look at this book. I'm sure that it will be helpful.&lt;/span&gt;&lt;br /&gt;&lt;div align="left" class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.packtpub.com/sites/default/files/imagecache/productview/9386_MockupCover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-628855073495001848?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/628855073495001848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/10/packt-glassfish-security-book.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/628855073495001848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/628855073495001848'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/10/packt-glassfish-security-book.html' title='Packt GlassFish Security book contest'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2629089440951973026</id><published>2010-09-27T09:29:00.000-07:00</published><updated>2010-09-28T04:14:59.938-07:00</updated><title type='text'>Best Practices for building Large Scale Agile teams</title><content type='html'>&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;Building large teams, either traditional or agile, requires careful design. Bigger teams involve &lt;b&gt;more communication, more decisions, more meetings, more documents, and, of course, more politics.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Agile principles of collaboration, simplicity, responsiveness, and minimally sufficient documentation can be applied to building larger teams but the application is far from simple. Building effective, efficient large agile teams takes a concerted effort in the &lt;b&gt;four areas&lt;/b&gt; mentioned earlier: &lt;b&gt;organizational design, decision-making design, collaboration/coordination design, and applying agile principles.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Although collaboration, coordination, and knowledge sharing are critical to large projects, the downside of too much communications can be endless meetings and wading through tons of documentation and emails. Too little or poor communications, however, means no one understands the project nor their part in it. So whether we are doing organizational design or collaboration/coordination design, &lt;b&gt;agile teams always balance on the side of "just a little bit less than just enough."&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Organizational Design&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;In general, as projects escalate from large to very large the number of specialty teams will increase and a few members of the specialty teams will be full-time members. &lt;br /&gt;&lt;br /&gt;In addition, as size increases, feature teams will be organized into a structure, product area team, capability team, feature team based on the product's component architecture. &lt;br /&gt;&lt;br /&gt;Whereas in a traditional large-team hierarchy the teams might be functional (requirements analysts, developers, testers), large agile teams maintain their &lt;b&gt;cross-functional and product orientation&lt;/b&gt;. Where very close coordination is required between feature teams (or between certain feature and specialty teams) &lt;b&gt;cross-linking&lt;/b&gt; should be used in which one person from each team sits in on key meetings of the other.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Another design criteria is that a large agile team maintain the flattest structure possible (more nodes, less hierarchy).&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;This organizational structure focuses on the collaboration and coordination between autonomous but linked groups&lt;/b&gt;. As the team size increases to encompass several feature and specialty teams, there is a critical combination of team self-organization and self-discipline required. Individuals have responsibilities within a team structure, and teams have responsibilities within an overall project structure.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;This network structure isn't a hierarchically controlled one, but neither is it a pure network structure in which all control is delegated to the nodes&lt;/b&gt;. The structure might be labeled a "modified network" structure in which a significant amount (but not all) of the power and &lt;b&gt;decision making are distributed to the feature teams&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Collaboration/Coordination Design&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;In Agile Software Development, Alistair Cockburn discusses various communications modalities and indicates each one's relative effectiveness. &lt;br /&gt;&lt;br /&gt;For example, a two-way face-to-face discussion at a white board is more effective than sending a document to someone. However, for large and especially distributed teams, the enemy of effectiveness remains cost. Although it may be very effective to have a face-to-face design discussion at a white board, the cost of doing it when the individuals are located 5,000 miles apart may be prohibitive, although new Web 2.0 collaboration and project management tools are continually reducing these costs.&lt;br /&gt;&lt;br /&gt;So the real question is not just effectiveness, but cost-effectiveness for the particular job at hand. &lt;b&gt;What makes communications design so difficult is that it rests on a foundation of relationships of trust, respect, appreciated cultural differences, and shared context.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A team that is "in sync" can get away with lower effectiveness communications modalities because they have a good relationship context for sharing information. Another team distributed across countries in which there is little respect, trust, or multi-cultural understanding will need higher effectiveness communications modalities.&lt;br /&gt;&lt;br /&gt;This also means that the collaboration/coordination design will probably change as projects progress and relationships become better established. Communication modalities that might not work early in a project may work fine toward the middle and end.&lt;br /&gt;&lt;br /&gt;Two factors in designing collaboration/communications practices and tools for a team are relative effectiveness of the modalities and the foundation of &lt;b&gt;trust, respect, and understanding of different cultural norms&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Decision-Making Design&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;How is a large agile team different from a large traditional team from an organizational perspective?&lt;br /&gt;&lt;br /&gt;• First, a large agile team has a &lt;b&gt;flatter, less hierarchical&lt;/b&gt; structure fewer layers of managers.&lt;br /&gt;• Second, to the greatest extent possible, &lt;b&gt;decisions are pushed out to the feature teams &lt;/b&gt;or specialty teams.&lt;br /&gt;• Third, feature team members participate in specialty teams to ensure their input is heard and to take part in the decisions.&lt;br /&gt;• Fourth, team decision making, whether project or technical decisions are being made, are accomplished in a participatory fashion.&lt;br /&gt;• Fifth, specialty teams are encouraged to issue guidelines, not fiats, and furthermore (like managers) they are encouraged to make as few decisions as possible.&lt;br /&gt;• Sixth, &lt;b&gt;peer-to-peer (feature team to feature team) interactions&lt;/b&gt; and dependency management are encouraged.&lt;br /&gt;• Seventh, the team embraces agile principles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Knowledge Sharing and Documentation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Documentation and knowledge sharing are two important issues in scaling agile projects. A 6-person team needs different documentation practices than a 100-person team does.&lt;br /&gt;&lt;br /&gt;The Agile Manifesto states, "Working products over comprehensive documentation." Large, front-loaded projects that spend months, and even years, gathering requirements, proposing architectures, and designing products are prone to massive failures. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Documents support communication and collaboration, enhance knowledge transfer, preserve historical information, assist ongoing product enhancement, and fulfill regulatory and legal requirements. They are not unimportant, just less important than working versions of the product.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Understanding comes from a combination of documentation and interaction, or conversation, the conversations among people who have domain knowledge. Furthermore, as the complexity of the knowledge to be transferred increases, the ability of documentation alone to convey that knowledge decreases and the need for interaction with knowledgeable people increases dramatically. Documentation provides content (partially), but conversations are necessary to provide the necessary context.&lt;br /&gt;&lt;br /&gt;A little research into the field of knowledge management shows that early efforts to document best practices (software development, engineering, or otherwise)—filling reams and reams of web pages with details—has generated marginal benefit. In thinking about knowledge transfer, one must distinguish between transferring explicit knowledge (written down) and tacit knowledge (in someone's head). "&lt;br /&gt;&lt;br /&gt;Tacit knowledge cannot be transferred by getting it out of people's heads and onto paper," writes Nancy Dixon in her book Common Knowledge "Tacit knowledge can be transferred by moving the people who have the knowledge around. The reason is that tacit knowledge is not only the facts but the relationships among the facts—that is, how people might combine certain facts to deal with a specific situation."&lt;br /&gt;&lt;br /&gt;In summary, &lt;b&gt;documentation should be designed in a lean, barely sufficient manner, both formal (for retention) and informal (temporary), highly visual and visible, viewed as support for collaboration and coordination, and vary considerably by project size and type (regulated environments for example). Ultimately the issue isn't documentation but understanding.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Self-Organizing Teams of Teams&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;An agile team consists of individuals who interact within a structure of self-organized and self-disciplined rules of engagement. Individuals have a degree of autonomy within this loose structure, and they, in turn, exercise self-discipline to be accountable for results and behave as responsible and thoughtful members of the team.&lt;br /&gt;&lt;br /&gt;Larger agile teams, those consisting of multiple feature and specialty teams, operate the same way, individuals are the agents in teams, whereas feature teams are the agents in a larger project. &lt;br /&gt;&lt;br /&gt;In building large agile teams, a network replaces the common hierarchical structure, decision making and collaboration must be carefully designed, and discipline reflects rules of engagement across teams.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Team Self-Discipline&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Just as individuals have responsibilities to their teams, teams themselves have to be self-disciplined to work within a larger self-organizing framework. &lt;br /&gt;&lt;br /&gt;The behaviors required of teams closely parallel those for individuals:&lt;br /&gt;• Accept accountability for project results.&lt;br /&gt;• Engage collaboratively with other feature teams.&lt;br /&gt;• Work within the project self-organizing framework.&lt;br /&gt;• Balance project goals and team goals.&lt;br /&gt;&lt;br /&gt;A team that is unwilling to work within the established framework disrupts the work of the larger project in the same way that individuals who are unwilling to work within the team framework do.&lt;br /&gt;&lt;br /&gt;Teams have to align their own goals with those of the project. There will always be too much to do and too little time, and the tendency will be to work on one's team goals rather than on project goals.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Process Discipline&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;We all know the saying "Don't fix things that aren't broken." For larger teams, we need to give this advice a twist: "Don't always fix things that are broken." Although smaller teams are not immune to excessive process, this tendency becomes more prevalent as teams get bigger.&lt;br /&gt;&lt;br /&gt;Just as agile teams don't try to anticipate future requirements or design, choosing instead to let them emerge over time, they shouldn't attempt to anticipate every problem and put processes or practices in place to prevent them. It's often cheaper and faster to fix an actual failure than to spend excessive time anticipating failures that may never occur.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;references:&lt;br /&gt;- Cockburn, Alistair. Agile Software Development. Boston: Addison-Wesley, 2006.&lt;br /&gt;- Highsmith, Jim. Agile Software Development Ecosystems. Boston: Addison-Wesley, 2002.&lt;br /&gt;&amp;nbsp;- Rueping, Andreas. Agile Documentation: A Pattern Guide to Producing Lightweight Documents for Software Projects. New York: John Wiley &amp;amp; Sons, 2003.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;-Dixon, Nancy. &lt;span class="docEmphasis"&gt;Common Knowledge&lt;/span&gt;. Boston: Harvard  Business School Press, 2000.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2629089440951973026?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2629089440951973026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/09/best-practices-for-building-large-scale.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2629089440951973026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2629089440951973026'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/09/best-practices-for-building-large-scale.html' title='Best Practices for building Large Scale Agile teams'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-4206251190147523769</id><published>2010-09-26T12:52:00.000-07:00</published><updated>2010-09-26T12:52:33.898-07:00</updated><title type='text'>Role of UML in Agile &amp; Evolutionary Architecture</title><content type='html'>&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;The &lt;span style="color: #990000;"&gt;&lt;strong&gt;Unified Modeling Language (UML)&lt;/strong&gt;&lt;/span&gt; is a drawing notation standard, not a methodology. In terms of the standard methodology framework (roles, techniques, standards, milestones, etc.), it is one of the standards for one or two of the roles. &lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;It is a &lt;strong&gt;component of a methodology&lt;/strong&gt;, but not likely to be a very large factor in the project's outcome.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;The UML standard does not make prescriptions or even recommendations about when, where, and how much you draw. &lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;With respect to the standard, you can draw out the entire design before starting to program, or you can "&lt;strong&gt;think a little, draw a little, code a little&lt;/strong&gt;," a strategy long recommended by object technology experts and supported by Scott Ambler's (2002) book, Agile Modeling.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;Discussion of drawing models quickly gets caught up in discussion of architecture and how much design to do when. You will not be surprised to learn that my view is that different people have different preferences and like to think about designs for different amounts of time before starting to program.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;Having said that, it is also my view that a design is a "theory," which desperately needs a matching "experiment" to validate it, or, more importantly, reveal its weaknesses. Usually, &lt;strong&gt;the design doesn't survive its first encounter with real code. This means that the sooner the design gets tested in implementation, the sooner the designer learns where and how it needs improvement.&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;Some people have a very short thinking time horizon before they desperately feel the need for an experiment: on the order of five or ten minutes. Others have a medium time horizon, on the order of several hours or a day or two, during which they mentally explore all the pitfalls, weaknesses, and potential change requests they may have to adapt to. Others have quite long thinking time horizons, on the order of a week or two, during which they do the same. &lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;My experience is that when designers &lt;strong&gt;spend more than a few weeks working out a (software) design, they usually have passed the optimal trade-off point&lt;/strong&gt;, where it would have been useful to create an experiment with real code to get some real feedback.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt; &lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;Taking all those together, I feel that most architects take too long before they make their first experiment, but it is not necessary to adopt the view that design can be replaced just by refactoring and attention to XP's "once and only once" rule.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;The subjects of UML, drawings, tools, architectural design, and thinking time horizons tend to get confused all together. If you can pull them apart, it frees you up to work in new combinations.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;It is, for example, not the case that all drawings are UML drawings nor must architectures be described in UML, or even in drawings, nor must fancy software tools be used to capture either drawings or UML , nor does spending time thinking mean sitting at a tool. Finally, and especially, nor is it the case that sitting in front of a UML drawing tool means that any architectural thinking is going on.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;strong&gt;The approach typical on a Agile project is to use the Walking Skeleton and Incremental Re-architecture strategies&lt;/strong&gt;. An &lt;strong&gt;early architecture is sketched, programmed and tested in the first iteration, and completed, extended and evolved over subsequent iterations&lt;/strong&gt;. UML might or might not be used to think through it and document the result.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;References:&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;-  Beck, K. , Extreme Programming Explained: Embrace Change, Addison-Wesley.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;-Ambler, S. , Agile Modeling: Effective Practices for Extreme Programming and the Unified Process, John Wiley &amp;amp; Sons.&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;, sans-serif;"&gt;-Cockburn, A. , Agile Software Development, Addison-Wesley.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-4206251190147523769?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/4206251190147523769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/09/role-of-uml-in-agile-evolutionary.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4206251190147523769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4206251190147523769'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/09/role-of-uml-in-agile-evolutionary.html' title='Role of UML in Agile &amp; Evolutionary Architecture'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1767038550736484819</id><published>2010-07-14T03:48:00.000-07:00</published><updated>2010-07-14T03:48:20.203-07:00</updated><title type='text'>Best Practices of Agile Distributed Teams</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;It is always more &lt;b&gt;challenging to manage distributed teams&lt;/b&gt;. Regardless of development methodology, distributed teams will be less productive than co-located teams. &lt;b&gt;Alignment and communication are harder&lt;/b&gt; because distance, time zones, language, and culture prevent a lot of the informal communication flows that occur when team members are located together.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;If you are embarking on significant new product development, think long and hard about whether you want to have a distributed team. If being distributed is a constraint that you must accommodate, Agile will give you better visibility so you can correct product issues more quickly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;b&gt;Best practices for distributed teams&lt;/b&gt;:&lt;/div&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;Each site conducts a &lt;b&gt;local standup&lt;/b&gt; in their morning to address immediate issues.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;All teams join a &lt;b&gt;daily teleconference standup&lt;/b&gt;, ideally scheduled at a common work time for all. A video-conference standup is better.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;Each location has a&lt;b&gt; Scrum Master Proxy and a Product Owner Proxy&lt;/b&gt;. The proxies synch with their counterparts regularly and learn to guide their local teams and keep them productive.&lt;/li&gt;&lt;/ul&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;Team members visit other sites to &lt;b&gt;deepen relationships and information exchange&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Technology can play a role in mitigating some of the challenges of distance. VOIP and webcams can go along way to overcoming cultural awkwardness and maintaining a co-located feel. It is worth the extra effort to get these technologies working. Distributed teams also need to implement a collaboration tool to function as a virtual task board.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Examples include wikis at the low end and more specialized products like Rally Software, VersionOne, Xplanner.org, and Atlassian Jira with the GreenHopper plugin. There are many other tools, and you should be able to find a solution that fits your needs and budget. As an aside, if you have only one remote team member, the Scrum Master can usually support that person and the team can still even use a physical task board.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1767038550736484819?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1767038550736484819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/07/best-practices-of-agile-distributed.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1767038550736484819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1767038550736484819'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/07/best-practices-of-agile-distributed.html' title='Best Practices of Agile Distributed Teams'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6462854221072553459</id><published>2010-07-11T04:54:00.000-07:00</published><updated>2010-07-11T04:54:07.583-07:00</updated><title type='text'>All About User Stories</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;b&gt;user story&lt;/b&gt; covers three points:&lt;br /&gt;• The user's role&lt;br /&gt;• The goal the user is trying to achieve&lt;br /&gt;• Why the user wants to achieve it&lt;br /&gt;&lt;br /&gt;It takes the following &lt;b&gt;form&lt;/b&gt;:&lt;br /&gt;As a &lt;user type=""&gt; I want to &lt;do something=""&gt; so that I can &lt;derive a="" benefit=""&gt;.&lt;br /&gt;&lt;br /&gt;As an example:&lt;br /&gt;As a customer, I want to be able to compare two products so that I can easily understand the differences in feature and price.&lt;br /&gt;&lt;br /&gt;User stories are an effective way to communicate requirements that tie into personas by specifying a role, and to express the desired capability and the justification for adding the capability. The story provides the context for the product designers and engineers to develop creative solutions to meet th user's need.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;INVEST&lt;/b&gt;&lt;br /&gt;Bill Wake in Extreme Programming Explored (2001) introduces &lt;b&gt;six attributes of a good story&lt;/b&gt; that can easily be remembered with the acronym INVEST.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Independent&lt;/b&gt;—Avoid dependencies between stories. Each story should stand alone so they can be re-prioritized in the Product Backlog at any time and not impact either the order or any other stories. You also want to keep the stories granular, so the highest priority elements of a feature get implemented first. This is also described as separating the feature from the embellishments.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Negotiable&lt;/b&gt;—Stories are a starting point for a conversation with development. They are not a command. Many product managers have learned that the proper way to write requirements is to use the word "shall" to indicate unambiguously that the product must perform the described function. &lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Valuable&lt;/b&gt;—Always demonstrate why the story is worth implementing. If you are struggling to identify why the story is valuable, go back and spend more time investigating the story with your customers. You may have missed an important aspect of the story, or the story may not be worth the development effort and ongoing maintenance.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Estimable&lt;/b&gt;—The story should be small enough and contain enough detail that the development team can estimate the effort. Epics should still be used as placeholders in the Product Backlog to capture important ideas and signal intent. But as the epic moves towards the top of the backlog, it will need to be split into stories so the team can estimate the work.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Small&lt;/b&gt;—A story should represent between a half-day and two weeks of work and should definitely be small enough to fit into an iteration.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Testable&lt;/b&gt;—Acceptance criteria for the story should be able to be tested to ensure the user's need has been met.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;Acceptance Testing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Acceptance tests are written on the back of the user story card. The tests are used to let the developer know when the requirement has been met and to confirm that the product works from the user's perspective. &lt;br /&gt;&lt;br /&gt;A story is not complete and cannot be assigned to an iteration without acceptance criteria. Acceptance testing is the responsibility of the whole team. As such,acceptance tests can be added at anytime by any team member. The product manager, however, should look to facilitate this process by sitting down with engineering and QA to brainstorm the acceptance criteria. &lt;br /&gt;&lt;br /&gt;Acceptance tests capture many of the functional elements and boundary cases of the feature. By communicating functionality via tests, it makes it easy to for the engineer to know when development on the feature is done and for QA to validate that the feature works. &lt;br /&gt;&lt;br /&gt;You may also hear these tests referred to as "&lt;b&gt;satisfaction criteria&lt;/b&gt;" This refers to the high-level test cases that the feature should fulfill prior to the product manager, developer, and QA person brainstorming the full set of acceptance tests and boundary cases.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Acceptance testing is not a bug hunt&lt;/b&gt; in the traditional sense. The unit testing is in place to prevent bugs from accumulating in the code in the first place. &lt;b&gt;Acceptance testing really focuses on whether the requirement was met&lt;/b&gt;. Other forms of testing such as stress or nonsensical input testing may also be warranted and would be conducted as an additional step.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;Non-Functional Requirements&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;User stories are best suited for functional requirements. Non-functional requirements typically seem forced when put into the user story format. A story&lt;br /&gt;to communicate that the product should run in multiple browsers would be written:&lt;br /&gt;&lt;br /&gt;As a customer, I'd like to be able to use the browser of my choice so I don't have to download a new browser.&lt;br /&gt;&lt;br /&gt;It would just be clearer to write what is intended:&lt;br /&gt;The application shall run on Internet Explorer 7.x and higher, Firefox 3.x and higher, and Safari 4.x and higher.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Constraints and performance measurements&lt;/b&gt; can also be particularly challenging, because to be accepted they have to wait until the end of not just the iteration, but of the full release. In the example of multi-browser compatibility, all user interface requirements are dependent on this constraint.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;Constraint Cards&lt;/b&gt;&lt;br /&gt;Mike Cohn, in User Stories Applied (2004, 178–179) lists seven constraints with examples:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Performance&lt;/b&gt;: Ninety percent of product searches will return results in&lt;br /&gt;less than three seconds.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Accuracy&lt;/b&gt;: The software will dynamically generate and adjust reorder&lt;br /&gt;points to provide in stock levels of 98 percent for all standard products&lt;br /&gt;while maintaining less than fourteen days' inventory on hand for 95 percent&lt;br /&gt;of all standard products.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Portability&lt;/b&gt;: The software shall be designed to be ported to Android.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Reusability&lt;/b&gt;: The graphics rendering engine will be reusable by our other applications.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;5. Maintainability&lt;/b&gt;: Automated unit tests must be written for all new code and be run after each build.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. Interoperability&lt;/b&gt;: All documents shall be stored in XML.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. Capacity&lt;/b&gt;: The data mart must be able to store one hundred and eighty million transactions (three million per month for five years) and support the real-time analytics tools.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;System Quality Cards&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Another technique for handling non-functional requirements is the system quality card. &lt;b&gt;As functional requirements focus on "what the system will do," system qualities describe "how well the system will do it."&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Below is a real-life example of a system quality requirement for a navigation system that was forced into the user story template. &lt;br /&gt;&lt;br /&gt;As a Driver, I would like a faster load time for navigation, so I don't have to wait for it to load.&lt;br /&gt;&lt;br /&gt;In addition to sounding unnatural, the &lt;b&gt;story is neither testable nor estimable&lt;/b&gt;. It just does not work well as a user story. Instead, a system quality card should be used.&lt;br /&gt;&lt;br /&gt;A system quality card has six areas:&lt;br /&gt;1. &lt;b&gt;Name&lt;/b&gt;: The name of the quality (must be unique)&lt;br /&gt;2. &lt;b&gt;Scale&lt;/b&gt;: What will be measured, including the units of measure such as seconds&lt;br /&gt;3. &lt;b&gt;Meter&lt;/b&gt;: How the measurement will be conducted&lt;br /&gt;4. &lt;b&gt;Target&lt;/b&gt;: The desired level of performance&lt;br /&gt;5. &lt;b&gt;Constraint&lt;/b&gt;: The point at which the performance is unacceptable&lt;br /&gt;6. &lt;b&gt;Benchmark&lt;/b&gt;: The current level of performance&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Use of user stories is just one way to capture requirements in Agile development. But by no means is it the only way. Many teams succeed just fine by writing &lt;b&gt;straightforward requirement statements&lt;/b&gt; and even producing more traditional requirements documents. &lt;br /&gt;&lt;br /&gt;Regardless of documentation format, the &lt;b&gt;goal is to maximize conversation &lt;/b&gt;about each requirement within the team and have a workable method to prioritize, re-prioritize, and separate features into small enough increments to fit into iterations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Reference: Agile Excellence™ for Product Managers A Guide to Creating Winning Products with Agile Development Teams By Greg Cohen&lt;/derive&gt;&lt;/do&gt;&lt;/user&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6462854221072553459?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6462854221072553459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/07/all-about-user-stories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6462854221072553459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6462854221072553459'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/07/all-about-user-stories.html' title='All About User Stories'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6794970210931674559</id><published>2010-07-11T02:30:00.000-07:00</published><updated>2010-07-11T02:41:19.938-07:00</updated><title type='text'>Agile for Today Competitive Business Environment</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #990000;"&gt;Why Agile Works&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Agile works because it supports the process of software development in four key areas:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;1. Empirical process&lt;br /&gt;2. Daily visibility&lt;br /&gt;3. Socialization of information&lt;br /&gt;4. Rapid feedback cycles&lt;br /&gt;&lt;br style="color: #990000;" /&gt;&lt;span style="color: #990000;"&gt;Empirical Process&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is easier to understand an empirical process by first looking at a defined process. A defined process is one in which defined inputs generate defined outputs. This is the original manufacturing model. It is repeatable, and it is the model that traditional software development has assumed&lt;br /&gt;&lt;br /&gt;In contrast, the empirical process is nonlinear. It requires frequent inspection and adjustment. It is well suited for new product development, which requires research and creativity—both relatively unpredictable activities. Software development, including the product management step of requirements gathering and validation, is best suited to an empirical model.&lt;br /&gt;&lt;br /&gt;Software development teams are always creating something new. They do not follow a straight path with a defined output that is the same each time they go through the process. Instead, teams cycle through knowledge creation and problem solving, As team members formulate the solution, new questions emerge and new requirements need to be gathered. &lt;br /&gt;&lt;br /&gt;Occasionally the team has to restart. An assumption turns out to be false, such as the availability of complete and accurate data to drive a critical process. Sometimes the environment changes and a new technology emerges that needs to be supported. At times the solution functionally works but the performance is slow.&lt;br /&gt;&lt;br /&gt;Further, there is no escaping the QA team, whom you can always count on to identify some good issues that need solving. The list goes on. To accommodate this, the team must frequently check its progress and adjust its plan.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Daily Visibility&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agile improves visibility into the development process with a daily standup meeting. At the meeting, team members let each other know what they are working on and if they need help. Roadblocks are explicitly called out. Because this meeting is daily, issues cannot be ignored. Further, each developer commits to what she will be working on next in front of the team. Through this process, the team develops trust and the ability to be open and honest.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Socialization of Information&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agile processes facilitate the socialization of information. First, as mentioned above, the daily standup drives trust in the team. This creates an environment conducive to sharing news, even if it is discouraging. Secondly, because team members meet daily to share their accomplishments and plans, individual knowledge quickly becomes team knowledge, and the team stays aligned.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Rapid Feedback Cycles&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rapid feedback cycles are embedded in the Agile process. The feedback loop accelerates the team's learning and supports the empirical process needed in software development. &lt;br /&gt;&lt;br /&gt;There are three connected cycles: the release, the iteration, and daily standup. The release may be an extended cycle, but the iteration is one to four weeks, and the daily standup provides feedback every twenty-four hours.&lt;br /&gt;&lt;br /&gt;Agile feedback loops share much in common with the Plan, Do, Check, and Adjust (PDCA) process popularized by Dr. W. Edwards Deming in his quality control work: the team members formulate a course of action, execute against it, inspect their progress, and adjust their course accordingly.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;Why Now?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Interestingly, Agile is not new. In fact it has been around since the 1990s. It is worth asking: Why now? Why has Agile become so popular?&lt;br /&gt;&lt;br /&gt;To be a little controversial, I would say it is because of the failure of traditional serial or "waterfall" development and our attempts to control the software development process. Although I know there are many advocates of waterfall, in my experience it just does not work that well. &lt;br /&gt;&lt;br /&gt;Further, the Internet and globalization have had profound effects on the software industry, increasing the intensity of competition and the rate of change. If you are still releasing annually or over an 18-month cycle, by the time your next version is available, the market will have moved. &lt;br /&gt;&lt;br /&gt;Further, with the advent of Software-as-a-Service, hosted models, hosted download, and self-updating software, releases can occur with much greater frequency. Thus, companies have looked for a better way to develop software. Agile has met the challenge. Even so, best practices for Agile continue to evolve, including the constant challenge of working with distributed teams across multiple time zones.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Reference: Agile Excellence™ for Product Managers A Guide to Creating Winning Products with Agile Development Teams By Greg Cohen&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6794970210931674559?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6794970210931674559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/07/why-agile-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6794970210931674559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6794970210931674559'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/07/why-agile-works.html' title='Agile for Today Competitive Business Environment'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2950767691512384951</id><published>2010-04-29T11:43:00.000-07:00</published><updated>2010-04-29T11:43:44.965-07:00</updated><title type='text'>Lean Thinking</title><content type='html'>&lt;div style="color: #660000;"&gt;&lt;b&gt;Two pillars of lean &lt;/b&gt;&lt;/div&gt;&lt;br /&gt;Toyota president Gary Convis:&lt;br /&gt;&lt;br /&gt;The Toyota Way can be briefly summarized through the two pillars that support it: &lt;b&gt;Continuous Improvement &lt;/b&gt;and &lt;b&gt;Respect for People&lt;/b&gt;. Continuous improvement, often called kaizen , defines Toyota's basic approach to doing business. Challenge everything. More important than the actual improvements that individuals contribute, the true value of continuous improvement is in creating an atmosphere of continuous learning and an environment that not only accepts, but actually embraces change. Such an environment can only be created where there is respect for people hence the second pillar of the Toyota Way. &lt;br /&gt;&lt;br /&gt;And from Toyota CEO Katsuaki Watanabe:&lt;br /&gt;&lt;br /&gt;The Toyota Way has two main pillars: continuous improvement and respect for people. Respect is necessary to work with people. By "people" we mean employees, supply partners, and customers. ...We don't mean just the end customer; on the assembly line the person at the next workstation is also your customer. That leads to teamwork. If you adopt that principle, you'll also keep analyzing what you do in order to see if you're doing things perfectly, so you're not troubling your customer. That nurtures your ability to identify problems, and if you closely observe things, it will lead to kaizen continuous improvement. The root of the Toyota Way is to be dissatisfied with the status quo; you have to ask constantly, "Why are we doing this?"&lt;br /&gt;&lt;br /&gt;&lt;br style="color: #660000;" /&gt;&lt;b style="color: #660000;"&gt;Lean Goal: Sustainably Deliver Value Fast&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Broadly, the global or system goal of lean thinking at Toyota is to go from "&lt;b&gt;concept to cash&lt;/b&gt;" or "order to cash" as fast as possible at a sustainable pace to quickly deliver things of value (to the customer and society) &lt;b&gt;in shorter and shorter cycle times of all processe&lt;/b&gt;s, while still achieving highest quality and morale levels. Toyota strives to reduce cycle times, but not through cutting corners, reducing quality, or at an unsustainable or unsafe pace; rather, by relentless continuous improvement, that requires a company culture of meaningful respect for people in which people feel they have the personal safety to challenge and change the status quo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #660000;"&gt;Lean Foundation: Lean Thinking Manager-Teachers&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One of the most important things is that most new employees first go through several months of &lt;b&gt;education&lt;/b&gt; before starting other work. During this period they learn the foundations of lean thinking, they &lt;b&gt;learn to see 'waste' &lt;/b&gt;and they do hands-on work in many areas of Toyota. &lt;br /&gt;&lt;br /&gt;In this way, new Toyota people...&lt;br /&gt;&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; learn to "see the whole"&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; learn to see how lean thinking applies in different domains&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; learn kaizen mindset (continuous improvement)&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; appreciate a core principle in Toyota called Go See and gemba&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Go See&lt;/b&gt; means people especially managers are expected to "&lt;b&gt;go see with their own eyes&lt;/b&gt;" rather than sit behind desks or believe that the truth can be learned only from reports or numbers. It is related to appreciating the importance of gemba going to the physical frontline place of value work where the hands-on value workers are.&lt;br /&gt;&lt;br /&gt;From this, we came especially to appreciate that for successful adoption of lean, there are management qualities needed for any meaningful, sustained success the leadership team cannot "phone in" their lean support. &lt;br /&gt;&lt;br /&gt;Toyota is one of few companies that seems to demonstrate these qualities; to summarize&lt;br /&gt;&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Long-term philosophy—many in the company are &lt;b&gt;educated in lean thinking&lt;/b&gt; through courses and mentoring from manager-teachers.&lt;br /&gt;&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Long-term philosophy—virtually all management, including the executive level, must have a solid &lt;b&gt;understanding of lean principles&lt;/b&gt;, have lived them for years, and teach them to others.&lt;br /&gt;&lt;br /&gt;•&amp;nbsp;&amp;nbsp;&amp;nbsp; Long-term philosophy—manager-teachers have cultivated systems thinking and process-improvement problem-solving thinking skills, and they teach it to others. The culture is imbued with the mentality and behavior, "&lt;b&gt;Let's stop and understand the root causes of problems&lt;/b&gt;."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #660000;"&gt;Pillar One: Respect for People&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Respect for people sounds nebulous, but includes concrete actions and culture within Toyota. They broadly reflect respect for and sensitivity to morale, not making people do wasteful work, real teamwork, mentoring to develop skillful people, humanizing the work and environment, safe and clean environment, and philosophical integrity among the management team.&lt;br /&gt;&lt;br /&gt;The 11th agile principle and a theme in Scrum is self-organizing teams (self-directed work teams), supporting this pillar&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #660000;"&gt;Pillar Two: Continuous Improvement&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Continuous improvement is based on several ideas:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Go See&lt;/b&gt; is a principle not found in many management cultures. This principle is described as critical and fundamental. In the internal Toyota Way 2001 it is highlighted as the first factor for success in continuous improvement. Go See shows up repeatedly in Toyota manager quotes, in Toyota culture and habits, in education on the Toyota Way, and in the research done by Japanese analysts of lean thinking. All that said, it is missing from some derivative 'lean' descriptions and so unfortunately some are unaware of its vital role. In a lean-thinking culture, all people, but especially managers including senior managers should not spend all their time in separate offices or meeting rooms, receiving information via reports, computers, management reporting tools, and status meetings.&lt;br /&gt;&lt;br /&gt;Rather, to know what is going on and help improve (by eliminating the distortion that comes from indirect information), management should frequently go to the place of real work and see and understand for themselves. This &lt;b&gt;"real front-line place of work" (gemba)&lt;/b&gt; does not mean proximity to the building where work happens, nor does it mean going to visit other managers. It implies to be as physically close to the real front-line work as possible—not sitting in an office nearby, but "&lt;b&gt;breathing the same air&lt;/b&gt;." 'Work' in lean does not primarily mean the overhead or secondary work of accounting and so on, but the value-adding work that the customer cares about—engineering, designing a car, producing things, delivering customer service.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kaizen &lt;/b&gt;is sometimes translated as simply "&lt;b&gt;continuous improvement&lt;/b&gt;" but that confuses it with the broader lean pillar of "continuous improvement" and does not capture the full flavor. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kaizen is both a personal mindset and a practice&lt;/b&gt;. As a mindset, it suggests "My work is to do my work and to improve my work" and "continuously improve for its own sake." More formally as a practice, kaizen implies:&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp; choose and practice techniques the team and/or product group has agreed to try, until they are well understood&lt;br /&gt;2.&amp;nbsp;&amp;nbsp;&amp;nbsp; experiment until you find a better way&lt;br /&gt;3.&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat forever&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Five Whys&lt;/b&gt; (usually written 5 Whys) is a simple and widely used tool used in kaizen. It helps develop problem solving and root cause analysis skills. In response to a problem or defect, a team considers "why?" at least five times.&lt;br /&gt;&lt;br /&gt;In Scrum there is a retrospective workshop each iteration. This is an excellent time for a team to try 5 Whys. The important point of 5 Whys is not the technique or the number 5, but that it is part of the "&lt;b&gt;stop and fix&lt;/b&gt;" root-cause problem-solving mindset and culture pervasive at Toyota. People are taught to become deep problem solvers; to not live with problems, but to think things through deeply. There is also a connection between Go See and 5 Whys: It is easy for people to guess wrong or weak answers unless they see the facts at the real place of the problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Value and Waste&lt;/b&gt;&lt;br /&gt;What to improve during kaizen? In lean thinking the answer requires an understanding of value and waste.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Value&lt;/b&gt;— The moments of action or thought creating the product that the customer is willing to pay for. In other words, value is defined in the eyes of the external customer. Imagine a customer was observing the work in your office. At what moments would they be willing to reach into their pocket, pull out money, and give it to you?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Waste&lt;/b&gt;— All other moments or actions that do not add value but consume resources. Wastes come from overburdened workers, bottlenecks, waiting, handoff, wishful thinking, and information scatter, among many others.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;No Final Process&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The implication of kaizen and spread knowledge laterally is that there is not a final or correct 'defined' process&lt;/b&gt; to follow everywhere that is communicated from a central process group. Kaizen does include learning and mastering working agreements, but they travel and evolve by the spread knowledge laterally model. &lt;br /&gt;&lt;br /&gt;People who have the mindset "let's define (or buy) the central process, write it down, and then we should focus on conformance to it" will not be comfortable with lean thinking. To quote the Toyota CEO, "The root of the Toyota Way is to be dissatisfied with the status quo; you have to ask constantly, "&lt;b&gt;Why are we doing this?&lt;/b&gt;" &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lean and agile values and the Scrum method are based on the idea of empirical process:&lt;/b&gt; there is no fixed or final process or cookbook that people can follow given the reality of dynamically changing systems, and given the goal of continuous improvement. Instead, in Scrum we are left with the hard work of kaizen—to relentlessly, every two-week iteration, inspect and adapt the process and create yet another "two-week process experiment." In Toyota and in Scrum, the idea is to repeat this cycle until retirement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;- Ohno, T., 1988. &lt;span class="docEmphasis"&gt;The Toyota Production System: Beyond  Large-scale Production&lt;/span&gt;, Productivity Press&lt;br /&gt;&lt;br /&gt;- Poppendieck, M., Poppendieck, T., 2006. &lt;span class="docEmphasis"&gt;Implementing  Lean Software Development: From Concept to Cash&lt;/span&gt;, Addison-Wesley&lt;br /&gt;&lt;br /&gt;- Craig&amp;nbsp;Larman and Bas&amp;nbsp;Vodde, &lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="margin-left: 15px;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td class="v2" colspan="3" height="20"&gt;Scaling Lean &amp;amp; Agile Development:  Thinking and Organizational Tools for Large-Scale Scrum , 2008, Addison Wesley Professional&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2950767691512384951?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2950767691512384951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/04/lean-thinking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2950767691512384951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2950767691512384951'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/04/lean-thinking.html' title='Lean Thinking'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1339194616063103487</id><published>2010-03-09T08:58:00.000-08:00</published><updated>2010-03-09T09:01:30.974-08:00</updated><title type='text'>Introduction to Behaviour-Driven Development with Groovy</title><content type='html'>&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;What's Behaviour-Driven Development ?&lt;br /&gt;&lt;br /&gt;&lt;/b&gt; &lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;Behaviour-Driven Development (BDD) is an evolution in the thinking behind &lt;a href="http://behaviour-driven.org/TestDrivenDevelopment"&gt;TestDrivenDevelopment&lt;/a&gt; and &lt;a class="nonexistent" href="http://behaviour-driven.org/AcceptanceTestDrivenPlanning"&gt;AcceptanceTestDrivenPlanning&lt;/a&gt;. &lt;span class="anchor" id="line-11"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-12"&gt;&lt;/span&gt; It brings together strands from &lt;a href="http://behaviour-driven.org/TestDrivenDevelopment"&gt;TestDrivenDevelopment&lt;/a&gt; and &lt;a href="http://behaviour-driven.org/DomainDrivenDesign"&gt;DomainDrivenDesign&lt;/a&gt; into an integrated whole, making the relationship between these two powerful approaches to software development more evident. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-13"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;It aims to help focus development on the delivery of prioritised, verifiable business value by providing a common vocabulary (also referred to as a &lt;a class="nonexistent" href="http://behaviour-driven.org/UbiquitousLanguage"&gt;UbiquitousLanguage&lt;/a&gt;) that spans the divide between Business and Technology. &lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-16"&gt;&lt;/span&gt; It presents a framework of activity based on three core principles: &lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol style="font-family: Verdana,sans-serif;" type="1"&gt;&lt;li&gt;Business and Technology should refer to the same system in the same way - ItsAllBehaviour &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Any system should have an identified, verifiable value to the business - WheresTheBusinessValue &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Up-front analysis, design and planning all have a diminishing return - EnoughIsEnough  &lt;/li&gt;&lt;/ol&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;BDD relies on the use of a very specific (and small) vocabulary to minimise miscommunication and to ensure that everyone – the business, developers, testers, analysts and managers – are not only on the same page but using the same words. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;For people familiar with the concept of DomainDrivenDesign, you could consider BDD to be a UbiquitousLanguage for software development. &lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt; It must be stressed that BDD is a rephrasing of existing good practice, it is not a radically new departure. Its aim is to bring together existing, well-established techniques under a common banner and with a consistent and unambiguous terminology. BDD is very much focused on “Getting the words right” and this focus is intended to produce a vocabulary that is accurate, accessible, descriptive and consistent. &lt;br /&gt;&lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;What's Problem ?&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;Test Driven Development (TDD) has established itself as a useful--and at its best, profound--improvement in the software development process. It delivers a variety of benefits to its practitioners; some of them are related to testing, but the most important benefits are not. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-4"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;Experienced practitioners, particularly those that have been involved in helping other developers learn the practice, note a life-cycle to TDD's learning and adoption: &lt;span class="anchor" id="line-6"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-7"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol style="font-family: Verdana,sans-serif;" type="1"&gt;&lt;li&gt;The developer starts writing unit tests around their code using a test framework like JUnit or NUnit. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As the body of tests increases the developer begins to enjoy a strongly increased sense of confidence in their work. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At some point the developer has the insight (or is shown) that writing the tests before writing the code, helps them to focus on writing only the code that they need. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The developer also notices that when they return to some code that they haven't seen for a while, the tests serve to document how the code works.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A point of revelation occurs when the developer realises that writing tests in this way helps them to “discover” the API to their code. TDD has now become a design process. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Expertise in TDD begins to dawn at the point where the developer realizes that TDD is about defining behaviour rather than testing. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Behaviour is about the interactions between components of the system and so the use of mocking is fundamental to advanced TDD.  &lt;/li&gt;&lt;/ol&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;We have observed this progression in many developers, but unfortunately while most, with a little help, find their way to step 4, many miss the big wins found at steps 5, 6 and 7. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;We started wondering why this was, and wondering what we could do to help people get to the good stuff more quickly. &lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;Looking closely at this evolution in understanding, while step 1 may be considered to be related to testing, the rest really are not. For the remainder of the steps in this process, the test aspect is very much a secondary concern. &lt;br /&gt;&lt;br /&gt;The issue at the heart of this learning process is the behaviour of the system. Developers gain confidence in the systems they build when the behaviour of that system is confirmed. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;By writing tests in advance of code, the developer defines the behavioural intent of the system that they are developing. &lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;Tests that document the behavioural intent of the system are most valuable as documentation of that system. By specifying the behaviour of the code in tests, developers are able to best consider the interface from the perspective of the consumer of the service rather than as the producer – thinking more abstractly about the nature of the solution and so hiding technical detail. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;This focus on behaviour ahead of testing is a focus on the real value in TDD, and in our experience is the mark of the genuinely experienced TDD practitioner. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;It is not too surprising that it takes apprentice TDD practitioners a while to realize that TDD is not about testing when all of the nomenclature surrounding it is described in terms of testing.&amp;nbsp;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;and what's solution ?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;The aim of Behaviour Driven Development (BDD) is to address this shortcoming. By using terminology focused on the behavioural aspects of the system rather than testing, BDD attempts to help direct developers towards a focus on the real value to be found in TDD at its most successful. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;BDD aims to bridge the gap between the differing views of computer systems held by Business users and Technologists. It is deeply rooted in the success of TDD and is influenced by ideas like Domain Driven Design. &lt;br /&gt;&lt;br /&gt;Its focus is on minimizing the hurdles between specification, design, implementation and confirmation of the behaviour of a system. Thus enabling the incremental delivery of business systems, and in particular in allowing teams new to agile development to quickly get up to speed using these extremely productive techniques. &lt;br /&gt;&lt;span class="anchor" id="line-30"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-31"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Getting the words right&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;Behaviour Driven Development (BDD) grew out of a thought experiment based on &lt;a href="http://behaviour-driven.org/NeuroLinguisticProgramming"&gt;Neuro Linguistic Programming (NLP)&lt;/a&gt; techniques. The idea is that the words you use influence the way you think about something. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-2"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-3"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;&lt;i&gt;As an example, when I was first getting to grips with TDD, I was pairing with an experienced agile coach, writing little test methods, then writing the code, and generally feeling good about life. Then I went ahead and wrote some code without a test. The coach, JR, asked me why I'd written the code. I answered: "we'll need it in a minute", to which JR replied "yes, we might". By using the word "might", he introduced the possibility that we &lt;span class="u"&gt;might not&lt;/span&gt;. As it turned out, we didn't.&lt;/i&gt; - DanNorth&lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-4"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;A coach introducing Test Driven Development (TDD) to sceptical (i.e. most) developers invariably runs into a familiar set of objections. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-6"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-7"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;&lt;i&gt;&lt;b&gt;From programmers:&lt;/b&gt;&lt;/i&gt; &lt;span class="anchor" id="line-8"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;Why do I need to write tests? That's what testers do. &lt;span class="anchor" id="line-9"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-10"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;Writing all these tests slows me down, it's a waste of time. &lt;span class="anchor" id="line-11"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-12"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;I'm a good programmer! I don't need to write tests to prove my code works &lt;span class="anchor" id="line-13"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="line867" style="font-family: Verdana,sans-serif;"&gt;&lt;i&gt;&lt;b&gt;And from testers:&lt;/b&gt;&lt;/i&gt; &lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;Why are you getting programmers to write tests? We all know they can't – that's why you need testers. &lt;span class="anchor" id="line-16"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-17"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;Are you trying to take our jobs away? &lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li class="gap"&gt;You obviously don't understand testing or you wouldn't be asking programmers to write tests! &lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;This last comment is particularly ironic. In fact, the testers take on a central and very important role in BDD. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-22"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-23"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;The behaviour-centric vocabulary helps us to avoid these common misunderstandings and focus on BDD as a design and delivery process. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Concentrating on finding the right words led us to think about the process differently, for example, the fact that the words we use in BDD are very much focussed on the behaviour of the system led us to better understand the very close relationship between the stories we use to specify behaviour and the specifications we implement in BDD in place of tests. It also helped us gain further insight into some of the failure modes we have experienced in TDD projects.&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;The BDD Process Model&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;A SubjectMatterExpert (typically a business user) works with a BusinessAnalyst to identify a business requirement. This is expressed as a story using the following template: &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As a &lt;b&gt;Role&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; I request a &lt;b&gt;Feature&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; To gain a &lt;b&gt;Benefit&lt;/b&gt; &lt;/div&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li style="list-style-type: none;"&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="line862" style="font-family: Verdana,sans-serif;"&gt;The speaker, who holds the &lt;i&gt;Role&lt;/i&gt;, is the person who will gain the &lt;i&gt;Benefit&lt;/i&gt; from the requested &lt;i&gt;Feature&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span class="anchor" id="line-14"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-15"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;This can also be paraphrased variously as ...&lt;br /&gt;&lt;br /&gt;1. I want to achieve a specific &lt;i&gt;Goal&lt;/i&gt;, and as a &lt;i&gt;Role&lt;/i&gt; I should be able to accomplish this by performing &lt;i&gt;Functionality&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;2. A &lt;i&gt;Role&lt;/i&gt; invokes &lt;i&gt;Feature&lt;/i&gt; to cause a &lt;i&gt;Benefit&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BDD Example with Groovy&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://easyb.org/index.html"&gt;Easyb &lt;/a&gt;is a behavior driven development framework for the Java platform. By using a specification based Domain Specific Language, easyb aims to enable executable, yet &lt;i&gt;readable&lt;/i&gt;         documentation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example Stories with easyb&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7GLcLhNI/AAAAAAAAARo/RcfpyDSjyPM/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="176" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7GLcLhNI/AAAAAAAAARo/RcfpyDSjyPM/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7OswxYHI/AAAAAAAAASA/xd2Zdcy11u4/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="208" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7OswxYHI/AAAAAAAAASA/xd2Zdcy11u4/s640/2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7TGLjMaI/AAAAAAAAASI/gnpTzeyZCjg/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="230" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7TGLjMaI/AAAAAAAAASI/gnpTzeyZCjg/s640/3.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Example Specification with easyb&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_6EEwisOalwc/S5Z7b6bC1hI/AAAAAAAAASg/do6Y3OSQQD4/s1600-h/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="284" src="http://2.bp.blogspot.com/_6EEwisOalwc/S5Z7b6bC1hI/AAAAAAAAASg/do6Y3OSQQD4/s640/4.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BDD On Java using &lt;a href="http://jbehave.org/" title="JBehave 2.4 released"&gt;JBehave&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;JBehave is a framework for Behaviour-Driven Development Behaviour-driven development (BDD) is an evolution of test-driven development (TDD) and acceptance-test driven design, and is intended to make these practices more accessible and intuitive to newcomers and experts alike.&lt;br /&gt;&lt;br /&gt;It shifts the vocabulary from being test-based to behaviour-based, and positions itself as a &lt;b&gt;design&lt;/b&gt; philosophy.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="line874" style="font-family: Verdana,sans-serif;"&gt;and here is another &lt;a href="http://jbehave.org/documentation/two-minute-tutorial/"&gt;example with java using JBehave&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Source:&lt;/code&gt;&lt;br /&gt;&lt;code&gt;BDD - http://behaviour-driven.org/&lt;/code&gt;&lt;br /&gt;&lt;code&gt;Easyb - http://easyb.org/&lt;/code&gt;&lt;br /&gt;&lt;code&gt;JBehave -http://jbehave.org/&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1339194616063103487?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1339194616063103487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/introduction-to-behaviour-driven.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1339194616063103487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1339194616063103487'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/introduction-to-behaviour-driven.html' title='Introduction to Behaviour-Driven Development with Groovy'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S5Z7GLcLhNI/AAAAAAAAARo/RcfpyDSjyPM/s72-c/1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2964166406156553383</id><published>2010-03-08T12:07:00.000-08:00</published><updated>2010-03-08T12:07:49.469-08:00</updated><title type='text'>Challenges of Scaling Agile in Enterprises</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;When it comes to &lt;b&gt;scaling agile to the enterprise&lt;/b&gt;, there are &lt;b&gt;two classes of challenges&lt;/b&gt; that must be addressed. &lt;b&gt;The first- the challenges inherent in agile itself&lt;/b&gt; – present limits of technology because of the fixed rule bases and assumptions built into the methods.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The second – those imposed by the enterprise&lt;/b&gt; – are impediments that likely exist within the enterprise that will otherwise prevent the successful application of the new methods. Both types of challenges must be successfully addressed in order for the enterprise to achieve the full benefits of agile.&lt;br /&gt;&lt;br /&gt;Here is brief introduction some of the issues which should be consider for scaling agile in enterprise.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Small Team size&lt;/b&gt;&lt;br /&gt;XP and Scrum recommend teams of 8 or fewer people including product owner/managers or other customer proxy, developers and testers. In many cases, teams decide that even that number is too large, and they may subdivide into components or feature team of three to five people. To an enterprise with 1000 practitioners to deploy, thinking in terms of managing literally hundreds of teams boggles the mind, and there arises the need to understand how to fit this new model into the existing organizational hierarchy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Customer is Integral to Team&lt;/b&gt;&lt;br /&gt;XP Success in particular in a number of IT like environments where the customer was literally down the hall the business analyst who worked with that department was willing and able to participate in the fine grained, detailed review that stories and customer written acceptance tests require.&lt;br /&gt;&lt;br /&gt;for many enterprises however, this is not the case, the customer maybe be remote or may not have the skills or time available to participate in such a manner. Or perhaps the enterprise is a large ISV where the application has tens of thousand of users and where there is no single customer to satisfy. Every customer is different, and the larger ones speak loudly indeed, and the information flow is attenuated through many groups before it reaches the team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Collocation&lt;/b&gt;&lt;br /&gt;Much of the productivity of agile comes from the paring contexts, daily stand up, visual signaling of stories and status, and constant informal communication that characterizes these methods. Developers, product owners, and testers are together, not separated by time zones and language barriers. &lt;br /&gt;&lt;br /&gt;At scale, collocation is impractical even for large teams in the same building and other mechanisms must be devised. Moreover it is likely that many team members are in different countries and different time zones and perhaps even speak different languages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Architecture Emerges&lt;/b&gt;&lt;br /&gt;Agile and more specifically, XP trades off the ability to refactor code quickly with the cost and investment necessary to create a more forward looking architecture, some architectural runway, that coordinate the efforts of distributed teams. &lt;br /&gt;&lt;br /&gt;With the large scale systems however, the refactor cost curve may not be the case, because hundreds of person years may be necessary to get even a first release deployed. Since agile generally does not coach how to approach architecting larger scale systems, that apparent limitation is often a real impediment for agile adoption.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lack of requirements analysis and documented Specifications&lt;/b&gt;&lt;br /&gt;Agile practice of working on a few stories at a time is a wonderfully focusing mechanism for the team. But in larger system, what drive these stories into existence? Who says these stories are the right stories? Will the summation of all these stories actually meet our customer needs?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Culture and Physical Environment&lt;/b&gt;&lt;br /&gt;Effective agile environments look and sound different. Most team members work in an open or nearly open environment and often their manager and supervisors have left their offices and joined the team at those tables. Also the process does not look very efficient because there is a certain informality to stories posted on walls, whiteboards shoved hither and you, and teams of people seeming to do far more talking than coding.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Existing Formalized Policies and Procedures&lt;/b&gt;&lt;br /&gt;As organization grow, they tend to put in infrastructure to control and measure project, program, human resource and other assets, these include all of the procedure, policies that organization use. And this is part of organization culture and knowledge base which is gained in past project.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Management Style – Fixed Schedule, Fixed functionality Mandates&lt;/b&gt;&lt;br /&gt;If a mandate comes to team to deliver functionality X in period of Y with resources Z, then by definition it does not meet agile fixed time, variable scope mantra. And the teams will be discouraged right out of the starting gate.&lt;br /&gt;&lt;br /&gt;This mode of management is routine in our industry and most likely, this imprediment will have to be addressed head on. It’s true that the teams would like to be able to predict exactly when they can deliver what functionality, but they know they can not, and it seems inherently silly to them when management just says, “Make it be so”.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;People Organized by Discipline rather than Product line&lt;/b&gt;&lt;br /&gt;The word Organization in itself can be a root cause of impediments to agile, for the enterprise is surely organized in some fashion already, and most likely it is organized along functional (product management, architecture, developers) rather than product or business application lines. In agile, teams quickly reorganize to assure they have a full complement of the resources necessary to define/build/test and deliver a component of feature.&lt;br /&gt;&lt;br /&gt;This require dedicated (not heavy multiplexed) resources for the project, or else the team will fail to meet its commitment to the iteration. Reorganization typically requires redefinition of what makes a team a team in the enterprise.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;High Degree of Distribution&lt;/b&gt;&lt;br /&gt;The enterprise is an enterprise because it has grown with its successes. For most enterprises, success often involves acquisitions of teams or product lines or existing IT organization along the way. Rarely are these teams collocated and the large the enterprise, the less likely they are to be together in one place.&lt;br /&gt;&lt;br /&gt;Moreover, raw size alone prevents pure collocation because there is no way physically to collocation even 100 people in one workspace, so the problem of distributed teams is endemic to agile at scale.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Source: Scaling Software Agility Best Practices for Large Enterprises by Dean Leffingwell&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2964166406156553383?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2964166406156553383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/challenges-of-scaling-agile-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2964166406156553383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2964166406156553383'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/challenges-of-scaling-agile-in.html' title='Challenges of Scaling Agile in Enterprises'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1562668968740174761</id><published>2010-03-06T10:41:00.000-08:00</published><updated>2010-03-06T10:41:43.507-08:00</updated><title type='text'>J2EE 6 - Bean Validation</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Validating data is a common task that occurs throughout an application. For example, in the presentation layer of an application, you might want to validate that the number of characters a user enters in a text field is at most 20 characters or that the number a user enters in a numeric field is positive. If you set those constraints, you probably want the same data to be validated before it's used in the business logic of the application and when the data is stored in a database.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Developers often code the same validation logic in multiple layers of an application, something that's time consuming and error-prone. Or they put the validation logic in their data model, cluttering it with what is essentially metadata.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=303" target="_blank"&gt;Bean Validation, JSR 303&lt;/a&gt; makes validation simpler and reduces the duplication, errors, and clutter that characterizes the way validation is often handled in enterprise applications. Bean Validation affords a standard framework for validation, in which the same set of validations can be shared by all the layers of an application.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Specifically, Bean Validation offers a framework for validating Java classes written according to JavaBeans conventions. You use annotations to specify constraints on a JavaBean — you can annotate a JavaBean class, field, or property. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can also extend or override these constraints through XML descriptors. A validator class then validates each constraint. You specify which validator class to use for a given type of constraint.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Here, for example, is part of a class that declares some constraints through Bean Validation annotations:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgR9UAB9I/AAAAAAAAAPo/CE-e-YO_Vrg/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="372" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgR9UAB9I/AAAAAAAAAPo/CE-e-YO_Vrg/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@NotNull&lt;/code&gt; annotation specifies that the annotated element, &lt;code&gt;addressline1&lt;/code&gt;, must not be null. The &lt;code&gt;@Size&lt;/code&gt; annotation specifies that the annotated elements,&lt;code&gt; addressline1&lt;/code&gt; and &lt;code&gt;addressline2&lt;/code&gt;, must not be longer than the specified maximum, 30 characters.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;When an &lt;code&gt;Address&lt;/code&gt; object is validated, the &lt;code&gt;addressline1&lt;/code&gt; value is passed to a validator class that is defined for the &lt;code&gt;@NotNull&lt;/code&gt; constraint as well as to a validator class defined for the &lt;code&gt;@Size&lt;/code&gt; constraint. The &lt;code&gt;addressline2&lt;/code&gt; value is also passed to the validator class for the &lt;code&gt;@Size&lt;/code&gt; constraint. The pertinent validator classes perform the validations.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Both the &lt;code&gt;@NotNull&lt;/code&gt; and &lt;code&gt;@Size&lt;/code&gt; constraints are built into the Bean Validation framework so you do not need to define validator classes for them. However, you can add your own constraints to the built-in constraints, in which case, you need to define validator classes. For example, you can define a constraint named &lt;code&gt;@ZipCode&lt;/code&gt; as follows:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgXVRalYI/AAAAAAAAAP4/pudnoZjpaCk/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgXVRalYI/AAAAAAAAAP4/pudnoZjpaCk/s640/2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Then you can specify the &lt;code&gt;@ZipCode&lt;/code&gt; constraint on a class, field, or property just like any other constraint. Here is an example:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgfuylCuI/AAAAAAAAAQY/yru1Q1edR90/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="334" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgfuylCuI/AAAAAAAAAQY/yru1Q1edR90/s640/3.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;When an &lt;code&gt;Address&lt;/code&gt; object is validated, the &lt;code&gt;zipCode&lt;/code&gt; value is passed to the&lt;code&gt; ZipcodeValidator&lt;/code&gt; class for validation. Notice that the constraint definition includes another constraint: &lt;code&gt;@Size(min=5, max=5)&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;This means that an element annotated by the &lt;code&gt;@ZipCode&lt;/code&gt; annotation must be exactly 5 characters in length. The element is validated against this constraint in addition to the primary constraint check that &lt;code&gt;ZipcodeValidator&lt;/code&gt; performs. &lt;br /&gt;&lt;br /&gt;Bean Validation allows you to create a constraint that is composed of other constraints. In fact, any composing constraint can itself be composed of constraints. Notice too that the constraint definition specifies an error message to be returned if the constraint fails the validation check. Here, the error message is "Wrong zipcode".&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;You can also use Bean Validation to validate an entire object graph in a straightforward way. An &lt;i&gt;object graph&lt;/i&gt; is an object composed of other objects.  If you specify the &lt;code&gt;@Valid&lt;/code&gt; annotation on the root object of an object graph, it directs the pertinent validator to recursively validate the associated objects in the object graph. Consider the following example:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgwLaztyI/AAAAAAAAARg/Wh5kROMaLH4/s1600-h/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="108" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KgwLaztyI/AAAAAAAAARg/Wh5kROMaLH4/s640/4.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;When an &lt;code&gt;Order&lt;/code&gt; object is validated, the &lt;code&gt;Address&lt;/code&gt; object and the associated objects in its object graph are validated too.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;To meet the objective of sharing the same set of validations across all the layers of an application, Bean Validation is integrated across the Java EE 6 platform. &lt;br /&gt;&lt;br /&gt;For example, presentation-layer technologies such as JSF and enterprise-layer technologies such as JPA have access to the constraint definitions and validators available through the Bean Validation framework. You no longer need to specify constraints in multiple places and in multiple ways across the layers of an application. &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Source: java.sun.com - J2EE 6 Overview &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1562668968740174761?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1562668968740174761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-bean-validation.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1562668968740174761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1562668968740174761'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-bean-validation.html' title='J2EE 6 - Bean Validation'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S5KgR9UAB9I/AAAAAAAAAPo/CE-e-YO_Vrg/s72-c/1.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3832623905698044490</id><published>2010-03-06T10:21:00.000-08:00</published><updated>2010-03-06T10:21:41.147-08:00</updated><title type='text'>J2EE 6 - Contexts and Dependency Injection</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=299" target="_blank"&gt;Contexts and Dependency Injection for the Java EE Platform (CDI), JSR 299&lt;/a&gt; is a technology that supplies a powerful set of services to Java EE components. These services allow Java EE components, including EJB session beans and JavaServer Faces (JSF) managed beans, to be bound to lifecycle contexts, to be injected, and to interact in a loosely coupled way by firing and observing events. Perhaps most significantly, CDI unifies and simplifies the EJB and JSF programming models. It allows enterprise beans to replace JSF managed beans in a JSF application.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In essence, CDI helps bridge what was a major gap between the web tier of the Java EE platform and the enterprise tier. The enterprise tier, through technologies such as EJB and JPA, has strong support for transactional resources. &lt;br /&gt;&lt;br /&gt;For example, using EJB and JPA you can easily build an application that interacts with a database, commits or rolls back transactions on the data, and persists the data. The web tier, by comparison, is focused on presentation. Web tier technologies such as JSF and JavaServer Pages (JSP pages) render the user interface and display its content, but have no integrated facilities for handling transactional resources.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Through its services, CDI brings transactional support to the web tier. This can make it a lot easier to access transactional resources in web applications. For example, CDI makes it a lot easier to build a Java EE web application that accesses a database with persistence provided by JPA.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Let's look at some key parts of a web application that uses CDI services. The application, which processes user login and user logout requests, includes both JSF and EJB components. Here is the code for an input form on a JSF page that displays a login prompt for the web application:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KaakcxvFI/AAAAAAAAAOI/Scw6nbCvSJk/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KaakcxvFI/AAAAAAAAAOI/Scw6nbCvSJk/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;As you can see from the code, the login prompt displays fields for a user to enter a user name and password. It also displays a Login button and a Logout button. Notice the unified expression language (EL) expressions such as&lt;code&gt; #{credentials.username}&lt;/code&gt; and &lt;code&gt;#{login.login}&lt;/code&gt;. These expressions refer to beans, named &lt;code&gt;credentials&lt;/code&gt; and &lt;code&gt;login&lt;/code&gt;.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Note that CDI builds on a new concept introduced in Java EE 6 called managed beans, which is designed to unify all of the various types of beans in Java EE 6. A &lt;i&gt;managed bean&lt;/i&gt; is a Java class that is treated as a managed component by the Java EE container. Optionally, you can give it a name in the same namespace as that used by EJB components. &lt;br /&gt;&lt;br /&gt;A managed bean can also rely on a small number of container-provided services, mostly related to lifecycle management and resource injection. Other Java EE technologies such as JSF, EJB, and CDI build on this basic definition of a managed bean by adding services. So for example, a JSF managed bean adds lifecycle scopes, an EJB session bean adds services such as support for transactions, and CDI adds services such as dependency injection. In CDI a managed bean or simply a &lt;i&gt;bean&lt;/i&gt; is a Java EE component that can be injected into other components, associated with a context, or reached through EL expressions.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;You declare a managed bean by annotating its class with the&lt;code&gt; javax.annotation.ManagedBean&lt;/code&gt; annotation or by using one of several CDI annotations such as a scope annotation or a qualifier annotation. The annotation-based programming model makes it possible for a bean to begin as a POJO and later become another type of Java EE component such as an EJB component — perhaps to take advantage of more advanced functionality, such as transactional and security annotations or the instance pooling facility offered by EJB containers. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For example, you can turn a POJO into a stateful session bean by adding a&lt;code&gt; @Stateful&lt;/code&gt; annotation to the object. Clients that use CDI to access a bean are unaffected by the bean's transition from POJO to EJB.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Any bean can be bound to a lifecycle context, can be injected, and can interact with other beans in a loosely coupled way by firing and observing events. In addition, a bean may be called directly from Java code, or as in this example, it may be invoked in a unified EL expression. This enables a JSF page to directly access a bean, even a bean that is implemented as an EJB component such as a session bean.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In this application, a bean named &lt;code&gt;Credentials&lt;/code&gt; has a lifecycle that is bound to the JSF request. The &lt;code&gt;Credentials&lt;/code&gt; bean is implemented as a JavaBean as follows:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5Kam3248II/AAAAAAAAAOw/bLlFI1Jj7dk/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5Kam3248II/AAAAAAAAAOw/bLlFI1Jj7dk/s640/2.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;To request CDI services, you annotate a Java EE component with CDI annotations. The &lt;code&gt;@Model&lt;/code&gt; annotation is a CDI annotation that identifies the&lt;code&gt; Credentials&lt;/code&gt; bean as a model object in an Model-View-Controller (MVC) architecture. The annotation, which is built into CDI, is a stereotype annotation. A stereotype annotation marks a class as fulfilling a specific role within the application.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The application also includes a &lt;code&gt;Login&lt;/code&gt; bean whose lifecycle is bound to the HTTP session. The &lt;code&gt;Login&lt;/code&gt; bean is implemented as an EJB stateful session bean, as follows:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KarvF9NcI/AAAAAAAAAO4/65h-C1gJ6lM/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KarvF9NcI/AAAAAAAAAO4/65h-C1gJ6lM/s400/3.JPG" width="397" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@Stateful&lt;/code&gt; annotation is an EJB annotation that specifies that this bean is an EJB stateful session bean. The &lt;code&gt;@TransactionAttribute&lt;/code&gt; and &lt;code&gt;@RolesAllowed&lt;/code&gt; annotations are also EJB annotations. They declare the EJB transaction demarcation and security attributes of the annotated methods.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@SessionScoped&lt;/code&gt; annotation is a CDI annotation that specifies a scope for the bean. All beans have a scope that determines the lifecycle of its instances and the instances of the bean that are made visible to instances of other beans. This is an important feature because components such as EJB components do not have a well-defined scope. &lt;br /&gt;&lt;br /&gt;In particular, EJB components are not aware of the request, session, and application contexts of web tier components such as JSF managed beans, and do not have access to the state associated with those contexts. In addition, the lifecycle of a stateful EJB component cannot be scoped to a web-tier context.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;By contrast, scoped objects in CDI exist in a well-defined lifecycle context that is managed by the Java EE container. Scoped objects may be automatically created when needed and then automatically destroyed when the context in which they were created ends. &lt;br /&gt;&lt;br /&gt;Significantly, the state of a scoped object is automatically shared by clients that execute in the same context. This means that clients such as other beans that execute in the same context as a scoped object see the same instance of the object. But clients in a different context see a different instance. &lt;br /&gt;&lt;br /&gt;The &lt;code&gt;@SessionScoped&lt;/code&gt; annotation specifies that the scope type for the &lt;code&gt;Login&lt;/code&gt; bean is session scope. Objects that are not associated with any of the usual scopes, but instead exist for the exclusive benefit of an object that triggered their creation, are said to be &lt;i&gt;dependents&lt;/i&gt; of their owner. The lifecycle of these dependent objects is tied to that of the owner. In particular, a dependent object is destroyed whenever the owner is destroyed.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Beans typically acquire references to other beans through dependency injection. The dependency injection mechanism is completely type safe. CDI uses the annotations specified in &lt;a href="http://jcp.org/en/jsr/detail?id=330" target="_blank"&gt;JSR 330: Dependency Injection for Java&lt;/a&gt; for dependency injection. &lt;br /&gt;&lt;br /&gt;One of those annotations, &lt;code&gt;@Inject&lt;/code&gt;, identifies a point at which a dependency on a Java class or interface can be injected. The container then provides the needed resource. In this example, the &lt;code&gt;Login&lt;/code&gt; bean specifies two injection points. The first use of the &lt;code&gt;@Inject&lt;/code&gt; annotation in the example injects a dependency on the &lt;code&gt;Credentials&lt;/code&gt; bean. &lt;br /&gt;&lt;br /&gt;In response, the container will inject the &lt;code&gt;Credentials&lt;/code&gt; bean into any instance of&lt;code&gt; Login&lt;/code&gt; created within this context. The second &lt;code&gt;@Inject&lt;/code&gt; annotation injects a dependency on the JPA &lt;code&gt;EntityManager&lt;/code&gt;. The container will inject the &lt;code&gt;EntityManager&lt;/code&gt; to manage the persistence context. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@Produces&lt;/code&gt; annotation identifies the &lt;code&gt;getCurrentUser()&lt;/code&gt; method as a producer method. A producer method is called whenever another bean in the system needs an injected object of the specified type. In this case, the injected object is the currently logged-in user, which is injected by the qualifier annotation&lt;code&gt; @LoggedIn&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;A &lt;i&gt;qualifier&lt;/i&gt; identifies a specific implementation of a Java class or interface to be injected. In order to use a qualifier annotation, you first need to define its type as a qualifier. You use the &lt;code&gt;@Qualifier&lt;/code&gt; annotation, another JSR 330 annotation, to do that. For example:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5KawjtJwaI/AAAAAAAAAPA/83Oav0VBHh8/s1600-h/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="90" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5KawjtJwaI/AAAAAAAAAPA/83Oav0VBHh8/s400/4.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Let's return to the login prompt discussed earlier. When a user responds to the prompt and clicks the Submit button, CDI technology goes into action. &lt;br /&gt;&lt;br /&gt;The Java EE container automatically instantiates a contextual instance of the&lt;code&gt; Credentials&lt;/code&gt; bean and the &lt;code&gt;Login&lt;/code&gt; bean. An instance of a bean that is bound to a context is called a &lt;i&gt;contextual instance&lt;/i&gt;. JSF assigns the user name and password the user entered to the &lt;code&gt;Credentials&lt;/code&gt; bean contextual instance. Next, JSF calls the &lt;code&gt;login()&lt;/code&gt; method in the &lt;code&gt;Login&lt;/code&gt; bean contextual instance. &lt;br /&gt;&lt;br /&gt;This instance continues to exist for and is available to other requests in the same HTTP session, and provides the &lt;code&gt;User&lt;/code&gt; object that represents the current user to any other bean that requires it.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;This example demonstrates only some of the features in this powerful technology. Another feature enables beans to produce or consume events. Yet another lets you define interceptors that bind additional function across all bean types, or define decorators that apply the additional function to a specific bean type. &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Source: java.sun.com - J2EE 6 Overview &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3832623905698044490?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3832623905698044490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-contexts-and-dependency.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3832623905698044490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3832623905698044490'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-contexts-and-dependency.html' title='J2EE 6 - Contexts and Dependency Injection'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S5KaakcxvFI/AAAAAAAAAOI/Scw6nbCvSJk/s72-c/1.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-5143110561073639033</id><published>2010-03-05T08:34:00.000-08:00</published><updated>2010-03-05T08:41:00.953-08:00</updated><title type='text'>J2EE 6 - Java API for RESTful Web Services (JAX-RS)</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=311" target="_blank"&gt;Java API for RESTful Web Services (JAX-RS), JSR 311&lt;/a&gt; enables you to rapidly build lightweight web services that conform to the Representational State Transfer (REST) style of software architecture. An important concept in REST is the existence of resources, each of which can be referred to with a global identifier, that is, a URI. In particular, data and functionality are considered resources that can be identified and accessed through URIs. To manipulate these resources, components of the network, clients and servers, communicate through a standardized interface such as HTTP and a small, fixed set of verbs — &lt;code&gt;GET&lt;/code&gt;, &lt;code&gt;PUT&lt;/code&gt;, &lt;code&gt;POST&lt;/code&gt;, and &lt;code&gt;DELETE&lt;/code&gt; — and exchange representations of these resources.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;RESTful web services are web services built according to the REST architectural style. Building web services with the RESTful approach has emerged as a popular alternative to using SOAP-based technologies thanks to REST's lightweight nature and the ability to transmit data directly over HTTP.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;JAX-RS furnishes a standardized API for building RESTful web services in Java. The API contributes a set of annotations and associated classes and interfaces. Applying the annotations to POJOs enables you to expose web resources. This approach makes it simple to create RESTful web services in Java.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The specification for the initial release of the technology, JAX-RS 1.0, was finalized in October 2008 and a reference implementation named &lt;a href="https://jersey.dev.java.net/" target="_blank"&gt;Jersey&lt;/a&gt; is also available. Java EE 6 includes the latest release of the technology, JAX-RS 1.1, which is a maintenance release that aligns JAX-RS with new features in Java EE 6. Let's take a look at a RESTful web service that uses JAX-RS.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5EvqgxKzbI/AAAAAAAAAJA/qv85CkiFrEs/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="412" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5EvqgxKzbI/AAAAAAAAAJA/qv85CkiFrEs/s640/1.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;In this example, the &lt;code&gt;ItemsResource&lt;/code&gt; class is a web service that manages a set of items. The imports in the class are for JAX-RS 1.1 annotations, classes, and interfaces.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@Path&lt;/code&gt; annotation specifies a relative path for the resource, in this case&lt;code&gt; "items"&lt;/code&gt;. The URI for the class resource is based on the application context. So if the application context for this example is &lt;code&gt;http://example.com&lt;/code&gt;, the URI for the class resource is &lt;code&gt;http://example.com/items&lt;/code&gt;. &lt;br /&gt;&lt;br /&gt;This means that if a client directs a request to the URI &lt;code&gt;http://example.com/items&lt;/code&gt;, the &lt;code&gt;ItemsResource&lt;/code&gt; class will serve it. The &lt;code&gt;@GET&lt;/code&gt; annotation specifies that the annotated method, here the &lt;code&gt;listItems()&lt;/code&gt; method, handles HTTP &lt;code&gt;GET&lt;/code&gt; requests. When a client directs an HTTP &lt;code&gt;GET&lt;/code&gt; request to the URI for the &lt;code&gt;ItemsResource&lt;/code&gt; resource, the JAX-RS runtime invokes the&lt;code&gt; listItems()&lt;/code&gt; method to handle the &lt;code&gt;GET&lt;/code&gt; request.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Notice the &lt;code&gt;@Produces&lt;/code&gt; annotation. It specifies the MIME media types that the methods in the resource can produce and return to the client. In the&lt;code&gt; ItemsResource&lt;/code&gt; example, the &lt;code&gt;@Produces&lt;/code&gt; annotation specifies&lt;code&gt; MediaType.APPLICATION_XML&lt;/code&gt;. The &lt;code&gt;MediaType&lt;/code&gt; class is an abstraction of a MIME media type. Constants supplied to the class identify the particular media type to be abstracted. The &lt;code&gt;MediaType.APPLICATION_XML&lt;/code&gt; specification is an abstraction of the MIME media type for XML content, "application/xml".&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Annotations such as &lt;code&gt;@Produces&lt;/code&gt; suggest some of the content type translation that JAX-RS handles automatically. For example, the &lt;code&gt;listItems()&lt;/code&gt; method returns a Java object of type &lt;code&gt;Items&lt;/code&gt;. JAX-RS automatically translates that Java type to the "application/xml" MIME type to be used in the HTTP response to the client. Note that the translation is automatic only if the returned type is supported by default. &lt;br /&gt;&lt;br /&gt;For instance, if &lt;code&gt;Items&lt;/code&gt; is a JAXB-annotated bean, then the translation would be automatic. However, if &lt;code&gt;Items&lt;/code&gt; is a POJO, you would need to implement a &lt;code&gt;MessageBodyReader&lt;/code&gt; to handle the serialization. You can also specify a &lt;code&gt;@Produces&lt;/code&gt; annotation on a method. In that case, the MIME type you specify on the method overrides the MIME types in any &lt;code&gt;@Produces&lt;/code&gt; annotation that you specify on the class. For example, you could specify a &lt;code&gt;@Produces&lt;/code&gt; annotation for the &lt;code&gt;listItems()&lt;/code&gt; method as follows:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5EwaIy4rNI/AAAAAAAAAJw/HULwAsDwbx0/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5EwaIy4rNI/AAAAAAAAAJw/HULwAsDwbx0/s400/2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;JAX-RS would then translate the &lt;code&gt;Items&lt;/code&gt; Java type to the "text/plain" MIME type, which represents plain text, and return content of that type in the HTTP response to the client.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;code&gt;@POST&lt;/code&gt; annotation specifies that the annotated method, in this case, the&lt;code&gt; create()&lt;/code&gt; method, responds to HTTP POST requests. In this example, the method creates a new item, perhaps in a database, and then returns a response indicating that it created the new item. When a client directs an = HTTP &lt;code&gt;POST&lt;/code&gt; request to the URI for the &lt;code&gt;ItemsResource&lt;/code&gt; resource, the JAX-RS runtime = invokes the &lt;code&gt;create()&lt;/code&gt; method to handle the &lt;code&gt;POST&lt;/code&gt; request.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Notice that the &lt;code&gt;@Consumes&lt;/code&gt; annotation is specified on the &lt;code&gt;create()&lt;/code&gt; method. The annotation specifies the MIME media types that the methods in the resource can accept from the client. As is the case for the &lt;code&gt;@Produces&lt;/code&gt; annotation, if you specify &lt;code&gt;@Consumes&lt;/code&gt; on a class, it applies to all the methods in the class. If you specify &lt;code&gt;@Consumes&lt;/code&gt; on a method, it overrides the MIME type in any &lt;code&gt;@Consumes&lt;/code&gt; annotation that you specify for the class. &lt;br /&gt;&lt;br /&gt;In the example, the &lt;code&gt;@Consumes&lt;/code&gt; annotation specifies that the &lt;code&gt;create()&lt;/code&gt; method can accept XML content, that is, the MIME type "application/xml". Here the type translation is from MIME type to Java type. When a client submits XML content in a &lt;code&gt;POST&lt;/code&gt; request to the URI for the &lt;code&gt;ItemsResource&lt;/code&gt; class, JAX-RS invokes the &lt;code&gt;create()&lt;/code&gt; method and automatically translates the incoming XML to the &lt;code&gt;Item&lt;/code&gt; Java type required for the method's argument.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;JAX-RS also includes a number of utility classes and interfaces that further simplify actions related to building and using RESTful web services in Java. You've already seen one of them: &lt;code&gt;MediaType&lt;/code&gt;, a class for abstracting MIME media types. Some others are:&lt;/div&gt;&lt;ul style="font-family: Verdana,sans-serif;"&gt;&lt;li&gt;&lt;code&gt;UriInfo&lt;/code&gt;, an interface for accessing URI information. In this example, the&lt;code&gt; @Context&lt;/code&gt; annotation injects the &lt;code&gt;UriInfo&lt;/code&gt; interface into the &lt;code&gt;uriInfo&lt;/code&gt; field of the &lt;code&gt;ItemsResource&lt;/code&gt; class.&lt;/li&gt;&lt;li&gt;&lt;code&gt;UriBuilder&lt;/code&gt;, a class for building URIs from their components&lt;/li&gt;&lt;li&gt;&lt;code&gt;Response&lt;/code&gt;, a class represents an HTTP response&lt;/li&gt;&lt;li&gt;&lt;code&gt;Response.ResponseBuilder&lt;/code&gt;, a class that builds &lt;code&gt;Response&lt;/code&gt; objects, in accordance with the well-known Builder Pattern&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;These classes and interfaces are used in the following statements in the example:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S5Ew5nJCyWI/AAAAAAAAAKg/TvMJW_lZbyQ/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="44" src="http://4.bp.blogspot.com/_6EEwisOalwc/S5Ew5nJCyWI/AAAAAAAAAKg/TvMJW_lZbyQ/s640/3.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The first statement builds a URI for the new item. The &lt;code&gt;getRequestUriBuilder()&lt;/code&gt; method is a &lt;code&gt;UriInfo&lt;/code&gt; method that creates a &lt;code&gt;UriBuilder&lt;/code&gt; object. The &lt;code&gt;path()&amp;nbsp;&lt;/code&gt; and&lt;code&gt; build()&lt;/code&gt; methods are &lt;code&gt;UriBuilder&lt;/code&gt; methods that together construct the URI for the new item.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The second statement creates a &lt;code&gt;Response&lt;/code&gt; object for the new item to be returned to the client. The &lt;code&gt;created&lt;/code&gt; method is a &lt;code&gt;Response&lt;/code&gt; method that creates a&lt;code&gt; Response.ResponseBuilder&lt;/code&gt; object. The &lt;code&gt;build()&lt;/code&gt; method is a &lt;code&gt;Response.ResponseBuilder&lt;/code&gt; method that creates the &lt;code&gt;Response&lt;/code&gt; object for the new item. This object delivers metadata to the JAX-RS runtime to construct the HTTP response.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;These utility classes and interfaces hide a lot of the complexity of HTTP programming — another reason why using JAX-RS is a simple way to build RESTful web services. However, this simplicity also extends beyond web services. JAX-RS can simplify the development of many types of HTTP-aware web applications. For example, if you need to build a web application that examines HTTP headers, you can probably code it in a much simpler way by using JAX-RS rather than other approaches.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;JAX-RS has other convenient features. For example, JAX-RS includes a number of parameter-based annotations to extract information from a request. One of these is &lt;code&gt;@QueryParam&lt;/code&gt;, with which you can extract query parameters from the&lt;code&gt; Query&lt;/code&gt; component of a request URL. Some other parameter-based annotations are &lt;code&gt;@MatrixParam&lt;/code&gt;, which extracts information from URL path segments,&lt;code&gt;@HeaderParam&lt;/code&gt;, which extracts information from HTTP headers, and&amp;nbsp; &lt;code&gt;@CookieParam&lt;/code&gt; which extracts information from the cookies declared in cookie related HTTP headers.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;Source: java.sun.com - J2EE 6 Overview&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-5143110561073639033?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/5143110561073639033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-java-api-for-restful-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5143110561073639033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5143110561073639033'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/j2ee-6-java-api-for-restful-web.html' title='J2EE 6 - Java API for RESTful Web Services (JAX-RS)'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S5EvqgxKzbI/AAAAAAAAAJA/qv85CkiFrEs/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-4830591735863899800</id><published>2010-03-05T06:49:00.000-08:00</published><updated>2010-03-05T06:49:31.360-08:00</updated><title type='text'>Introduction to Database Marketing</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;The purpose of &lt;b&gt;marketing &lt;/b&gt;is to enable the firm to enhance customer value. In today’s competitive, information-intensive, ROI-oriented business environment, &lt;b&gt;database marketing&lt;/b&gt; has emerged as an invaluable approach for achieving this purpose. The applications of database marketing are numerous and growing exponentially. Here are a few examples:&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• “Internet Portal, Inc.” determines which of its customers will be most receptive to targeted efforts to increase their usage of the portal. Perhaps more importantly, it determines which customers will not be receptive to these efforts.&lt;br /&gt;&lt;br /&gt;• “XYZ Bank” decides which of its many financial products should be marketed to which of its current customers.&lt;br /&gt;&lt;br /&gt;• “ABC Wireless” develops the ability to predict which customers are most likely to leave when their contract runs out, and designs a “churn management program” to encourage them to stay.&lt;br /&gt;&lt;br /&gt;• UK Retailer Tesco develops thousands of customized promotion packages it mails to its 14 million customers (Rohwedder 2006).&lt;br /&gt;&lt;br /&gt;• Best Buy has identified the major segments of customers who visit its stores. It then (1) tailors its store in a particular locality to fit the representation of the segments in that locality, and (2) trains its store personnel to recognize which segment a particular customer belongs to, so the customer can be serviced appropriately (Boyle 2006).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• Catalogers routinely use “predictive models” to decide which customers should receive which catalogs.&lt;br /&gt;&lt;br /&gt;• “E-tailer Z” uses “recommendation engines” to customize which products it “cross-sells” to which customers.&lt;br /&gt;&lt;br /&gt;• Dell Computer uses data analyses of prospects to improve its customer acquisition rate (Direct Marketing Association 2006).&amp;nbsp;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;These are but a few examples of database marketing in action. &lt;b&gt;The common theme is that all of them are based on analyzing customer data and implementing the results.&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Database marketing&lt;/b&gt; is the use of customer databases to enhance marketing productivity through more effective acquisition, retention, and development of customers.&lt;br /&gt;&lt;br /&gt;Each phrase in this definition is carefully chosen. &lt;b&gt;First, database marketing is fundamentally about using of customer databases.&lt;/b&gt; The “customer” can be either current customers or potential customers. Firms have data on their current customers’ purchase behavior and demographic and psychographic information, as well as the firm’s previous marketing efforts extended to these customers and their response to them. &lt;br /&gt;&lt;br /&gt;For potential customers prospects firms may be able to obtain data on customer demographics and psychographics, as well as purchase history data, although obviously not in the same depth as available for their current customers.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;Second, database marketing is about marketing productivity&lt;/b&gt;. In today’s results-oriented businesses, senior management often asks the simple question, “Do our marketing efforts pay off?” Database marketing attempts to quantify that effectiveness and improve it. It does this through effective targeting.&lt;br /&gt;&lt;br /&gt;The retail pioneer John Wannamaker is credited with saying, “I know half of my advertising doesn’t work; I just don’t know which half.” Thinking more broadly, in terms of marketing rather than advertising, database marketing identifies which half of the firm’s marketing efforts is wasted. It does this by learning which customers respond to marketing and which ones do not. The responsive customers are the ones who are then targeted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Third, database marketing is about managing customers&lt;/b&gt;. Customers must be acquired, retained, and developed. Acquiring customers means getting an individual who currently does not do business with the company to start doing business with the company. Retention means ensuring the current customer keeps doing business with the company. Development means enhancing the volume of business the retained customer does with the company. &lt;br /&gt;&lt;br /&gt;For now, the important point is to recognize that &lt;b&gt;database marketing is concerned with all three elements of customer equity&lt;/b&gt;. The Dell example above involves customer acquisition. The ABC Telecom example involves customer retention. The XYZ Bank, Tesco, and E-tailer Z examples involve customer development.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Why Is Database Marketing BecomingMore Important?&lt;/b&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The indications are that the database marketing industry is huge and increasing. The question is, why? We hypothesize five major classes of reasons:&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Information technology&lt;/b&gt;: Companies now have the ability to store and manipulate terabytes of data. While the software to do so is expensive, the capabilities are dramatic.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Growth of the Internet&lt;/b&gt;: The Internet is a data-collection “machine.” Many companies that previously could not collect and organize data on their customers can now do so through the Internet.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Lower productivity of mass marketing&lt;/b&gt;: While there are no good statistics on this, there is the belief that mass advertising and non-customized marketing efforts are eliciting poorer response, while costs are increasing and margins are declining. &lt;br /&gt;&lt;br /&gt;One can write the profitability of a marketing campaign as Π = Npm−Nc, where N is the number of customers reached by the campaign, p is the percentage that respond, m is the contribution margin when they respond, and c is the cost of contact per customer. For a campaign to be profitability, we need p &amp;gt; c/m. Unfortunately, all three of these terms are moving in the wrong direction. Response is lower (p), costs are higher (c), and margins are lower (m). Database marketing targets customers for whom response is maximal, helping the profit equation to remain in the black.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• &lt;b&gt;Marketing accountability&lt;/b&gt;: Results-oriented senior managers are requiring all business functions to justify their existence, including marketing. No longer is it taken on faith that “marketing works” or “marketing is a cost of doing business.” The demands of senior managers for proven results feed directly into database marketing’s emphasis on analyzing data and measuring results.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Increasing interest in customer relationships&lt;/b&gt;: Companies are more concerned than ever about their relationship with the customer. They see their products commoditizing and customer loyalty wilting away. Database marketing is a systematic way to improve customer relationships.&lt;br /&gt;&lt;br /&gt;• &lt;b&gt;Establishing a competitive advantage&lt;/b&gt;: Companies are always trying to determine what will be their source of competitive advantage. Perhaps that source lies in the data they have on their own customers, which allows them to service those customers better through database marketing.&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Source: Database Marketing Analyzing and Managing Customers - Springer&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-4830591735863899800?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/4830591735863899800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/03/introduction-to-database-marketing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4830591735863899800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4830591735863899800'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/03/introduction-to-database-marketing.html' title='Introduction to Database Marketing'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6439335837836134542</id><published>2010-01-15T02:01:00.000-08:00</published><updated>2010-01-15T02:01:42.504-08:00</updated><title type='text'>Scrum - The Rugby Strategy in Product Development</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Scrum is not primarily about software development. It is a method for managing product development that can be wrapped around any specific technology, including software. Scrum as it exists today grew from its beginnings in Japan in the mid-1980s. The name “Scrum” is from the game of rugby and refers to a strategy used to get a ball back into play. The Scrum process is incremental, just as with other Agile methods.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6EEwisOalwc/S1A7niKOKBI/AAAAAAAAAIw/o3JE-gD859M/s1600-h/untitled2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6EEwisOalwc/S1A7niKOKBI/AAAAAAAAAIw/o3JE-gD859M/s640/untitled2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Scrum practices&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The Scrum Master&lt;/b&gt;&lt;br /&gt;“The Scrum Master is responsible for the success of Scrum” . Although Scrum defines this as a new role, in traditional projects its responsibilities are often taken on by an existing position such as project manager or team leader. The primary responsibilities of the Scrum Master are to:&lt;br /&gt;&lt;br /&gt;◗ Ensure that the Scrum practices are followed and that the values behind Scrum drive enactment of the process.&lt;br /&gt;◗ Work with management and the customer to identify the individual who will take on the role of “Product Owner.”&lt;br /&gt;◗ Facilitate each of the other practices&lt;br /&gt;◗ Be the interface point among management, the customer, and the Scrum team. Of primary importance are:&lt;br /&gt;◗ Communicating project status;&lt;br /&gt;◗ Removing impediments to progress &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Product Backlog&lt;/b&gt;&lt;br /&gt;“Product Backlog is an evolving, prioritized queue of business and technical functionality that needs to be developed into a system”. The Product Backlog is the sum total of the work that remains to be done on the project and includes everything from major features to bug fixes. Any stakeholder in the project can contribute to the Product Backlog at any time, but it is the Product Owner who has the primary responsibility for determining the priority of backlog items.&lt;br /&gt;&lt;br /&gt;The primary measure of progress in a Scrum project is the change in the number of items in the Product Backlog over time. It may grow in early Sprints as stakeholders gain an understanding of the system being built, but ultimately, a pattern of steady decrease in the size of the Product Backlog is expected. If this does not materialize, or if it is not fast enough, then hard decisions must be made about the project’s scope.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Scrum Teams&lt;/b&gt;&lt;br /&gt;“A team commits to achieving a Sprint goal. The team is accorded full authority to do whatever it decides is necessary to achieve the goal” . Almost all software development involves teams. The key difference with Scrum is that the team freely commits to what they believe they can produce during each Sprint, and they are empowered to make whatever decisions they must to fulfill those commitments. This level of autonomy is foreign to most organizations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Daily Scrum Meetings&lt;/b&gt;&lt;br /&gt;“Software development is a complex process that requires lots of communications.&lt;br /&gt;The Daily Scrum meeting is where the team comes to communicate”. The Daily Scrum (the defining feature of Scrum) is a short 15-minute meeting that takes place every working day. It is the forum where team members exchange information and others may come to listen but not speak. To keep the meeting short, all deliberation and discussion is relegated to meetings of interested people after the Daily Scrum. During the Daily Scrum, each team member answers three questions:&lt;br /&gt;&lt;br /&gt;◗ What have you done since the last Scrum?&lt;br /&gt;◗ What will you do between now and the next Scrum?&lt;br /&gt;◗ What got in your way of doing work?&lt;br /&gt;&lt;br /&gt;The third question provides the Scrum Master with the information he or she needs to be effective in removing impediments to progress and ensuring the team continues to be productive.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sprint Planning Meeting&lt;/b&gt;&lt;br /&gt;“Customers, users, management, the Product Owner, and the Scrum Team determine the next Sprint goal and functionality at the Sprint Planning meeting. The team then devises the individual tasks that must be performed to build the product increment”.&lt;br /&gt;&lt;br /&gt;Each 30-day Sprint begins with this planning meeting. The critical outputs of this meeting are:&lt;br /&gt;&lt;br /&gt;◗ Sprint Goal—The objective that is to be achieved during this Sprint.&lt;br /&gt;◗ Sprint Backlog—The subset of the Product Backlog that will be completed&lt;br /&gt;during the Sprint.&lt;br /&gt;&lt;br /&gt;The Product Owner is the sole arbiter of the priority of the Product Backlog items. But only the Scrum Team can commit themselves to completing specific work. The Sprint Planning meeting is the forum where lobbying and negotiation take place. At its conclusion, all stakeholders will have agreed to a Sprint Goal and Sprint Backlog to which the Team is willing to commit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sprint&lt;/b&gt;&lt;br /&gt;“The team works for a fixed period of time called a Sprint”. After the negotiations of the Sprint Planning meeting, the Scrum Team has full authority to complete the 30-day Sprint by doing whatever they feel is necessary. During the Sprint, the team self-organizes and self-directs, and their authority even extends to being able to:&lt;br /&gt;&lt;br /&gt;◗ Change the functionality to be delivered by the Sprint as long as the Sprint Goal is still achieved.&lt;br /&gt;◗ Abort the Sprint if new information leads them to believe its Goal or Backlog is no longer achievable or relevant.&lt;br /&gt;&lt;br /&gt;Assuming the team does not abort the Sprint, it ends with the delivery of the promised executable product increment.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sprint Review&lt;/b&gt;&lt;br /&gt;“The Sprint Review meeting is a four-hour informational meeting. During this meeting, the team presents to management, customers, users, and the Product Owner the product increment that it has built during the Sprint”. This meeting provides a concrete picture of the progress achieved during the Sprint and lays the foundation for the next Sprint Planning meeting.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;- Takeuchi, H., and I. Nonaka, “The New New Product Development Game,” Harvard Business Review, January 1986.&lt;br /&gt;- Schwaber, K., and M. Beedle, Agile Software Development with Scrum, Upper Saddle River, NJ: Prentice-Hall, 2002.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6439335837836134542?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6439335837836134542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/scrum-rugby-strategy-in-product.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6439335837836134542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6439335837836134542'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/scrum-rugby-strategy-in-product.html' title='Scrum - The Rugby Strategy in Product Development'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6EEwisOalwc/S1A7niKOKBI/AAAAAAAAAIw/o3JE-gD859M/s72-c/untitled2.JPG' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-8952445971779672859</id><published>2010-01-15T01:43:00.000-08:00</published><updated>2010-01-15T01:45:02.791-08:00</updated><title type='text'>22 Lean Software Development tools</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="color: #990000; font-size: small;"&gt;&lt;span style="color: black;"&gt;LD is characterized by seven lean principles that are elaborated&lt;/span&gt;&lt;span style="color: black;"&gt; into 22 Lean Software Development tools.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Eliminate Waste&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 1: Seeing Waste&lt;/b&gt;—You should looking for waste in these parts of your development process:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Partially done work (e.g., unimplemented designs);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Extra processes (steps in your process that do not add value);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Extra features (things for which the customer did not ask);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Task switching (people assigned to multiple projects);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Waiting (for hand-offs);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Motion (hand-offs);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Defects.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 2: Value Stream Mapping&lt;/b&gt;—Identify all the steps in your process that add value to the product, and for each of those steps, identify how much time is required to add the value and how much time is wasted in waiting. Note that some steps that do not directly add value are necessary (e.g., Configuration Management mitigates risks).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;Amplify Learning&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 3: Feedback&lt;/b&gt;—Design your process so that participants receive feedback as often as possible. For example:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Test early and often;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Show users the evolving system;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Prototype instead of analyzing.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 4: Iterations&lt;/b&gt;—Iterative time-boxed development is the best way to converge on the ultimate solution. Often this results in negotiation of project scope or duration. But such negotiation is good if done early in the project, when adjustments are less painful.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 5: Synchronization&lt;/b&gt;—Every development method results in synchronization problems (e.g., collective code ownership can result in multiple people changing the same program at the same time.) The authors recommend several synchronization mechanisms for software projects.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 6: Set-Based Development&lt;/b&gt;—When faced with a difficult problem, it is often good to think about the solution space instead of specific solutions. The authors recommend these steps:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Develop multiple options (e.g., brainstorming ideas);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Communicate constraints;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Let the solution emerge.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;Decide as Late as Possible&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 7: Options Thinking&lt;/b&gt;—In financial markets, you can purchase options that, for a price, allow you to delay making a decision until a later date. The same model can be used in Agile software development. By incurring some added cost, options can be held open, allowing decisions to be delayed until more information is available.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 8: The Last Responsible Moment&lt;/b&gt;—Options Thinking (Tool 7) delays commitment to a decision until the last responsible moment. The authors define that as “the moment at which failing to make a decision eliminates an important alternative” .&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 9: Making Decisions&lt;/b&gt;—Good decisions are more likely to be made when the options can be narrowed by the application of a set of rules. The authors recommend that decisions in software development always be made in light of the seven lean principles &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;Deliver as Fast as Possible&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 10: Pull Systems&lt;/b&gt;—The best way to ensure that each team member knows exactly what he or she should do each day is to ensure that the environment provides automatic prompting. For example:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Short iterations with well-defined deliverables provide near-term targets for people to work toward.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Daily stand-up meetings keep everyone aware of progress toward that target.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Information radiators (publicly posted charts) keep everyone aware of the big picture.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 11: Queuing Theory&lt;/b&gt;—Much waste can be attributed to people waiting for constrained resources. The authors suggest using queuing theory to analyze all bottlenecks in your software process and determine ways to minimize the cycle time.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 12: Cost of Delay&lt;/b&gt;—In many software projects, the cost of delaying delivery (even when it is significant) is often invisible to the project team and sometimes to managers. The authors recommend developing a financial model for the project that will allow all stakeholders to make appropriate trade-off decisions, especially when cost and delivery date are in conflict.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;Empower the Team&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 13: Self-Determination&lt;/b&gt;—The people who do the work are in the best position to improve their processes and eliminate waste. Although Quality Circles have fallen out of favor, this philosophy still has value in guiding process improvement efforts.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 14: Motivation&lt;/b&gt;—Motivating a project team to perform well has many dimensions. The authors stress that the team must have:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Purpose—A shared goal that they all believe in.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Belonging—They feel that each person is a part of the team.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Safety—Mistakes are corrected without punishing people.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Competence—The team feels they able to complete their tasks.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;◗ Progress—Each person can see regular progress on the project.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 15: Leadership&lt;/b&gt;—Project management and technical leadership are two distinct skill sets. A successful team needs both, and it is rare for those two attributes to exist in the same person.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 16: Expertise&lt;/b&gt;—Every software project requires a variety of expertise (e.g., domain, user interface, database, project management, writing). This tool is about identifying communities of expertise and ensuring that they are available to the project.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;Build Integrity In&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 17: Perceived Integrity&lt;/b&gt;—Perceived Integrity is the system’s integrity from customers’ viewpoint. Do they perceive it to be useful and well designed? With appropriate interaction between the team and customer, the team can be sure they build the right system.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 18: Conceptual Integrity&lt;/b&gt;—Conceptual Integrity is an important component of Perceived Integrity (Tool 17). Building the system right (as differentiated from building the right system) involves such concepts as architecture, consistency, and elegance.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 19: Refactoring&lt;/b&gt;—Programmers should improve the software any time they see the opportunity to do so. Refactoring refers to redesign of the system to improve the program’s Perceived and Conceptual Integrity (Tools 17 and 18).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Also, after many changes have been made to software, it tends to become brittle. (That is, over time, it becomes more and more difficult to make any changes to the software without breaking it in unforeseen ways.) Brittle code is a Conceptual Integrity problem that Refactoring remedies.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 20: Testing&lt;/b&gt;—Testing provides an important feedback mechanism. (See Tool 3.) Both validation (ensuring the right system is built) and verification (ensuring the system is built right) must be done throughout the development process, not just at the end. That way, the team gets the feedback they need to ensure their system’s integrity, both Perceived (Tool 17) and Conceptual (Tool 18).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #990000; font-size: small;"&gt;See the Whole&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 21: Measurements&lt;/b&gt;—The authors focus on the various problems associated with measurement (e.g., suboptimization) and their sources. In essence, this tool is about focusing measurement where it is effective: at higher-level aggregations of data. This focus has the dual benefit of protecting individual engineers from management’s abuse of their personal data and focusing attention on data that is useful to the organization as a whole.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Tool 22: Contracts&lt;/b&gt;—Contracts are a fact any time the supplier and customer are different companies. Because these relationships can be so complex and varied, the authors discuss a variety of contractual arrangements and the positive and negative effects of each.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;- Poppendieck, M., and T. Poppendieck, Lean Software Development: An Agile Toolkit, Reading, MA: Addison-Wesley, Inc., 2003.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;- Cockburn, A., Agile Software Development, Reading, MA: Addison- Wesley, Inc., 2002.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-8952445971779672859?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/8952445971779672859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/22-lean-software-development-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8952445971779672859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8952445971779672859'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/22-lean-software-development-tools.html' title='22 Lean Software Development tools'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2468746345758787621</id><published>2010-01-15T00:51:00.000-08:00</published><updated>2010-01-15T01:02:03.172-08:00</updated><title type='text'>Agile Simplified with Feature Driven Development</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;FDD differs from other Agile methods in its focus on upfront design and planning. As can be seen from the FDD process diagram in this picture, the Object Model, feature list, and planning are done once at the beginning of the project, and iterations are essentially an incremental building of identified features. This is not to say that the model, feature list, and plans never change; rather, it indicates that evolution of those items is not an inherent part of this method.&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S1AsGZwcF_I/AAAAAAAAAIg/R5QDXYUBM-M/s1600-h/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/S1AsGZwcF_I/AAAAAAAAAIg/R5QDXYUBM-M/s640/untitled.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;FDD practices&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Domain Object Modeling&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;FDD begins with the construction of a relatively detailed object model for the system to be built. This model is not intended to provide all the design details for the features. Rather, its intention is to force all stakeholders’ assumptions out into the open and provide a road map for the project. Although the initial Object Model is built at the beginning of the project, each increment of development results in updates to it as details are filled in and corrections are made. Thus, the Object Model is a continually evolving picture of the product, as it is currently understood.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Developing by feature&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Object Model identifies all the expected classes in the system, but development is not done class by class. Rather FDD requires that development be done a feature at a time.&lt;br /&gt;&lt;br /&gt;FDD defines a feature this way. “A feature is a small, client-valued function expressed in the form: Action - Result - Object&lt;action&gt;&lt;result&gt; &lt;object&gt;&lt;p&gt;&lt;action&gt;&lt;result&gt; &lt;object&gt;&lt;p&gt;with the appropriate prepositions between the action, result, or object”. An example of a feature might be, “Retrieve the medical records of a patient.”  As can be seen from the example, a feature is small and can normally be developed in a few hours or days. FDD defines the upper limit on feature size at 2 weeks. Because developing a feature can require additions or changes to several classes, the next two practices are included in FDD to define how this activity is managed.  &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;action&gt;&lt;result&gt; &lt;object&gt;&lt;p&gt;&lt;b&gt;Class (code) ownership&lt;/b&gt;  FDD prescribes that a single developer owns each class. This is diametrically opposed to XP’s practice of “collective ownership” and grows from a different philosophical basis. FDD depends on the class owner to have a full and detailed understanding of all that his or her class does and contains.  The philosophy is that such an individual will be more efficient at making changes to a class than anyone else on the project team. Of course, the danger in this practice is that the loss of a team member can be catastrophic.  This class ownership practice essentially requires that the class owner be directly involved in the development of each feature that affects his or her class. The next practice (feature teams) defines how this requirement is managed.  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Feature teams&lt;/b&gt;  Each feature is implemented by a team of project members, consisting of the feature owner (a Chief Programmer) and the owners of all the classes affected by the feature. With direct participation of the expert on each class involved in the feature, that feature should be implemented not only very quickly but also in the most effective way. If, during a feature implementation, the team determines that another class must change, the owner of that class is simply added to the feature team.  Thus, feature teams are a dynamic part of FDD, forming and disbanding on a daily or weekly basis as the development of each feature is undertaken and completed. Multiple feature teams will likely be operating at any one point in time, and each individual may be operating on more than one feature team at a time. A feature team has not completed its work until it has verified its feature and integrated it into the current product baseline.   &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Inspections&lt;/b&gt;  The primary purpose of an inspection is to detect defects in designs and code, but FDD identifies two other critical results of inspections. First, it mitigates the risks involved in the class ownership practice by ensuring that many team members have a good understanding of each class. And second, it is a forcing function to ensure that the project’s coding standards are adhered to consistently. &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Regular build schedule&lt;/b&gt;  FDD does not prescribe any particular timing for builds, only that they be “regular.” How often builds are done must be defined for each project based on the project’s needs and constraints and the environment. Even so, FDD envisions that builds are done no less often than weekly, and possibly daily or continuously.  Regular builds are done to maintain an up-to-date system comprised of all the features that have been developed to date. This current system then can be used as the baseline for testing each new feature, as a basis for writers to develop documentation, and as a continually available demonstration for customers and project sponsors.  &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Configuration Management&lt;/b&gt;  This FDD practice acknowledges the importance of good CM to the success of an FDD project. The dynamism of the feature teams and regular build schedule make it critical that the project carefully manage its artifacts. But FDD does not prescribe any specifics about CM. It simply directs that the project team practice a level of CM rigor that is appropriate to the project size, complexity, and scope.  &lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Reporting/Visibility of results&lt;/b&gt;  FDD uses a unique mechanism for tracking and reporting the project’s status so that the common “90% complete” syndrome is avoided. This mechanism uses the project’s feature list and feature development milestones along with some weighting factors for those milestones.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;FDD defines the milestones for each feature to be:&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Domain walkthrough—complete;&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Design—ready for inspection;&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Design inspection—and any rework and reinspection complete;&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Code—ready for inspection;&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Code inspection—and any rework and reinspection complete;&amp;nbsp;&lt;/p&gt;&lt;p&gt;◗ Promote to build—all feature code checked in and ready for the next build.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Each FDD project team uses its historical data to assign a weight to each milestone. For example, if their data shows that they average 4% of their time in design walkthroughs, then that milestone is given a weight of 0.04 for every feature in the project.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;References&amp;nbsp;&lt;/p&gt;&lt;p&gt;Palmer, S. R., and J. M. Felsing, A Practical Guide to Feature-Driven Development, Upper Saddle River, NJ: Prentice-Hall, 2002.   &lt;/p&gt;&lt;/object&gt;&lt;/result&gt;&lt;/action&gt;     &lt;/p&gt;&lt;/object&gt;&lt;/result&gt;&lt;/action&gt;  &lt;/p&gt;&lt;/object&gt;&lt;/result&gt;&lt;/action&gt;  &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2468746345758787621?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2468746345758787621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/agile-simplified-with-feature-driven.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2468746345758787621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2468746345758787621'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/agile-simplified-with-feature-driven.html' title='Agile Simplified with Feature Driven Development'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S1AsGZwcF_I/AAAAAAAAAIg/R5QDXYUBM-M/s72-c/untitled.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6881356748952635814</id><published>2010-01-14T08:35:00.000-08:00</published><updated>2010-01-14T08:35:54.701-08:00</updated><title type='text'>The 12 Practices of Extreme Programming</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;The Planning Game&lt;/b&gt;&lt;br /&gt;In XP, planning (characterized as “The Planning Game”) is both iterative and collaborative. It is iterative in that the “game is played” at the beginning of each increment of development. It is collaborative in that it is played among the technical team members and the customer and management (referred to as&lt;br /&gt;the business people). During the Planning Game for each increment, the business people and the technical people negotiate to establish an achievable plan that best meets the business needs. During this negotiation, the customer identifies what system features would be most valuable to develop next, the technical team determines the feasibility and effort for developing that functionality, and management ensures that the project stays within any relevant parameters (e.g., cost).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Small releases&lt;/b&gt;&lt;br /&gt;An XP project team develops the system in the smallest reasonable chunks that provide demonstrable value for the customer. Because each increment should take only a few weeks to develop, the functionality that can be developed in that time is very constrained. But even when it is not feasible to actually release an increment for use, that increment is still demonstrated for customers so they can verify that it is progressing toward meeting their needs and appears to be usable.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Metaphor&lt;/b&gt;&lt;br /&gt;An XP project’s Metaphor is the overall concept of the system that the team will build. The Metaphor uses similes to describe what the system will be like, in terms that are readily recognizable to both the development team and customer. This very high-level vision is the XP project’s overall requirement, and there is an expectation that it will remain relatively stable throughout the project. &lt;br /&gt;&lt;br /&gt;The actual descriptions of the system features are documented separately in “Stories.” Each feature is documented in a separate Story that describes the feature’s essential attributes and actions. These descriptions are also quite brief, comprising only the text that can be written on a 3x5-inch card. The stories on an XP project tend to change dynamically as the development team and customer learn about the product they are building and gain a better understanding of the customer’s needs. The Stories, taken together with the project’s Metaphor, form the requirements from which the system is planned and developed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simple design&lt;/b&gt;&lt;br /&gt;This practice is the heart of XP’s value of “Simplicity.” It advises that programmers avoid designing for the features that they “know” are coming (even if they will be implemented within the current increment). Instead, they must use the simplest possible design that will allow the current Story to be implemented.&lt;br /&gt;&lt;br /&gt;XP is based on the philosophy that this “simple design” practice will result in less rework than designing for the future. This is because we are often wrong when we design for the future, and when we are, the rework can be significant. Beck sums up this practice: “If you believe that the future is uncertain, and you believe that you can cheaply change your mind, then putting in functionality on speculation is crazy”.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Test First&lt;/b&gt;&lt;br /&gt;One of XP’s defining philosophies is “Test First.” This philosophy states that before a pair of programmers writes a single line of code, they must implement the automated tests that will be required to verify the Story they are about to write. &lt;br /&gt;&lt;br /&gt;In addition, customers also develop a set of functional tests One of XP’s defining philosophies is “Test First.” This philosophy states that before a pair of programmers writes a single line of code, they must implement the automated tests that will be required to verify the Story they are to verify the Story according to their own needs. Coding the XP way consists of code a little, test a little, code a little, test a little—with the test results being the programmers’ measure of progress on the Story at hand. Work on the Story is not complete until all the tests run 100% clean. Successful integration is also defined in terms of these automated tests. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Refactoring&lt;/b&gt;&lt;br /&gt;XP’s Refactoring practice prompts each pair of programmers to ask themselves before they begin work on a Story if there is a way to redesign the system so that the final result “is the simplest thing that could possibly work”. Then, after they have completed work on the Story, Refactoring prompts them to ask the same question again. In either case, if the answer is, “Yes,” then the redesign is implemented as part of the work on that Story. Refactoring is used to ensure that the “simple” designs that programmers start with do not grow into needless complexity as more Stories are added.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pair Programming&lt;/b&gt;&lt;br /&gt;The most visible practice of XP is Pair Programming. This practice calls for all technical work (from design to coding to test) to be done by a pair of programmers working together at a single workstation. Pairs form and change dynamically throughout the project according to the needs of each story. The member of each pair who is not typing has a very special job. That person is to be thinking about the wider impacts of what is being implemented— to be continuously asking questions like, “Is there a simpler way to do this?” “Do we need tests that we did not yet create?” “Are there defects in this code?” “Will this strategy work?” Pair Programming has been called the ultimate in peer reviews, because it entails a continuous, real-time review of everything that is done. This is one more example of XP’s strong emphasis on technical excellence.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Collective ownership&lt;/b&gt;&lt;br /&gt;XP takes a position on code ownership that is quite different from the standard model of assigning responsibility for each code module to a specific person. XP goes to the opposite extreme—stating that code should never be “owned” by any individual. When anyone identifies a need to change any code, it is that pair’s responsibility to implement that change. Every member of the team owns all code collectively.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Continuous integration&lt;/b&gt;&lt;br /&gt;XP goes beyond the concept of daily builds to require that integration of the product being built goes on continuously. As a pair completes each Story, their last step is to integrate their new and changed code (along with their automated tests) into the baseline system. They then run the entire test suite all of their own automated tests, as well as those for all the Stories that are already part of the system. If any test fails, the new Story and tests are backed out, and the pair must resolve the problems before they can try again. When all the tests run 100% clean, the Story has been successfully integrated and becomes part of the project baseline. Because there are several pairs of programmers working on different Stories at all times, this practice results in someone integrating something almost all the time.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;40-hour week&lt;/b&gt;&lt;br /&gt;XP calls for overtime to be rare. It explicitly suggests that overtime should not be worked 2 weeks in a row. The intention with this practice is to keep everyone fresh so they can continue indefinitely on an aggressive but sustainable pace.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;On-site customer&lt;/b&gt;&lt;br /&gt;One of the key members of an XP project team is the on-site customer. This is a person who will be a real user of the system being built, or some other person who can authoritatively stand in for the customer/user. This practice ensures that an appropriately knowledgeable person is continuously available to the team to review work, try things out, answer questions, and make implementation decisions when they are needed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Coding standards&lt;/b&gt;&lt;br /&gt;Several other XP practices (most notably Pair Programming and collective ownership) give rise to the importance of good coding standards. In a team that is collaborating this closely, appropriate standards are the only way to maintain order.Additionally this practice is support knowledge flow and knowledge management in your team.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References&lt;br /&gt;Beck, K., Extreme Programming Explained, Reading, MA: Addison-Wesley Longman, Inc., 2000.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6881356748952635814?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6881356748952635814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/12-practices-of-extreme-programming.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6881356748952635814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6881356748952635814'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/12-practices-of-extreme-programming.html' title='The 12 Practices of Extreme Programming'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-8333103221092141475</id><published>2010-01-14T08:12:00.000-08:00</published><updated>2010-01-14T08:12:20.211-08:00</updated><title type='text'>Nine Principles of Dynamic Systems Development Method</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Principle 1: Active user involvement is imperative.&lt;/b&gt;&lt;br /&gt;DSDM’s strong focus on the business purpose of the system being developed requires that the ultimate users of the system be involved throughout the development project. This is because the system attributes that will make it fit for its purpose cannot be understood well enough in the project’s early stages to commit them to a detailed specification. Therefore, the only way to make appropriate detailed decisions and know that the evolving system is converging on the ideal of “fitness” is to fully involve the users throughout the project.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;Principle 2: DSDM teams must be empowered to make decisions.&lt;/b&gt;&lt;br /&gt;This principle does not give the team free reign to do whatever they wish. Rather, it advocates that the team be delegated the authority to make most of the day-to-day decisions as the project progresses. With active user involvement, such delegation can result in the team being able to move quickly and steadily toward system delivery. However, when a decision that must be made falls outside the team’s authority (e.g., cost overruns), DSDM recognizes the importance of raising such decisions to the appropriate authority.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Principle 3: The focus is on frequent delivery of products.&lt;/b&gt;&lt;br /&gt;This principle means that the project’s progress should be measured by the production of tangible products, rather than by mere activity. The phrase “delivery of products” does not refer only to the incremental delivery of a working system to an end user. Products in this sense include any sort of work product that may be produced as the project moves forward (e.g., a specification, a throwaway prototype, a design document); and delivery could be simply within the project team. DSDM requires that as the project moves forward, it must produce artifacts that prove that progress is being made.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 4: Fitness for business purpose is the essential criterion for acceptance of deliverables.&lt;/b&gt;&lt;br /&gt;This principle is the practical manifestation of DSDM’s belief that specifying detailed requirements upfront is not helpful. By placing fitness for purpose above satisfaction of requirements, and by involving users consistently, DSDM zeroes in on the end user as the only one who can say whether or not the system as it is evolving is acceptable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 5: Iterative and incremental development is necessary to converge on an accurate business solution.&lt;/b&gt;&lt;br /&gt;In an environment where it is assumed that the project’s end result cannot be foreseen in great detail, incremental development is the best insurance against the project going terribly awry. Incremental development is essentially an exercise in trial and error, where each new increment is presented to the user who validates (or invalidates) the direction the team has taken. “Converge” is the key word in the principle. It is assumed that the most direct path to the end product is not likely to be known, so DSDM engages in constant checking and correcting of the path to bring the project to a satisfactory end as quickly as is reasonably possible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 6: All changes during development are reversible.&lt;/b&gt;&lt;br /&gt;If we agree that the project is practicing trial and error, then we must expect that there will indeed be errors from time to time. This principle gives us permission to discard erroneous work when necessary. Surely, we will try to salvage the good from a mistake, but we must recognize that there will be times when the most efficient path is to discard some work and try again.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 7: Requirements are baselined at a high level.&lt;/b&gt;&lt;br /&gt;The first three words of this principle, “Requirements are baselined,” represent a departure of DSDM from some other Agile methods. DSDM recognizes the importance to the project of stability in scope and direction. By baselining (freezing) the requirements at some level, stakeholders are establishing a stable basis for the team’s work. This does not mean that this baseline will not change; rather, it requires that serious deliberation precede any such change so that all stakeholders understand and agree to what would become the new requirements baseline. The last four words, “at a high level,” is the part of this principle that makes it agile. It leaves the details of what the requirements mean to be worked out between the team and user.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 8: Testing is integrated throughout the life cycle.&lt;/b&gt;&lt;br /&gt;Testing does not show up as a step in the DSDM life cycle because, like other Agile methods, DSDM promotes a strong quality-consciousness by all team members. Every task should include an appropriate verification or validation step like a review or test by a team member or user. This principle works together with principles 1, 4, and 5 to continually check the project’s progress toward its goal of a system fit for its business purpose.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Principle 9: A collaborative and cooperative approach between all stakeholders is essential.&lt;/b&gt;&lt;br /&gt;This last principle is little more than the sum of the first eight. The only way that principles 1–8 can be applied successfully on a project is if all stakeholders accept DSDM and their roles as DSDM defines them. If any stakeholder does not agree (especially an influential stakeholder), then DSDM cannot work in that environment.&lt;br /&gt;&lt;br /&gt;Reference&lt;br /&gt;Stapleton, J., DSDM: Business Focused Development, London, England: Pearson Education, 2003.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-8333103221092141475?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/8333103221092141475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/nine-principles-of-dynamic-systems.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8333103221092141475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8333103221092141475'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/nine-principles-of-dynamic-systems.html' title='Nine Principles of Dynamic Systems Development Method'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-989866822238928338</id><published>2010-01-14T07:55:00.000-08:00</published><updated>2010-01-14T07:55:22.468-08:00</updated><title type='text'>Introduction to Adaptive Software Development</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Jim Highsmith’s ASD arose out of his understanding of Complex Adaptive Systems theory. He views a software project team as a complex adaptive system that consists of agents (team members and other stakeholders), environments (organizational, technological, process), and emergent outcomes (the product being developed).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: Verdana,sans-serif;"&gt;&lt;b&gt;The Adaptive Life Cycle&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;ASD’s Adaptive Life Cycle is composed of five steps. The initial step of “project initiation” is done once at the beginning of the project, and the final step of “final Q/A and release” is done once at the end.&lt;br /&gt;&lt;br /&gt;The other three steps (adaptive cycle planning, concurrent component engineering and Quality Review) form the “Learning Loop” or “Adaptive Cycles” that are the heart of ASD. These Adaptive Cycles are described as:&lt;br /&gt;&lt;br /&gt;◗ &lt;b&gt;Mission-driven&lt;/b&gt;—each cycle must make progress toward the project mission;&lt;br /&gt;◗ &lt;b&gt;Component-based&lt;/b&gt;—more centrally focused on building things than on performing tasks;&lt;br /&gt;◗ &lt;b&gt;Iterative&lt;/b&gt;—going through the learning loop repeatedly is the key to progress;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;◗ &lt;b&gt;Time-boxed&lt;/b&gt;—the entire project as well as each cycle of the project is completed within a prescribed time period (with the developed functionality expanding or contracting to fit);&lt;br /&gt;◗ &lt;b&gt;Risk-driven&lt;/b&gt;—focusing on the highest-risk items first;&lt;br /&gt;◗ &lt;b&gt;Change-tolerant&lt;/b&gt;—designed to accommodate changes in each cycle.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/S0879Zwt1gI/AAAAAAAAAIQ/9pCElelsbPc/s1600-h/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/S0879Zwt1gI/AAAAAAAAAIQ/9pCElelsbPc/s400/untitled.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Speculate: Project initiation&lt;/b&gt;&lt;br /&gt;The project’s first step in speculation is an initiation workshop, from a few days to a few weeks in length, depending on the project’s size and scope. During initiation, the entire project team and the project sponsor or customer determine the project’s guiding parameters, including the project mission, objectives and constraints, the organization for the project, the system requirements, initial estimates of product size and scope, and key risks to the project.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Learning Loop&lt;/b&gt;&lt;br /&gt;The initiation practice lays the groundwork for the project’s “Learning Loop.” This loop sees the project continually cycling from speculation to collaboration, to learning as the product emerges incrementally from the adaptive cycles (an iterative approach).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Speculate: Adaptive Cycle Planning&lt;/b&gt;&lt;br /&gt;The first cycle of the project begins with the speculative practice we normally call “planning.” This includes these steps:&lt;br /&gt;&lt;br /&gt;◗ Determine the project time-box.&lt;br /&gt;◗ Determine the optimal number of cycles and the time-box for each. (Each cycle is usually established to be from a couple of weeks to a couple of months in length.)&lt;br /&gt;◗ Write an objective statement for each cycle.&lt;br /&gt;◗ Assign primary components to cycles.&lt;br /&gt;◗ Assign technology and support components to cycles.&lt;br /&gt;◗ Develop a project task list.&lt;br /&gt;&lt;br /&gt;In each successive project cycle, Adaptive Cycle Planning consists of revisiting and revising these things as necessary, based on progress to date and what has been learned in earlier cycles.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;Collaborate: Concurrent component engineering&lt;/b&gt;&lt;br /&gt;This is where the real work gets done. The content of this phase of each cycle is planned in the Adaptive Cycle Planning phase and done to the extent possible within the planned time-box. Trade-offs may have to be made as the end of the time-box constrains what can be accomplished. This phase is shown as multiple boxes because team members or subteams are generally working concurrently and integrating their work products.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Learn: Quality Review&lt;/b&gt;&lt;br /&gt;The end of each cycle is marked by learning activities, where the project team gains insight into progress to date and collects the information they need to perform any replanning at the start of the next cycle. Highsmith specifically recommends three learning activities:&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc; color: black;"&gt;Customer Focus Group Reviews&lt;/span&gt;—Because the objective of an ASD project is to converge on a system that meets its business purpose, evaluating the results of each cycle by the ultimate users is a critical learning activity. Highsmith recommends using a joint application development (JAD)-style facilitated workshop to collect input from the user community at the end of each cycle. During this workshop, developers would demonstrate and explain what has been built so far. Then users would try using the software and give developers their reactions to it. &lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="background-color: #cccccc;"&gt;Software Inspections&lt;/span&gt;—The primary objective of these inspections is to detect defects in the work products of the cycle, but they have a secondary benefit of ensuring that each team member is familiar with all the code that has been written.&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: #cccccc;"&gt;Postmortems&lt;/span&gt;—The final step in each cycle is the postmortem, where team members evaluate the effectiveness of the processes they have been using as well as the project’s performance against its plan. If they identify problems, they also brainstorm ideas for solving those problems. The results of the postmortem are fed back (via the Learning Loop) to the planning phase for the next cycle.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;Learn: Final Q/A and release&lt;/b&gt;&lt;br /&gt;This phase is the final hand-off to the customer. Its focus is to put both the product and all pertinent information about it into the customer’s hands before disbanding the project team.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;References&lt;br /&gt;Highsmith, J. A., III, Adaptive Software Development, A Collaborative Approach to Managing Complex Systems, New York: Dorset House Publishing, 2000.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-989866822238928338?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/989866822238928338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/introduction-to-adaptive-software.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/989866822238928338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/989866822238928338'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/introduction-to-adaptive-software.html' title='Introduction to Adaptive Software Development'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/S0879Zwt1gI/AAAAAAAAAIQ/9pCElelsbPc/s72-c/untitled.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-5465912454901119384</id><published>2010-01-10T04:13:00.000-08:00</published><updated>2010-01-10T04:13:25.997-08:00</updated><title type='text'>Motivation and Self Organization teams from Agile Perspective</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Motivated individuals &lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;"Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done."&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This principle highlights the Agile methods’ reliance on the motivation of each team member to achieve project success. Most of the practices of these methods make the assumption that team members are going far beyond simply following orders and doing what was assigned.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;They expect that each person is exercising his or her professional judgment to take the path that he or she believes is best at each juncture of the project, or at least to raise questions and concerns to be discussed with the team, management, and the customer.&lt;br /&gt;But the Agile methods do not just expect motivated individuals to appear. The second sentence of this principle highlights a few conditions that the Agile Manifesto authors believe are important to building a motivated team: an appropriate environment, support for them as professionals, and trust that they will indeed exercise good professional judgment.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;These things highlight the Agile methods’ differences from the more conventional command-and-control mode for managing projects. The traditional methods assume that intrinsic motivation is rare, and so they enforce specific behaviors. The Agile methods build an environment where each individual is challenged to build his or her capabilities and where motivation is an expected outcome of the environment.&lt;br /&gt;&lt;br /&gt;Perhaps a better way to state this principle would be, “Build project environments that generate motivated individuals.” This statement aligns more readily with the way the Agile methods are engineered.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Self-organizing teams&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;"The best architectures, requirements, and designs emerge from self-organizing teams."&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;The Agile methods embrace the recent movement toward self-managed, self-directed, or (as this principle says) self-organizing teams. This philosophy is a movement away from traditional command-and-control management and toward one that counts the team as an entity that has its own knowledge, perspective, motivation, and expertise. In this environment, the team is treated as a partner with management and the customer, capable of providing insight, affecting decisions, and negotiating commitments.&lt;br /&gt;&lt;br /&gt;The Agile Manifesto sees this structure not only as a way to achieve a more motivated team but also (as this Principle states) as a way to achieve technical excellence. The Agile methods each count on the team itself to keep the technical issues under control and “on the radar scope” when project decisions are being made.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Different agile methodologies suggest different practices&lt;/b&gt; to start and provide required environment in order to make motivated individuals and self directed teams.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Adaptive Software Development&lt;/b&gt; suggest Development team as an independent agent that should be involved with other agent such as management and customer. and Speculate for Project initiation and adaptive planning and The Adaptive (Leadership-Collaboration) Management Model&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Dynamic System Development Method&lt;/b&gt; says that DSDM teams must be empowered to make&lt;br /&gt;decisions&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;XP &lt;/b&gt;suggest The Planning Game and Collective ownership&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Feature-Driven Development (FDD)&lt;/b&gt; suggest Class (code) ownership and Feature teams&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Lean Software Development&lt;/b&gt; suggest Self-determination and Motivation&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;And finally &lt;b&gt;Scrum &lt;/b&gt;says that The members of the Scrum development team are key participants in Sprint (development cycle) planning in a Scrum project. They participate fully along with other stakeholders in planning each Sprint, and their commitment&lt;br /&gt;to achieving the Sprint goals is a key criterion for an acceptable Sprint plan.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;During each sprint, the Scrum team has full authority to do whatever they believe is necessary to achieve the Sprint goals. They even have the authority to abort the Sprint if they discover that the agreed-upon goals cannot be met. Thus, the Scrum team self-manages and (it is expected) also self-motivates.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;But the basic philosophies of these methods are remarkably similar, here is brief description:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Trusting the technical team&lt;/span&gt;&lt;br /&gt;Abandonment of command-andcontrol style management; replacing it with clear respect for the team:&lt;br /&gt;&lt;br /&gt;◗ Include the team in all deliberations about the project.&lt;br /&gt;◗ Give them unfettered access to the customer.&lt;br /&gt;◗ Seek their input on all technical issues.&lt;br /&gt;◗ Believe their concerns about schedule goals.&lt;br /&gt;◗ Expect them to learn (along with everyone else) as the project progresses.&lt;br /&gt;◗ Gain their willing commitment to all plans.&lt;br /&gt;◗ Negotiate with them to reach acceptable plans.&lt;br /&gt;◗ Empower them with broad authority.&lt;br /&gt;◗ Provide the tools and support they need.&lt;br /&gt;◗ Trust them to exercise their best professional judgment in all circumstances.&lt;br /&gt;&lt;br /&gt;This essentially means entrusting the development team with the authority to self-organize and self-manage.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Staffing with “motivated individuals”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You may be asking yourself, “Where am I going to find all of these motivated people?” “And what will I do with the unmotivated lumps I am stuck with now?”&lt;br /&gt;&lt;br /&gt;It is true; most of your staff members are not superstars. In fact, most of them are pretty average. The point behind the Agile methods is not that you must find a whole bevy of highly motivated and technically expert people. Rather, it is that by adopting an Agile Method and what ASD calls the “leadership-collaboration” management style, you can motivate most of your current staff to behave more like superstars.&lt;br /&gt;&lt;br /&gt;Behavioral psychology has long told us that people tend to live up to (or down to) the expectations placed on them. This is as true with your technical staff as with any other population. The average person, in an environment where his or her expertise and knowledge is valued, will not only bring those attributes to bear on the topic at hand but will also seek to improve them, to make himself or herself more capable of rising to such&lt;br /&gt;challenges in the future.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Pair Programming&lt;/span&gt;&lt;br /&gt;XP’s practice of “Pair Programming” is unique and foreign to almost all organizations. It states that pairs of individuals working together perform all technical work. These pairs are expected to form and trade partners from time to time. All designing, test case development, coding, and testing is done in pairs. While one member of a pair is “driving” the computer, the other is watching, assessing the partner’s work, and asking questions. &lt;br /&gt;&lt;br /&gt;The pair switches roles on a regular basis. Although this practice sounds wasteful of your most precious resource (your engineers’ time), XP’s proponents claim just the opposite. They claim that a pair working together can be as much as 50% more productive than the two individuals would be if they worked separately. This is expected for a variety of reasons:&lt;br /&gt;&lt;br /&gt;◗ The real-time review being done by the observing partner results in many defects being discovered and corrected within minutes of being created, instead of showing up later in tests when the diagnosis and correction could be more time-consuming.&lt;br /&gt;&lt;br /&gt;◗ The person in the observer role tends to think about the big picture, making him or her more likely to identify architecture, design, or testing issues early, so they can be corrected before much rework would be required.&lt;br /&gt;&lt;br /&gt;◗ The constant interaction between the individuals allows them to learn from each other, sharpening both of their skills and making each of them more capable.&lt;br /&gt;&lt;br /&gt;◗ Because two individuals become intimately familiar with every part of the system, the loss of any one person cannot cripple the project.&lt;br /&gt;&lt;br /&gt;◗ It provides a way for any new project member (even a recruit fresh out of school) to become a contributing member of the project very quickly.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Chief Programmer&lt;/span&gt;&lt;br /&gt;FDD includes a Chief Programmer role. This role is generally reserved for highly respected team members who have superior technical knowledge. By placing such individuals into this role, FDD seeks to capitalize on their expertise and reputation to strengthen the skills of the rest of the team. In addition to their normal technical tasks, Chief Programmers act as coaches and mentors on technical matters, being a resource to team members who have questions about the work they are contemplating.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="color: #990000;"&gt;Method Coach&lt;/span&gt;&lt;br /&gt;Some Agile methods (e.g., XP and Scrum) recommend that the project have a person whose job is to coach the team in using the method. This is a good recommendation in any environment where the team is being asked to change how they do their work. Changing old habits can be difficult, and a coach may be indispensable in helping people recognize old habits and exchange them for new ones.&lt;br /&gt;&lt;br /&gt;A coach can keep things running efficiently by being the person who is always concerned about the method and how well it is serving the project’s needs. And, of course, when team members do become aware of the method (because it is impeding their work), the coach will be prepared to help them work through the problem and come up with ways of working that serve the team better. The Coach ensures that the Method you have adopted is indeed creating a project environment in which the team can self-motivate and self-manage.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-5465912454901119384?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/5465912454901119384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/motivation-and-self-organization-teams.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5465912454901119384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5465912454901119384'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/motivation-and-self-organization-teams.html' title='Motivation and Self Organization teams from Agile Perspective'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2249548270274904656</id><published>2010-01-10T03:07:00.000-08:00</published><updated>2010-01-10T03:14:25.418-08:00</updated><title type='text'>People over processes and tools Or Balancing people, process, and tools</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;The very first value in the Agile Manifesto draws a line in the sand. In it, the Agilists clearly state their belief that people are of greater importance in determining software project success than are processes or tools.&lt;br /&gt;&lt;br /&gt;The software process community generally acknowledges the importance of people, but the processes they build do not always reflect such a belief. Like the toolmakers, the writers of processes often focus so closely on the completeness and robustness of the processes themselves that the ability of people to follow them is compromised. For example, a person may find that the role he or she is assigned by the process may require activities beyond his or her skills, abilities, or time constraints.&lt;br /&gt;&lt;br /&gt;Compounding this problem, when people cannot see the value of the work products or activities that a process prescribes, they will consciously or unconsciously undermine or circumvent that process.&lt;br /&gt;&lt;br /&gt;Process writers also tend to pay little attention to tools. While they acknowledge that the right tools can make any process more efficient, they do not routinely consider the available tools when designing processes. In light of this discussion about the effects of tools on process, such a lack of attention can have serious negative effects as the organization attempts to integrate a new process with an incompatible tool set.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;So we see that of people, process, and tools, all are important to our projects’ success. they are the three legs on which projects stand. To make one leg longer or shorter than the other two would make the project unstable, and eliminating any of the three would cause the project to fail. The success of our projects depends on all three.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: Verdana,sans-serif;"&gt;&lt;b&gt;The role of people&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Our people are our most precious resource. In the business of creating intellectual property, people have a preeminent role.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Processes cannot create. Tools cannot exercise intellect. Turning ideas into working software requires people. People imagine, people interpret, people envision what they expect to build, and then people turn that vision into reality. Without people, software cannot be written.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;but people have shortcomings. People make mistakes that result in defective software. People forget things so that their solutions are incomplete. People envision the future imprecisely so that their plans and estimates may be poor. People can keep only a limited amount of information in their minds at one time, so they may miss the consequences of their decisions. People misinterpret what others say so that information is lost in communication. People remember imprecisely so that facts are subject to dispute. People are expensive and may work slowly so that projects run over budget and schedule. People are bored by repetition so that some tasks are ignored or performed poorly.&lt;br /&gt;&lt;br /&gt;Because of all these things and more, people by themselves are insufficient to ensure a successful software project. A team of even the best people in the software industry will have an uncertain likelihood of success. All people need the support that is provided by processes and tools to mitigate for their shortcomings so they can do their best work.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;The role of processes&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Processes identify the roles of the people on the project, the actions those people will take, and the work products those people will produce. In fact, the Agile Manifesto’s contention that interaction among individuals is more important than “process” belies a misunderstanding of the nature of process.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;After all, it is the process that is being followed that determines who will interact with whom, under what conditions the interaction will take place, what will be the subject of that interaction, and what will be its result.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Indeed, “interaction” cannot be more important than “process,” because interaction is, itself, part of the process!&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;The importance of process lies precisely in the shortcomings of people, as we already discussed people make mistakes, so their processes include checks and balances. People forget things, so their processes remind them of what needs to be done. People are imprecise, so their processes identify where precision is needed. And people are limited, so they rely on their processes to keep the important facts before them. Processes that do these things provide the support people need to mitigate for their shortcomings.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Processes are essentially nothing more than tools that mitigate for people’s shortcomings. Good processes make people able to harness their intellectual abilities and effectively apply them to solving problems.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;When consistently applied, good processes produce predictable results. And documenting those processes allows multiple people to share them and work together toward common goals.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: Verdana,sans-serif;"&gt;&lt;b&gt;The role of tools&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;All software projects use tools. At the very least, they use an interpreter or compiler and linker. Most also use a code control system and something to track bugs.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;The main purpose of tools is to make processes more efficient and people more productive. Many labor-intensive tasks can be done more efficiently by either replacing human effort with a tool (such as when we run automated tests) or by supplementing human effort (as is the case when the compiler converts source code we have written into object code).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Repetitive tasks that produce boredom in people (and the resultant errors) can often be relegated to tools. The key to ensuring that a tool is effective lies in making sure that it supports the people who do the work as well as the processes those people use. A tool supports the process when it makes that process less laborintensive and easier to follow.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Balancing people, process, and tools&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;People, processes, and tools: No one of these is more important than the others. Each has an important role to play in ensuring the success of our projects. None can be eliminated or de-emphasized without having an adverse effect on the project.&lt;br /&gt;&lt;br /&gt;Our people are the source of the creativity, intellect, and vision that is required to build software. These key strengths make people indispensable to the task of creating software. But people’s shortcomings can jeopardize our projects’ success. Errors, oversights, miscommunication, and the like are common human frailties. People have come to depend on processes to mitigate for these shortcomings and make success more achievable.&lt;br /&gt;&lt;br /&gt;Individuals rarely document their processes and often do not recognize that they follow them. But in organizations, attention to and documentation of process is the key to ensuring that the processes are followed consistently and modified when necessary so they remain beneficial to the organization. Finally, tools make both the people and their processes more efficient by leveraging people’s effort and taking over some of the more mundane (though critical) activities in our processes.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;To be sure, there is a clear hierarchy: People require the support of processes, and tools must support both people and processes. But to claim that any one of them is more important than the others is to add unnecessary risk to our projects.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2249548270274904656?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2249548270274904656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/people-over-processes-and-tools-or.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2249548270274904656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2249548270274904656'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/people-over-processes-and-tools-or.html' title='People over processes and tools Or Balancing people, process, and tools'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2021820137002426333</id><published>2010-01-01T06:27:00.000-08:00</published><updated>2010-01-01T06:27:49.543-08:00</updated><title type='text'>The 12 Principles of Agile Methods</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Few of us would argue that satisfying the customer is unimportant. The distinctive feature of this principle is the means by which the Agile methods pursue that goal.&lt;/b&gt;&lt;br /&gt;“… through early…delivery of…software.” Agile methods tend to shun&amp;nbsp; long upfront requirements development and design activities. Rather, after laying an appropriate foundation (“appropriate” being defined differently for each method), they seek to develop working software as quickly as possible.&lt;br /&gt;&lt;br /&gt;In essence, these methods replace the traditional requirements and design phases of development with early proof-of-concept activities. The Agile methods look very much like prototyping projects but with the distinction that the resulting product is delivered for use, instead of being thrown away.&lt;br /&gt;&lt;br /&gt;“… through … continuous delivery of … software.” Agile methods all assume an incremental development strategy. They seek to mitigate risk by delivering increments quickly and often (every couple of weeks to every couple of months) so that the customer can validate the project’s decisions and assumptions and verify the utility of the resulting software.&lt;br /&gt;“… through … delivery of valuable software.” Most Agile methods allow the customer to define what is most valuable and give the customer a significant role in establishing the order in which features are delivered.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;This is the core principle on which the Agile methods are built and the reason why the name “Agile” was adopted. This principle acknowledges the fact that change is inevitable and establishes the philosophy that encouraging regular change is an advantage of the Agile methods for their customers. Rather than trying to suppress or control change, the Agile Methods are designed to allow—even encourage—change throughout the project’s life.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter time scale.&lt;/b&gt;&lt;br /&gt;This principle expands on the “continuous delivery” phrase from the first principle. It is explicit that the increments on Agile projects should be as short as possible and goes so far as to say that a week or two is not too short for an increment. It also sets an upper limit that might be surprising to many, since development phases of fewer than three months are generally not seen.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Business people and developers must work together daily throughout the project.&lt;/b&gt;&lt;br /&gt;The Agile methods all require collaboration between the development team and the other stakeholders in the project. A most crucial role in Agile projects is given to the customer (or the ultimate user of the system being developed). But all other stakeholders (identified by these technophiles as “business people”) have important roles and are expected to interact with the team on a regular basis.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.&lt;/b&gt;&lt;br /&gt;The Agile methods are all built on the assumption that development team members are all competent, motivated, supported by the organization, and empowered to do their jobs. At the same time, each method builds an environment that is intrinsically motivating to the technical staff and has the natural effect of building each staff member’s capability to self-motivate and self-manage.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&lt;/b&gt;&lt;br /&gt;This is the principle that explains why the Agile methods tend to have few written documents. They all favor face-to-face communication as the primary means of sharing information, often supplementing it with tools such as whiteboards. The results of communication are often documented in the form of “information radiators,” which are visually available postings of information to which people can refer whenever it is needed.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Working software is the primary measure of progress.&lt;/b&gt;&lt;br /&gt;This principle is another way in which the Agile methods strike against documentation. Most software projects will identify the acceptance of a requirements or design specification as a milestone showing significant progress. Many Agile methods (though not all) reject that idea. They tend to place little value on the project’s interim products and focus almost entirely on the resulting software. Of course, since working software is delivered so often on an Agile project (see the third principle), it becomes a reasonable&lt;br /&gt;measure of progress.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.&lt;/b&gt;&lt;br /&gt;In many organizations, overtime is the norm, and in some it is routinely required. The Agile methods rebel against those norms and argue instead for “sustainable” schedules (generally meaning something in the vicinity of 40 hours per week). And by this they do not mean to plan for 40 hours per week, then work 80; rather, they mean to change the expectation of what can be accomplished so that overtime is rare. But as this principle states, the nature of the Agile methods tends to level out the demands on the project team so that a more sustainable pace is naturally maintained.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Continuous attention to technical excellence and good design enhances agility.&lt;/b&gt;&lt;br /&gt;This is perhaps the most valuable principle of the Agile methods. Each Agile method has a strong focus on ensuring that the quality of the technical work is maintained at a high level. The different methods do this in different ways, but each has a strong quality component. &lt;br /&gt;&lt;br /&gt;This principle provides a refreshing counterpoint to the all-too-common perception that the developers’ job is to write the software and someone else is responsible for making sure it works. In the Agile methods, development teams take on the primary responsibility to be sure that what is delivered is correct and that the software satisfies the customer’s needs. This focus does not mean that independent verification and validation is unnecessary; rather, it means that the software that is delivered for IV&amp;amp;V will be of higher quality and generally more ready for final testing.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;Simplicity—the art of maximizing the amount of work not done is essential.&lt;/b&gt;&lt;br /&gt;Before the Agile Manifesto was written, the methods that fall under the “Agile” umbrella were generally referred to as “light” methods. The term “light” was dropped out of recognition that certain application domains require heavier processes (e.g., developing software for safety-critical systems). Even so, the Agile methods always stress using the lightest possible processes.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;The best architectures, requirements, and designs emerge from self-organizing teams.&lt;/b&gt;&lt;br /&gt;Self-management is a hallmark of Agile methods and a backlash against the command-and-control methods used to manage many software projects. There is growing evidence that self-managed teams are in fact quite effective.&lt;br /&gt;&lt;br /&gt;But moving toward self-managed teams requires significant changes throughout the organization. The most significant change occurs in the ranks of management, where managers’ roles must evolve toward coaching and leading, as engineers’ roles grow to include self-management. These changes are difficult to effect and require that many people learn new skills and behaviors, but they can have significant positive results.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&lt;/b&gt;&lt;br /&gt;The concept of retrospective or postmortem analysis is well known in the industry (if not widely practiced). The Agile methods adopt this important activity as their primary means of improving their processes. Some Agile methods take this to an extreme by doing these analyses at the end of each increment of development, resulting in lessons learned and process improvements many times each year.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2021820137002426333?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2021820137002426333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2010/01/12-principles-of-agile-methods.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2021820137002426333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2021820137002426333'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2010/01/12-principles-of-agile-methods.html' title='The 12 Principles of Agile Methods'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-4240540972992467007</id><published>2009-12-17T06:36:00.000-08:00</published><updated>2009-12-17T06:36:01.308-08:00</updated><title type='text'>Lean Versus Agile</title><content type='html'>&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;Both Lean and Agile software development aim to improve the quality of the software (as perceived by the customer) as well as the productivity of the software development process. They both value (and even welcome) the changes in requirements that will almost certainly occur over the course of the project. They both place the highest value on delivering software that meets the customer’s real needs (not the initial perceived customer needs).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;The difference is in the underlying perspective and philosophy…the mindset.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Agile mostly concerns itself with the specific practice of developing software and the project management that surrounds that software development. Agile methods do not generally concern themselves with the surrounding business context in which the software development is taking place.&lt;br /&gt;&lt;br /&gt;Lean principles, on the other hand, can be applied to any scope, from the specific practice of developing software to the entire enterprise where software development is just one small part. It is even common in Lean manufacturing to go outside the company and include suppliers in the scope of Lean process improvement. The larger the scope, the larger the potential benefits. Most Lean efforts start out small and expand their scope over time, realizing more and more benefits in the process. In any case, it can be safely said that Lean views all Agile methodologies as valid supporting practices.&lt;br /&gt;&lt;br /&gt;The primary focus of Agile software development is on close customer collaboration and the rapid delivery of working software as early as possible. Lean sees that as worthwhile, but its primarily focus is on the elimination of waste in the context of what the customer values.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;A key Lean tool for detecting and eliminating waste is the value stream map (VSM). The VSM is a map-like diagram of all activities that take place from beginning to end—for example, from when the customer requests a new feature to when that new feature is delivered to the customer. Each step is then identified as value-added (from the customer’s perspective), non value- added, or non-value-added but necessary. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;Finally, Agile has a fair number of formal methodologies, whereas Lean has no formal methodologies. Lean, instead, has a toolkit of recommended practices from which to choose. In fact, when implementing Lean software development, it is quite common to pick a lightweight Agile methodology as a starting point and begin applying other Lean tools (such as VSM) from there.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-4240540972992467007?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/4240540972992467007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-versus-agile.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4240540972992467007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4240540972992467007'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-versus-agile.html' title='Lean Versus Agile'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6387122465228585935</id><published>2009-12-17T06:25:00.000-08:00</published><updated>2009-12-17T06:27:11.734-08:00</updated><title type='text'>Lean Software Development</title><content type='html'>&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Eliminate Waste&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Defects → defects&lt;/b&gt;&lt;br /&gt;This one is easy. A defect is a defect, whether you’re talking about manufacturing a physical product or developing software. Defects cause expensive rework, which is always non-valueadded waste. The focus in a Lean environment is on preventing defects, whereas traditional development focuses on finding defects after they have already occurred. Defects are especially expensive when detected late.&lt;br /&gt;&lt;br /&gt;In Lean, when a defect is found, the response is to find the root cause of the defect and make changes that will ensure the defect cannot recur. In software development, this means having a suite of automated tests that prevent defects from slipping into the software undetected. When a defect does slip through, a new test is created to detect that defect so that it cannot pass through undetected again.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Overproduction → extra features&lt;/b&gt;&lt;br /&gt;Every line of code costs money. Over the lifetime of the software, the cost of writing the code is probably the smallest cost. The code must also be designed, documented, and maintained (changed, enhanced, debugged, etc.). This means that a cadre of current and future team members must repeatedly read and understand the code. The presence of the code must be taken into account in each future product change or enhancement.&lt;br /&gt;&lt;br /&gt;The 80/20 rule applies in most software products: 80% of the user’s real needs are provided by 20% of the product’s features. This means the other 80% of a product’s features are rarely (or never) used. At the XP 2002 Conference, the Standish Group reported that 45% of features were never used and that only 20% of features were used often or always. In fact, a 2001 paper titled “Improving Software Investments through Requirements Validation” (IEEE 26th Software Engineering Workshop) found that in 400 projects examined over a period of 15 years, less than 5% of the code was actually useful or used!&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Transportation → handoffs&lt;/b&gt;&lt;br /&gt;If you have worked on large projects, this might sound familiar:&lt;br /&gt;1. Analysts create a document containing all of the product’s requirements and hand it off to the architects.&lt;br /&gt;2. Architects take the requirements and create the product design, which they hand off to the programmers.&lt;br /&gt;3. The programmers write the code to implement the design and pass the results to the QA testers.&lt;br /&gt;4. The QA testers validate the resulting product against the requirements.&lt;br /&gt;&lt;br /&gt;This is a classic Waterfall process that is replete with handoffs. A tremendous amount of knowledge is lost through each handoff simply because it is not possible to record everything that was learned, discovered, created, and known in a written form. A large amount of tacit knowledge is not passed on.&lt;br /&gt;&lt;br /&gt;This means that the architects won’t understand the requirements as deeply as the analysts, and that the programmers will not understand the design as well as the architects. This incomplete understanding will lead to errors and omissions, which will require costly rework to correct.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Even worse, the knowledge loss is compounded with each handoff. For example, if you assume that 50% of the knowledge is lost in each handoff, the programmers only receive 25% of the original knowledge, losing a whopping 75% in only two handoffs! Try to avoid handoffs whenever possible.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Inventory → partially completed work&lt;/b&gt;&lt;br /&gt;Simply stated, partially completed work is anything that has been started but not finished. This could be requirements (features) that haven’t been coded, or code that hasn’t been tested, documented, and deployed, or bugs that haven’t been fixed. Rather than letting partially done work build up in queues, the Lean approach uses single-piece flow to take a feature through to deployment as rapidly as possible.&lt;br /&gt;A feature is not complete until it is potentially deployable (other constraints may not allow actual deployment as often as we would like), fully documented, tested, and error-free.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;(Over) processing → unneeded processes&lt;/b&gt;&lt;br /&gt;Unneeded processes are pure waste. They get in the way of productivity without adding any value. They include procedures that accomplish nothing and documents that no one reads. They also include manual tasks that could be automated and procedures that make simple tasks hard.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Build Quality in&lt;/b&gt;&lt;br /&gt;One of Taiichi Ohno’s key manufacturing insights was that you cannot inspect a product for quality at the end of a production line. That approach detects problems, but it does nothing to correct them. Instead, each step in the process should be mistake-proof and self-inspecting.&lt;br /&gt;&lt;br /&gt;When a problem is detected, the entire assembly line stops until the root cause of the problem is found and corrected (so that it cannot occur again).&lt;br /&gt;&lt;br /&gt;A famous example is the New United Motor Manufacturing, Inc. (NUMMI) automobile factory, a joint venture between Toyota and General Motors. Toyota told workers simply to do good work and to stop the line whenever something prevented them from doing their jobs. It took nearly a month to produce the first vehicle, but since each problem was solved once permanently the plant quickly became a leader in quality and productivity in the U.S.&lt;br /&gt;&lt;br /&gt;Traditional software development has followed the same pattern as traditional U.S. car manufacturing: let defects slip through and get caught later by QA inspections. The Lean approach is to mistake-proof your code by writing tests as you code the features. These tests prevent subsequent changes to the code from introducing undetected defects.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Create Knowledge&lt;/b&gt;&lt;br /&gt;The point here is not to forget the lessons you have learned. Obviously, making the same mistakes over again or relearning how something works is a waste of time and effort. And it’s not just you, your coworkers shouldn’t have to learn something you have already figured out. Find ways to record your team’s knowledge so that you can easily locate it the next time you need it. It’s hard to be specific about this because what makes sense and what will work for you is highly dependent upon the context. However, it is generally best to store a given piece of knowledge closest to its source.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Defer Commitment&lt;/b&gt;&lt;br /&gt;The best decisions are made when you have the most information available. If you don’t have to make a particular decision now, wait until later when you have more knowledge and information. But don’t wait too long, either lack of a decision should not hold up other aspects of the project.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Deliver Fast&lt;/b&gt;&lt;br /&gt;Software development is an abstract endeavor. Yet most of us (including our customers) work best when dealing with concrete things. When we can see, touch, and feel something, it becomes real, and our brains can more easily think about what works and what doesn’t. Our imaginations can dream of features or capabilities that we didn’t realize we needed.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;This is why software requirements are so volatile. The Waterfall approach would have you waiting until the end of the project to get customer feedback based on the actual use of the software, and that is why the Waterfall process is so prone to failure. “Deliver fast” means developing features in small batches that are delivered to the customer quickly, in short iterations. These features can be implemented and delivered before the associated requirements can change. This means that the customer has an opportunity to use these features (which are now concrete) to provide feedback that can change the other requirements before they are implemented.&lt;br /&gt;&lt;br /&gt;The completion of each short iteration provides an opportunity to change and reprioritize the requirements based on real feedback and use. The end result is a product that more closely meets the real needs of the customer, while simultaneously eliminating the tremendous amount of waste and rework created by the requirements churn—truly a win-win situation.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Respect People&lt;/b&gt;&lt;br /&gt;This is a lofty altruism that is also the down-home truth. As Mary and Tom Poppendieck said in Implementing Lean Software Development, “Engaged, thinking people provide the most sustainable competitive advantage.”&lt;br /&gt;&lt;br /&gt;Respect for people means trusting them to know the best way to do their jobs, engaging them to expose flaws in the current process, and encouraging them to find ways to improve their jobs and the surrounding processes. Respect for people means recognizing them for their accomplishments and actively soliciting their advice. Don’t waste your most valuable resource—the minds of your team members!&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #cc0000; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b style="color: #cc0000;"&gt;Optimize the Whole&lt;/b&gt;&lt;br /&gt;This is an important part of Lean thinking no matter where Lean is being applied, and Lean software development is no exception. Whenever you optimize a local process, you are almost always doing so at the expense of the whole value stream (this is suboptimizing). If you don’t have control over the entire value stream, you may be forced to suboptimize a piece of it. In general, though, you should always attempt to include as much of the value stream as you can when you try to optimize a process.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6387122465228585935?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6387122465228585935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-software-development.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6387122465228585935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6387122465228585935'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-software-development.html' title='Lean Software Development'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-850720188058782156</id><published>2009-12-17T05:44:00.000-08:00</published><updated>2009-12-17T05:44:45.326-08:00</updated><title type='text'>The Lean Success Story</title><content type='html'>&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;It is only recently that the Lean principles have been applied to software development. In the beginning it all started with Lean manufacturing (some 40 to 60 years ago, depending on when you start the clock). Of course, it wasn’t called Lean back then. It was the Toyota Production System, or Just-In-Time manufacturing. James Womack, Daniel Jones, and Daniel Roos coined the term “Lean” in their 1990 book, The Machine That Changed the World (Harper Perennial).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Lean is a mindset&lt;/b&gt;, a way of thinking about how to deliver value to the customer more quickly by finding and eliminating waste (the impediments to quality and productivity). This philosophy is expressed in a set of principles that have proven remarkably applicable to a wide range of business activities. The Lean principles have been used successfully in areas as diverse as the supply chain, the office, engineering, and (of course) software development.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #cc0000; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;A Whirlwind History of Lean&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;To really appreciate the emergence of Lean production and its derivatives, you have to&lt;br /&gt;understand what it was replacing (or competing with): mass production.&lt;br /&gt;&lt;br /&gt;Henry Ford popularized mass production (which had itself replaced craft production) with the&lt;br /&gt;assembly-line manufacture of the Model T in 1913. Mass production is used to produce large&lt;br /&gt;quantities of goods at a low unit cost. It divides the manufacturing process into small steps that can be carried out by unskilled workers, and it relies on the use of high-precision machinery and standardized, interchangeable parts.&lt;br /&gt;&lt;br /&gt;The drawback of mass production is its inflexibility. Since a mass production assembly line is&lt;br /&gt;so expensive to set up (and difficult to alter), it is only economical if it is going to produce large&lt;br /&gt;quantities of the same thing.&lt;br /&gt;&lt;br /&gt;In 1945, in post-war Japan, the president of Toyota Motor Company, Kiichiro Toyoda, said&lt;br /&gt;that the Japanese automobile industry would not survive if it did not “catch up with America&lt;br /&gt;in three years.” This did not happen within three years (the Japanese automobile industry&lt;br /&gt;survived anyway), but it did lead to the creation of the Toyota Production System by Taiichi&lt;br /&gt;Ohno.&lt;br /&gt;&lt;br /&gt;Taiichi Ohno realized that the American mass production system would not work in Japan.&lt;br /&gt;The domestic automobile market was too small and there was a significant demand for variety&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;in automobiles, from small economical cars to larger, luxury cars—a poor fit for mass&lt;br /&gt;production. Out of necessity, Taiichi Ohno experimented with many ideas and techniques that&lt;br /&gt;eventually evolved into the Toyota Production System.&lt;br /&gt;&lt;br /&gt;Taiichi Ohno described the Toyota Production System as “a system for the absolute elimination of waste.” He wasn’t kidding. By the early 1990s, Toyota was 60% more productive with 50% fewer defects than its non-Lean competitors. According to Ohno, this striking advantage rested on two pillars: Just-In-Time and autonomation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Just-In-Time&lt;/b&gt;&lt;br /&gt;In the 1950s, a Japanese delegation from Toyota visited American businesses to study their&lt;br /&gt;methods. They visited Ford Motor Company, the industry leader, but they were not impressed.&lt;br /&gt;&lt;br /&gt;They were particularly appalled by the large amounts of inventory and the unevenness of the&lt;br /&gt;amount of work performed in different parts of the factory.&lt;br /&gt;&lt;br /&gt;However, when they visited an American supermarket, they were impressed with the way in&lt;br /&gt;which products were reordered and restocked only after customers purchased them. This pull system inspired Taiichi Ohno to create Just-In-Time, which strives to keep inventories at each manufacturing step as low as possible (preferably zero). It is about providing the right material, in the right amount, at the right time, and in the right place.&lt;br /&gt;&lt;br /&gt;According to Ohno, inventory is waste that costs the company money. Even worse, inventory&lt;br /&gt;hides problems in the production system. This includes problems such as inadequate capacity,&lt;br /&gt;inflexible equipment, and unreliable equipment. A major contribution of a Just-In-Time&lt;br /&gt;system is that it exposes the causes of inventory-keeping so that they can be addressed.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Autonomation (Jidoka)&lt;/b&gt;&lt;br /&gt;Autonomation is a combination of the words autonomous and automation. It describes&lt;br /&gt;machines that automate a process but are also intelligent enough to know when something is&lt;br /&gt;wrong and stop immediately. This kind of machine can run unattended (autonomously) while&lt;br /&gt;providing workers with full confidence that it is operating flawlessly. It doesn’t have to be&lt;br /&gt;monitored, and it needs human attention only when it stops.&lt;br /&gt;&lt;br /&gt;When it detects an abnormal condition, the machine will stop itself and a worker will halt the&lt;br /&gt;production line. This focuses everyone’s attention on finding the root cause of the problem&lt;br /&gt;and fixing it so that it will not recur. In this way, autonomation prevents the production of&lt;br /&gt;defective components that would otherwise disrupt the production line or result in more costly rework at a later stage.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Waste (Muda)&lt;/b&gt;&lt;br /&gt;The overarching goal of Lean production (or any form of Lean) is to deliver value to the&lt;br /&gt;customer more quickly, and the primary way to do this is to find and eliminate waste. On the&lt;br /&gt;surface this may seem like a simple thing, but exactly what is and what is not waste isn’t always obvious. Shigeo Shingo, who codeveloped the Toyota Production System with Taiichi Ohno, identified seven kinds of waste&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;&lt;span style="color: #cc0000;"&gt;DOTWIMP: THE SEVEN DEADLY WASTES&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Lean has some pretty strict views on waste. Shigeo Shingo identified seven types of waste that are easily remembered by using the acronym DOTWIMP:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Defects&lt;/b&gt;&lt;br /&gt;This is perhaps the most obvious type of waste. Lean focuses on preventing defects instead of&lt;br /&gt;the traditional “find and fix” mentality.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Overproduction&lt;/b&gt;&lt;br /&gt;Producing more than is needed, or producing it before it is needed. It is often visible as the&lt;br /&gt;storage of materials.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Transportation&lt;/b&gt;&lt;br /&gt;The unnecessary movement of parts between processes. When you move material and parts&lt;br /&gt;between factories, work cells, desks, or machines, no value is created.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Waiting&lt;/b&gt;&lt;br /&gt;People or parts waiting for the next production step.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Inventory&lt;/b&gt;&lt;br /&gt;All material, work-in-progress, and finished products that are not being processed. Inventory&lt;br /&gt;beyond the bare minimum consumes productive floor space and delays the identification of&lt;br /&gt;problems (if you’ve got plenty of spares, there’s no incentive to fix quality-related problems).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Motion&lt;/b&gt;&lt;br /&gt;People or equipment moving or walking more than is needed to perform the processing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Processing&lt;/b&gt;&lt;br /&gt;Overprocessing beyond the standard required by the customer. This adds additional cost&lt;br /&gt;without adding additional value.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Additional eighth waste: underutilization of people&lt;/b&gt;&lt;br /&gt;This is often cited as an additional type of waste beyond the original seven, and it refers to the&lt;br /&gt;underutilization of the worker’s creativity and resourcefulness.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;A key Lean activity is to break down a process into a map of its individual steps and identify&lt;br /&gt;which steps add value and which steps do not—the waste. This is known as a value stream&lt;br /&gt;map. The goal, then, is to eliminate the waste (muda) and improve the value-added steps&lt;br /&gt;(kaizen). The waste is further subdivided into two categories: non-value-added but necessary&lt;br /&gt;(given the current state of the system), and pure waste. Pure waste is easy to deal with—it can be eliminated immediately.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;So, there are two &lt;b&gt;key Lean skills&lt;/b&gt;: knowing what the customer values, and knowing how to&lt;br /&gt;spot waste.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #cc0000; font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;b&gt;Lean Principles&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;Taiichi Ohno started with Just-In-Time and autonomation, the two pillars of the Toyota&lt;br /&gt;Production System. Modern-day Lean has settled on five principles and a wide array of&lt;br /&gt;practices that have been distilled from the Toyota Production System and the experiences of&lt;br /&gt;other companies that have followed Toyota’s lead. These five principles are identified as Value, Value Stream, Flow, Pull, and Perfection:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Value&lt;/b&gt;&lt;br /&gt;Value is defined by the customer. What does the customer value in the product? You have&lt;br /&gt;to understand what is and what is not value in the eye of the customer in order to map&lt;br /&gt;the value stream.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Value stream&lt;/b&gt;&lt;br /&gt;Once you know what the customer values in your product, you can create a value stream&lt;br /&gt;map that identifies the series of steps required to produce the product. Each step is&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia,&amp;quot;Times New Roman&amp;quot;,serif;"&gt;categorized as either value-added, non-value-added but necessary, or non-value-added&lt;br /&gt;waste.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Flow&lt;/b&gt;&lt;br /&gt;The production process must be designed to flow continuously. If the value chain stops&lt;br /&gt;moving forward (for any reason), waste is occurring.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Pull&lt;/b&gt;&lt;br /&gt;Let customer orders pull product (value). This pull cascades back through the value stream&lt;br /&gt;and ensures that nothing is made before it is needed, thus eliminating most in-process&lt;br /&gt;inventory.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Perfection&lt;/b&gt;&lt;br /&gt;Strive for perfection by continually identifying and removing waste.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-850720188058782156?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/850720188058782156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-success-story.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/850720188058782156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/850720188058782156'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/lean-success-story.html' title='The Lean Success Story'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-7465865697292362766</id><published>2009-12-17T01:29:00.000-08:00</published><updated>2009-12-17T01:33:12.773-08:00</updated><title type='text'>New Features and Enhancements in Spring 3.0</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;If you have been using the Spring Framework for some time, you will be aware that Spring has undergone two major revisions: Spring 2.0, released in October 2006, and Spring 2.5, released in November 2007. It is now time for a third overhaul resulting in Spring 3.0.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Java 5&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;The entire framework code has been revised to take advantage of Java 5 features like generics, varargs and other language improvements. SpringSource done best to still keep the code backwards compatible. and now have consistent use of generic Collections and Maps, consistent use of generic FactoryBeans, and also consistent resolution of bridge methods in the Spring AOP API. Generic ApplicationListeners automatically receive specific event types only. All callback interfaces such as TransactionCallback and HibernateCallback declare a generic result value now. Overall, the Spring core codebase is now freshly revised and optimized for Java 5.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Spring's TaskExecutor abstraction has been updated for close integration with Java 5's java.util.concurrent facilities. Spring provide first-class support for Callables and Futures now, as well as ExecutorService adapters, ThreadFactory integration, etc. This has been aligned with JSR-236 (Concurrency Utilities for Java EE 6) as far as possible. Furthermore, Spring provide support for asynchronous method invocations through the use of the new @Async annotation (or EJB 3.1's @Asynchronous annotation).&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Overview of new features&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;This is a list of new features for Spring 3.0. We will cover these features in more detail later in this section.&lt;br /&gt;&lt;br /&gt;• Spring Expression Language&lt;br /&gt;• IoC enhancements/Java based bean metadata&lt;br /&gt;• General-purpose type conversion system and field formatting system&lt;br /&gt;• Object to XML mapping functionality (OXM) moved from Spring Web Services project&lt;br /&gt;• Comprehensive REST support&lt;br /&gt;• @MVC additions&lt;br /&gt;• Declarative model validation&lt;br /&gt;• Early support for Java EE 6&lt;br /&gt;• Embedded database support&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;br /&gt;&lt;span style="color: #990000;"&gt;Core APIs updated for Java 5&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;BeanFactory interface returns typed bean instances as far as possible:&lt;br /&gt;&lt;br /&gt;• T getBean(Class&lt;t&gt; requiredType)&lt;br /&gt;• T getBean(String name, Class&lt;t&gt; requiredType)&lt;br /&gt;• Map&lt;string, t=""&gt; getBeansOfType(Class&lt;t&gt; type)&lt;br /&gt;&lt;br /&gt;Spring's TaskExecutor interface now extends java.util.concurrent.Executor:&lt;br /&gt;• extended AsyncTaskExecutor supports standard Callables with Futures&lt;br /&gt;&lt;br /&gt;New Java 5 based converter API and SPI:&lt;/t&gt;&lt;/string,&gt;&lt;/t&gt;&lt;/t&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• stateless ConversionService and Converters&lt;br /&gt;• superseding standard JDK PropertyEditors&lt;br /&gt;Typed ApplicationListener&lt;e&gt;&lt;/e&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #990000; font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Spring Expression Language&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Spring introduces an expression language which is similar to Unified EL in its syntax but offers significantly more features. The expression language can be used when defining XML and Annotation based bean definitions and also serves as the foundation for expression language support across the Spring portfolio. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;The Spring Expression Language was created to provide the Spring community a single, well supported expression language that can be used across all the products in the Spring portfolio. Its language features are driven by the requirements of the projects in the Spring portfolio, including tooling requirements for code completion support within the Eclipse based &lt;a href="http://www.springsource.com/products/sts"&gt;SpringSource Tool Suite&lt;/a&gt;. The following is an example of how the Expression Language can be used to configure some properties of a database setup&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/Syn37lLWXmI/AAAAAAAAAHc/ANeaLs-G6uM/s1600-h/11.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/Syn37lLWXmI/AAAAAAAAAHc/ANeaLs-G6uM/s640/11.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span id="goog_1261040924236"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;This functionality is also available if you prefer to configure your components using annotations:&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3QsNqKlI/AAAAAAAAAGk/Jx83m4niqYI/s1600-h/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3QsNqKlI/AAAAAAAAAGk/Jx83m4niqYI/s640/2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b style="color: #990000;"&gt;The Inversion of Control (IoC) container&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Some core features from the JavaConfig project have been added to the Spring Framework now. This means that the following annotations are now directly supported:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• @Configuration&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;• @Bean&lt;br /&gt;• @DependsOn&lt;br /&gt;• @Primary&lt;br /&gt;• @Lazy&lt;br /&gt;• @Import&lt;br /&gt;• @ImportResource&lt;br /&gt;• @Value&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Here is an example of a Java class providing basic configuration using the new JavaConfig features:&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://3.bp.blogspot.com/_6EEwisOalwc/Syn3Za46CSI/AAAAAAAAAGs/9N2sk2pmVhs/s1600-h/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6EEwisOalwc/Syn3Za46CSI/AAAAAAAAAGs/9N2sk2pmVhs/s640/3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;To get this to work you need to add the following component scanning entry in your minimal application context XML file.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3t001pfI/AAAAAAAAAHM/OTFSm_5-VNs/s1600-h/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3t001pfI/AAAAAAAAAHM/OTFSm_5-VNs/s640/4.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Or you can bootstrap a @Configuration class directly using AnnotationConfigApplicationContext:&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3mhmiEwI/AAAAAAAAAHE/E2srL6eletM/s1600-h/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/Syn3mhmiEwI/AAAAAAAAAHE/E2srL6eletM/s640/5.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Defining bean metadata within components&lt;br /&gt;@Bean annotated methods are also supported inside Spring components. They contribute a factory bean definition to the container.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b style="color: #990000;"&gt;General purpose type conversion system and field formatting system&lt;/b&gt;&lt;br /&gt;A general purpose type conversion system has been introduced. The system is currently used by SpEL for type conversion, and may also be used by a Spring Container and DataBinder when binding bean property values.&lt;br /&gt;In addition, a formatter SPI has been introduced for formatting field values.&lt;br /&gt;&lt;b style="color: #990000;"&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style="color: black;"&gt;This SPI provides a simpler&lt;/span&gt; and more robust alternative to JavaBean PropertyEditors for use in client environments such as Spring MVC.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b style="color: #990000;"&gt;&lt;br /&gt;The Data Tier&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Object to XML mapping functionality (OXM) from the Spring Web Services project has been moved to the core Spring Framework now. The functionality is found in the org.springframework.oxm package &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b style="color: #990000;"&gt;The Web Tier&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The most exciting new feature for the Web Tier is the support for building RESTful web services and web applications. There are also some new annotations that can be used in any web application. Comprehensive REST support Server-side support for building RESTful applications has been provided as an extension of the existing annotation driven MVC web framework. &lt;br /&gt;&lt;br /&gt;Client-side support is provided by the RestTemplate class in the spirit of other template classes such as JdbcTemplate and JmsTemplate. Both server and client side REST functionality make use of HttpConverters to facilitate the conversion between objects and their representation in HTTP requests and responses.&lt;br /&gt;&lt;br /&gt;The MarshallingHttpMessageConverter uses the Object to XML mapping functionality mentioned earlier.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;@MVC additions&lt;br /&gt;A mvc namespace has been introduced that greatly simplifies Spring MVC configuration. Additional annotations such as @CookieValue and @RequestHeaders have been added.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Declarative model validation&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Several validation enhancements, including JSR 303 support that uses Hibernate Validator as the default provider.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="color: #990000;"&gt;Early support for Java EE 6&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Spring provide support for asynchronous method invocations through the use of the new @Async annotation (or EJB 3.1's @Asynchronous annotation).&lt;br /&gt;JSR 303, JSF 2.0, JPA 2.0, etc&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;b style="color: #990000;"&gt;Support for embedded databases&lt;/b&gt;&lt;br /&gt;Convenient support for embedded Java database engines, including HSQL, H2, and Derby, is now provided. &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-7465865697292362766?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/7465865697292362766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/new-features-and-enhancements-in-spring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/7465865697292362766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/7465865697292362766'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/new-features-and-enhancements-in-spring.html' title='New Features and Enhancements in Spring 3.0'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_6EEwisOalwc/Syn37lLWXmI/AAAAAAAAAHc/ANeaLs-G6uM/s72-c/11.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3010367384104945032</id><published>2009-12-14T05:43:00.000-08:00</published><updated>2009-12-15T03:22:24.801-08:00</updated><title type='text'>What's New in Java EE 6</title><content type='html'>&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/JavaEE/JavaEE6Overview.html" target="_blank"&gt;Java EE 6 just got released yesterday&lt;/a&gt;, here is everything you need to know about, in brief.&lt;b&gt;&lt;br /&gt;&lt;br /&gt;A look back:&lt;/b&gt; Java EE 5 was a remarkable step towards a mature, widely deployed, well supported server-side development platform. EJB 3.0 was re-engineered to ease, the Entity Bean model was stripped and replaced by JPA as the persistence paradigm, JSF was introduced as the standard presentation tier framework and JAX-WS 2.0 replaced JAX-RPC as the SOAP web services API. The focus of Java EE 5 was squarely on reducing complexity by embracing the concepts of annotations, POJO programming, zero-configuration systems.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Overview&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;Java EE 6 is next big step in the journey towards the idea of a “simple, streamlined and well-integrated platform”. Java EE 6 includes a rich paradigm of innovations best reflected in the technologies that comprise the platform including brand new APIs like WebBeans 1.0 and JAX-RS 1.1, JPA 2.0 or even mature APIs like Servlet 3.0, EJB 3.1&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://jcp.org/en/jsr/detail?id=316" target="_blank"&gt;&lt;i&gt;JSR 316&lt;/i&gt;&lt;/a&gt;&lt;i&gt;: JavaTM Platform, Enterprise Edition 6 (Java EE 6) Specification.&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Let’s give each one of the features a brief look:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Pruning&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;&lt;i&gt;Pruning the Dead meat: &lt;/i&gt;The Java EE platform is gainging weight since it’s initial launch in 1999. The idea now is to cut the dead (least used) stuff off. Java EE 6 begins the essential process of carefully pruning &amp;nbsp;APIs to make the platform more lightweight and to make room for healthier growth. Few APIs that are chopped off and why:&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;JAX-RPC&lt;/i&gt; — JAX-RPC was an early attempt at modeling SOAP web services as RPC calls. Web services are now much more robust, feature-rich and popular JAX-WS API effectively supercedes JAX-RPC.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;JAXR &lt;/i&gt;– JAXR is for interfacing with UDDI registries. Unfortunately, UDDI is not widely used.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;EJB 2.x Entity Beans CMP&lt;/i&gt; — The complex, heavyweight model replaced by the popular, lightweight, POJO based JPA persistence model.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;&lt;i&gt;Java EE Application Deployment&lt;/i&gt; — JSR 88 was an attempt at developing deployment tools that work across application servers. Unfortunately, this API has never got popular, and never gained much vendor support.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;J&lt;i&gt;ava EE Management &lt;/i&gt;– Application server management tools that work in a cross-vendor manner. Like JSR 88, the idea never paved off.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;“Pruning” an API essentially means that an application server vendor need not support these technologies, what this doesn’t mean is that you cannot support those APIs, few larger vendors will probably continue supporting them atleast for some time.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;span style="font-weight: normal;"&gt;What is the biggest &amp;nbsp;major criticism of Java EE? Its simply too large. The fact is, majority of Java web applications do not utilize/leverage &amp;nbsp; the full Java EE stack. So why is that stuff still in there?&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Profiles&lt;/b&gt; are designed to address this issue. Profiles are essentially sub-sets of Java EE APIs geared towards a particular class of applications in mind. For example, the proposed Java EE Web Profile will only include APIs that are likely to be used in most Java web applications. The idea isn’t new, &amp;nbsp;Java ME supports the idea of Profiles already.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Although Java EE 6 defines the rules for creating new Profiles through separate JSRs, only one Profile, the Web Profile is included in platform this time. Detailed chart of Profiles can be &lt;a href="http://java.sun.com/developer/technicalArticles/JavaEE/JavaEE6Overview_Part3.html#profprun" target="_blank"&gt;found at Sun’s documentation&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; Web Beans 1.0: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;WebBeans is perhaps the most groundbreaking API developed in the Java EE 6 time-frame. WebBeans fills a number of gaps in Java EE. Although WebBeans is inspired by Seam, Google Guice as well as Spring, it does not directly mirror any of them. Indeed, WebBeans adds a number of unique innovations of its own. Here’s brief on it:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;WebBeans unifies the JSF, JPA and EJB 3 programming models to  truly feel     like a single, well-integrated platform.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;WebBeans implicitly manages the life-cycle of all registered  components     in appropriate contexts.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;WebBeans brings a robust set of dependency injection features to the platform in a completely type-safe and Java-centric way.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;WebBeans enhances the Java EE Interceptor model by adding the ability to bind interceptors to annotations instead of having to bind interceptors to target object classes themselves.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;WebBeans   adds a lot of other very cool features that pave way to nextgen web applications.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/pr/jsr299/index.html" target="_blank"&gt;Detailed Spec for Web Beans&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; JSF 2.0: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;JSF appears to be holding ground in the Web UI layer. However, there are a number of valid concerns around the usability and robustness of JSF. JSF 2.0 meets these concerns, and adds all new graded stuff:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JSF formally adds Facelets as a view technology, simplified page authoring. Facelets are usually written with XHTML markup language. This allows Facelets pages to be portable across diverse development platforms.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JSF 2.0 brings Java EE 5 style annotation-driven configuration to the table via annotations such as @ManagedBean and @ManagedProperty. (reduction of faces-config.xml file).&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JSF 2.0 changes the JSF life-cycle to account for AJAX with concept of partial page processing to handle AJAX  events.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Built-in capability to handle resources such as images, JavaScript files, CSS and the like, capability to refer to resources via logical names, grouping resources into libraries and versioning.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Templating: You can create a page that acts as a template for other pages in an application.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Composite Components: a new feature in JSF that makes it easy to create customized JSF components. You can create composite components by using JSF page markup, other JSF UI components, or both&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Support for Events&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/pfd/jsr314/index.html" target="_blank"&gt;JSF 2.0 Detailed Spec&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; EJB 3.1: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;EJB 3.0 was relatively well-received by the community due to the ease it introduced. EJB 3.1 targets to continue the trend with groundbreaking new EJB 3.1 features:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Business interfaces are now optional, even for Session  Beans.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;EJB 3.1 adds the concept of Singleton Beans, thread-safe by default. Also, comes declarative concurrency controls for greater flexibility.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Scheduling: &amp;nbsp;Cron-style scheduling comes to enterprise apps. This a significant addition to the existing limited-scope timer API.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Async Session Bean Method calls: Using @Asynchronous annotation, you can even control the asynchronous EJB method via a handle to a java.util.concurrent.Future object.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;EJB Lite: A Web Profile based stripped down version. EJB Lite includes features like transactions and security, it does not include features like messaging, remoting and scheduling.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Packaging becomes easy, &amp;nbsp;EJB in WAR files now possible.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;run an embedded EJB 3.1 container in Java SE environments such as JUnit tests&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;utilize standardized global JNDI names for EJB&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/pfd/jsr318/index.html" target="_blank"&gt;EJB 3.1 Detailed Spec&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; JPA 2.0: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Now, JPA has been officially separated from EJB as a distinct API in its own. JPA has been a success. It enjoys great adoption rates and first-class vendor support. JPA 2.0 aims to add to the trend by adding new features:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JPA 2.0 adds a number of much needed ORM mapping enhancements such as the ability to model collections, maps and lists &amp;nbsp;via the @ElementCollection annotation and the ability to map unidirectional one-to-many relationships (JPA 1.0 only allowed bidirectional one-to-many relationships)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;EntityManager and Query APIs have been enhanced to support things like retrieving the first result (JPA 1.0 allowed the retrieval of a &lt;i&gt;unique&lt;/i&gt; result), specifying the maximum size of query results, getting access to the underlying vendor-specific entity manager/query objects and pessimistic locking.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JPQL has been enhanced with SQL-like CASE, NULLIF, COALESCE and  like capabilities.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JPA 2.0 adds a Criteria API. (The Criteria API in Hibernate or TopLink is essentially the object-oriented, type-safe, Java-centric equivalent of JPQL statements. This is a boon for use cases such as writing complex dynamic queries and avoiding runtime exceptions thrown while parsing JPQL.)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JPA2&amp;nbsp;standardizes second level caching, provides standard JDBC properties, flexibility of specifying timeouts and more.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/pfd/jsr317/index.html" target="_blank"&gt;JPA  2.0 Detailed Spec&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; Servlet 3.0: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Servlet 3.0 changes have generated quite a bit of excitement and  is likely   to be very well-received by the community:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Servlet 3.0 introduces annotations @WebServlet, @ServletFilter and @WebServletContextListener. (reduces web.xml &amp;nbsp;cofigs)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;web.xml fragments: The container now &amp;nbsp;looks for configuration in web.xml fragments anywhere in the web application classpath (such as the WEB-INF/classes directory or jars in the WEB-INF/lib directory) in addition to the web.xml file in WEB-INF directory.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Programmatically add  Servlets,     Filters and Listeners through the ServletContext.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Support for Asynchronous processing&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/pfd/jsr315/index.html" target="_blank"&gt;Servlet 3.0 Detailed Spec&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt; JAX-RS 1.1: &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;REST is increasingly gaining traction as an alternative web services  development   paradigm. We know of the advantages from REST vs. SOAP&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Much like JAX-WS abstracts away the low-level details of the SOAP protocol, JAX-RS is designed to reduce REST development to POJO programming and annotation based configuration. Here is a high level view of JAX-RS:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;The @Path annotation determines the URL that a JAX-RS resource can  be accessed,     down to a method in a POJO.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Annotations like @GET, @POST, @PUT and @DELETE are used to specify  the     HTTP method that is used to access a resource.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;Input from sources like URL query parameters, parts of the URL, cookie values and HTTP header values are mapped into variables via annotations like @QueryParam, @PathParam, @CookieParam and @HeaderParam respectively.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;The @Produces annotation tells JAX-RS what the content type of returned values are such as text/xml, text/json and the like.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size: small;"&gt;JAX-RS is integrated with Servlets, WebBeans and EJB.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Overall, JAX-RS has many other powerful features that make REST development a breeze, just like JAX-WS makes SOAP development almost transparent.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Read More:&amp;nbsp;&lt;a href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html" target="_blank"&gt;JAX-RS Detailed Spec&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;What’s More&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;We have covered the most important ones, Few we didn’t include are Enterprise Web services 1.3, JAX-WS 2.2, JAXB 2.2, XML Messaging and more. You can check them out at the&lt;a href="http://java.sun.com/javaee/technologies/index.jsp" target="_blank"&gt; official Java EE 6 Technologies page&lt;/a&gt;.&lt;b&gt; &lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;Source:&lt;br /&gt;http://www.taranfx.com/blog/java-ee-6-features-overview&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3010367384104945032?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3010367384104945032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/whats-new-in-java-ee-6.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3010367384104945032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3010367384104945032'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/whats-new-in-java-ee-6.html' title='What&apos;s New in Java EE 6'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3627350259796272454</id><published>2009-12-10T12:37:00.000-08:00</published><updated>2009-12-10T12:37:07.823-08:00</updated><title type='text'>Java EE 6 has arrived!</title><content type='html'>Today is the official release day for Java EE 6.&amp;nbsp; It has been almost 10 years since the initial release of J2EE 1.2 which was released on December 17th, 1999.&lt;br /&gt;&lt;br /&gt;Here is Java EE 6 Tutorial, Volume I&lt;br /&gt;&lt;a href="http://java.sun.com/javaee/6/docs/tutorial/doc/"&gt;http://java.sun.com/javaee/6/docs/tutorial/doc/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Java EE 6 platform includes the following new features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Profiles, configurations of the Java EE platform targeted at specific classes of applications. Specifically, the Java EE 6 platform introduces a Web Profile targeted at web applications, as well as a Full Profile that contains all Java EE technologies.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New technologies, including the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Java API for RESTful Web Services (JAX-RS)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Contexts and Dependency Injection for the Java EE Platform (JSR-299), informally known as Web Beans&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java Authentication Service Provider Interface for Containers (JASPIC)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;New features for Enterprise JavaBeans&lt;sup&gt;TM&lt;/sup&gt; (EJB&lt;sup&gt;TM&lt;/sup&gt;) components&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New features for servlets&lt;br /&gt;&lt;/li&gt;&lt;li&gt;New features for JavaServer&lt;sup&gt;TM&lt;/sup&gt; Faces components&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3627350259796272454?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3627350259796272454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/java-ee-6-has-arrived.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3627350259796272454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3627350259796272454'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/java-ee-6-has-arrived.html' title='Java EE 6 has arrived!'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1794184323510208658</id><published>2009-12-03T08:14:00.000-08:00</published><updated>2009-12-03T08:25:09.350-08:00</updated><title type='text'>Envisioning Next Generation of Web - The Semantic Web</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;The &lt;b&gt;Semantic Web&lt;/b&gt; is an extension to the current Web, and started out as a vision of one of its creators, Tim Berners-Lee. He realized that one of the major shortcomings of the traditional Web is the fact that its information is mostly human-interpretable, not machine-interpretable. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;To fully grasp this problem, consider the example of below picture, showing two very simple Web pages, each representing a mouse. You, the reader, will immediately notice that on the left Web page an animal is shown, and on the right page a computer accessory is shown. You do so by interpreting the image and using this knowledge to attach the correct interpretation to the word mouse in the sentence This is a mouse." In other words, the meaning or semantics of the word mouse is provided by you, the human reader, using contextual information (in this case, the accompanying image). For a machine, however, it is impossible to grasp what is on each page. In fact, a machine only detects two pages, each containing an image and a string. It does not know what is represented in the image; it cannot interpret the sentence, nor can it correctly distinguish and interpret the two occurrences of the word mouse." For a computer, the information contained in the page is readable, but not interpretable.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_6EEwisOalwc/SxfljGDFbbI/AAAAAAAAAFY/qQJO47mcMT0/s1600-h/1+ASL.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6EEwisOalwc/SxfljGDFbbI/AAAAAAAAAFY/qQJO47mcMT0/s400/1+ASL.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Verdana,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;This problem is illustrated by the fact that all major search engines are mainly restricted to syntax-based search queries, as they are not able to grasp the semantics of the information on the Web. Also, for automated agents crawling the Web searching for relevant information, the lack of semantics is problematic. Imagine a shopping agent that searches for the cheapest 17-inch screen available. It will run into all kinds of problems related to the lack of semantics: when is something a (computer) screen, when are monitors also&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;screens, how different currencies are handled, what about promotions? The automated agent will fail miserably.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;To overcome this problem of lack of semantics on the Web, Tim Berners- Lee envisioned the Semantic Web. He defined it as an extension of the current Web in which information is given a well defined meaning, better enabling computers and people to work in cooperation . The Semantic Web is thus considered as an additional layer on top of the current Web. To give information a well-defined meaning, the Semantic Web&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;relies on the use of ontologies. Intuitively, we can describe an ontology as the terminology used for concepts of a certain domain (e.g. mouse, cat, animal, reptile), and the relations that exist between these concepts (e.g., is a, eats). Our enhanced example page, representing a mouse with an ontology, is (schematically) depicted in this picture:&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_6EEwisOalwc/Sxfl3VdxQFI/AAAAAAAAAGA/bCOBMpKW1ug/s1600-h/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_6EEwisOalwc/Sxfl3VdxQFI/AAAAAAAAAGA/bCOBMpKW1ug/s640/1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;More formally, the term ontology is defined as a formal, explicit specification of a shared conceptualization of a domain of interest. In other words, ontologies form a formal and explicit representation of concepts and the relations between these concepts that can be distinguished in a particular domain. This explicit and formal specification allows machines to understand and interpret the information captured by an ontology, thus allowing automated processes to use this information (e.g. for reasoning, for crawling the Web, for performing search based on content).&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1794184323510208658?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1794184323510208658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/12/envisioning-next-generation-of-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1794184323510208658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1794184323510208658'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/12/envisioning-next-generation-of-web.html' title='Envisioning Next Generation of Web - The Semantic Web'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6EEwisOalwc/SxfljGDFbbI/AAAAAAAAAFY/qQJO47mcMT0/s72-c/1+ASL.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2090343011561033150</id><published>2009-11-28T06:20:00.000-08:00</published><updated>2009-11-28T06:20:54.285-08:00</updated><title type='text'>Learning Organization in Practice - Senge’s View "The Fifth Discipline"</title><content type='html'>&lt;div style="color: #990000;"&gt;&lt;b&gt;1. Personal Mastery&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Personal mastery is concerned with individuals’ desire and ability to grow through learning. Those who have the discipline of personal mastery are actually ‘masters of personal learning’; people who value learning and who act on what they learn.&lt;br /&gt;&lt;br /&gt;This kind of mastery implies a more active form of learning, a desire to find out more and to act on what we find out, turning it into knowledge, and in the process improving our lives.&lt;br /&gt;&lt;br /&gt;Achieving true mastery involves a constant search for priorities. Prioritizing is itself a form of learning, which requires awareness, honesty and continual questioning. We must be prepared to note changes in ourselves and our environment, and re-prioritize accordingly.&lt;br /&gt;&lt;br /&gt;Learning organizations are built by people with personal mastery. Without people who will question and re-prioritise, any organization risks pursuing the wrong goals and constantly playing catch-up with the opposition. In return, organizations need to value those who value learning. Companies need to provide opportunities to learn and act, and they need to seek ways to align the individual’s goals and objectives with those of the firm.&lt;br /&gt;&lt;br /&gt;According to Senge, not only will those who possess mastery learn faster, but they will be more committed and more prepared to take the initiative. Enlightened companies will seize upon these attributes and harness them to the firm’s goals. This can only be a win–win situation: individuals are given opportunities to learn and are happier in their work. Meanwhile, the firm reaps the returns from new ideas, commitment and improved operations.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;2. Shared Vision&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Sharing a common goal is what distinguishes a team from a group of people. Simply putting people in a room and telling them that they are a team doesn’t make them a team. Similarly, hiring six developers who have worked well in six different teams before and calling them a team doesn’t make them a team. Each team is different, because each team contains a different mix of people and each team needs to find its own way of working together, its own strengths and weaknesses.&lt;br /&gt;&lt;br /&gt;Participating in the shared vision means that individuals accept that they won’t create the whole themselves. Instead, individuals are offered the opportunity to create something bigger than they could create alone, and something that will be bigger than the sum of its parts.&lt;br /&gt;&lt;br /&gt;For this to happen, each individual must hold a personal stake in the vision. In order to build a personal stake, it helps if each person is allowed to take part in the vision formation. This will help them internalize the vision and make it part of their identity, thus creating a sense of belonging and focus for actions.&lt;br /&gt;&lt;br /&gt;Simply handing a team a ready-made vision and asking them to adopt it as theirownis the antithesis of true shared vision. People who are handed a ready made vision won’t feel the same attachment, and consequently they will be less motivated to bring the vision to reality.&lt;br /&gt;&lt;br /&gt;For a shared vision or mission statement to really motivate individuals and teams, they must be able to associate closely with the idea. It is not enough for a manager or planner to explain how vision affects an individual. In order to create a close personal relationship with the vision, individuals need to hold a stake in it.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;3. Team Learning&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In any development team, many members will have specialist skills and knowledge. For the team to work well together, the members need to respect one another and maximize individual’s specialities, but also support the needs of those with less experience or knowledge.&lt;br /&gt;&lt;br /&gt;For Senge, there’s more to team learning than just ensuring that a team works well together. Team learning goes beyond good teamwork. Team learning builds personal mastery and shared vision, to create highly effective motivated units.&lt;br /&gt;&lt;br /&gt;Team action and learning are guided by the shared vision that helps the team to direct its thinking. The shared vision helps the team to know what to investigate and what to pass over.&lt;br /&gt;&lt;br /&gt;When a team works well together, guided by a shared vision that all members believe in and work towards, then a phenomenon of alignment is seen. This occurs when all team members are pulling in exactly the same direction, without diversion. Unfortunately, there’s a danger that effective individuals working with the best intention but not working in alignment can pull in different directions. This makes management more difficult.&lt;br /&gt;&lt;br /&gt;Team members need personal mastery to keep their individual learning moving, but for team learning there needs to be more. There needs to be sharing of learning amongst team members and between teams. Individuals can be great learners themselves, but if they don’t share their learning then team learning won’t occur.&lt;br /&gt;&lt;br /&gt;Effective teams are open to learning as a group. The team needs to be able to engage shared reflection and what Senge calls dialogue and discussion. Senge differentiates between dialogue – which he considers a creative exploration and discussion, which he describes as the presentation and defence of different views.&lt;br /&gt;&lt;br /&gt;The team should inquire into opportunities and problems, and recognize potential conflicts rather than avoiding them. These mechanisms help the team learn, build team knowledge and identify improvements to workpractices.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;4. Mental Models&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Mental models are the ideas, preconceptions and assumptions that we all carry around in our heads.We need these models to help us function every day, and they are valuable short cuts that enable us to skip over first principles and get things done.&lt;br /&gt;&lt;br /&gt;When we’re aware of these models, there’s little problem. If our assumptions are out in the open, are explicit and we’re aware of them, then we can selectively switch them off when dealing with new problems or seeking new solutions. Problems set in when we’re unaware that the models are governing our actions, or when we fail to recognize that our models don’t apply.&lt;br /&gt;&lt;br /&gt;Senge goes further than just pointing out that mental models exist. He advocates a discipline that seeks to expose the models and open them to questioning. Recognizing that these assumptions exist allows them to be questioned and rethought.&lt;br /&gt;&lt;br /&gt;Mental models exist throughout the software development process. They exist in specification documents, in manager’s models of how development works, in the code that developers write and in the tests run against the system. Some inaccurate assumptions lead directly to bugs found by customers.&lt;br /&gt;&lt;br /&gt;At every stage in the development process, we use our mental models to make assumptions. Advocates of voluminous documentation and strict methodological processes can claim that documentation will help overcome the problem. But as we write longer documents, and add extra rigour to our processes, we encourage individuals to take short cuts and rely on their mental models all the more.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;5. Systems Thinking&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Systems are not just computer systems. They are any kind of device or process where a number of different pieces need to work together to produce an end result or product. Computer systems are just one type of system, namely the type relating to computers. Modern society and business are full of systems.&lt;br /&gt;&lt;br /&gt;Traditional Western science emphasizes breaking things down into small parts and understanding the operation of each small piece. We consider substances made up of atoms, and atoms made up of electrons, protons and neutrons; protons in turn are made up of quarks and so on. Systems thinking takes the opposite approach. It seeks to understand how larger entities interact and inter-operate. Rather than looking at individual actions and explaining how each one came to occur we look at the overall system and try to understand the drivers for whole systems.&lt;br /&gt;&lt;br /&gt;Issues arise because although all the individual pieces may be working faultlessly, when they work together in the system unintended results occur. Identifying the problems can be difficult because our training, as engineers and scientists, leads us to decompose the problem and examine individual pieces. To overcome this, we need to engage in systems thinking.&lt;br /&gt;&lt;br /&gt;Diagnosing problems is only half the story. Once identified, these problems need to be addressed. Again, the complex interaction between multiple pieces makes solutions harder. Fixing a problem may require several coordinated changes. What may appear to be a retrograde step in one piece may actually resolve a far larger problem.&lt;br /&gt;&lt;br /&gt;&lt;div style="color: #990000;"&gt;&lt;b&gt;And Reflection&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;‘‘Skills of reflection concern slowing down our own thinking processes so that we can become aware of how we form our mental models and the ways they influence our actions. Inquiry skills concern how we operate in face-toface interactions with others, especially in dealing with complex and conflicting issues.’’ Peter Senge (1990)&lt;br /&gt;&lt;br /&gt;In practice, reflection simply means ‘taking time to think about things’. It is very easy in a hectic environment to be so concerned with getting stuff done that we never stop to think about what we’re doing, why we’re doing it and whether we may actually be making everything worse with the fixes we apply.&lt;br /&gt;&lt;br /&gt;Reflection is key to personal growth and development. Actively practising reflection can substantially improve our own learning process and help us achieve our aims and objectives. Team reflection can also help with enhancing team learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2090343011561033150?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2090343011561033150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/learning-organization-in-practice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2090343011561033150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2090343011561033150'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/learning-organization-in-practice.html' title='Learning Organization in Practice - Senge’s View &quot;The Fifth Discipline&quot;'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2600866645467698470</id><published>2009-11-26T12:59:00.000-08:00</published><updated>2009-11-26T12:59:56.857-08:00</updated><title type='text'>What is The Open Source Business Model?</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;It is often confusing to people to learn that an open source company may give its products away for free or for a minimal cost. &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;How do open source companies make money?  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;While it is true that an open source business may not make money directly from its products,  it is untrue that open source companies do not generate stable and scalable revenue streams.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;In actuality, in the 21st century web technology market, it is the open source company that has the greatest long-term strategic advantage.  This is demonstrated by companies such as LINUX, Apache, and Netscape, a host of web-specific technologies such as Java, Perl, TCL, and a  host of web-specific technology companies such as Sendmail.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;The open source business model relies on shifting the commercial value away from the actual products and generating revenue from the 'Product Halo,' or ancillary services like systems integration, support, tutorials and documentation.)   &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;This focus on the product halo is rooted in the firm understanding that in the real-world, the value of software lies in the value-added services of the product halo and not in the product  or any intellectual property that the product represents.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;In actuality, the value of software products approaches zero in the fast-paced, highly-customized, ever-changing world of information technology.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;But it is not simply an acknowledgement of the revenue streams generated by the product halo that makes open source a compelling business strategy.    &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;Open source also cuts down on essential research and development costs while at the same  time speeding up delivery of new products.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;This paradoxical situation arises from the fact that within an open source project, the community members themselves provide free research and development by contributing new solutions, features,  and ideas back to the community as a whole. The company that sits at the center of any successful open source project may reap the rewards of the work of thousands of highly-skilled developers  without paying them a cent.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;A final strength of the open source business model lies in its ability to market itself.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;Because open source products are typically released for free, open source companies that can produce quality products and generate a good reputation can almost immediately grab huge shares  of any market based on the complex and far-reaching global referral networks generated by users.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;In fact, in the web technology space, almost every global standard has been based upon open source technology.  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Helvetica Neue&amp;quot;,Arial,Helvetica,sans-serif;"&gt;  &lt;span style="font-size: small;"&gt;By using the open source technology model, we can create a superior product, which  immediately has a competitive advantage, and which generates multiple scalable revenue  streams while being freely available throughout the community.    &lt;/span&gt; &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2600866645467698470?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2600866645467698470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/what-is-open-source-business-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2600866645467698470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2600866645467698470'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/what-is-open-source-business-model.html' title='What is The Open Source Business Model?'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-848225266069788466</id><published>2009-11-15T01:35:00.000-08:00</published><updated>2009-11-15T01:35:45.419-08:00</updated><title type='text'>Another Perspective – Tests as a shared language</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;One of the biggest problems of developing software for someone else is the prevalent ambiguity in requirements. It is far from child’s play to e&lt;b&gt;xpress and communicate requirements&lt;/b&gt; in such a way that no information is lost and that the original idea is transmitted fully intact. Some would go as far as saying it’s impossible to do so. After all, we can’t read minds.&lt;br /&gt;&lt;br /&gt;This problem is highlighted when the &lt;b&gt;medium used for this communication is written documentation—a requirements specification&lt;/b&gt;, for example—which is far from being a perfect way to transfer information and understanding. If we were able to transform the requirements into executable tests that verify whether the system conforms to each particular aspect of the specification, there would be many fewer problems with ambiguity and less room for interpretation on behalf of developers. This is the wonderful premise of tests as specification.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Tests as specification&lt;/b&gt;&lt;br /&gt;Tests as specification provides a way to look at tests as something that’s essentially derived from requirements; therefore—in theory at least—&lt;b&gt;a system that passes the tests should by definition conform to the specification.&lt;/b&gt; This, however, assumes perfect test coverage, which is rarely—if ever—the case in the so-called “real world” software projects.&lt;br /&gt;&lt;br /&gt;Defects get through testing every now and then. That is hardly news to anyone who’s lived through a couple of commercial software projects. In part, this is due to our having missed a test that we should’ve considered. In part, this is due to our human nature and our deceptive intuition, which manages to talk us out of running some of the tests to “save time.”&lt;br /&gt;&lt;br /&gt;This begs the question, are we really better off using tests as specification if the tests we have tend to leak in one way or another? Is it really feasible to use tests as specification, effectively redefining the meaning of these concepts? Using tests as specification is not a silver bullet either, but it does have a number of clear advantages that makes it worth considering:&lt;br /&gt;■ Faster feedback through automation&lt;br /&gt;■ More reliable test execution&lt;br /&gt;■ One less translation step&lt;br /&gt;&lt;br /&gt;First of all, there’s no denying that having automated, executable tests would get rid of a lot of grunt work and would accelerate our feedback loop enormously compared to manually executed test cases. &lt;br /&gt;&lt;br /&gt;Second, executable tests would effectively prevent our inherent laziness from getting us into trouble, because we would be able to exploit the fact that the computer doesn’t suffer from the same problems of character that we humans are born with. Finally, we are already making the same errors in translating the true requirements into writing with our current practice, so would it really be any worse if we’d just change the format and medium we’re using to document our test cases?&lt;br /&gt;&lt;br /&gt;There are still plenty of opportunities to err while transforming the requirements into tests, of course, but the less knowledge transfer and human interpretation is involved in running the tests, the less chance there is that something falls into the gaps after the test has been crafted.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Specification by example&lt;/b&gt;&lt;br /&gt;Furthermore, one of the most striking benefits of using tests as the specification driving development is that tests typically employ specification by example instead of abstraction or prose (although there should almost invariably be some amount of prose involved—things are not black and white in this respect either). &lt;br /&gt;&lt;br /&gt;In other words, instead of the traditional “the system shall calculate tax” pattern familiar in requirements documents, specification by example promotes expressing the requirement through examples such as “for a $20 subscription with a tax rate of 10%, the system charges a total of $22 from the user’s account.”&lt;br /&gt;&lt;br /&gt;For this simple requirement, the difference between the traditional “system shall” and an example-based version might not be that significant—after all, we all know how to calculate tax in such a trivial case. However, the requirements we meet at work are typically not as trivial, and the risk of misunderstanding is much higher. For instance, applying multiple taxes for a given transaction might need to employ different calculation rules in different locales, which can be clarified enormously through concrete examples.&lt;br /&gt;&lt;br /&gt;Specification by example is a natural fit for our intuition and makes it easier to relate the requirements to the concrete world and our software. Specification by example can also be seen in TDD. Whereas acceptance tests specify by example the desired behavior of the system, the examples and the desired behavior specified with unit tests are specifications about the desired implementation rather than about the functionality delivered.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Higher quality inside and out, better confidence in our work, and the customer loving us for giving them software that meets their needs—who wouldn’t like these improvements, especially if it’s not just talk? After all, in theory, anything and everything is possible. &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-848225266069788466?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/848225266069788466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/another-perspective-tests-as-shared.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/848225266069788466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/848225266069788466'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/another-perspective-tests-as-shared.html' title='Another Perspective – Tests as a shared language'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-497206959855986582</id><published>2009-11-15T01:20:00.000-08:00</published><updated>2009-11-15T01:21:46.714-08:00</updated><title type='text'>Software Development with Close collaboration</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Close collaboration&lt;/b&gt; is essential for any complex endeavors involving people, and software development with acceptance TDD is no exception. In practice, we want to have an integrated project team instead of separate development, business analysis, and testing teams, let alone a distant QA department.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;The fundamental idea is that the way to achieve the best possible level of productivity for the whole team is to nurture &lt;b&gt;rapid feedback and effective, face-to-face communication around concrete, working software instead of passing around test plans, requirements specifications, and bug reports between customers, testers, business analysts, and developers.&lt;/b&gt; With acceptance TDD, we are able to collaborate effectively by bringing together the knowledge, skills, and abilities required for doing a good job.&lt;br /&gt;&lt;br /&gt;Let’s see how this &lt;b&gt;close collaboration helps us deliver the right product by improving our interactions and reducing the likelihood of misunderstood requirements and costly rework&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Seeing concrete, working software Very few customers have been completely satisfied with what the contractor delivers to them after several months of silence. By feeding the customer with completed functionality as a continuous stream, we’re making sure that, if there’s something wrong or missing, we’ll know about it right away. &lt;br /&gt;&lt;br /&gt;This &lt;b&gt;early feedback reduces our risks and costs&lt;/b&gt;. Furthermore, by not keeping an inventory of supposedly “completed” items that the customer hasn’t seen yet, we’re avoiding the usual illusion of progress that is built on assumptions and that is supported by document-driven methods and meaningless statements such as “development is 90% complete.”&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Building trust and confidence&lt;/b&gt; &lt;br /&gt;Another significant benefit of delivering working software early and often is that we’re building trust and confidence both between the team and the customer and within the team itself. By showing the customer (and ourselves) that we can deliver, we’re making life a lot easier for our whole team.&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Customer in control&lt;/b&gt; &lt;br /&gt;There’s one key difference in the role and power of the customer between incremental development and the traditional waterfall, big design, up-front style of development. With incremental development, the customer gets to choose which features they get first. Similarly, they also get to choose which features are dropped if the team is not able to implement all of them within the project’s allocated time or budget.&lt;br /&gt;&lt;br /&gt;The customer’s decisions are, of course, influenced by the cost of the features, which the developers estimate including the cost of delaying, the cost of building things in a different order, and so forth.&lt;br /&gt;&lt;br /&gt;The ability of the customer to decide what their money is spent on can really change the way they look at software projects. Finally, the customer is in control of what their money is spent on. Talk about motivating the customer!&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Evolving a shared language By encouraging close collaboration&lt;/b&gt; between testers, developers, and customers, we are effectively facilitating a situation where the information needed is obtained as quickly as possible—in all directions. Furthermore, this continuous exposure within the team is likely to increase the efficiency of communication as people get to know each other better and begin to evolve a shared language. Software development is a people business, after all, and we shouldn’t neglect that fact.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-497206959855986582?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/497206959855986582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/software-development-with-close.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/497206959855986582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/497206959855986582'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/software-development-with-close.html' title='Software Development with Close collaboration'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6199264302290424818</id><published>2009-11-15T01:08:00.000-08:00</published><updated>2009-11-15T01:10:47.591-08:00</updated><title type='text'>Keeping code healthy with refactoring</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Proceeding in small increments means that we’re constantly extending the system to do something that its current design might not support. Consequently, we’re constantly extending the system’s design in ways that might break existing concepts as well as introduce new ones. &lt;br /&gt;&lt;br /&gt;This, in turn, means that we’re bound to end up with a broken design that’s inconsistent, unbalanced, difficult to understand, difficult to extend, or otherwise having a bad hair day. If we’re out of luck, all of them. And that would seriously hamper our ability to keep delivering software to our customers. Not to worry, though. There is a way to practice evolutionary design without letting the design rot—that way is called refactoring.&lt;br /&gt;&lt;br /&gt;Quoting Martin Fowler, the author of Refactoring: Improving the Design of Existing Code (Addison-Wesley, 1999), refactoring is “a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior.” That description manages to pack a lot of information into such a short sentence. Let’s spell it out and see what it’s actually telling us about refactoring, shall we?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Refactoring is disciplined&lt;/b&gt;&lt;br /&gt;When refactoring (verb), we are not just altering the code’s structure but improving the design by altering it in a controlled manner—by applying small behavior preserving transformations that are called refactorings (noun).&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;In other words, refactoring is about applying refactorings on code in a controlled manner. This restructuring can be a significant change to the existing design, but it is always performed in small steps, verifying at each stage that the little transformations we’ve made have not changed existing behavior.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;We don’t just change code. We first identify specific problems in the design, and then we select appropriate refactorings and apply them carefully and thoughtfully. We wait until a problem begins to present itself, and only then do we solve it. We don’t predict design problems beforehand and prepare for them—that would increase the possibility of creating more problems with our system’s design than solving them.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;b style="color: #e06666;"&gt;Refactorings are transformations&lt;/b&gt;&lt;br /&gt;A refactoring can also be thought of as a transformation between two states. The starting state has some characteristic you’d like to get rid of or otherwise improve on, and the target state represents a design that would incorporate that improvement. Below picture shows an example of a refactoring called Replace Inheritance with Delegation (also documented in Fowler’s book) that, as its name implies, moves our design from an inheritance-based solution to a delegation based solution.&lt;br /&gt;&lt;br /&gt;The reason for doing this refactoring might be, for instance, that the subclass is only extending the superclass in order to reuse a small part of its functionality and, as an unwanted side effect, inherits a whole bunch of data and functionality we don’t care for.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif; text-align: center;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_6EEwisOalwc/Sv_D7aoMaAI/AAAAAAAAAEo/GpBuzA03aT0/s1600-h/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6EEwisOalwc/Sv_D7aoMaAI/AAAAAAAAAEo/GpBuzA03aT0/s640/untitled.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Some of these refactorings are so well defined that modern development tools have automated them. This automation has made refactoring evolutionary designs&amp;amp;feasible for applications and systems of pretty much any size and complexity.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Refactorings alter internal structure&lt;/b&gt;&lt;br /&gt;So these transformations are applied to the system’s internal structure—the code—which means that many of the refactorings are very low-level. For example, one of the most common refactorings is called rename method. Renaming a method or a local variable might not seem like too significant a change in the system’s design, but renaming a method from something ambiguous to something clear and concise can make a world of difference to someone new to the code and needing to understand the existing code.&lt;br /&gt;&lt;br /&gt;Also, such low-level refactorings are the fundamental building blocks to achieving larger refactorings. These “larger” refactorings are typically those that deal with moving the responsibilities around in your code, introducing or removing an inheritance hierarchy, or making other similar changes that (usually) involve more than one class. In the end, all refactorings can be reduced into a series of smaller steps, such as renaming a variable; adding a new, empty class; changing the return type of a method; and so forth.&lt;br /&gt;&lt;br /&gt;Although technically the most common refactorings are things like renaming a method, the number-one reason for refactoring is duplication. It might be duplication in terms of having two similar pieces of code in two methods or classes— something that could be extracted into a single method invoked in both places— but the duplication could also be in terms of responsibilities. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Trebuchet MS&amp;quot;,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;Duplication, of course, is bad for a code base because it makes the system more difficult to&lt;br /&gt;change. Having logic and responsibility duplicated in multiple places is a guaranteed way to introduce defects due to us forgetting to make the change in all necessary corners of the code base.&lt;br /&gt;&lt;br /&gt;In addition to not introducing defects with our changes to the code’s internal structure, we also don’t want our refactorings to add functionality. That is, refactorings should preserve behavior.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style="color: #e06666;"&gt;Refactorings preserve behavior&lt;/b&gt;&lt;br /&gt;The latter part of the earlier quote by Martin Fowler says, “without changing [code’s] external behavior.” What does that mean? It means that whatever transformations you apply to the existing code, those transformations should only affect the code’s design and structure—not its externally visible behavior or functionality. In other words, client code that uses the code you’re refactoring should not notice any difference in how the refactored code behaves.&lt;br /&gt;&lt;br /&gt;Renaming a method that’s part of a class’s public interface will obviously have to ripple through to client code as well, but the behavior of that method should not change in any way. Similarly, restructuring the code behind the public interface should not in any way change the behavior visible through the public interface.&lt;br /&gt;&lt;br /&gt;So we think we’ve been successful at altering internal structure without changing external behavior. Cool. But how can we be sure that our refactorings haven’t changed the code’s external behavior? By running tests against our code, of course! We want to keep our software working, and tests are the tool for ensuring that.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6199264302290424818?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6199264302290424818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/keeping-code-healthy-with-refactoring.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6199264302290424818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6199264302290424818'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/keeping-code-healthy-with-refactoring.html' title='Keeping code healthy with refactoring'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6EEwisOalwc/Sv_D7aoMaAI/AAAAAAAAAEo/GpBuzA03aT0/s72-c/untitled.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-5677439543112315560</id><published>2009-11-15T00:28:00.000-08:00</published><updated>2011-03-07T10:07:12.745-08:00</updated><title type='text'>Only ever write code to fix a failing test</title><content type='html'>&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Test Driven Development&lt;/b&gt;, is a programming technique based on a very simple rule:&lt;br /&gt;&lt;b&gt;Only ever write code to fix a failing test&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In other words, write the test first, and only then write the code that makes it pass.This rule is controversial to many of us who have been schooled to first produce a thorough design, then implement the design, and finally test our software in order to find all those bugs we’ve injected during implementation. &lt;b&gt;TDD turns this cycle around Test first, then code, and design afterward&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;Does the thought of “designing afterward” feels awkward? That’s only natural. It’s not the same kind of design we’re used to in the traditional design-code-test process. In fact, it’s such a different beast that we’ve given it a different name, too. We call it refactoring to better communicate that the last step is about transforming the current design toward a better design. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: Verdana,sans-serif; text-align: left;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://3.bp.blogspot.com/_6EEwisOalwc/Sv-6V_vitkI/AAAAAAAAAEg/qCWCtkN7zyI/s1600-h/untitled.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_6EEwisOalwc/Sv-6V_vitkI/AAAAAAAAAEg/qCWCtkN7zyI/s400/untitled.JPG" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt; &lt;b&gt;Red-green-refactor&lt;/b&gt; is an alternative mnemonic for the TDD cycle of writing a test, making it pass, and making it pretty. What’s with the colors?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When we begin the TDD cycle by writing a test, it fails. It fails because our system is broken right now; it doesn’t have all the functionality we want it to have. In some development environments, it fails by displaying a red bar—thus the red in the mnemonic.&lt;br /&gt;&lt;br /&gt;In the second step, making it pass, we implement the missing functionality so that all tests pass—both the one we just added and all the ones we had already.&lt;br /&gt;&lt;br /&gt;At this time, the red bar turns to green, which takes us to green in the mnemonic. The last part of the cycle, refactor, is just that—refactoring. As we improve the design of the code without altering its external behavior, all tests should pass and, thus, we should remain green.&lt;br /&gt;&lt;br /&gt;Red, green, green. Red, green, refactor. Quite catchy, isn’t it?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In its deceptive simplicity, this little cycle, test-code-refactor, encompasses a significant power to improve the overall quality of our personal software process and, subsequently, that of the whole team, project, and organization.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;Reference&lt;/strong&gt;: Test Driven PRACTICAL TDD AND ACCEPTANCE TDD FOR JAVA DEVELOPERS by LASSE KOSKELA - Manning 2008&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-5677439543112315560?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/5677439543112315560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/11/only-ever-write-code-to-fix-failing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5677439543112315560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5677439543112315560'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/11/only-ever-write-code-to-fix-failing.html' title='Only ever write code to fix a failing test'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_6EEwisOalwc/Sv-6V_vitkI/AAAAAAAAAEg/qCWCtkN7zyI/s72-c/untitled.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2480941882050045603</id><published>2009-10-23T03:48:00.000-07:00</published><updated>2009-10-23T03:48:51.481-07:00</updated><title type='text'>Management Skills - Networking</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Increasingly in today’s more fluid and flexible organizations, &lt;b&gt;people get things done by networking&lt;/b&gt;.&lt;br /&gt;&lt;b&gt;Networks are loosely organized connections between people with shared interests&lt;/b&gt;. Networking takes place within them when people &lt;b&gt;exchange information, enlist support and create alliances getting agreement with other people on a course of action and joining forces to make it happen&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;It occurs outside the usual formal communication channels. It is an essential way of getting things done in organizations – it ensures that the informal organization works.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Networks inside organizations are often fluid and informal&lt;/b&gt;. They exist to meet a need and can be dispersed if that need no longer exists, only to be reformed when it reappears. &lt;b&gt;Networks may just consist of people with similar aims or interests who communicate with one another or get together as required&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Networks are sometimes set up formally in organizations, for example the ‘communities of interest’ that are created to exchange and share knowledge and experience as part of a &lt;b&gt;‘knowledge management’ programme&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Networks can also exist outside the organization. Again, they may consist of like-minded individuals exchanging information and meeting informally, or they may be set up formally with regular meetings and newsletters.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Here are 10 steps you can take to network effectively:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Identify people who may be able to help.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Seize any opportunity that presents itself to get to know people who may be useful.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Have a clear idea of why you want to network&lt;/b&gt; – to share knowledge, to persuade people to accept your proposal or point of view, or to form an alliance.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Know what you can contribute&lt;/b&gt; – networking is not simply about enlisting support, it is just as much if not more concerned with developing knowledge and understanding and joining forces with like-minded people so that concerted effort can be deployed to get things done.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Show interest&lt;/b&gt; – if you engage with people and listen to them, they are more likely to want to network with you.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. Ask people if you can help them as well as asking people to help you.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. Put people in touch with one another.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8. Operate informally but be prepared to call formal meetings when necessary to reach agreement and plan action.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9. Make an effort to keep in touch with people.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10. Follow up &lt;/b&gt;– check with members of the network on progress in achieving something, refer back to conversations you have had, discuss with others how the network might be developed or extended to increase its effectiveness.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2480941882050045603?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2480941882050045603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-networking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2480941882050045603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2480941882050045603'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-networking.html' title='Management Skills - Networking'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-5558267764278958272</id><published>2009-10-23T03:43:00.000-07:00</published><updated>2009-10-23T03:43:32.865-07:00</updated><title type='text'>Management Skills - Problem Solving</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Peter Drucker (1967) wrote that ‘In every area of effectiveness within an organization, one feeds the opportunity and starves the problem’. It is indeed often said that ‘&lt;b&gt;there are no problems, only opportunities&lt;/b&gt;’. &lt;br /&gt;&lt;br /&gt;This is not universally true of course, but it does emphasize the point&lt;br /&gt;that a problem should lead to positive thinking about what is to be done now. It is not the time for recriminations. If a mistake has been made, the reasons for it should be analysed so that it does not happen again. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The following are 10 steps for effective problem-solving:&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;Define the situation&lt;/b&gt; – establish what has gone wrong or is potentially going to go wrong.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2. Specify objectives&lt;/b&gt; – define what is to be achieved now or in the future to deal with an actual or potential problem or a change in circumstances.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. Develop hypotheses&lt;/b&gt; – come up with theories about what has caused the problem.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;4. Get the facts &lt;/b&gt;– find out what has actually happened and contrast this with an assessment of what ought to have happened. Obtain information about internal or external constraints that affect the situation. However, remember what Nietzsche (1883) wrote: ‘There are no facts, only interpretations’. Try to understand the attitudes and motivation of those concerned. Remember that people will see what has happened in terms of their own position and feelings (their framework of reference).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;5. Analyse the facts&lt;/b&gt; – determine what is relevant and what is irrelevant. Diagnose the likely cause or causes of the problem. Do not be tempted to focus on symptoms rather than root causes. Test any assumptions. Dig into what lies behind the problem.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;6. Identify possible courses of action&lt;/b&gt; – spell out what each involves.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;7. Evaluate alternative courses of action&lt;/b&gt; – assess the extent to which they are likely to achieve the objectives, the cost of implementation, any practical difficulties that might emerge and the possible reactions of stakeholders.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;8. Weigh and decide&lt;/b&gt; – determine which alternative is likely to result in the most practical and acceptable solution to the problem. This is often a balanced judgement.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;9. Plan implementation&lt;/b&gt; – timetable, project management, and resources required.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;10. Implement – monitor progress and evaluate success&lt;/b&gt;. Remember that a problem has not been solved until the decision has been implemented. Always work out the solution to a problem with implementation in mind.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-5558267764278958272?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/5558267764278958272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-problem-solving.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5558267764278958272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/5558267764278958272'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-problem-solving.html' title='Management Skills - Problem Solving'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2450650332276094781</id><published>2009-10-23T03:37:00.000-07:00</published><updated>2009-10-23T03:37:54.283-07:00</updated><title type='text'>Management Skills - Decision Making</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Good managers are decisive&lt;/b&gt;. They can quickly size up a situation and reach the right conclusion about what should be done about it. To say of someone ‘He or she is decisive’ is praise indeed, as long as the decisions are effective. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Characteristics of the decision-making process&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Decision-making is about analysing the situation or problem, identifying possible courses of action, weighing them up and defi ning a course of action.&lt;br /&gt;&lt;br /&gt;Peter Drucker (1967) says: &lt;b&gt;‘A decision is a judgement. It is a choice between alternatives. It is rarely a choice between right and wrong. It is at best a choice between almost right and probably wrong – but much more often a choice between two courses of action neither of which is probably more nearly right than the other.’&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;You should not expect or even welcome a bland consensus view. The best decisions emerge from conflicting viewpoints. This is Drucker’s first law of decision-making: ‘One does not make a decision without disagreements’. &lt;br /&gt;&lt;br /&gt;You can benefit from a clash of opinion as it prevents people falling&lt;br /&gt;into the trap of starting with the conclusion and then looking for the facts that support it.&lt;br /&gt;&lt;br /&gt;Alfred P Sloan of General Motors knew this. At a meeting of one of his top committees he said:&lt;br /&gt;&lt;br /&gt;‘Gentlemen, I take it we are all in agreement on the decision here.’ Everyone around the table nodded assent. ‘Then,’ continued Mr Sloan, ‘I propose we postpone further discussion of the matter until our next meeting to give ourselves time to develop disagreement and perhaps gain&lt;br /&gt;some understanding of what the decision is all about.’&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Ten approaches to being decisive&lt;br /&gt;&lt;br /&gt;1. &lt;b&gt;Make decisions faster&lt;/b&gt; – Jack Welch, when heading General Electric, used to say: ‘In today’s lightning-paced environment, you don’t have time to think about things. Don’t sit on decisions. Empty that in-basket so that you are free to search out new opportunities…&lt;br /&gt;Don’t sit still. Anybody sitting still, you are going to guarantee they’re going to get their legs knocked from under them.’&lt;br /&gt;&lt;br /&gt;2. &lt;b&gt;Avoid procrastination&lt;/b&gt; – it is easy to put an e-mail demanding a decision into the ‘too difficult’ section of your actual or mental in-tray. Avoid the temptation to fill your time with trivial tasks so that the evil moment when you have to address the issue is postponed.&lt;br /&gt;&lt;br /&gt;Make a start. Once you have got going you can deal with the unpleasant task of making a decision in stages. A challenge often becomes easier once we have started dealing with it.&lt;br /&gt;Having spent five minutes on it, we don’t want to feel it was wasted, so we carry on and complete the job.&lt;br /&gt;&lt;br /&gt;3. &lt;b&gt;Expect the unexpected&lt;/b&gt; – you are then in the frame of mind needed to respond decisively to a new situation.&lt;br /&gt;&lt;br /&gt;4. &lt;b&gt;Think before you act&lt;/b&gt; – this could be a recipe for delay, but decisive people use their analytical ability to come to swift conclusions about the nature of the situation and what should be done about it.&lt;br /&gt;&lt;br /&gt;5. &lt;b&gt;Be careful about assumptions&lt;/b&gt; – we have a tendency to leap to conclusions and seize on assumptions that support our case, ignoring the facts that might contradict it.&lt;br /&gt;&lt;br /&gt;6. &lt;b&gt;Learn from the past&lt;/b&gt; – build on your experience in decision-making; what approaches work best. But don’t rely too much on precedents. Situations change. The right decision last time could well be the wrong one now.&lt;br /&gt;&lt;br /&gt;7. &lt;b&gt;Be systematic&lt;/b&gt; – adopt a rigorous problem-solving approach, This means specifying objectives (what you want to achieve), defining the criteria for judging whether they have been achieved, getting and analysing the facts, looking for causes rather than focusing on symptoms, developing and testing hypotheses and alternative solutions, and evaluating possible causes of action against the objectives and criteria.&lt;br /&gt;&lt;br /&gt;8. &lt;b&gt;Talk it through&lt;/b&gt; – before you make a signifi cant decision talk it through with someone who is likely to disagree so that any challenge they make can be taken into account (but you have to canvass opinion swiftly).&lt;br /&gt;&lt;br /&gt;9. &lt;b&gt;Leave time to think it over&lt;/b&gt; – swift decision-making is highly desirable but you must avoid knee-jerk reactions. Pause, if only for a few minutes, to allow yourself time to think through the decision you propose to make. Confirm that it is logical and fully justified.&lt;br /&gt;&lt;br /&gt;10. &lt;b&gt;Consider the potential consequences&lt;/b&gt; – McKinsey, the management consultants, call this ‘consequence management’. Every decision has a consequence and you should consider very carefully what that might be and how you would manage it. When making a decision it is a good idea to start from where you mean to end – define the end result and then work out the steps needed to achieve it.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-2450650332276094781?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/2450650332276094781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-decision-making.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2450650332276094781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/2450650332276094781'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-decision-making.html' title='Management Skills - Decision Making'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-8131155067600788166</id><published>2009-10-23T03:30:00.000-07:00</published><updated>2009-10-23T03:30:29.833-07:00</updated><title type='text'>Management Skills - Motivating</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Leadership is about getting people into action&lt;/b&gt; and ensuring that&lt;br /&gt;they continue taking that action in order to complete the task. It is therefore very much about &lt;b&gt;motivation&lt;/b&gt;. This can be defined as the &lt;b&gt;process of getting people to move in the direction&lt;/b&gt; the leader wants them to go. &lt;br /&gt;&lt;br /&gt;The organization as a whole provides the context within which high&lt;br /&gt;levels of motivation can be achieved, through &lt;b&gt;reward systems and the provision of opportunities for growth and development&lt;/b&gt;. But managers still have a major part to play in deploying their motivating skills to ensure that people give of their best. &lt;br /&gt;&lt;br /&gt;The aim is to get people to exert the &lt;b&gt;maximum amount of positive discretionary effort&lt;/b&gt; – they often have a choice about how they carry out their work and the amount of care, &lt;b&gt;innovation and productive behaviour&lt;/b&gt; they&lt;br /&gt;display. Discretionary effort makes the difference between people just doing a job and people doing a great job.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is motivation?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A motive is a reason for doing something. Motivation is concerned with the &lt;b&gt;factors that influence people to behave in certain ways&lt;/b&gt;. Motivating other people is about getting them to move in the direction you want them to go in order to achieve a result. Motivation can be described as goal-directed behaviour.&lt;br /&gt;&lt;br /&gt;Motivation is initiated by the &lt;b&gt;conscious or unconscious recognition of an unsatisfied need&lt;/b&gt;. A goal is then established that it is believed will satisfy this need, and a decision is made on the action that it is expected will achieve the goal. If the goal is achieved the need will be satisfi ed and the behaviour is likely to be repeated the next time a similar need emerges. If the goal is not&lt;br /&gt;achieved the same action is less likely to be repeated. &lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;Ten ways of motivating people&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1. Agree demanding but achievable goals.&lt;br /&gt;&lt;br /&gt;2. Create expectations that certain behaviours and outputs will produce worthwhile rewards when people succeed.&lt;br /&gt;&lt;br /&gt;3. Provide feedback on performance.&lt;br /&gt;&lt;br /&gt;4. Design jobs that enable people to feel a sense of accomplishment, to express and use their abilities, and to exercise their own decision-making powers.&lt;br /&gt;&lt;br /&gt;5. Make good use of the organization’s reward system to provide appropriate financial incentives.&lt;br /&gt;&lt;br /&gt;6. Provide recognition and praise for work well done.&lt;br /&gt;&lt;br /&gt;7. Communicate to your team and its members the link between performance and reward, thus enhancing expectations.&lt;br /&gt;&lt;br /&gt;8. Provide effective leadership.&lt;br /&gt;&lt;br /&gt;9. Give people the guidance and training that will develop the knowledge and skills they need to improve their performance and be rewarded accordingly.&lt;br /&gt;&lt;br /&gt;10. Offer opportunities for learning and development that will enable them to advance their careers.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-8131155067600788166?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/8131155067600788166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-motivating.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8131155067600788166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8131155067600788166'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/management-skills-motivating.html' title='Management Skills - Motivating'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-139907176091455147</id><published>2009-10-14T03:48:00.000-07:00</published><updated>2009-10-14T03:48:25.455-07:00</updated><title type='text'>Strategic Management - Scenario Planning</title><content type='html'>Traditional forecasting techniques often fail to predict significant changes in the firm's external environment, especially when the change is rapid and turbulent or when information is limited. Consequently, important opportunities and serious threats may be overlooked and the very survival of the firm may be at stake.&lt;br /&gt;&lt;br /&gt;Scenario planning is a tool specifically designed to deal with major, uncertain shifts in the firm's environment.&lt;br /&gt;Scenario planning has its roots in military strategy studies. Herman Kahn was an early founder of scenario-based planning in his work related to the possible scenarios associated with thermonuclear war ("thinking the unthinkable"). &lt;br /&gt;&lt;br /&gt;Scenario planning was transformed into a business tool in the late 1960's and early 1970's, most notably by Pierre Wack who developed the scenario planning system used by Royal Dutch/Shell. As a result of these efforts, Shell was prepared to deal with the oil shock that occurred in late 1973 and greatly improved its competitive position in the industry during the oil crisis and the oil glut that followed.&lt;br /&gt;&lt;br /&gt;Scenario planning is not about predicting the future. Rather, it attempts to describe what is possible. The result of a scenario analysis is a group of distinct futures, all of which are plausible. The challenge then is how to deal with each of the possible scenarios.&lt;br /&gt;&lt;br /&gt;Scenario planning often takes place in a workshop setting of high level executives, technical experts, and industry leaders. The idea is to bring together a wide range of perspectives in order to consider scenarios other than the widely accepted forecasts. The scenario development process should include interviews with managers who later will formulate and implement strategies based on the scenario analysis - without their input the scenarios may leave out important details and not lead to action if they do not address issues important to those who will implement the strategy.&lt;br /&gt;&lt;br /&gt;Some of the benefits of scenario planning include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Managers are forced to break out of their standard world view, exposing blind spots that might otherwise be overlooked in the generally accepted forecast.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Decision-makers are better able to recognize a scenario in its early stages, should it actually be the one that unfolds.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Managers are better able to understand the source of disagreements that often occur when they are envisioning different scenarios without realizing it.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;The Scenario Planning Process&lt;/h4&gt;The following outlines the sequence of actions that may constitute the process of scenario planning.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Specify the scope of the planning and its time frame.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For the present situation, develop a clear understanding that will serve as the common departure point for each of the scenarios.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Identify predetermined elements that are virtually certain to occur and that will be driving forces.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Identify the critical uncertainties in the environmental variables. If the scope of the analysis is wide, these may be in the macro-environment, for example, political, economic, social, and technological factors (as in PEST).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Identify the more important drivers. One technique for doing so is as follows. Assign each environmental variable two numerical ratings: one rating for its range of variation and another for the strength of its impact on the firm. Multiply these ratings together to arrive at a number that specifies the significance of each environmental factor. For example, consider the extreme case in which a variable had a very large range such that it might be rated a 10 on a scale of 1 to 10 for variation, but in which the variable had very little impact on the firm so that the strength of impact rating would be a 1. Multiplying the two together would yield 10 out of a possible 100, revealing that the variable is not highly critical. After performing this calculation for all of the variables, identify the two having the highest significance.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Consider a few possible values for each variable, ranging between extremes while avoiding highly improbable values.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To analyze the interaction between the variables, develop a matrix of scenarios using the two most important variables and their possible values. Each cell in the matrix then represents a single scenario. For easy reference in later discussion it is worthwhile to give each scenario a descriptive name. If there are more than two critical factors, a multidimensional matrix can be created to handle them but would be difficult to visualize beyond 2 or 3 dimensions. Alternatively, factors can be taken in pairs to generate several two-dimensional matrices. A scenario matrix might look something like this:&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h3 class="title"&gt;Scenario Matrix&lt;/h3&gt;&lt;table border="1" cellpadding="10" cellspacing="0" style="background-color: #cccc99; margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td colspan="2" rowspan="2"&gt;&amp;nbsp;&lt;/td&gt; &lt;td colspan="2"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;VARIABLE 1&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;Outcome 1A&lt;br /&gt;|&lt;br /&gt;V&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;Outcome 1B&lt;br /&gt;|&lt;br /&gt;V&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td rowspan="2"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;V&lt;br /&gt;A&lt;br /&gt;R&lt;br /&gt;I&lt;br /&gt;A&lt;br /&gt;B&lt;br /&gt;L&lt;br /&gt;E&lt;br /&gt;&lt;br /&gt;2&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;img alt="" height="30" src="http://www.netmba.com/lib/pixel/0.gif" width="1" /&gt;&lt;br /&gt;Outcome 2A --&amp;gt;&lt;br /&gt;&lt;img alt="" height="30" src="http://www.netmba.com/lib/pixel/0.gif" width="1" /&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Scenario 1&lt;/i&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Scenario 2&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;img alt="" height="30" src="http://www.netmba.com/lib/pixel/0.gif" width="1" /&gt;&lt;br /&gt;Outcome 2B --&amp;gt;&lt;br /&gt;&lt;img alt="" height="30" src="http://www.netmba.com/lib/pixel/0.gif" width="1" /&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Scenario 3&lt;/i&gt;&lt;/td&gt; &lt;td&gt;&lt;i&gt;Scenario 4&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;One of these scenarios most likely will reflect the mainstream views of the future. The other scenarios will shed light on what else is possible.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At this point there is not any detail associated with these "first-generation" scenarios. They are simply high level descriptions of a combination of important environmental variables. Specifics can be generated by writing a story to develop each scenario starting from the present. The story should be internally consistent for the selected scenario so that it describes that particular future as realistically as possible. Experts in specific fields may be called upon to devlop each story, possibly with the use of computer simulation models. Game theory may be used to gain an understanding of how each actor pursuing its own self interest might respond in the scenario. The goal of the stories is to transform the analysis from a simple matrix of the obvious range of environmental factors into decision scenarios useful for strategic planning.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Quantify the impact of each scenario on the firm, and formulate appropriate strategies.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;An additional step might be to assign a probability to each scenario. Opinions differ on whether one should attempt to assign probabilities when there may be little basis for determining them.&lt;br /&gt;&lt;br /&gt;Business unit managers may not take scenarios seriously if they deviate too much from their preconceived view of the world. Many will prefer to rely on forecasts and their judgement, even if they realize that they may miss important changes in the firm's environment. To overcome this reluctance to broaden their thinking, it is useful to create "phantom" scenarios that show the adverse results if the firm were to base its decisions on the mainstream view while the reality turned out to be one of the other scenarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-139907176091455147?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/139907176091455147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/strategic-management-scenario-planning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/139907176091455147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/139907176091455147'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/strategic-management-scenario-planning.html' title='Strategic Management - Scenario Planning'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3751971781165464050</id><published>2009-10-14T03:45:00.000-07:00</published><updated>2009-10-14T03:45:02.353-07:00</updated><title type='text'>Linear Programming</title><content type='html'>Operations management often presents complex problems that can be modeled by linear functions. The mathematical technique of &lt;b&gt;linear programming&lt;/b&gt; is instrumental in solving a wide range of operations management problems.&lt;br /&gt;&lt;h4&gt;Linear Program Structure&lt;/h4&gt;Linear programming models consist of an objective function and the constraints on that function. A linear programming model takes the following form:&lt;br /&gt;&lt;br /&gt;Objective function:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Z &amp;nbsp;=&amp;nbsp; a&lt;sub&gt;1&lt;/sub&gt;X&lt;sub&gt;1&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; a&lt;sub&gt;2&lt;/sub&gt;X&lt;sub&gt;2&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; a&lt;sub&gt;3&lt;/sub&gt;X&lt;sub&gt;3&lt;/sub&gt;  &amp;nbsp;+&amp;nbsp; . . . +&amp;nbsp; a&lt;sub&gt;n&lt;/sub&gt;X&lt;sub&gt;n&lt;/sub&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Constraints:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;b&lt;sub&gt;11&lt;/sub&gt;X&lt;sub&gt;1&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;12&lt;/sub&gt;X&lt;sub&gt;2&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;13&lt;/sub&gt;X&lt;sub&gt;3&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; . . . +&amp;nbsp; b&lt;sub&gt;1n&lt;/sub&gt;X&lt;sub&gt;n&lt;/sub&gt; &amp;nbsp;&amp;lt; &amp;nbsp; c&lt;sub&gt;1&lt;/sub&gt;&lt;/i&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;b&lt;sub&gt;21&lt;/sub&gt;X&lt;sub&gt;1&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;22&lt;/sub&gt;X&lt;sub&gt;2&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;23&lt;/sub&gt;X&lt;sub&gt;3&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; . . . +&amp;nbsp; b&lt;sub&gt;2n&lt;/sub&gt;X&lt;sub&gt;n&lt;/sub&gt; &amp;nbsp;&amp;lt; &amp;nbsp; c&lt;sub&gt;2&lt;/sub&gt;&lt;/i&gt;  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;i&gt;b&lt;sub&gt;m1&lt;/sub&gt;X&lt;sub&gt;1&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;m2&lt;/sub&gt;X&lt;sub&gt;2&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; b&lt;sub&gt;m3&lt;/sub&gt;X&lt;sub&gt;3&lt;/sub&gt; &amp;nbsp;+&amp;nbsp; . . . +&amp;nbsp; b&lt;sub&gt;mn&lt;/sub&gt;X&lt;sub&gt;n&lt;/sub&gt; &amp;nbsp;&amp;lt; &amp;nbsp; c&lt;sub&gt;m&lt;/sub&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;In this system of linear equations, &lt;i&gt;Z&lt;/i&gt; is the objective function value that is being optimized, &lt;i&gt;X&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt; are the decision variables whose optimal values are to be found, and &lt;i&gt;a&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt;, &lt;i&gt;b&lt;sub&gt;ij&lt;/sub&gt;&lt;/i&gt;, and &lt;i&gt;c&lt;sub&gt;i&lt;/sub&gt;&lt;/i&gt; are constants derived from the specifics of the problem.&lt;br /&gt;&lt;h4&gt;Linear Programming Assumptions&lt;/h4&gt;Linear programming requires linearity in the equations as shown in the above structure. In a linear equation, each decision variable is multiplied by a constant coefficient with no multiplying between decision variables and no nonlinear functions such as logarithms. Linearity requires the following assumptions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Proportionality&lt;/i&gt; - a change in a variable results in a proportionate change in that variable's contribution to the value of the function.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Additivity&lt;/i&gt; - the function value is the sum of the contributions of each term.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Divisibility&lt;/i&gt; - the decision variables can be divided into non-integer values, taking on fractional values. &lt;i&gt;Integer programming&lt;/i&gt; techniques can be used if the divisibility assumption does not hold.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In addition to these linearity assumptions, linear programming assumes &lt;i&gt;certainty&lt;/i&gt;; that is, that the coefficients are known and constant.&lt;br /&gt;&lt;h4&gt;Problem Formulation&lt;/h4&gt;With computers able to solve linear programming problems with ease, the challenge is in problem formulation - translating the problem statement into a system of linear equations to be solved by computer. The information required to write the objective function is derived from the problem statement. The problem is formulated from the problem statement as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Identify the objective of the problem; that is, which quantity is to be optimized. For example, one may seek to maximize profit.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Identify the decision variables and the constraints on them. For example, production quantities and production limits may serve as decision variables and constraints.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Write the objective function and constraints in terms of the decision variables, using information from the problem statement to determine the proper coefficient for each term. Discard any unnecessary information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add any implicit constraints, such as non-negative restrictions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Arrange the system of equations in a consistent form suitable for solving by computer. For example, place all variables on the left side of their equations and list them in the order of their subscripts.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The following guidelines help to reduce the risk of errors in problem formulation:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Be sure to consider any initial conditions.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Make sure that each variable in the objective function appears at least once in the constraints.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Consider constraints that might not be specified explicitly. For example, if there are physical quantities that must be non-negative, then these constraints must be included in the formulation.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;The Effect of Constraints&lt;/h4&gt;Constraints exist because certain limitations restrict the range of a variable's possible values. A constraint is considered to be &lt;i&gt;binding&lt;/i&gt; if changing it also changes the optimal solution. Less severe constraints that do not affect the optimal solution are &lt;i&gt;non-binding&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Tightening a binding constraint can only worsen the objective function value, and loosening a binding constraint can only improve the objective function value. As such, once an optimal solution is found, managers can seek to improve that solution by finding ways to relax binding constraints.&lt;br /&gt;&lt;h4&gt;Shadow Price&lt;/h4&gt;The &lt;i&gt;shadow price&lt;/i&gt; for a constraint is the amount that the objective function value changes per unit change in the constraint. Since constraints often are determined by resources, a comparison of the shadow prices of each constraint provides valuable insight into the most effective place to apply additional resources in order to achieve the best improvement in the objective function value.&lt;br /&gt;The reported shadow price is valid up to the allowable increase or allowable decrease in the constraint.&lt;br /&gt;&lt;h4&gt;Applications of Linear Programming&lt;/h4&gt;Linear programming is used to solve problems in many aspects of business administration including:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;product mix planning&lt;/li&gt;&lt;li&gt;distribution networks&lt;/li&gt;&lt;li&gt;truck routing&lt;/li&gt;&lt;li&gt;staff scheduling&lt;/li&gt;&lt;li&gt;financial portfolios&lt;/li&gt;&lt;li&gt;corporate restructuring&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3751971781165464050?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3751971781165464050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/linear-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3751971781165464050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3751971781165464050'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/linear-programming.html' title='Linear Programming'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-4359905423746933343</id><published>2009-10-14T03:43:00.000-07:00</published><updated>2009-10-14T03:43:00.861-07:00</updated><title type='text'>The Marketing Process</title><content type='html'>Under the marketing concept, the firm must find a way to discover unfulfilled customer needs and bring to market products that satisfy those needs. The process of doing so can be modeled in a sequence of steps: the situation is analyzed to identify opportunities, the strategy is formulated for a value proposition, tactical decisions are made, the plan is implemented and the results are monitored.&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h4&gt;The Marketing Process&lt;/h4&gt;&lt;table cellpadding="5" cellspacing="5" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background-color: #cccc99;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Situation Analysis&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: center;"&gt;|&lt;br /&gt;V&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #cccc99;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Marketing Strategy&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: center;"&gt;|&lt;br /&gt;V&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #cccc99;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Marketing Mix Decisions&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div style="text-align: center;"&gt;|&lt;br /&gt;V&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="background-color: #cccc99;"&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Implementation &amp;amp; Control&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;I. Situation Analysis&lt;/h4&gt;A thorough analysis of the situation in which the firm finds itself serves as the basis for identifying opportunities to satisfy unfulfilled customer needs. In addition to identifying the customer needs, the firm must understand its own capabilities and the environment in which it is operating.&lt;br /&gt;The situation analysis thus can be viewed in terms an analysis of the external environment and an internal analysis of the firm itself. The external environment can be described in terms of macro-environmental factors that broadly affect many firms, and micro-environmental factors closely related to the specific situation of the firm.&lt;br /&gt;&lt;br /&gt;The situation analysis should include past, present, and future aspects. It should include a history outlining how the situation evolved to its present state, and an analysis of trends in order to forecast where it is going. Good forecasting can reduce the chance of spending a year bringing a product to market only to find that the need no longer exists.&lt;br /&gt;&lt;br /&gt;If the situation analysis reveals gaps between what consumers want and what currently is offered to them, then there may be opportunities to introduce products to better satisfy those consumers. Hence, the situation analysis should yield a summary of problems and opportunities. From this summary, the firm can match its own capabilities with the opportunities in order to satisfy customer needs better than the competition.&lt;br /&gt;There are several frameworks that can be used to add structure to the situation analysis:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;5 C Analysis - company, customers, competitors, collaborators, climate. Company represents the internal situation; the other four cover aspects of the external situation&lt;br /&gt;&lt;/li&gt;&lt;li&gt;PEST analysis - for macro-environmental political, economic, societal, and technological factors. A PEST analysis can be used as the "climate" portion of the 5 C framework.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;SWOT analysis - strengths, weaknesses, opportunities, and threats - for the internal and external situation. A SWOT analysis can be used to condense the situation analysis into a listing of the most relevant problems and opportunities and to assess how well the firm is equipped to deal with them.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;II. Marketing Strategy&lt;/h4&gt;Once the best opportunity to satisfy unfulfilled customer needs is identified, a strategic plan for pursuing the opportunity can be developed. Market research will provide specific market information that will permit the firm to select the target market segment and optimally position the offering within that segment. The result is a value proposition to the target market. The marketing strategy then involves:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Segmentation&lt;/li&gt;&lt;li&gt;Targeting (target market selection)&lt;/li&gt;&lt;li&gt;Positioning the product within the target market&lt;/li&gt;&lt;li&gt;Value proposition to the target market&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;III. Marketing Mix Decisions&lt;/h4&gt;Detailed tactical decisions then are made for the controllable parameters of the marketing mix. The action items include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Product development - specifying, designing, and producing the first units of the product.&lt;/li&gt;&lt;li&gt;Pricing decisions&lt;/li&gt;&lt;li&gt;Distribution contracts&lt;/li&gt;&lt;li&gt;Promotional campaign development&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;IV. Implementation and Control&lt;/h4&gt;At this point in the process, the marketing plan has been developed and the product has been launched. Given that few environments are static, the results of the marketing effort should be monitored closely. As the market changes, the marketing mix can be adjusted to accomodate the changes. Often, small changes in consumer wants can addressed by changing the advertising message. As the changes become more significant, a product redesign or an entirely new product may be needed. The marketing process does not end with implementation - continual monitoring and adaptation is needed to fulfill customer needs consistently over the long-term.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-4359905423746933343?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/4359905423746933343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/marketing-process.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4359905423746933343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/4359905423746933343'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/marketing-process.html' title='The Marketing Process'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-8026304327816762611</id><published>2009-10-14T03:40:00.000-07:00</published><updated>2009-10-14T03:40:27.780-07:00</updated><title type='text'>Economics - Supply and Demand</title><content type='html'>The market price of a good is determined by both the supply and demand for it. In 1890, English economist Alfred Marshall published his work, &lt;i&gt;Principles of Economics&lt;/i&gt;, which was one of the earlier writings on how both supply and demand interacted to determine price. Today, the supply-demand model is one of the fundamental concepts of economics. The price level of a good essentially is determined by the point at which quantity supplied equals quantity demanded. To illustrate, consider the following case in which the supply and demand curves are plotted on the same graph.&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h4&gt;Supply and Demand&lt;/h4&gt;&lt;img alt="" height="217" src="http://www.netmba.com/images/econ/micro/supply-demand/supplydemand.gif" width="268" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;On this graph, there is only one price level at which quantity demanded is in balance with the quantity supplied, and that price is the point at which the supply and demand curves cross.&lt;br /&gt;&lt;br /&gt;The law of supply and demand predicts that the price level will move toward the point that equalizes quantities supplied and demanded. To understand why this must be the equilibrium point, consider the situation in which the price is higher than the price at which the curves cross. In such a case, the quantity supplied would be greater than the quantity demanded and there would be a surplus of the good on the market. Specifically, from the graph we see that if the unit price is $3 (assuming relative pricing in dollars), the quantities supplied and demanded would be:&lt;br /&gt;&lt;div style="text-align: center;"&gt;Quantity Supplied = 42 units&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Quantity Demanded = 26 units&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Therefore there would be a surplus of 42 - 26 = 16 units. The sellers then would lower their price in order to sell the surplus.&lt;br /&gt;&lt;br /&gt;Suppose the sellers lowered their prices below the equilibrium point. In this case, the quantity demanded would increase beyond what was supplied, and there would be a shortage. If the price is held at $2, the quantity supplied then would be:&lt;br /&gt;&lt;div style="text-align: center;"&gt;Quantity Supplied = 28 units&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Quantity Demanded = 38 units&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Therefore, there would be a shortage of 38 - 28 = 10 units. The sellers then would increase their prices to earn more money.&lt;br /&gt;&lt;br /&gt;The equilibrium point must be the point at which quantity supplied and quantity demanded are in balance, which is where the supply and demand curves cross. From the graph above, one sees that this is at a price of approximately $2.40 and a quantity of 34 units.&lt;br /&gt;&lt;br /&gt;To understand how the law of supply and demand functions when there is a shift in demand, consider the case in which there is a shift in demand:&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h4&gt;Shift in Demand&lt;/h4&gt;&lt;img alt="" height="217" src="http://www.netmba.com/images/econ/micro/supply-demand/supplydemandshift.gif" width="268" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;In this example, the positive shift in demand results in a new supply-demand equilibrium point that in higher in both quantity and price. For each possible shift in the supply or demand curve, a similar graph can be constructed showing the effect on equilibrium price and quantity. The following table summarizes the results that would occur from shifts in supply, demand, and combinations of the two.&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h4&gt;Result of Shifts in Supply and Demand&lt;/h4&gt;&lt;table border="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Demand&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Supply&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Equilibrium&lt;br /&gt;Price&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;b&gt;Equilibrium&lt;br /&gt;Quantity&lt;/b&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;?&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;?&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;?&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;+&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;-&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div style="text-align: center;"&gt;?&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;In the above table, "+" represents an increase, "-" represents a decrease, a blank represents no change, and a question mark indicates that the net change cannot be determined without knowing the magnitude of the shift in supply and demand. If these results are not immediately obvious, drawing a graph for each will facilitate the analysis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-8026304327816762611?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/8026304327816762611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/economics-supply-and-demand.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8026304327816762611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/8026304327816762611'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/economics-supply-and-demand.html' title='Economics - Supply and Demand'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3631854679653864788</id><published>2009-10-14T03:37:00.001-07:00</published><updated>2009-10-14T03:37:47.814-07:00</updated><title type='text'>Herzberg's Motivation-Hygiene Theory</title><content type='html'>To better understand employee attitudes and motivation, Frederick Herzberg performed studies to determine which factors in an employee's work environment caused satisfaction or dissatisfaction. He published his findings in the 1959 book &lt;i&gt;The Motivation to Work&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The studies included interviews in which employees where asked what pleased and displeased them about their work. Herzberg found that the factors causing job satisfaction (and presumably motivation) were different from those causing job dissatisfaction. He developed the &lt;b&gt;motivation-hygiene&lt;/b&gt; theory to explain these results. He called the satisfiers &lt;i&gt;motivators&lt;/i&gt; and the dissatisfiers &lt;i&gt;hygiene factors&lt;/i&gt;, using the term "hygiene" in the sense that they are considered maintenance factors that are necessary to avoid dissatisfaction but that by themselves do not provide satisfaction.&lt;br /&gt;&lt;br /&gt;The following table presents the top six factors causing dissatisfaction and the top six factors causing satisfaction, listed in the order of higher to lower importance.&lt;br /&gt;&lt;div style="text-align: center;"&gt; &lt;h4&gt;Factors Affecting Job Attitudes&lt;/h4&gt;&lt;table border="1" cellpadding="3" cellspacing="3" style="margin-left: auto; margin-right: auto;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;Leading to Dissatisfaction&lt;/b&gt;&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp; Leading to Satisfaction &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt; &lt;ul&gt;&lt;li&gt;Company policy&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Supervision&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Relationship w/Boss&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Work conditions&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Salary&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Relationship w/Peers&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt; &lt;td&gt; &lt;ul&gt;&lt;li&gt;Achievement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Recognition&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Work itself&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Responsibility&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Advancement&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Growth&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;Herzberg reasoned that because the factors causing satisfaction are different from those causing dissatisfaction, the two feelings cannot simply be treated as opposites of one another. The opposite of satisfaction is not dissatisfaction, but rather, &lt;i&gt;no&lt;/i&gt; satisfaction. Similarly, the opposite of dissatisfaction is &lt;i&gt;no&lt;/i&gt; dissatisfaction.&lt;br /&gt;&lt;br /&gt;While at first glance this distinction between the two opposites may sound like a play on words, Herzberg argued that there are two distinct human needs portrayed. First, there are physiological needs that can be fulfilled by money, for example, to purchase food and shelter. Second, there is the psychological need to achieve and grow, and this need is fulfilled by activities that cause one to grow.&lt;br /&gt;&lt;br /&gt;From the above table of results, one observes that the factors that determine whether there is dissatisfaction or no dissatisfaction are not part of the work itself, but rather, are external factors. Herzberg often referred to these hygiene factors as "KITA" factors, where KITA is an acronym for Kick In The A..., the process of providing incentives or a threat of punishment to cause someone to do something. Herzberg argues that these provide only short-run success because the motivator factors that determine whether there is satisfaction or no satisfaction are intrinsic to the job itself, and do not result from carrot and stick incentives.&lt;br /&gt;&lt;h4&gt;Implications for Management&lt;/h4&gt;If the motivation-hygiene theory holds, management not only must provide hygiene factors to avoid employee dissatisfaction, but also must provide factors intrinsic to the work itself in order for employees to be satisfied with their jobs.&lt;br /&gt;&lt;br /&gt;Herzberg argued that &lt;i&gt;job enrichment&lt;/i&gt; is required for intrinsic motivation, and that it is a continuous management process. According to Herzberg:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The job should have sufficient challenge to utilize the full ability of the employee.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Employees who demonstrate increasing levels of ability should be given increasing levels of responsibility.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a job cannot be designed to use an employee's full abilities, then the firm should consider automating the task or replacing the employee with one who has a lower level of skill. If a person cannot be fully utilized, then there will be a motivation problem.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Critics of Herzberg's theory argue that the two-factor result is observed because it is natural for people to take credit for satisfaction and to blame dissatisfaction on external factors. Furthermore, job satisfaction does not necessarily imply a high level of motivation or productivity.&lt;br /&gt;&lt;br /&gt;Herzberg's theory has been broadly read and despite its weaknesses its enduring value is that it recognizes that true motivation comes from within a person and not from KITA factors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3631854679653864788?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3631854679653864788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/herzbergs-motivation-hygiene-theory.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3631854679653864788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3631854679653864788'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/herzbergs-motivation-hygiene-theory.html' title='Herzberg&apos;s Motivation-Hygiene Theory'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-492107698842593118</id><published>2009-10-03T01:21:00.001-07:00</published><updated>2009-10-03T01:21:19.306-07:00</updated><title type='text'>Revolution of Semantic Web Services</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;style&gt;&lt;!-- /* Font Definitions */ @font-face {font-family:"Cambria Math"; panose-1:2 4 5 3 5 4 6 3 2 4; mso-font-charset:0; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:-1610611985 1107304683 0 0 159 0;}@font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;}@font-face {font-family:Times-Roman; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;}@font-face {font-family:Times-Italic; panose-1:0 0 0 0 0 0 0 0 0 0; mso-font-charset:0; mso-generic-font-family:auto; mso-font-format:other; mso-font-pitch:auto; mso-font-signature:3 0 0 0 1 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-unhide:no; mso-style-qformat:yes; mso-style-parent:""; margin-top:0in; margin-right:0in; margin-bottom:10.0pt; margin-left:0in; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;}.MsoChpDefault {mso-style-type:export-only; mso-default-props:yes; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:Calibri; mso-fareast-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin; mso-bidi-font-family:Arial; mso-bidi-theme-font:minor-bidi;}.MsoPapDefault {mso-style-type:export-only; margin-bottom:10.0pt; line-height:115%;}@page Section1 {size:8.5in 11.0in; margin:1.0in 1.0in 1.0in 1.0in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;}div.Section1 {page:Section1;}--&gt;&lt;/style&gt;      &lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;Web services and service oriented architectures were presented &lt;o:p&gt;&lt;/o:p&gt; as a significant step towards a simple solution for the interoperability&lt;o:p&gt;&lt;/o:p&gt; problems that typically plague middleware applications. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Web services also play a part in the Semantic Web&lt;/b&gt;. As Semantic Web applications&lt;o:p&gt;&lt;/o:p&gt; increase in complexity, and as information consumers become more&lt;o:p&gt;&lt;/o:p&gt; discerning, the focus is turning from &lt;b&gt;semantically addressable information&lt;o:p&gt;&lt;/o:p&gt; to semantically addressable services&lt;/b&gt; that allow automated creation of customized&lt;o:p&gt;&lt;/o:p&gt; software system, or Semantic Web services&lt;i&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;Current tools provide the capability to describe Web services, but do not&lt;o:p&gt;&lt;/o:p&gt; have adequate means for categorizing and utilizing those descriptions. The&lt;o:p&gt;&lt;/o:p&gt; categorizations available, such as WSIndex are designed&lt;o:p&gt;&lt;/o:p&gt; primarily for human use rather than machine. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;As a result, automated system composition is more a dream than reality right now.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;However, unlike most information on the Web, Web services are typically&lt;o:p&gt;&lt;/o:p&gt; accompanied by adequate metadata, which is the key component of&lt;o:p&gt;&lt;/o:p&gt; the Semantic Web. The difficulty in using that metadata lies in understanding&lt;o:p&gt;&lt;/o:p&gt; the semantics. Predictably, there is a substantial amount of research focused&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;on applying ontologies and other tools of the Semantic Web to Web&lt;o:p&gt;&lt;/o:p&gt; services. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Semantic Web services provide a mechanism for creating semantically&lt;o:p&gt;&lt;/o:p&gt; rich descriptions of services&lt;/b&gt;. These can be used to create specifications&lt;o:p&gt;&lt;/o:p&gt; for composite services, to represent business logic at a more abstract&lt;o:p&gt;&lt;/o:p&gt; level and to supply knowledge for reasoning systems which can then intelligently&lt;o:p&gt;&lt;/o:p&gt; assemble software from service descriptions. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;One of the underlying languages in the development of Semantic Web services is the &lt;b&gt;Ontology&lt;/b&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;Web Language for Services (OWL-S)&lt;/b&gt;. OWL-S is an ontology language&lt;o:p&gt;&lt;/o:p&gt; with the goal of enabling automated discovery, incorporation and&lt;o:p&gt;&lt;/o:p&gt; execution of Web services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;OWL-S breaks the description of a service into three parts, a s&lt;b&gt;ervice&lt;o:p&gt;&lt;/o:p&gt; profile&lt;/b&gt;, a &lt;b&gt;process model&lt;/b&gt; and a &lt;b&gt;mapping between the process model and the&lt;o:p&gt;&lt;/o:p&gt; message passing protocol&lt;/b&gt; (called a grounding). &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;The profile is used both to advertise services and to request services. The intention is that the profile&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;is used in service discovery to match appropriate services to requests for&lt;o:p&gt;&lt;/o:p&gt; services. Profiles consist, in part, of a description of both functional parameters,&lt;o:p&gt;&lt;/o:p&gt; described as inputs, outputs, preconditions and effects, and nonfunctional&lt;o:p&gt;&lt;/o:p&gt; parameters such text fields meant for human consumption or to&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;define quality of service constraints.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;The process model uses the OWL-S process ontology to describe the&lt;o:p&gt;&lt;/o:p&gt; execution of a web service. The process model precisely describes the required&lt;o:p&gt;&lt;/o:p&gt; flow of control and data to obtain the results specified in the profile&lt;o:p&gt;&lt;/o:p&gt; and includes three types of processes, namely atomic, simple and composite.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;Only atomic processes may be executed directly.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;Finally the grounding provides the binding between the atomic processes and the message format&lt;o:p&gt;&lt;/o:p&gt; selected. Currently OWL-S has a grounding ontology defined for WDSL&lt;o:p&gt;&lt;/o:p&gt; that allows for describing the message requirements for atomic processes.&lt;br /&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;OWL-S is not a complete specification nor is it a stable standard. It is,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;however, a good start at defining how semantics can be added to Web services.&lt;o:p&gt;&lt;/o:p&gt; It has been subjected to few real world test cases to date, but experiences&lt;o:p&gt;&lt;/o:p&gt; with a prototypical use case implementation suggested that OWL-S&lt;o:p&gt;&lt;/o:p&gt; may be a good start for enterprise integration, but that it currently lacks the&lt;o:p&gt;&lt;/o:p&gt; capacity to allow fully automated discovery and composition of services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;span style="font-size: small;"&gt;Nonetheless, it seems inevitable that OWL-S or some other similar work,&lt;o:p&gt;&lt;/o:p&gt; such as the Internet Reasoning Service will result in an automated mechanism&lt;o:p&gt;&lt;/o:p&gt; for finding and composing services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-492107698842593118?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/492107698842593118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/10/revolution-of-semantic-web-services.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/492107698842593118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/492107698842593118'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/10/revolution-of-semantic-web-services.html' title='Revolution of Semantic Web Services'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-6714938502493412753</id><published>2009-09-25T09:27:00.000-07:00</published><updated>2009-09-25T09:27:29.250-07:00</updated><title type='text'>The CRAM HR Management Model</title><content type='html'>&lt;span style="font-family: Verdana,sans-serif;"&gt;Never lose sight of the fact that the members of your project team are&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;human beings, with aspirations, strengths, constraints, and weaknesses. Y&lt;b&gt;our&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;/b&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;&lt;b&gt;project’s success hinges more on team members’ attitudes&lt;/b&gt; and aptitudes than&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; it does on your Gantt chart wizardry and project tracking prowess. Feel free to&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; &lt;b&gt;manage the project, but don’t forget to lead the team&lt;/b&gt;.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Many of us manage projects in a matrix environment with team members&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;reporting both to us and to a department manager. We do not have human&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;resources (HR) hiring/firing/evaluation responsibility for them. However,&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;don’t abdicate responsibility for the care and feeding of the people on the team&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; to managers in the HR or functional hierarchy.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Many of those managers get promoted based on technical knowledge of&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;human resources or their departments, not on their ability to &lt;b&gt;inspire people&lt;/b&gt;.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Your project’s success depends on your ability to lead. There are many books&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;available on leadership. Read voraciously.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Everyone on your team wants to &lt;b&gt;contribute, learn, and achieve&lt;/b&gt;. It may be challenging&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; at times to dig deeply enough to find this desire in some team members,&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; but it’s what makes software project management challenging and fun.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Hold one-on-one conversations with your team members regularly. Determine&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;what their issues are, ask them for ideas, and give them a voice in the&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;project. Take their input seriously and act on it.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Ask your team members what they want to be when they grow up. Seriously.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;We all have career aspirations. Be the one mentor who cares about their&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;careers. You’ll be amazed at how powerful this can be.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Be open, honest, and direct with team members. Provide feedback on a regular&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;basis, not just at review time. Focus your feedback on the behavior, not the&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;person. Again, management literature abounds. Study.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;When you have a performance issue with a team member, apply the CRAM&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;model: &lt;b&gt;Constraints, Resources, Aptitude, and Motivation&lt;/b&gt;. &lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Project managers frequently diagnose poor performance as a motivation problem. &lt;br /&gt;The CRAM&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; model suggests that motivation is the last issue to consider. A team member&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; may be experiencing constraints in his life that limit his effectiveness. &lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Examples include getting divorced or married, having kids, fighting addiction issues, etc.&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;Team members may not have the resources necessary to contribute at their&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;highest level. Examples include no quality assurance (QA) test environment,&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;or ancient hardware. Perhaps budget constraints limit the ability to establish&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;testing environments or buy licenses for necessary software. &lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Perhaps the domain expertise (business analyst, customer, end-user) is not accessible.&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; Your team member may not be cut out for the role he/she fills. He may not have the&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; programming aptitude necessary for this project. If so, find another project role,&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; if possible. Alternatively, find another team where he can leverage his strengths.&lt;br /&gt;&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Motivation is the last lever to jiggle when a team member has performance&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;issues. It should only be considered once the constraints, resources, and aptitude&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; problems have been addressed.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Be a leader and connect with the individual human beings who comprise your&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;team. The results may surprise you.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-6714938502493412753?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/6714938502493412753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/09/cram-hr-management-model.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6714938502493412753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/6714938502493412753'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/09/cram-hr-management-model.html' title='The CRAM HR Management Model'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-3386897110709758236</id><published>2009-09-25T09:18:00.000-07:00</published><updated>2009-09-25T09:18:39.744-07:00</updated><title type='text'>Introduce a More Agile Communication System</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Most retrospectives of failed projects place a great deal of blame&lt;br /&gt;on &lt;b&gt;communication breakdowns&lt;/b&gt; between software project managers, team&lt;br /&gt;members, and stakeholders. &lt;br /&gt;&lt;br /&gt;Project managers are taught to mitigate communication breakdowns between team members, and provide constant, effective communication. The weight of this responsibility sometimes leads project managers to overreact. They blur the line between essential, concrete communications and those where the content‐to‐noise ratio actually harms project progress instead of helping it.&lt;br /&gt;&lt;br /&gt;To solve this problem, many software development endeavors are moving&lt;br /&gt;toward a more flexible, agile process. The key to agile methodologies is timely&lt;br /&gt;communication loops that enable agile teams to respond effectively to unforeseen changes, and quickly reassess and reprioritize project features.&lt;br /&gt;&lt;br /&gt;How do agile project managers keep communications limited to the essentials?&lt;br /&gt;&lt;br /&gt;They promote the daily “&lt;b&gt;15-minute stand‐up&lt;/b&gt;” meeting. It entails developers&lt;br /&gt;describing what they’ve accomplished since the last standup, what&lt;br /&gt;they’re planning to accomplish “today,” and any impediments they foresee in&lt;br /&gt;reaching their goals. The negative risk of a stand‐up meeting is that it may&lt;br /&gt;rely solely on the precision of each developer’s self-assessment. The solution?&lt;br /&gt;&lt;br /&gt;To make stand‐up meetings more effective, integrate a &lt;b&gt;task management tool&lt;/b&gt;&lt;br /&gt;that can show the output of a feature’s tests. A tool does not lie about the state of a project’s codebase, and testing results are a valuable addition to developer self-assessment. Presenting report data correlating a feature to a set of tests it passed gives a more accurate representation of the state of the feature.&lt;br /&gt;&lt;br /&gt;For example, results from a continuous integration tool can paint an objective&lt;br /&gt;picture of progress. This reduces the stand‐up meeting communication to&lt;br /&gt;the essentials: reporting of impediments (hopefully, already caught by the task&lt;br /&gt;management tool) and unforeseen developments due to edge cases, integration challenges, and bugs/defects. By reflecting these development “discoveries” through a shared, globally accessible tool, developers gain a greater level of feedback precision. Often, unseen connections between features and tasks can be discovered early.&lt;br /&gt;&lt;br /&gt;One typical misconception is that &lt;b&gt;synchronous communications&lt;/b&gt; are always&lt;br /&gt;more effective than asynchronous† communications. Adding development&lt;br /&gt;tools and short, &lt;b&gt;asynchronous communication&lt;/b&gt; loops can effectively supplement face‐to‐face communications.&lt;br /&gt;&lt;br /&gt;At a more general level of feedback, a &lt;b&gt;wiki system&lt;/b&gt; can easily keep the vision&lt;br /&gt;of the project adjusted to the reality of the development progress. Such a system can also make information available in a timely manner and provide a&lt;br /&gt;higher‐level channel to communicate to stakeholders-at-large, who might not&lt;br /&gt;be interested in the deep, technical details impeding a particular feature’s progress.&lt;br /&gt;&lt;br /&gt;By contrast, a software developer’s vision of the overall project can be&lt;br /&gt;blurred over time by the minutiae of his daily technical work. A wiki is an effective way to keep a clear, shared vision of the project among all the participants.&lt;br /&gt;&lt;br /&gt;By attacking the problem of keeping information loops tight and noise-free,&lt;br /&gt;software project managers can help avoid the breakdown in communications&lt;br /&gt;typically blamed for project failures. A project manager’s responsibility and&lt;br /&gt;challenge is to streamline the feedback loops at every level of a project.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-3386897110709758236?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/3386897110709758236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/09/introduce-more-agile-communication.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3386897110709758236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/3386897110709758236'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/09/introduce-more-agile-communication.html' title='Introduce a More Agile Communication System'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-1326193909667342330</id><published>2009-09-25T07:11:00.000-07:00</published><updated>2009-09-25T07:11:12.230-07:00</updated><title type='text'>The 60/60 Rule</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;We often pretend that software development is the most important part&lt;br /&gt;of the software life cycle. Methodologies abound for development. Books,&lt;br /&gt;magazine articles, and blogs focus on development. Development, however, is&lt;br /&gt;just not where the money is.&lt;br /&gt;&lt;br /&gt;Fully 60% of the life cycle costs of software systems come from maintenance,&lt;br /&gt;with a relatively measly 40% coming from development. That is an average, of&lt;br /&gt;course. &lt;br /&gt;&lt;br /&gt;The actual cost of maintenance may vary from 40% to 80%, depending&lt;br /&gt;on the system type and the environment it is deployed into. During maintenance, 60% of the costs on average relate to user-generated enhancements (changing requirements), 23% to migration activities, and 17% to bug fixes. The 60% of life cycle costs related to maintenance, coupled with the fact that 60% of maintenance activities relate to enhancements, gives us the so-called 60/60 Rule, one of the few proposed “laws” of software maintenance.&lt;br /&gt;&lt;br /&gt;Migration activities include moving systems to new hardware or software environments.&lt;br /&gt;&lt;br /&gt;Migration is, of course, a type of changing requirement. Factoring&lt;br /&gt;that into our estimates points out an interesting fact: over 80% of maintenance activities relate in some way to changing requirements.&lt;br /&gt;&lt;br /&gt;Naturally, the ability to change code suggests that one should understand it&lt;br /&gt;first. Understanding changes to be made is a major activity during maintenance.&lt;br /&gt;&lt;br /&gt;Roughly 30% of total maintenance time is spent on understanding an&lt;br /&gt;existing software product. The development of understanding applies to all&lt;br /&gt;forms of maintenance: changing requirements, migration, and bug fixes.&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;Understanding is a cost we must pay to maintain code that someone else wrote,&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; or we wrote long enough ago that we no longer have an intimate knowledge&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; of it. During maintenance, understanding code takes the place of new design&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; work found during development for most tasks.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;The 60/60 Rule should prompt us to rethink the focus of software development,&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;as well as maintenance. The tendency to address development activities&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;may not yield the most impressive gains. &lt;br /&gt;&lt;br /&gt;Boehm’s early assertion in the early&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; 1980s that proper software engineering discipline can reduce defects by up&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; to 75% may be true (although I seriously doubt it), and became the basis for&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; much work toward development methodologies, but so what?&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;A good methodology may reduce bugs (17% of the total maintenance effort), but&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; not address migration, enhancement time, or cost at all. To reduce maintenance&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; costs, we have to address the costs associated with understanding code, adjusting&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; code to new requirements, and/or migrating code to new environments.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;The 60/60 Rule suggests that we should focus our efforts on creating systems that&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; are maintainable. Our software must be designed to change so systems become&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; flexible in the face of new requirements. Designing such systems is one of the&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; next great challenges in software engineering.&lt;/span&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;br style="font-family: Verdana,sans-serif;" /&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt;We know at least part of the answer. The software components need to become&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; less tightly coupled with one another, much the way the components of the&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; World Wide Web are bound together at the last possible moment and in a&lt;/span&gt;&lt;span style="font-family: Verdana,sans-serif;"&gt; flexible manner.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/789069160502741520-1326193909667342330?l=myopendraft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myopendraft.blogspot.com/feeds/1326193909667342330/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://myopendraft.blogspot.com/2009/09/6060-rule.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1326193909667342330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/789069160502741520/posts/default/1326193909667342330'/><link rel='alternate' type='text/html' href='http://myopendraft.blogspot.com/2009/09/6060-rule.html' title='The 60/60 Rule'/><author><name>MyOpenDraft</name><uri>http://www.blogger.com/profile/01428625409449689500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/-Liq-z0kCRvg/TomoJFnlgyI/AAAAAAAAAXc/L97RtGBA6-g/s220/alireza.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-789069160502741520.post-2828601297096046052</id><published>2009-09-25T04:14:00.000-07:00</published><updated>2009-09-25T04:14:35.381-07:00</updated><title type='text'>Developer Productivity: Skilled Versus Average</title><content type='html'>&lt;div style="font-family: Verdana,sans-serif;"&gt;Let’s debunk some of the myths about developer skills for project managers&lt;br /&gt;who have been assigned for the first time to software projects. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Verdana,sans-serif;"&gt;Understand that &lt;b&gt;really good software developers are much more productive than average ones&lt;/b&gt;. In fact, some statistics say that really good developers are multiple orders of magnitude better than poor ones. One order of magnitude is the same as multiplying a quantity by 10. The point is, a &lt;b&gt;skilled programmer isn’t just a little better than an average one; the difference is huge&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;What should this mean to our newly minted software project managers as they&lt;br /&gt;plan the development of this product? Managers erroneously think that even if&lt;br /&gt;you can’t get the best and brightest, you still get some usefulness out of mediocre developers. But building software isn’t like digging a ditch, where even the poorest ditch diggers can make a hole.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;In software development, what is programmed today becomes the foundation for tomorrow&lt;/b&gt;. If you have mediocre developers building your foundation, the really good developers have to go back and fix the fl
